def METHOD_NAME(
    integration_name: str,
    ocm_environment: str,
    clusters: Iterable[Cluster],
    secret_reader: SecretReaderBase,
    ocm_api: OCMBaseClient,
    vault_input_path: str,
    dry_run: bool,
    managed_idps: list[str] | None = None,
) -> None:
    with metrics.transactional_metrics(ocm_environment) as metrics_container:
        # metrics
        expose_base_metrics(
            metrics_container, integration_name, ocm_environment, clusters
        )
        try:
            # run
            current_state = fetch_current_state(ocm_api, clusters)
            desired_state = fetch_desired_state(
                secret_reader, clusters, vault_input_path
            )
            act(
                dry_run,
                ocm_api,
                current_state,
                desired_state,
                managed_idps=managed_idps or [],
            )
            metrics_container.inc_counter(
                RhIdpOCMOidcIdpReconcileCounter(
                    integration=integration_name, ocm_environment=ocm_environment
                )
            )
        except Exception:
            metrics_container.inc_counter(
                RhIdpOCMOidcIdpReconcileErrorCounter(
                    integration=integration_name, ocm_environment=ocm_environment
                )
            )
            raise