qontract-reconcile 0.10.2.dev310__py3-none-any.whl → 0.10.2.dev439__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of qontract-reconcile might be problematic. Click here for more details.
- {qontract_reconcile-0.10.2.dev310.dist-info → qontract_reconcile-0.10.2.dev439.dist-info}/METADATA +13 -12
- {qontract_reconcile-0.10.2.dev310.dist-info → qontract_reconcile-0.10.2.dev439.dist-info}/RECORD +396 -391
- reconcile/acs_rbac.py +2 -2
- reconcile/aus/advanced_upgrade_service.py +18 -12
- reconcile/aus/base.py +134 -32
- reconcile/aus/cluster_version_data.py +15 -5
- reconcile/aus/models.py +3 -1
- reconcile/aus/ocm_addons_upgrade_scheduler_org.py +1 -0
- reconcile/aus/ocm_upgrade_scheduler.py +8 -1
- reconcile/aus/ocm_upgrade_scheduler_org.py +20 -5
- reconcile/aus/version_gates/sts_version_gate_handler.py +54 -1
- reconcile/automated_actions/config/integration.py +16 -4
- reconcile/aws_account_manager/integration.py +8 -8
- reconcile/aws_account_manager/reconciler.py +3 -3
- reconcile/aws_ami_cleanup/integration.py +8 -12
- reconcile/aws_ami_share.py +69 -62
- reconcile/aws_cloudwatch_log_retention/integration.py +155 -126
- reconcile/aws_ecr_image_pull_secrets.py +5 -5
- reconcile/aws_iam_keys.py +1 -0
- reconcile/aws_saml_idp/integration.py +12 -4
- reconcile/aws_saml_roles/integration.py +32 -25
- reconcile/aws_version_sync/integration.py +125 -84
- reconcile/change_owners/bundle.py +3 -3
- reconcile/change_owners/change_log_tracking.py +3 -2
- reconcile/change_owners/change_owners.py +1 -1
- reconcile/change_owners/diff.py +2 -4
- reconcile/checkpoint.py +12 -4
- reconcile/cli.py +111 -18
- reconcile/cluster_deployment_mapper.py +2 -3
- reconcile/dashdotdb_dora.py +5 -12
- reconcile/dashdotdb_slo.py +1 -1
- reconcile/database_access_manager.py +125 -121
- reconcile/deadmanssnitch.py +1 -5
- reconcile/dynatrace_token_provider/integration.py +1 -1
- reconcile/endpoints_discovery/integration.py +4 -1
- reconcile/endpoints_discovery/merge_request.py +1 -1
- reconcile/endpoints_discovery/merge_request_manager.py +9 -11
- reconcile/external_resources/factories.py +5 -12
- reconcile/external_resources/integration.py +1 -1
- reconcile/external_resources/manager.py +8 -5
- reconcile/external_resources/meta.py +0 -1
- reconcile/external_resources/metrics.py +1 -1
- reconcile/external_resources/model.py +20 -20
- reconcile/external_resources/reconciler.py +7 -4
- reconcile/external_resources/secrets_sync.py +10 -14
- reconcile/external_resources/state.py +26 -16
- reconcile/fleet_labeler/integration.py +1 -1
- reconcile/gabi_authorized_users.py +8 -5
- reconcile/gcp_image_mirror.py +2 -2
- reconcile/github_org.py +1 -1
- reconcile/github_owners.py +4 -0
- reconcile/gitlab_housekeeping.py +13 -15
- reconcile/gitlab_members.py +6 -12
- reconcile/gitlab_mr_sqs_consumer.py +2 -2
- reconcile/gitlab_owners.py +15 -11
- reconcile/gitlab_permissions.py +8 -12
- reconcile/glitchtip_project_alerts/integration.py +3 -1
- reconcile/gql_definitions/acs/acs_instances.py +10 -10
- reconcile/gql_definitions/acs/acs_policies.py +5 -5
- reconcile/gql_definitions/acs/acs_rbac.py +6 -6
- reconcile/gql_definitions/advanced_upgrade_service/aus_clusters.py +32 -32
- reconcile/gql_definitions/advanced_upgrade_service/aus_organization.py +26 -26
- reconcile/gql_definitions/app_interface_metrics_exporter/onboarding_status.py +6 -7
- reconcile/gql_definitions/app_sre_tekton_access_revalidation/roles.py +5 -5
- reconcile/gql_definitions/app_sre_tekton_access_revalidation/users.py +5 -5
- reconcile/gql_definitions/automated_actions/instance.py +51 -12
- reconcile/gql_definitions/aws_account_manager/aws_accounts.py +11 -11
- reconcile/gql_definitions/aws_ami_cleanup/aws_accounts.py +20 -10
- reconcile/gql_definitions/aws_cloudwatch_log_retention/aws_accounts.py +28 -68
- reconcile/gql_definitions/aws_saml_idp/aws_accounts.py +20 -10
- reconcile/gql_definitions/aws_saml_roles/aws_accounts.py +20 -10
- reconcile/gql_definitions/aws_saml_roles/roles.py +5 -5
- reconcile/gql_definitions/aws_version_sync/clusters.py +10 -10
- reconcile/gql_definitions/aws_version_sync/namespaces.py +5 -5
- reconcile/gql_definitions/change_owners/queries/change_types.py +5 -5
- reconcile/gql_definitions/change_owners/queries/self_service_roles.py +9 -9
- reconcile/gql_definitions/cluster_auth_rhidp/clusters.py +18 -18
- reconcile/gql_definitions/common/alerting_services_settings.py +9 -9
- reconcile/gql_definitions/common/app_code_component_repos.py +5 -5
- reconcile/gql_definitions/common/app_interface_custom_messages.py +5 -5
- reconcile/gql_definitions/common/app_interface_dms_settings.py +5 -5
- reconcile/gql_definitions/common/app_interface_repo_settings.py +5 -5
- reconcile/gql_definitions/common/app_interface_roles.py +120 -0
- reconcile/gql_definitions/common/app_interface_state_settings.py +10 -10
- reconcile/gql_definitions/common/app_interface_vault_settings.py +5 -5
- reconcile/gql_definitions/common/app_quay_repos_escalation_policies.py +5 -5
- reconcile/gql_definitions/common/apps.py +5 -5
- reconcile/gql_definitions/common/aws_vpc_requests.py +22 -9
- reconcile/gql_definitions/common/aws_vpcs.py +11 -11
- reconcile/gql_definitions/common/clusters.py +37 -35
- reconcile/gql_definitions/common/clusters_minimal.py +14 -14
- reconcile/gql_definitions/common/clusters_with_dms.py +6 -6
- reconcile/gql_definitions/common/clusters_with_peering.py +29 -30
- reconcile/gql_definitions/common/github_orgs.py +10 -10
- reconcile/gql_definitions/common/jira_settings.py +10 -10
- reconcile/gql_definitions/common/jiralert_settings.py +5 -5
- reconcile/gql_definitions/common/ldap_settings.py +5 -5
- reconcile/gql_definitions/common/namespaces.py +42 -44
- reconcile/gql_definitions/common/namespaces_minimal.py +15 -13
- reconcile/gql_definitions/common/ocm_env_telemeter.py +12 -12
- reconcile/gql_definitions/common/ocm_environments.py +19 -19
- reconcile/gql_definitions/common/pagerduty_instances.py +9 -9
- reconcile/gql_definitions/common/pgp_reencryption_settings.py +6 -6
- reconcile/gql_definitions/common/pipeline_providers.py +29 -29
- reconcile/gql_definitions/common/quay_instances.py +5 -5
- reconcile/gql_definitions/common/quay_orgs.py +5 -5
- reconcile/gql_definitions/common/reserved_networks.py +5 -5
- reconcile/gql_definitions/common/rhcs_provider_settings.py +5 -5
- reconcile/gql_definitions/common/saas_files.py +44 -44
- reconcile/gql_definitions/common/saas_target_namespaces.py +10 -10
- reconcile/gql_definitions/common/saasherder_settings.py +5 -5
- reconcile/gql_definitions/common/slack_workspaces.py +5 -5
- reconcile/gql_definitions/common/smtp_client_settings.py +19 -19
- reconcile/gql_definitions/common/state_aws_account.py +7 -8
- reconcile/gql_definitions/common/users.py +5 -5
- reconcile/gql_definitions/common/users_with_paths.py +5 -5
- reconcile/gql_definitions/cost_report/app_names.py +5 -5
- reconcile/gql_definitions/cost_report/cost_namespaces.py +5 -5
- reconcile/gql_definitions/cost_report/settings.py +9 -9
- reconcile/gql_definitions/dashdotdb_slo/slo_documents_query.py +43 -43
- reconcile/gql_definitions/dynatrace_token_provider/dynatrace_bootstrap_tokens.py +10 -10
- reconcile/gql_definitions/dynatrace_token_provider/token_specs.py +5 -5
- reconcile/gql_definitions/email_sender/apps.py +5 -5
- reconcile/gql_definitions/email_sender/emails.py +8 -8
- reconcile/gql_definitions/email_sender/users.py +6 -6
- reconcile/gql_definitions/endpoints_discovery/apps.py +10 -10
- reconcile/gql_definitions/external_resources/aws_accounts.py +9 -9
- reconcile/gql_definitions/external_resources/external_resources_modules.py +23 -23
- reconcile/gql_definitions/external_resources/external_resources_namespaces.py +494 -410
- reconcile/gql_definitions/external_resources/external_resources_settings.py +28 -26
- reconcile/gql_definitions/external_resources/fragments/external_resources_module_overrides.py +5 -5
- reconcile/gql_definitions/fleet_labeler/fleet_labels.py +40 -40
- reconcile/gql_definitions/fragments/aus_organization.py +5 -5
- reconcile/gql_definitions/fragments/aws_account_common.py +7 -5
- reconcile/gql_definitions/fragments/aws_account_managed.py +5 -5
- reconcile/gql_definitions/fragments/aws_account_sso.py +5 -5
- reconcile/gql_definitions/fragments/aws_infra_management_account.py +5 -5
- reconcile/gql_definitions/fragments/{aws_vpc_request_subnet.py → aws_organization.py} +12 -8
- reconcile/gql_definitions/fragments/aws_vpc.py +5 -5
- reconcile/gql_definitions/fragments/aws_vpc_request.py +12 -5
- reconcile/gql_definitions/fragments/container_image_mirror.py +5 -5
- reconcile/gql_definitions/fragments/deploy_resources.py +5 -5
- reconcile/gql_definitions/fragments/disable.py +5 -5
- reconcile/gql_definitions/fragments/email_service.py +5 -5
- reconcile/gql_definitions/fragments/email_user.py +5 -5
- reconcile/gql_definitions/fragments/jumphost_common_fields.py +5 -5
- reconcile/gql_definitions/fragments/membership_source.py +5 -5
- reconcile/gql_definitions/fragments/minimal_ocm_organization.py +5 -5
- reconcile/gql_definitions/fragments/oc_connection_cluster.py +5 -5
- reconcile/gql_definitions/fragments/ocm_environment.py +5 -5
- reconcile/gql_definitions/fragments/pipeline_provider_retention.py +5 -5
- reconcile/gql_definitions/fragments/prometheus_instance.py +5 -5
- reconcile/gql_definitions/fragments/resource_limits_requirements.py +5 -5
- reconcile/gql_definitions/fragments/resource_requests_requirements.py +5 -5
- reconcile/gql_definitions/fragments/resource_values.py +5 -5
- reconcile/gql_definitions/fragments/saas_slo_document.py +5 -5
- reconcile/gql_definitions/fragments/saas_target_namespace.py +5 -5
- reconcile/gql_definitions/fragments/serviceaccount_token.py +5 -5
- reconcile/gql_definitions/fragments/terraform_state.py +5 -5
- reconcile/gql_definitions/fragments/upgrade_policy.py +5 -5
- reconcile/gql_definitions/fragments/user.py +5 -5
- reconcile/gql_definitions/fragments/vault_secret.py +5 -5
- reconcile/gql_definitions/gcp/gcp_docker_repos.py +9 -9
- reconcile/gql_definitions/gcp/gcp_projects.py +9 -9
- reconcile/gql_definitions/gitlab_members/gitlab_instances.py +9 -9
- reconcile/gql_definitions/gitlab_members/permissions.py +9 -9
- reconcile/gql_definitions/glitchtip/glitchtip_instance.py +9 -9
- reconcile/gql_definitions/glitchtip/glitchtip_project.py +11 -11
- reconcile/gql_definitions/glitchtip_project_alerts/glitchtip_project.py +9 -9
- reconcile/gql_definitions/integrations/integrations.py +48 -51
- reconcile/gql_definitions/introspection.json +3510 -1865
- reconcile/gql_definitions/jenkins_configs/jenkins_configs.py +11 -11
- reconcile/gql_definitions/jenkins_configs/jenkins_instances.py +10 -10
- reconcile/gql_definitions/jira/jira_servers.py +5 -5
- reconcile/gql_definitions/jira_permissions_validator/jira_boards_for_permissions_validator.py +14 -10
- reconcile/gql_definitions/jumphosts/jumphosts.py +13 -13
- reconcile/gql_definitions/ldap_groups/roles.py +5 -5
- reconcile/gql_definitions/ldap_groups/settings.py +9 -9
- reconcile/gql_definitions/maintenance/maintenances.py +5 -5
- reconcile/gql_definitions/membershipsources/roles.py +5 -5
- reconcile/gql_definitions/ocm_labels/clusters.py +18 -19
- reconcile/gql_definitions/ocm_labels/organizations.py +5 -5
- reconcile/gql_definitions/openshift_cluster_bots/clusters.py +22 -22
- reconcile/gql_definitions/openshift_groups/managed_groups.py +5 -5
- reconcile/gql_definitions/openshift_groups/managed_roles.py +6 -6
- reconcile/gql_definitions/openshift_serviceaccount_tokens/tokens.py +10 -10
- reconcile/gql_definitions/quay_membership/quay_membership.py +6 -6
- reconcile/gql_definitions/rhcs/certs.py +33 -87
- reconcile/gql_definitions/rhcs/openshift_resource_rhcs_cert.py +43 -0
- reconcile/gql_definitions/rhidp/organizations.py +18 -18
- reconcile/gql_definitions/service_dependencies/jenkins_instance_fragment.py +5 -5
- reconcile/gql_definitions/service_dependencies/service_dependencies.py +8 -8
- reconcile/gql_definitions/sharding/aws_accounts.py +10 -10
- reconcile/gql_definitions/sharding/ocm_organization.py +8 -8
- reconcile/gql_definitions/skupper_network/site_controller_template.py +5 -5
- reconcile/gql_definitions/skupper_network/skupper_networks.py +10 -10
- reconcile/gql_definitions/slack_usergroups/clusters.py +5 -5
- reconcile/gql_definitions/slack_usergroups/permissions.py +9 -9
- reconcile/gql_definitions/slack_usergroups/users.py +5 -5
- reconcile/gql_definitions/slo_documents/slo_documents.py +5 -5
- reconcile/gql_definitions/status_board/status_board.py +6 -7
- reconcile/gql_definitions/statuspage/statuspages.py +9 -9
- reconcile/gql_definitions/templating/template_collection.py +5 -5
- reconcile/gql_definitions/templating/templates.py +5 -5
- reconcile/gql_definitions/terraform_cloudflare_dns/app_interface_cloudflare_dns_settings.py +6 -6
- reconcile/gql_definitions/terraform_cloudflare_dns/terraform_cloudflare_zones.py +11 -11
- reconcile/gql_definitions/terraform_cloudflare_resources/terraform_cloudflare_accounts.py +11 -11
- reconcile/gql_definitions/terraform_cloudflare_resources/terraform_cloudflare_resources.py +20 -25
- reconcile/gql_definitions/terraform_cloudflare_users/app_interface_setting_cloudflare_and_vault.py +6 -6
- reconcile/gql_definitions/terraform_cloudflare_users/terraform_cloudflare_roles.py +12 -12
- reconcile/gql_definitions/terraform_init/aws_accounts.py +23 -9
- reconcile/gql_definitions/terraform_repo/terraform_repo.py +9 -9
- reconcile/gql_definitions/terraform_resources/database_access_manager.py +5 -5
- reconcile/gql_definitions/terraform_resources/terraform_resources_namespaces.py +450 -402
- reconcile/gql_definitions/terraform_tgw_attachments/aws_accounts.py +23 -17
- reconcile/gql_definitions/unleash_feature_toggles/feature_toggles.py +9 -9
- reconcile/gql_definitions/vault_instances/vault_instances.py +61 -61
- reconcile/gql_definitions/vault_policies/vault_policies.py +11 -11
- reconcile/gql_definitions/vpc_peerings_validator/vpc_peerings_validator.py +8 -8
- reconcile/gql_definitions/vpc_peerings_validator/vpc_peerings_validator_peered_cluster_fragment.py +5 -5
- reconcile/integrations_manager.py +3 -3
- reconcile/jenkins_job_builder.py +1 -1
- reconcile/jenkins_worker_fleets.py +80 -11
- reconcile/jira_permissions_validator.py +237 -122
- reconcile/ldap_groups/integration.py +1 -1
- reconcile/ocm/types.py +35 -56
- reconcile/ocm_aws_infrastructure_access.py +1 -1
- reconcile/ocm_clusters.py +4 -4
- reconcile/ocm_labels/integration.py +3 -2
- reconcile/ocm_machine_pools.py +33 -27
- reconcile/openshift_base.py +122 -10
- reconcile/openshift_cluster_bots.py +5 -5
- reconcile/openshift_groups.py +5 -0
- reconcile/openshift_limitranges.py +1 -1
- reconcile/openshift_namespace_labels.py +1 -1
- reconcile/openshift_namespaces.py +97 -101
- reconcile/openshift_resources_base.py +10 -5
- reconcile/openshift_rhcs_certs.py +77 -40
- reconcile/openshift_rolebindings.py +230 -130
- reconcile/openshift_saas_deploy.py +6 -7
- reconcile/openshift_saas_deploy_change_tester.py +9 -7
- reconcile/openshift_saas_deploy_trigger_cleaner.py +3 -5
- reconcile/openshift_serviceaccount_tokens.py +8 -7
- reconcile/openshift_tekton_resources.py +1 -1
- reconcile/openshift_upgrade_watcher.py +4 -4
- reconcile/openshift_users.py +5 -3
- reconcile/oum/labelset.py +5 -3
- reconcile/oum/models.py +1 -4
- reconcile/oum/providers.py +1 -1
- reconcile/prometheus_rules_tester/integration.py +4 -4
- reconcile/quay_mirror.py +1 -1
- reconcile/queries.py +131 -0
- reconcile/requests_sender.py +8 -3
- reconcile/resource_scraper.py +1 -5
- reconcile/rhidp/common.py +3 -5
- reconcile/rhidp/sso_client/base.py +19 -10
- reconcile/saas_auto_promotions_manager/merge_request_manager/renderer.py +1 -1
- reconcile/saas_auto_promotions_manager/subscriber.py +4 -3
- reconcile/sendgrid_teammates.py +20 -9
- reconcile/skupper_network/integration.py +2 -2
- reconcile/slack_usergroups.py +35 -14
- reconcile/sql_query.py +1 -0
- reconcile/status.py +2 -2
- reconcile/status_board.py +6 -6
- reconcile/statuspage/atlassian.py +7 -7
- reconcile/statuspage/integrations/maintenances.py +4 -3
- reconcile/statuspage/page.py +4 -9
- reconcile/statuspage/status.py +5 -8
- reconcile/templates/rosa-classic-cluster-creation.sh.j2 +5 -1
- reconcile/templates/rosa-hcp-cluster-creation.sh.j2 +4 -1
- reconcile/templating/lib/merge_request_manager.py +2 -2
- reconcile/templating/lib/rendering.py +3 -3
- reconcile/templating/renderer.py +12 -13
- reconcile/terraform_aws_route53.py +18 -8
- reconcile/terraform_cloudflare_dns.py +3 -3
- reconcile/terraform_cloudflare_resources.py +12 -13
- reconcile/terraform_cloudflare_users.py +3 -2
- reconcile/terraform_init/integration.py +187 -23
- reconcile/terraform_repo.py +16 -12
- reconcile/terraform_resources.py +18 -10
- reconcile/terraform_tgw_attachments.py +28 -20
- reconcile/terraform_users.py +27 -22
- reconcile/terraform_vpc_peerings.py +15 -3
- reconcile/terraform_vpc_resources/integration.py +23 -8
- reconcile/typed_queries/app_interface_roles.py +10 -0
- reconcile/typed_queries/aws_account_tags.py +41 -0
- reconcile/typed_queries/cost_report/app_names.py +1 -1
- reconcile/typed_queries/cost_report/cost_namespaces.py +2 -2
- reconcile/typed_queries/saas_files.py +13 -13
- reconcile/typed_queries/status_board.py +2 -2
- reconcile/unleash_feature_toggles/integration.py +4 -2
- reconcile/utils/acs/base.py +6 -3
- reconcile/utils/acs/policies.py +2 -2
- reconcile/utils/aggregated_list.py +4 -3
- reconcile/utils/aws_api.py +51 -20
- reconcile/utils/aws_api_typed/api.py +38 -9
- reconcile/utils/aws_api_typed/cloudformation.py +149 -0
- reconcile/utils/aws_api_typed/logs.py +73 -0
- reconcile/utils/aws_api_typed/organization.py +4 -2
- reconcile/utils/binary.py +7 -12
- reconcile/utils/datetime_util.py +67 -0
- reconcile/utils/deadmanssnitch_api.py +1 -1
- reconcile/utils/differ.py +2 -3
- reconcile/utils/early_exit_cache.py +11 -12
- reconcile/utils/expiration.py +7 -3
- reconcile/utils/external_resource_spec.py +24 -1
- reconcile/utils/filtering.py +1 -1
- reconcile/utils/gitlab_api.py +7 -5
- reconcile/utils/glitchtip/client.py +6 -2
- reconcile/utils/glitchtip/models.py +25 -28
- reconcile/utils/gpg.py +5 -3
- reconcile/utils/gql.py +4 -7
- reconcile/utils/helm.py +2 -1
- reconcile/utils/helpers.py +1 -1
- reconcile/utils/imap_client.py +1 -1
- reconcile/utils/instrumented_wrappers.py +1 -1
- reconcile/utils/internal_groups/client.py +2 -2
- reconcile/utils/internal_groups/models.py +8 -17
- reconcile/utils/jenkins_api.py +24 -1
- reconcile/utils/jinja2/utils.py +6 -8
- reconcile/utils/jira_client.py +82 -63
- reconcile/utils/jjb_client.py +78 -46
- reconcile/utils/jobcontroller/controller.py +2 -2
- reconcile/utils/jobcontroller/models.py +17 -1
- reconcile/utils/json.py +74 -0
- reconcile/utils/ldap_client.py +4 -3
- reconcile/utils/lean_terraform_client.py +3 -1
- reconcile/utils/membershipsources/app_interface_resolver.py +4 -2
- reconcile/utils/membershipsources/models.py +16 -23
- reconcile/utils/membershipsources/resolver.py +4 -2
- reconcile/utils/merge_request_manager/merge_request_manager.py +4 -4
- reconcile/utils/merge_request_manager/parser.py +6 -6
- reconcile/utils/metrics.py +5 -5
- reconcile/utils/models.py +304 -82
- reconcile/utils/mr/__init__.py +3 -1
- reconcile/utils/mr/app_interface_reporter.py +6 -3
- reconcile/utils/mr/aws_access.py +1 -1
- reconcile/utils/mr/base.py +7 -13
- reconcile/utils/mr/clusters_updates.py +4 -2
- reconcile/utils/mr/notificator.py +3 -3
- reconcile/utils/mr/ocm_upgrade_scheduler_org_updates.py +4 -1
- reconcile/utils/mr/promote_qontract.py +28 -12
- reconcile/utils/mr/update_access_report_base.py +3 -4
- reconcile/utils/mr/user_maintenance.py +7 -6
- reconcile/utils/oc.py +445 -336
- reconcile/utils/oc_filters.py +3 -3
- reconcile/utils/ocm/addons.py +0 -1
- reconcile/utils/ocm/base.py +18 -21
- reconcile/utils/ocm/cluster_groups.py +1 -1
- reconcile/utils/ocm/identity_providers.py +2 -2
- reconcile/utils/ocm/labels.py +1 -1
- reconcile/utils/ocm/ocm.py +81 -71
- reconcile/utils/ocm/products.py +9 -3
- reconcile/utils/ocm/search_filters.py +3 -6
- reconcile/utils/ocm/service_log.py +4 -6
- reconcile/utils/ocm/sre_capability_labels.py +20 -13
- reconcile/utils/ocm_base_client.py +4 -4
- reconcile/utils/openshift_resource.py +83 -52
- reconcile/utils/openssl.py +2 -2
- reconcile/utils/output.py +3 -2
- reconcile/utils/pagerduty_api.py +10 -7
- reconcile/utils/promotion_state.py +6 -11
- reconcile/utils/raw_github_api.py +11 -8
- reconcile/utils/repo_owners.py +21 -29
- reconcile/utils/rhcsv2_certs.py +138 -35
- reconcile/utils/rosa/session.py +16 -0
- reconcile/utils/runtime/integration.py +2 -3
- reconcile/utils/runtime/meta.py +2 -1
- reconcile/utils/runtime/runner.py +2 -2
- reconcile/utils/saasherder/interfaces.py +13 -20
- reconcile/utils/saasherder/models.py +25 -21
- reconcile/utils/saasherder/saasherder.py +60 -32
- reconcile/utils/secret_reader.py +6 -6
- reconcile/utils/sharding.py +1 -1
- reconcile/utils/slack_api.py +26 -4
- reconcile/utils/sloth.py +224 -0
- reconcile/utils/sqs_gateway.py +16 -11
- reconcile/utils/state.py +2 -1
- reconcile/utils/structs.py +1 -1
- reconcile/utils/terraform_client.py +29 -26
- reconcile/utils/terrascript_aws_client.py +200 -116
- reconcile/utils/three_way_diff_strategy.py +1 -1
- reconcile/utils/unleash/server.py +2 -8
- reconcile/utils/vault.py +44 -41
- reconcile/utils/vcs.py +8 -8
- reconcile/vault_replication.py +119 -58
- tools/app_interface_reporter.py +4 -4
- tools/cli_commands/cost_report/cost_management_api.py +3 -3
- tools/cli_commands/cost_report/view.py +7 -6
- tools/cli_commands/erv2.py +1 -1
- tools/cli_commands/gpg_encrypt.py +4 -1
- tools/cli_commands/systems_and_tools.py +5 -1
- tools/qontract_cli.py +36 -21
- tools/template_validation.py +3 -1
- reconcile/gql_definitions/ocm_oidc_idp/__init__.py +0 -0
- reconcile/gql_definitions/ocm_subscription_labels/__init__.py +0 -0
- reconcile/jenkins/__init__.py +0 -0
- reconcile/jenkins/types.py +0 -77
- {qontract_reconcile-0.10.2.dev310.dist-info → qontract_reconcile-0.10.2.dev439.dist-info}/WHEEL +0 -0
- {qontract_reconcile-0.10.2.dev310.dist-info → qontract_reconcile-0.10.2.dev439.dist-info}/entry_points.txt +0 -0
reconcile/cli.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# ruff: noqa: PLC0415 - `import` should be at the top-level of a file
|
|
2
2
|
import faulthandler
|
|
3
|
-
import json
|
|
4
3
|
import logging
|
|
5
4
|
import os
|
|
6
5
|
import re
|
|
@@ -31,6 +30,7 @@ from reconcile.utils.constants import DEFAULT_THREAD_POOL_SIZE
|
|
|
31
30
|
from reconcile.utils.exceptions import PrintToFileInGitRepositoryError
|
|
32
31
|
from reconcile.utils.git import is_file_in_git_repo
|
|
33
32
|
from reconcile.utils.gql import GqlApiSingleton
|
|
33
|
+
from reconcile.utils.json import json_dumps
|
|
34
34
|
from reconcile.utils.promtool import PROMTOOL_VERSION, PROMTOOL_VERSION_REGEX
|
|
35
35
|
from reconcile.utils.runtime.environment import init_env
|
|
36
36
|
from reconcile.utils.runtime.integration import (
|
|
@@ -50,8 +50,8 @@ from reconcile.utils.unleash import get_feature_toggle_state
|
|
|
50
50
|
TERRAFORM_VERSION = ["1.6.6"]
|
|
51
51
|
TERRAFORM_VERSION_REGEX = r"^Terraform\sv([\d]+\.[\d]+\.[\d]+)$"
|
|
52
52
|
|
|
53
|
-
OC_VERSIONS = ["4.
|
|
54
|
-
OC_VERSION_REGEX = r"^Client\sVersion:\s([\d]+\.[\d]+\.[\d]+)
|
|
53
|
+
OC_VERSIONS = ["4.19.0", "4.16.2"]
|
|
54
|
+
OC_VERSION_REGEX = r"^Client\sVersion:\s([\d]+\.[\d]+\.[\d]+)"
|
|
55
55
|
|
|
56
56
|
HELM_VERSIONS = ["3.11.1"]
|
|
57
57
|
HELM_VERSION_REGEX = r"^version.BuildInfo{Version:\"v([\d]+\.[\d]+\.[\d]+)\".*$"
|
|
@@ -608,7 +608,7 @@ def run_class_integration(
|
|
|
608
608
|
if dump_schemas_file:
|
|
609
609
|
gqlapi = gql.get_api()
|
|
610
610
|
with open(dump_schemas_file, "w", encoding="locale") as f:
|
|
611
|
-
f.write(
|
|
611
|
+
f.write(json_dumps(gqlapi.get_queried_schemas()))
|
|
612
612
|
|
|
613
613
|
|
|
614
614
|
@click.group()
|
|
@@ -795,9 +795,18 @@ def openshift_clusterrolebindings(
|
|
|
795
795
|
@binary_version("oc", ["version", "--client"], OC_VERSION_REGEX, OC_VERSIONS)
|
|
796
796
|
@internal()
|
|
797
797
|
@use_jump_host()
|
|
798
|
+
@click.option(
|
|
799
|
+
"--support-role-ref",
|
|
800
|
+
default=False,
|
|
801
|
+
help="Support roleRef in Rolebindings.",
|
|
802
|
+
)
|
|
798
803
|
@click.pass_context
|
|
799
804
|
def openshift_rolebindings(
|
|
800
|
-
ctx: click.Context,
|
|
805
|
+
ctx: click.Context,
|
|
806
|
+
thread_pool_size: int,
|
|
807
|
+
internal: bool,
|
|
808
|
+
use_jump_host: bool,
|
|
809
|
+
support_role_ref: bool,
|
|
801
810
|
) -> None:
|
|
802
811
|
import reconcile.openshift_rolebindings
|
|
803
812
|
|
|
@@ -807,6 +816,7 @@ def openshift_rolebindings(
|
|
|
807
816
|
thread_pool_size,
|
|
808
817
|
internal,
|
|
809
818
|
use_jump_host,
|
|
819
|
+
support_role_ref,
|
|
810
820
|
)
|
|
811
821
|
|
|
812
822
|
|
|
@@ -1018,7 +1028,7 @@ def aws_account_manager(
|
|
|
1018
1028
|
"--state-tmpl-resource",
|
|
1019
1029
|
help="Resource name of the state template-collection template in the app-interface.",
|
|
1020
1030
|
required=True,
|
|
1021
|
-
default="/terraform-init/terraform-state.yml",
|
|
1031
|
+
default="/terraform-init/terraform-state.yml.j2",
|
|
1022
1032
|
)
|
|
1023
1033
|
@click.option(
|
|
1024
1034
|
"--template-collection-root-path",
|
|
@@ -1026,12 +1036,26 @@ def aws_account_manager(
|
|
|
1026
1036
|
required=True,
|
|
1027
1037
|
default="data/templating/collections/terraform-init",
|
|
1028
1038
|
)
|
|
1039
|
+
@click.option(
|
|
1040
|
+
"--cloudformation-template-resource",
|
|
1041
|
+
help="Resource name of the CloudFormation template to create the S3 bucket",
|
|
1042
|
+
required=True,
|
|
1043
|
+
default="/terraform-init/terraform-state-s3-bucket.yaml",
|
|
1044
|
+
)
|
|
1045
|
+
@click.option(
|
|
1046
|
+
"--cloudformation-import-template-resource",
|
|
1047
|
+
help="Resource name of the CloudFormation template to import existing S3 bucket",
|
|
1048
|
+
required=True,
|
|
1049
|
+
default="/terraform-init/terraform-state-s3-bucket-import.yaml",
|
|
1050
|
+
)
|
|
1029
1051
|
@click.pass_context
|
|
1030
1052
|
def terraform_init(
|
|
1031
1053
|
ctx: click.Context,
|
|
1032
1054
|
account_name: str | None,
|
|
1033
1055
|
state_tmpl_resource: str,
|
|
1034
1056
|
template_collection_root_path: str,
|
|
1057
|
+
cloudformation_template_resource: str,
|
|
1058
|
+
cloudformation_import_template_resource: str,
|
|
1035
1059
|
) -> None:
|
|
1036
1060
|
from reconcile.terraform_init.integration import (
|
|
1037
1061
|
TerraformInitIntegration,
|
|
@@ -1044,6 +1068,8 @@ def terraform_init(
|
|
|
1044
1068
|
account_name=account_name,
|
|
1045
1069
|
state_tmpl_resource=state_tmpl_resource,
|
|
1046
1070
|
template_collection_root_path=template_collection_root_path,
|
|
1071
|
+
cloudformation_template_resource=cloudformation_template_resource,
|
|
1072
|
+
cloudformation_import_template_resource=cloudformation_import_template_resource,
|
|
1047
1073
|
)
|
|
1048
1074
|
),
|
|
1049
1075
|
ctx=ctx,
|
|
@@ -1125,9 +1151,17 @@ def jenkins_webhooks_cleaner(ctx: click.Context) -> None:
|
|
|
1125
1151
|
"--jira-board-name", help="The Jira board to act on.", default=None, multiple=True
|
|
1126
1152
|
)
|
|
1127
1153
|
@click.option("--board-check-interval", help="Check interval in minutes", default=120)
|
|
1154
|
+
@click.option(
|
|
1155
|
+
"--use-cache/--no-use-cache",
|
|
1156
|
+
default=True,
|
|
1157
|
+
help="Use cached results for validation.",
|
|
1158
|
+
)
|
|
1128
1159
|
@click.pass_context
|
|
1129
1160
|
def jira_permissions_validator(
|
|
1130
|
-
ctx: click.Context,
|
|
1161
|
+
ctx: click.Context,
|
|
1162
|
+
jira_board_name: Iterable[str] | None,
|
|
1163
|
+
board_check_interval: int,
|
|
1164
|
+
use_cache: bool,
|
|
1131
1165
|
) -> None:
|
|
1132
1166
|
import reconcile.jira_permissions_validator
|
|
1133
1167
|
|
|
@@ -1136,6 +1170,7 @@ def jira_permissions_validator(
|
|
|
1136
1170
|
ctx,
|
|
1137
1171
|
jira_board_name=jira_board_name,
|
|
1138
1172
|
board_check_interval_sec=board_check_interval * 60,
|
|
1173
|
+
use_cache=use_cache,
|
|
1139
1174
|
)
|
|
1140
1175
|
|
|
1141
1176
|
|
|
@@ -1260,14 +1295,14 @@ def aws_ami_cleanup(ctx: click.Context, thread_pool_size: int) -> None:
|
|
|
1260
1295
|
run_integration(reconcile.aws_ami_cleanup.integration, ctx, thread_pool_size)
|
|
1261
1296
|
|
|
1262
1297
|
|
|
1263
|
-
@integration.command(short_help="Set up retention period for Cloudwatch logs.")
|
|
1264
|
-
@threaded()
|
|
1298
|
+
@integration.command(short_help="Set up retention period and tags for Cloudwatch logs.")
|
|
1265
1299
|
@click.pass_context
|
|
1266
|
-
def aws_cloudwatch_log_retention(ctx: click.Context
|
|
1300
|
+
def aws_cloudwatch_log_retention(ctx: click.Context) -> None:
|
|
1267
1301
|
import reconcile.aws_cloudwatch_log_retention.integration
|
|
1268
1302
|
|
|
1269
1303
|
run_integration(
|
|
1270
|
-
reconcile.aws_cloudwatch_log_retention.integration,
|
|
1304
|
+
reconcile.aws_cloudwatch_log_retention.integration,
|
|
1305
|
+
ctx,
|
|
1271
1306
|
)
|
|
1272
1307
|
|
|
1273
1308
|
|
|
@@ -2165,10 +2200,10 @@ def template_validator(ctx: click.Context) -> None:
|
|
|
2165
2200
|
|
|
2166
2201
|
@integration.command(short_help="Render datafile templates in app-interface.")
|
|
2167
2202
|
@click.option(
|
|
2168
|
-
"--app-interface-
|
|
2169
|
-
help="Path to
|
|
2203
|
+
"--app-interface-root-path",
|
|
2204
|
+
help="Path to root of app-interface repo. Use this for local rendering or in MR checks.",
|
|
2170
2205
|
required=False,
|
|
2171
|
-
envvar="
|
|
2206
|
+
envvar="APP_INTERFACE_ROOT_PATH",
|
|
2172
2207
|
)
|
|
2173
2208
|
@click.option(
|
|
2174
2209
|
"--clone-repo",
|
|
@@ -2184,7 +2219,7 @@ def template_validator(ctx: click.Context) -> None:
|
|
|
2184
2219
|
@click.pass_context
|
|
2185
2220
|
def template_renderer(
|
|
2186
2221
|
ctx: click.Context,
|
|
2187
|
-
|
|
2222
|
+
app_interface_root_path: str | None,
|
|
2188
2223
|
clone_repo: bool,
|
|
2189
2224
|
template_collection_name: str | None,
|
|
2190
2225
|
) -> None:
|
|
@@ -2196,7 +2231,7 @@ def template_renderer(
|
|
|
2196
2231
|
run_class_integration(
|
|
2197
2232
|
integration=TemplateRendererIntegration(
|
|
2198
2233
|
TemplateRendererIntegrationParams(
|
|
2199
|
-
|
|
2234
|
+
app_interface_root_path=app_interface_root_path,
|
|
2200
2235
|
clone_repo=clone_repo,
|
|
2201
2236
|
template_collection_name=template_collection_name,
|
|
2202
2237
|
)
|
|
@@ -2820,6 +2855,36 @@ def ocm_addons_upgrade_scheduler_org(
|
|
|
2820
2855
|
default=bool(os.environ.get("IGNORE_STS_CLUSTERS")),
|
|
2821
2856
|
help="Ignore STS clusters",
|
|
2822
2857
|
)
|
|
2858
|
+
@click.option(
|
|
2859
|
+
"--job-controller-cluster",
|
|
2860
|
+
help="The cluster holding the job-controller namepsace",
|
|
2861
|
+
required=False,
|
|
2862
|
+
envvar="JOB_CONTROLLER_CLUSTER",
|
|
2863
|
+
)
|
|
2864
|
+
@click.option(
|
|
2865
|
+
"--job-controller-namespace",
|
|
2866
|
+
help="The namespace used for ROSA jobs",
|
|
2867
|
+
required=False,
|
|
2868
|
+
envvar="JOB_CONTROLLER_NAMESPACE",
|
|
2869
|
+
)
|
|
2870
|
+
@click.option(
|
|
2871
|
+
"--rosa-job-service-account",
|
|
2872
|
+
help="The service-account used for ROSA jobs",
|
|
2873
|
+
required=False,
|
|
2874
|
+
envvar="ROSA_JOB_SERVICE_ACCOUNT",
|
|
2875
|
+
)
|
|
2876
|
+
@click.option(
|
|
2877
|
+
"--rosa-job-image",
|
|
2878
|
+
help="The container image to use to run ROSA cli command jobs",
|
|
2879
|
+
required=False,
|
|
2880
|
+
envvar="ROSA_JOB_IMAGE",
|
|
2881
|
+
)
|
|
2882
|
+
@click.option(
|
|
2883
|
+
"--rosa-role",
|
|
2884
|
+
help="The role to assume in the ROSA cluster account",
|
|
2885
|
+
required=False,
|
|
2886
|
+
envvar="ROSA_ROLE",
|
|
2887
|
+
)
|
|
2823
2888
|
@click.pass_context
|
|
2824
2889
|
def advanced_upgrade_scheduler(
|
|
2825
2890
|
ctx: click.Context,
|
|
@@ -2827,9 +2892,21 @@ def advanced_upgrade_scheduler(
|
|
|
2827
2892
|
org_id: Iterable[str],
|
|
2828
2893
|
exclude_org_id: Iterable[str],
|
|
2829
2894
|
ignore_sts_clusters: bool,
|
|
2895
|
+
job_controller_cluster: str | None,
|
|
2896
|
+
job_controller_namespace: str | None,
|
|
2897
|
+
rosa_job_service_account: str | None,
|
|
2898
|
+
rosa_role: str | None,
|
|
2899
|
+
rosa_job_image: str | None,
|
|
2830
2900
|
) -> None:
|
|
2831
|
-
from reconcile.aus.advanced_upgrade_service import
|
|
2832
|
-
|
|
2901
|
+
from reconcile.aus.advanced_upgrade_service import (
|
|
2902
|
+
QONTRACT_INTEGRATION,
|
|
2903
|
+
QONTRACT_INTEGRATION_VERSION,
|
|
2904
|
+
AdvancedUpgradeServiceIntegration,
|
|
2905
|
+
)
|
|
2906
|
+
from reconcile.aus.base import (
|
|
2907
|
+
AdvancedUpgradeSchedulerBaseIntegrationParams,
|
|
2908
|
+
RosaRoleUpgradeHandlerParams,
|
|
2909
|
+
)
|
|
2833
2910
|
|
|
2834
2911
|
run_class_integration(
|
|
2835
2912
|
integration=AdvancedUpgradeServiceIntegration(
|
|
@@ -2838,6 +2915,22 @@ def advanced_upgrade_scheduler(
|
|
|
2838
2915
|
ocm_organization_ids=set(org_id),
|
|
2839
2916
|
excluded_ocm_organization_ids=set(exclude_org_id),
|
|
2840
2917
|
ignore_sts_clusters=ignore_sts_clusters,
|
|
2918
|
+
rosa_role_upgrade_handler_params=RosaRoleUpgradeHandlerParams(
|
|
2919
|
+
job_controller_cluster=job_controller_cluster,
|
|
2920
|
+
job_controller_namespace=job_controller_namespace,
|
|
2921
|
+
rosa_job_service_account=rosa_job_service_account,
|
|
2922
|
+
rosa_role=rosa_role,
|
|
2923
|
+
rosa_job_image=rosa_job_image,
|
|
2924
|
+
integration_name=QONTRACT_INTEGRATION,
|
|
2925
|
+
integration_version=QONTRACT_INTEGRATION_VERSION,
|
|
2926
|
+
)
|
|
2927
|
+
if all([
|
|
2928
|
+
job_controller_cluster,
|
|
2929
|
+
job_controller_namespace,
|
|
2930
|
+
rosa_job_service_account,
|
|
2931
|
+
rosa_role,
|
|
2932
|
+
])
|
|
2933
|
+
else None,
|
|
2841
2934
|
)
|
|
2842
2935
|
),
|
|
2843
2936
|
ctx=ctx,
|
|
@@ -53,12 +53,11 @@ def run(dry_run: bool, vault_output_path: str | None) -> None:
|
|
|
53
53
|
|
|
54
54
|
if not dry_run:
|
|
55
55
|
logging.info("writing ClusterDeployments to vault")
|
|
56
|
-
vault_client = VaultClient()
|
|
56
|
+
vault_client = VaultClient.get_instance()
|
|
57
57
|
secret = {
|
|
58
58
|
"path": f"{vault_output_path}/{QONTRACT_INTEGRATION}",
|
|
59
59
|
"data": {
|
|
60
60
|
"map": "\n".join(f"{item['id']}: {item['cluster']}" for item in results)
|
|
61
61
|
},
|
|
62
62
|
}
|
|
63
|
-
|
|
64
|
-
vault_client.write(secret, decode_base64=False) # type: ignore[attr-defined]
|
|
63
|
+
vault_client.write(secret, decode_base64=False)
|
reconcile/dashdotdb_dora.py
CHANGED
|
@@ -4,7 +4,6 @@ from collections import defaultdict
|
|
|
4
4
|
from collections.abc import Iterable, Mapping
|
|
5
5
|
from dataclasses import dataclass
|
|
6
6
|
from datetime import (
|
|
7
|
-
UTC,
|
|
8
7
|
datetime,
|
|
9
8
|
timedelta,
|
|
10
9
|
)
|
|
@@ -31,6 +30,7 @@ from reconcile.typed_queries.app_interface_vault_settings import (
|
|
|
31
30
|
get_app_interface_vault_settings,
|
|
32
31
|
)
|
|
33
32
|
from reconcile.typed_queries.saas_files import get_saas_files
|
|
33
|
+
from reconcile.utils.datetime_util import ensure_utc, utc_now
|
|
34
34
|
from reconcile.utils.github_api import GithubRepositoryApi
|
|
35
35
|
from reconcile.utils.gitlab_api import GitLabApi
|
|
36
36
|
from reconcile.utils.secret_reader import create_secret_reader
|
|
@@ -159,15 +159,8 @@ class Commit:
|
|
|
159
159
|
date: datetime
|
|
160
160
|
|
|
161
161
|
def lttc(self, finish_timestamp: datetime) -> int:
|
|
162
|
-
commit_date_tzaware = self.date
|
|
163
|
-
finish_timestamp_tzaware = finish_timestamp
|
|
164
|
-
|
|
165
|
-
if commit_date_tzaware.tzinfo is None:
|
|
166
|
-
commit_date_tzaware = commit_date_tzaware.replace(tzinfo=UTC)
|
|
167
|
-
|
|
168
|
-
if finish_timestamp_tzaware.tzinfo is None:
|
|
169
|
-
finish_timestamp_tzaware = finish_timestamp_tzaware.replace(tzinfo=UTC)
|
|
170
|
-
|
|
162
|
+
commit_date_tzaware = ensure_utc(self.date)
|
|
163
|
+
finish_timestamp_tzaware = ensure_utc(finish_timestamp)
|
|
171
164
|
return int((finish_timestamp_tzaware - commit_date_tzaware).total_seconds())
|
|
172
165
|
|
|
173
166
|
|
|
@@ -277,7 +270,7 @@ class DashdotdbDORA(DashdotdbBase):
|
|
|
277
270
|
# from the DB for a unique (app_name, env_name) multiple times.
|
|
278
271
|
app_envs = {s.app_env for s in saastargets}
|
|
279
272
|
|
|
280
|
-
since_default =
|
|
273
|
+
since_default = utc_now() - timedelta(days=90)
|
|
281
274
|
app_env_since_list: list[tuple[AppEnv, datetime]] = threaded.run(
|
|
282
275
|
func=functools.partial(self.get_latest_with_default, since_default),
|
|
283
276
|
iterable=app_envs,
|
|
@@ -473,7 +466,7 @@ class DashdotdbDORA(DashdotdbBase):
|
|
|
473
466
|
]
|
|
474
467
|
|
|
475
468
|
def _github_compare_commits(self, rc: RepoChanges, repo: str) -> list[Commit]:
|
|
476
|
-
if not rc.repo_url:
|
|
469
|
+
if not rc.repo_url or not rc.ref_from or not rc.ref_to:
|
|
477
470
|
return []
|
|
478
471
|
|
|
479
472
|
return [
|
reconcile/dashdotdb_slo.py
CHANGED