qontract-reconcile 0.10.2.dev349__py3-none-any.whl → 0.10.2.dev414__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.
- {qontract_reconcile-0.10.2.dev349.dist-info → qontract_reconcile-0.10.2.dev414.dist-info}/METADATA +12 -11
- {qontract_reconcile-0.10.2.dev349.dist-info → qontract_reconcile-0.10.2.dev414.dist-info}/RECORD +356 -350
- reconcile/acs_rbac.py +2 -2
- reconcile/aus/advanced_upgrade_service.py +15 -12
- reconcile/aus/base.py +26 -27
- reconcile/aus/cluster_version_data.py +15 -5
- reconcile/aus/models.py +1 -1
- reconcile/automated_actions/config/integration.py +15 -3
- 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 +2 -2
- reconcile/aws_iam_keys.py +7 -41
- reconcile/aws_saml_idp/integration.py +12 -4
- reconcile/aws_saml_roles/integration.py +32 -25
- reconcile/aws_version_sync/integration.py +6 -12
- 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 +11 -3
- reconcile/cli.py +33 -8
- reconcile/dashdotdb_dora.py +5 -12
- reconcile/dashdotdb_slo.py +1 -1
- reconcile/database_access_manager.py +123 -117
- 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 +24 -10
- reconcile/external_resources/meta.py +0 -1
- reconcile/external_resources/metrics.py +1 -1
- reconcile/external_resources/model.py +13 -13
- reconcile/external_resources/reconciler.py +7 -4
- reconcile/external_resources/secrets_sync.py +6 -8
- reconcile/external_resources/state.py +60 -17
- 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 +5 -5
- reconcile/gql_definitions/acs/acs_policies.py +5 -5
- reconcile/gql_definitions/acs/acs_rbac.py +5 -5
- reconcile/gql_definitions/advanced_upgrade_service/aus_clusters.py +5 -5
- reconcile/gql_definitions/advanced_upgrade_service/aus_organization.py +5 -5
- reconcile/gql_definitions/app_interface_metrics_exporter/onboarding_status.py +5 -5
- 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 +46 -7
- reconcile/gql_definitions/aws_account_manager/aws_accounts.py +5 -5
- reconcile/gql_definitions/aws_ami_cleanup/aws_accounts.py +15 -5
- reconcile/gql_definitions/aws_cloudwatch_log_retention/aws_accounts.py +27 -66
- reconcile/gql_definitions/aws_saml_idp/aws_accounts.py +15 -5
- reconcile/gql_definitions/aws_saml_roles/aws_accounts.py +15 -5
- reconcile/gql_definitions/aws_saml_roles/roles.py +5 -5
- reconcile/gql_definitions/aws_version_sync/clusters.py +5 -5
- 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 +5 -5
- reconcile/gql_definitions/cluster_auth_rhidp/clusters.py +5 -5
- reconcile/gql_definitions/common/alerting_services_settings.py +5 -5
- 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 +5 -5
- reconcile/gql_definitions/common/app_interface_state_settings.py +5 -5
- 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 +15 -5
- reconcile/gql_definitions/common/aws_vpcs.py +5 -5
- reconcile/gql_definitions/common/clusters.py +7 -5
- reconcile/gql_definitions/common/clusters_minimal.py +5 -5
- reconcile/gql_definitions/common/clusters_with_dms.py +5 -5
- reconcile/gql_definitions/common/clusters_with_peering.py +5 -5
- reconcile/gql_definitions/common/github_orgs.py +5 -5
- reconcile/gql_definitions/common/jira_settings.py +5 -5
- reconcile/gql_definitions/common/jiralert_settings.py +5 -5
- reconcile/gql_definitions/common/ldap_settings.py +5 -5
- reconcile/gql_definitions/common/namespaces.py +5 -5
- reconcile/gql_definitions/common/namespaces_minimal.py +7 -5
- reconcile/gql_definitions/common/ocm_env_telemeter.py +5 -5
- reconcile/gql_definitions/common/ocm_environments.py +5 -5
- reconcile/gql_definitions/common/pagerduty_instances.py +5 -5
- reconcile/gql_definitions/common/pgp_reencryption_settings.py +5 -5
- reconcile/gql_definitions/common/pipeline_providers.py +5 -5
- 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 +5 -5
- reconcile/gql_definitions/common/saas_target_namespaces.py +5 -5
- 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 +5 -5
- reconcile/gql_definitions/common/state_aws_account.py +5 -5
- 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 +5 -5
- reconcile/gql_definitions/dashdotdb_slo/slo_documents_query.py +5 -5
- reconcile/gql_definitions/dynatrace_token_provider/dynatrace_bootstrap_tokens.py +5 -5
- 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 +5 -5
- reconcile/gql_definitions/email_sender/users.py +5 -5
- reconcile/gql_definitions/endpoints_discovery/apps.py +5 -5
- reconcile/gql_definitions/external_resources/aws_accounts.py +5 -5
- reconcile/gql_definitions/external_resources/external_resources_modules.py +5 -5
- reconcile/gql_definitions/external_resources/external_resources_namespaces.py +89 -6
- reconcile/gql_definitions/external_resources/external_resources_settings.py +7 -5
- reconcile/gql_definitions/external_resources/fragments/external_resources_module_overrides.py +5 -5
- reconcile/gql_definitions/fleet_labeler/fleet_labels.py +5 -5
- 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_organization.py +33 -0
- reconcile/gql_definitions/fragments/aws_vpc.py +5 -5
- reconcile/gql_definitions/fragments/aws_vpc_request.py +7 -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 +5 -5
- reconcile/gql_definitions/gcp/gcp_projects.py +5 -5
- reconcile/gql_definitions/gitlab_members/gitlab_instances.py +5 -5
- reconcile/gql_definitions/gitlab_members/permissions.py +5 -5
- reconcile/gql_definitions/glitchtip/glitchtip_instance.py +5 -5
- reconcile/gql_definitions/glitchtip/glitchtip_project.py +5 -5
- reconcile/gql_definitions/glitchtip_project_alerts/glitchtip_project.py +5 -5
- reconcile/gql_definitions/integrations/integrations.py +5 -5
- reconcile/gql_definitions/introspection.json +2137 -1053
- reconcile/gql_definitions/jenkins_configs/jenkins_configs.py +5 -5
- reconcile/gql_definitions/jenkins_configs/jenkins_instances.py +5 -5
- reconcile/gql_definitions/jira/jira_servers.py +5 -5
- reconcile/gql_definitions/jira_permissions_validator/jira_boards_for_permissions_validator.py +9 -5
- reconcile/gql_definitions/jumphosts/jumphosts.py +5 -5
- reconcile/gql_definitions/ldap_groups/roles.py +5 -5
- reconcile/gql_definitions/ldap_groups/settings.py +5 -5
- reconcile/gql_definitions/maintenance/maintenances.py +5 -5
- reconcile/gql_definitions/membershipsources/roles.py +5 -5
- reconcile/gql_definitions/ocm_labels/clusters.py +5 -5
- reconcile/gql_definitions/ocm_labels/organizations.py +5 -5
- reconcile/gql_definitions/openshift_cluster_bots/clusters.py +5 -5
- reconcile/gql_definitions/openshift_groups/managed_groups.py +5 -5
- reconcile/gql_definitions/openshift_groups/managed_roles.py +5 -5
- reconcile/gql_definitions/openshift_serviceaccount_tokens/tokens.py +5 -5
- reconcile/gql_definitions/quay_membership/quay_membership.py +5 -5
- reconcile/gql_definitions/rhcs/certs.py +5 -5
- reconcile/gql_definitions/rhidp/organizations.py +5 -5
- reconcile/gql_definitions/service_dependencies/jenkins_instance_fragment.py +5 -5
- reconcile/gql_definitions/service_dependencies/service_dependencies.py +5 -5
- reconcile/gql_definitions/sharding/aws_accounts.py +5 -5
- reconcile/gql_definitions/sharding/ocm_organization.py +5 -5
- reconcile/gql_definitions/skupper_network/site_controller_template.py +5 -5
- reconcile/gql_definitions/skupper_network/skupper_networks.py +5 -5
- reconcile/gql_definitions/slack_usergroups/clusters.py +5 -5
- reconcile/gql_definitions/slack_usergroups/permissions.py +5 -5
- 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 +5 -5
- reconcile/gql_definitions/statuspage/statuspages.py +5 -5
- 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 +5 -5
- reconcile/gql_definitions/terraform_cloudflare_dns/terraform_cloudflare_zones.py +5 -5
- reconcile/gql_definitions/terraform_cloudflare_resources/terraform_cloudflare_accounts.py +5 -5
- reconcile/gql_definitions/terraform_cloudflare_resources/terraform_cloudflare_resources.py +5 -5
- reconcile/gql_definitions/terraform_cloudflare_users/app_interface_setting_cloudflare_and_vault.py +5 -5
- reconcile/gql_definitions/terraform_cloudflare_users/terraform_cloudflare_roles.py +5 -5
- reconcile/gql_definitions/terraform_init/aws_accounts.py +19 -5
- reconcile/gql_definitions/terraform_repo/terraform_repo.py +5 -5
- reconcile/gql_definitions/terraform_resources/database_access_manager.py +5 -5
- reconcile/gql_definitions/terraform_resources/terraform_resources_namespaces.py +38 -6
- reconcile/gql_definitions/terraform_tgw_attachments/aws_accounts.py +15 -5
- reconcile/gql_definitions/unleash_feature_toggles/feature_toggles.py +5 -5
- reconcile/gql_definitions/vault_instances/vault_instances.py +5 -5
- reconcile/gql_definitions/vault_policies/vault_policies.py +5 -5
- reconcile/gql_definitions/vpc_peerings_validator/vpc_peerings_validator.py +5 -5
- reconcile/gql_definitions/vpc_peerings_validator/vpc_peerings_validator_peered_cluster_fragment.py +5 -5
- reconcile/integrations_manager.py +3 -3
- reconcile/jenkins_worker_fleets.py +10 -8
- 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 +23 -23
- reconcile/openshift_base.py +53 -2
- reconcile/openshift_cluster_bots.py +3 -2
- reconcile/openshift_namespace_labels.py +1 -1
- reconcile/openshift_namespaces.py +97 -101
- reconcile/openshift_resources_base.py +6 -2
- reconcile/openshift_rhcs_certs.py +5 -5
- reconcile/openshift_rolebindings.py +7 -11
- 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 +2 -2
- reconcile/openshift_upgrade_watcher.py +4 -4
- reconcile/oum/labelset.py +5 -3
- reconcile/oum/models.py +1 -4
- reconcile/prometheus_rules_tester/integration.py +3 -3
- reconcile/quay_mirror.py +1 -1
- reconcile/queries.py +131 -1
- reconcile/rhidp/common.py +3 -5
- reconcile/rhidp/sso_client/base.py +1 -1
- reconcile/saas_auto_promotions_manager/merge_request_manager/renderer.py +1 -1
- reconcile/saas_auto_promotions_manager/subscriber.py +4 -3
- reconcile/skupper_network/integration.py +2 -2
- reconcile/slack_usergroups.py +35 -14
- reconcile/sql_query.py +1 -0
- 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 +4 -0
- reconcile/templates/rosa-hcp-cluster-creation.sh.j2 +3 -0
- reconcile/templating/lib/rendering.py +3 -3
- reconcile/templating/renderer.py +4 -3
- reconcile/terraform_aws_route53.py +7 -1
- reconcile/terraform_cloudflare_dns.py +3 -3
- reconcile/terraform_cloudflare_resources.py +5 -5
- reconcile/terraform_cloudflare_users.py +3 -2
- reconcile/terraform_init/integration.py +187 -23
- reconcile/terraform_repo.py +16 -12
- reconcile/terraform_resources.py +17 -7
- reconcile/terraform_tgw_attachments.py +27 -19
- reconcile/terraform_users.py +7 -0
- reconcile/terraform_vpc_peerings.py +14 -3
- reconcile/terraform_vpc_resources/integration.py +10 -1
- 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 -54
- 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/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/gql.py +4 -7
- reconcile/utils/helm.py +2 -1
- reconcile/utils/helpers.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/jinja2/utils.py +6 -101
- reconcile/utils/jira_client.py +82 -63
- reconcile/utils/jjb_client.py +9 -12
- reconcile/utils/jobcontroller/controller.py +1 -1
- reconcile/utils/jobcontroller/models.py +17 -1
- reconcile/utils/json.py +70 -0
- 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/app_interface_reporter.py +2 -2
- reconcile/utils/mr/base.py +2 -2
- reconcile/utils/mr/notificator.py +3 -3
- reconcile/utils/mr/update_access_report_base.py +3 -4
- reconcile/utils/mr/user_maintenance.py +3 -2
- reconcile/utils/oc.py +118 -97
- reconcile/utils/oc_filters.py +3 -3
- reconcile/utils/ocm/addons.py +0 -1
- reconcile/utils/ocm/base.py +17 -20
- 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/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/openshift_resource.py +10 -5
- 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 +1 -1
- reconcile/utils/rhcsv2_certs.py +1 -4
- reconcile/utils/runtime/integration.py +2 -3
- 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 +35 -24
- reconcile/utils/slack_api.py +26 -4
- reconcile/utils/sloth.py +171 -2
- reconcile/utils/sqs_gateway.py +2 -1
- reconcile/utils/state.py +2 -1
- reconcile/utils/structs.py +1 -1
- reconcile/utils/terraform_client.py +5 -4
- reconcile/utils/terrascript_aws_client.py +171 -114
- reconcile/utils/unleash/server.py +2 -8
- reconcile/utils/vault.py +5 -12
- reconcile/utils/vcs.py +8 -8
- reconcile/vault_replication.py +107 -42
- 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 +3 -1
- tools/cli_commands/systems_and_tools.py +5 -1
- tools/qontract_cli.py +31 -18
- tools/template_validation.py +3 -1
- {qontract_reconcile-0.10.2.dev349.dist-info → qontract_reconcile-0.10.2.dev414.dist-info}/WHEEL +0 -0
- {qontract_reconcile-0.10.2.dev349.dist-info → qontract_reconcile-0.10.2.dev414.dist-info}/entry_points.txt +0 -0
|
@@ -33,14 +33,11 @@ QONTRACT_INTEGRATION = "openshift-rolebindings"
|
|
|
33
33
|
QONTRACT_INTEGRATION_VERSION = make_semver(0, 3, 0)
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
class OCResource(BaseModel):
|
|
36
|
+
class OCResource(BaseModel, arbitrary_types_allowed=True):
|
|
37
37
|
resource: OR
|
|
38
38
|
resource_name: str
|
|
39
39
|
privileged: bool
|
|
40
40
|
|
|
41
|
-
class Config:
|
|
42
|
-
arbitrary_types_allowed = True
|
|
43
|
-
|
|
44
41
|
|
|
45
42
|
@dataclass
|
|
46
43
|
class ServiceAccountSpec:
|
|
@@ -61,7 +58,7 @@ class ServiceAccountSpec:
|
|
|
61
58
|
]
|
|
62
59
|
|
|
63
60
|
|
|
64
|
-
class RoleBindingSpec(BaseModel):
|
|
61
|
+
class RoleBindingSpec(BaseModel, validate_by_alias=True, arbitrary_types_allowed=True):
|
|
65
62
|
role_name: str
|
|
66
63
|
role_kind: str
|
|
67
64
|
namespace: NamespaceV1
|
|
@@ -70,9 +67,6 @@ class RoleBindingSpec(BaseModel):
|
|
|
70
67
|
usernames: set[str]
|
|
71
68
|
openshift_service_accounts: list[ServiceAccountSpec]
|
|
72
69
|
|
|
73
|
-
class Config:
|
|
74
|
-
arbitrary_types_allowed = True
|
|
75
|
-
|
|
76
70
|
def get_users_desired_state(self) -> list[dict[str, str]]:
|
|
77
71
|
return [
|
|
78
72
|
{"cluster": self.cluster.name, "user": username}
|
|
@@ -93,7 +87,9 @@ class RoleBindingSpec(BaseModel):
|
|
|
93
87
|
if not (access.role or access.cluster_role):
|
|
94
88
|
return None
|
|
95
89
|
privileged = access.namespace.cluster_admin or False
|
|
96
|
-
auth_dict = [
|
|
90
|
+
auth_dict = [
|
|
91
|
+
auth.model_dump(by_alias=True) for auth in access.namespace.cluster.auth
|
|
92
|
+
]
|
|
97
93
|
usernames = RoleBindingSpec.get_usernames_from_users(
|
|
98
94
|
users,
|
|
99
95
|
ob.determine_user_keys_for_access(
|
|
@@ -290,7 +286,7 @@ def is_valid_namespace(namespace: NamespaceV1 | CommonNamespaceV1) -> bool:
|
|
|
290
286
|
return (
|
|
291
287
|
bool(namespace.managed_roles)
|
|
292
288
|
and is_in_shard(f"{namespace.cluster.name}/{namespace.name}")
|
|
293
|
-
and not ob.is_namespace_deleted(namespace.
|
|
289
|
+
and not ob.is_namespace_deleted(namespace.model_dump(by_alias=True))
|
|
294
290
|
)
|
|
295
291
|
|
|
296
292
|
|
|
@@ -304,7 +300,7 @@ def run(
|
|
|
304
300
|
defer: Callable | None = None,
|
|
305
301
|
) -> None:
|
|
306
302
|
namespaces = [
|
|
307
|
-
namespace.
|
|
303
|
+
namespace.model_dump(by_alias=True, exclude={"openshift_resources"})
|
|
308
304
|
for namespace in get_namespaces()
|
|
309
305
|
if is_valid_namespace(namespace)
|
|
310
306
|
]
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import json
|
|
2
1
|
import logging
|
|
3
2
|
import os
|
|
4
3
|
import sys
|
|
@@ -28,6 +27,7 @@ from reconcile.typed_queries.saas_files import (
|
|
|
28
27
|
from reconcile.utils.constants import DEFAULT_THREAD_POOL_SIZE
|
|
29
28
|
from reconcile.utils.defer import defer
|
|
30
29
|
from reconcile.utils.gitlab_api import GitLabApi
|
|
30
|
+
from reconcile.utils.json import json_dumps
|
|
31
31
|
from reconcile.utils.openshift_resource import ResourceInventory
|
|
32
32
|
from reconcile.utils.saasherder import SaasHerder
|
|
33
33
|
from reconcile.utils.secret_reader import create_secret_reader
|
|
@@ -150,7 +150,7 @@ def run(
|
|
|
150
150
|
+ "when using slack notifications"
|
|
151
151
|
)
|
|
152
152
|
slack = slackapi_from_slack_workspace(
|
|
153
|
-
saas_file.slack.
|
|
153
|
+
saas_file.slack.model_dump(by_alias=True),
|
|
154
154
|
secret_reader,
|
|
155
155
|
QONTRACT_INTEGRATION,
|
|
156
156
|
init_usergroups=False,
|
|
@@ -224,7 +224,7 @@ def run(
|
|
|
224
224
|
default=False,
|
|
225
225
|
)
|
|
226
226
|
ri, oc_map = ob.fetch_current_state(
|
|
227
|
-
namespaces=[ns.
|
|
227
|
+
namespaces=[ns.model_dump(by_alias=True) for ns in saasherder.namespaces],
|
|
228
228
|
thread_pool_size=thread_pool_size,
|
|
229
229
|
integration=QONTRACT_INTEGRATION,
|
|
230
230
|
integration_version=QONTRACT_INTEGRATION_VERSION,
|
|
@@ -319,14 +319,13 @@ def run(
|
|
|
319
319
|
openshift_saas_deploy_trigger_upstream_jobs.QONTRACT_INTEGRATION,
|
|
320
320
|
openshift_saas_deploy_trigger_images.QONTRACT_INTEGRATION,
|
|
321
321
|
]
|
|
322
|
-
|
|
322
|
+
if (
|
|
323
323
|
not dry_run
|
|
324
324
|
and len(saas_files) == 1
|
|
325
325
|
and trigger_integration
|
|
326
326
|
and trigger_integration in allowed_integration
|
|
327
327
|
and trigger_reason
|
|
328
|
-
)
|
|
329
|
-
if scan:
|
|
328
|
+
):
|
|
330
329
|
saas_file = saas_files[0]
|
|
331
330
|
owners = saas_file.app.service_owners or []
|
|
332
331
|
emails = " ".join([o.email for o in owners])
|
|
@@ -346,4 +345,4 @@ def run(
|
|
|
346
345
|
if image_auth.auth_server:
|
|
347
346
|
json_file = os.path.join(io_dir, "dockerconfigjson")
|
|
348
347
|
with open(json_file, "w", encoding="locale") as f:
|
|
349
|
-
f.write(
|
|
348
|
+
f.write(json_dumps(image_auth.get_docker_config_json(), indent=2))
|
|
@@ -34,7 +34,7 @@ class Definition(BaseModel):
|
|
|
34
34
|
class State(BaseModel):
|
|
35
35
|
saas_file_path: str
|
|
36
36
|
saas_file_name: str
|
|
37
|
-
saas_file_deploy_resources: DeployResourcesV1 | None
|
|
37
|
+
saas_file_deploy_resources: DeployResourcesV1 | None = None
|
|
38
38
|
resource_template_name: str
|
|
39
39
|
cluster: str
|
|
40
40
|
namespace: str
|
|
@@ -44,10 +44,10 @@ class State(BaseModel):
|
|
|
44
44
|
parameters: dict[str, Any]
|
|
45
45
|
secret_parameters: dict[str, VaultSecret]
|
|
46
46
|
saas_file_definitions: Definition
|
|
47
|
-
upstream: SaasResourceTemplateTargetUpstreamV1 | None
|
|
48
|
-
disable: bool | None
|
|
49
|
-
delete: bool | None
|
|
50
|
-
target_path: str | None
|
|
47
|
+
upstream: SaasResourceTemplateTargetUpstreamV1 | None = None
|
|
48
|
+
disable: bool | None = None
|
|
49
|
+
delete: bool | None = None
|
|
50
|
+
target_path: str | None = None
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
def osd_run_wrapper(
|
|
@@ -213,11 +213,13 @@ def run(
|
|
|
213
213
|
saas_file_list = SaasFileList()
|
|
214
214
|
desired_saas_file_state = collect_state(saas_file_list.saas_files)
|
|
215
215
|
# compare dicts against dicts which is much faster than comparing BaseModel objects
|
|
216
|
-
comparison_saas_file_state_dicts = [
|
|
216
|
+
comparison_saas_file_state_dicts = [
|
|
217
|
+
s.model_dump() for s in comparison_saas_file_state
|
|
218
|
+
]
|
|
217
219
|
saas_file_state_diffs = [
|
|
218
220
|
s
|
|
219
221
|
for s in desired_saas_file_state
|
|
220
|
-
if s.
|
|
222
|
+
if s.model_dump() not in comparison_saas_file_state_dicts
|
|
221
223
|
]
|
|
222
224
|
if not saas_file_state_diffs:
|
|
223
225
|
return
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from collections.abc import Callable
|
|
3
3
|
from datetime import (
|
|
4
|
-
UTC,
|
|
5
4
|
datetime,
|
|
6
5
|
timedelta,
|
|
7
6
|
)
|
|
8
7
|
from typing import Any
|
|
9
8
|
|
|
10
|
-
from dateutil import parser
|
|
11
|
-
|
|
12
9
|
from reconcile.gql_definitions.fragments.pipeline_provider_retention import (
|
|
13
10
|
PipelineProviderRetention,
|
|
14
11
|
)
|
|
@@ -19,6 +16,7 @@ from reconcile.typed_queries.tekton_pipeline_providers import (
|
|
|
19
16
|
get_tekton_pipeline_providers,
|
|
20
17
|
)
|
|
21
18
|
from reconcile.utils.constants import DEFAULT_THREAD_POOL_SIZE
|
|
19
|
+
from reconcile.utils.datetime_util import from_utc_iso_format, utc_now
|
|
22
20
|
from reconcile.utils.defer import defer
|
|
23
21
|
from reconcile.utils.oc_map import (
|
|
24
22
|
OCLogMsg,
|
|
@@ -35,7 +33,7 @@ def within_retention_days(
|
|
|
35
33
|
resource: dict[str, Any], days: int, now_date: datetime
|
|
36
34
|
) -> bool:
|
|
37
35
|
metadata = resource["metadata"]
|
|
38
|
-
creation_date =
|
|
36
|
+
creation_date = from_utc_iso_format(metadata["creationTimestamp"])
|
|
39
37
|
interval = now_date.timestamp() - creation_date.timestamp()
|
|
40
38
|
|
|
41
39
|
return interval < timedelta(days=days).total_seconds()
|
|
@@ -69,7 +67,7 @@ def run(
|
|
|
69
67
|
use_jump_host: bool = True,
|
|
70
68
|
defer: Callable | None = None,
|
|
71
69
|
) -> None:
|
|
72
|
-
now_date =
|
|
70
|
+
now_date = utc_now()
|
|
73
71
|
vault_settings = get_app_interface_vault_settings()
|
|
74
72
|
secret_reader = create_secret_reader(use_vault=vault_settings.vault)
|
|
75
73
|
pipeline_providers = get_tekton_pipeline_providers()
|
|
@@ -177,7 +177,7 @@ def canonicalize_namespaces(namespaces: Iterable[NamespaceV1]) -> list[Namespace
|
|
|
177
177
|
key = f"{sat.namespace.cluster.name}/{sat.namespace.name}"
|
|
178
178
|
if key not in canonicalized_namespaces:
|
|
179
179
|
canonicalized_namespaces[key] = NamespaceV1(
|
|
180
|
-
**sat.namespace.
|
|
180
|
+
**sat.namespace.model_dump(by_alias=True),
|
|
181
181
|
sharedResources=None,
|
|
182
182
|
openshiftServiceAccountTokens=None,
|
|
183
183
|
)
|
|
@@ -217,7 +217,7 @@ def run(
|
|
|
217
217
|
get_namespaces_with_serviceaccount_tokens(gql_api.query)
|
|
218
218
|
)
|
|
219
219
|
ri, oc_map = ob.fetch_current_state(
|
|
220
|
-
namespaces=[ns.
|
|
220
|
+
namespaces=[ns.model_dump(by_alias=True) for ns in namespaces],
|
|
221
221
|
thread_pool_size=thread_pool_size,
|
|
222
222
|
integration=QONTRACT_INTEGRATION,
|
|
223
223
|
integration_version=QONTRACT_INTEGRATION_VERSION,
|
|
@@ -3,7 +3,6 @@ from collections.abc import (
|
|
|
3
3
|
Callable,
|
|
4
4
|
Iterable,
|
|
5
5
|
)
|
|
6
|
-
from datetime import datetime
|
|
7
6
|
|
|
8
7
|
from reconcile import queries
|
|
9
8
|
from reconcile.gql_definitions.common.clusters import ClusterV1
|
|
@@ -13,6 +12,7 @@ from reconcile.typed_queries.app_interface_vault_settings import (
|
|
|
13
12
|
)
|
|
14
13
|
from reconcile.typed_queries.clusters import get_clusters
|
|
15
14
|
from reconcile.utils.constants import DEFAULT_THREAD_POOL_SIZE
|
|
15
|
+
from reconcile.utils.datetime_util import from_utc_iso_format, utc_now
|
|
16
16
|
from reconcile.utils.defer import defer
|
|
17
17
|
from reconcile.utils.oc_map import (
|
|
18
18
|
OCLogMsg,
|
|
@@ -101,7 +101,7 @@ def notify_upgrades_start(
|
|
|
101
101
|
state: State,
|
|
102
102
|
slack: SlackApi | None,
|
|
103
103
|
) -> None:
|
|
104
|
-
now =
|
|
104
|
+
now = utc_now()
|
|
105
105
|
for cluster in clusters:
|
|
106
106
|
if cluster.spec and not cluster.spec.hypershift:
|
|
107
107
|
upgrade_at, version = _get_start_osd(oc_map, cluster.name)
|
|
@@ -113,7 +113,7 @@ def notify_upgrades_start(
|
|
|
113
113
|
continue
|
|
114
114
|
|
|
115
115
|
if upgrade_at and version:
|
|
116
|
-
upgrade_at_obj =
|
|
116
|
+
upgrade_at_obj = from_utc_iso_format(upgrade_at)
|
|
117
117
|
state_key = f"{cluster.name}-{upgrade_at}1"
|
|
118
118
|
# if this is the first iteration in which 'now' had passed
|
|
119
119
|
# the upgrade at date time, we send a notification
|
|
@@ -185,7 +185,7 @@ def run(
|
|
|
185
185
|
if defer:
|
|
186
186
|
defer(oc_map.cleanup)
|
|
187
187
|
|
|
188
|
-
cluster_like_objects = [cluster.
|
|
188
|
+
cluster_like_objects = [cluster.model_dump(by_alias=True) for cluster in clusters]
|
|
189
189
|
ocm_map = OCMMap(
|
|
190
190
|
clusters=cluster_like_objects,
|
|
191
191
|
integration=QONTRACT_INTEGRATION,
|
reconcile/oum/labelset.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from collections import defaultdict
|
|
2
|
+
from typing import Annotated
|
|
2
3
|
|
|
3
4
|
from pydantic import BaseModel
|
|
4
5
|
|
|
@@ -22,9 +23,10 @@ class _GroupMappingLabelset(BaseModel):
|
|
|
22
23
|
the sre-capabilities.user-mgmt.$provider prefix.
|
|
23
24
|
"""
|
|
24
25
|
|
|
25
|
-
authz_roles:
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
authz_roles: Annotated[
|
|
27
|
+
dict[str, CSV] | None,
|
|
28
|
+
sre_capability_labels.labelset_groupfield(group_prefix="authz."),
|
|
29
|
+
]
|
|
28
30
|
|
|
29
31
|
|
|
30
32
|
def build_cluster_config_from_labels(
|
reconcile/oum/models.py
CHANGED
|
@@ -56,7 +56,7 @@ class ClusterUserManagementSpec(BaseModel):
|
|
|
56
56
|
errors: list[ClusterError] = Field(default_factory=list)
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
class ClusterRoleReconcileResult(BaseModel):
|
|
59
|
+
class ClusterRoleReconcileResult(BaseModel, arbitrary_types_allowed=True):
|
|
60
60
|
"""
|
|
61
61
|
Holds the result of a cluster role reconciliation.
|
|
62
62
|
"""
|
|
@@ -64,6 +64,3 @@ class ClusterRoleReconcileResult(BaseModel):
|
|
|
64
64
|
users_added: int = 0
|
|
65
65
|
users_removed: int = 0
|
|
66
66
|
error: Exception | None = None
|
|
67
|
-
|
|
68
|
-
class Config:
|
|
69
|
-
arbitrary_types_allowed = True
|
|
@@ -56,7 +56,7 @@ class Test(BaseModel):
|
|
|
56
56
|
rule_path: str
|
|
57
57
|
rule: dict
|
|
58
58
|
rule_length: int
|
|
59
|
-
tests: list[TestContent] | None
|
|
59
|
+
tests: list[TestContent] | None = None
|
|
60
60
|
result: CommandExecutionResult | None = None
|
|
61
61
|
promtool_version: str
|
|
62
62
|
|
|
@@ -76,7 +76,7 @@ def fetch_rule_and_tests(
|
|
|
76
76
|
openshift_resource = orb.fetch_openshift_resource(
|
|
77
77
|
resource=rule.resource,
|
|
78
78
|
parent=rule.namespace,
|
|
79
|
-
settings=vault_settings.
|
|
79
|
+
settings=vault_settings.model_dump(by_alias=True),
|
|
80
80
|
)
|
|
81
81
|
|
|
82
82
|
rule_body = openshift_resource.body
|
|
@@ -96,7 +96,7 @@ def fetch_rule_and_tests(
|
|
|
96
96
|
test_raw_yaml = process_extracurlyjinja2_template(
|
|
97
97
|
body=test_raw_yaml,
|
|
98
98
|
vars=variables,
|
|
99
|
-
settings=vault_settings.
|
|
99
|
+
settings=vault_settings.model_dump(by_alias=True),
|
|
100
100
|
)
|
|
101
101
|
|
|
102
102
|
test_yaml_spec = yaml.safe_load(test_raw_yaml)
|
reconcile/quay_mirror.py
CHANGED
reconcile/queries.py
CHANGED
|
@@ -476,8 +476,13 @@ AWS_ACCOUNTS_QUERY = """
|
|
|
476
476
|
disable {
|
|
477
477
|
integrations
|
|
478
478
|
}
|
|
479
|
-
disableKeys
|
|
480
479
|
deleteKeys
|
|
480
|
+
organization {
|
|
481
|
+
payerAccount {
|
|
482
|
+
organizationAccountTags
|
|
483
|
+
}
|
|
484
|
+
tags
|
|
485
|
+
}
|
|
481
486
|
{% if reset_passwords %}
|
|
482
487
|
resetPasswords {
|
|
483
488
|
user {
|
|
@@ -500,6 +505,12 @@ AWS_ACCOUNTS_QUERY = """
|
|
|
500
505
|
name
|
|
501
506
|
uid
|
|
502
507
|
supportedDeploymentRegions
|
|
508
|
+
organization {
|
|
509
|
+
payerAccount {
|
|
510
|
+
organizationAccountTags
|
|
511
|
+
}
|
|
512
|
+
tags
|
|
513
|
+
}
|
|
503
514
|
}
|
|
504
515
|
... on AWSAccountSharingOptionAMI_v1 {
|
|
505
516
|
regex
|
|
@@ -607,6 +618,12 @@ awsInfrastructureManagementAccounts {
|
|
|
607
618
|
version
|
|
608
619
|
format
|
|
609
620
|
}
|
|
621
|
+
organization {
|
|
622
|
+
payerAccount {
|
|
623
|
+
organizationAccountTags
|
|
624
|
+
}
|
|
625
|
+
tags
|
|
626
|
+
}
|
|
610
627
|
}
|
|
611
628
|
accessLevel
|
|
612
629
|
default
|
|
@@ -637,6 +654,12 @@ awsInfrastructureAccess {
|
|
|
637
654
|
version
|
|
638
655
|
format
|
|
639
656
|
}
|
|
657
|
+
organization {
|
|
658
|
+
payerAccount {
|
|
659
|
+
organizationAccountTags
|
|
660
|
+
}
|
|
661
|
+
tags
|
|
662
|
+
}
|
|
640
663
|
}
|
|
641
664
|
roles {
|
|
642
665
|
users {
|
|
@@ -746,6 +769,12 @@ CLUSTERS_QUERY = """
|
|
|
746
769
|
version
|
|
747
770
|
format
|
|
748
771
|
}
|
|
772
|
+
organization {
|
|
773
|
+
payerAccount {
|
|
774
|
+
organizationAccountTags
|
|
775
|
+
}
|
|
776
|
+
tags
|
|
777
|
+
}
|
|
749
778
|
rosa {
|
|
750
779
|
ocm_environments {
|
|
751
780
|
ocm {
|
|
@@ -774,6 +803,7 @@ CLUSTERS_QUERY = """
|
|
|
774
803
|
private
|
|
775
804
|
provision_shard_id
|
|
776
805
|
disable_user_workload_monitoring
|
|
806
|
+
fips
|
|
777
807
|
}
|
|
778
808
|
externalConfiguration {
|
|
779
809
|
labels
|
|
@@ -830,6 +860,12 @@ CLUSTERS_QUERY = """
|
|
|
830
860
|
version
|
|
831
861
|
format
|
|
832
862
|
}
|
|
863
|
+
organization {
|
|
864
|
+
payerAccount {
|
|
865
|
+
organizationAccountTags
|
|
866
|
+
}
|
|
867
|
+
tags
|
|
868
|
+
}
|
|
833
869
|
}
|
|
834
870
|
vpc_id
|
|
835
871
|
cidr_block
|
|
@@ -848,6 +884,12 @@ CLUSTERS_QUERY = """
|
|
|
848
884
|
version
|
|
849
885
|
format
|
|
850
886
|
}
|
|
887
|
+
organization {
|
|
888
|
+
payerAccount {
|
|
889
|
+
organizationAccountTags
|
|
890
|
+
}
|
|
891
|
+
tags
|
|
892
|
+
}
|
|
851
893
|
}
|
|
852
894
|
tags
|
|
853
895
|
}
|
|
@@ -862,6 +904,12 @@ CLUSTERS_QUERY = """
|
|
|
862
904
|
version
|
|
863
905
|
format
|
|
864
906
|
}
|
|
907
|
+
organization {
|
|
908
|
+
payerAccount {
|
|
909
|
+
organizationAccountTags
|
|
910
|
+
}
|
|
911
|
+
tags
|
|
912
|
+
}
|
|
865
913
|
}
|
|
866
914
|
tags
|
|
867
915
|
cidrBlock
|
|
@@ -890,6 +938,12 @@ CLUSTERS_QUERY = """
|
|
|
890
938
|
version
|
|
891
939
|
format
|
|
892
940
|
}
|
|
941
|
+
organization {
|
|
942
|
+
payerAccount {
|
|
943
|
+
organizationAccountTags
|
|
944
|
+
}
|
|
945
|
+
tags
|
|
946
|
+
}
|
|
893
947
|
}
|
|
894
948
|
}
|
|
895
949
|
accessLevel
|
|
@@ -915,6 +969,12 @@ CLUSTERS_QUERY = """
|
|
|
915
969
|
version
|
|
916
970
|
format
|
|
917
971
|
}
|
|
972
|
+
organization {
|
|
973
|
+
payerAccount {
|
|
974
|
+
organizationAccountTags
|
|
975
|
+
}
|
|
976
|
+
tags
|
|
977
|
+
}
|
|
918
978
|
}
|
|
919
979
|
}
|
|
920
980
|
}
|
|
@@ -1068,6 +1128,12 @@ CLUSTER_PEERING_QUERY = """
|
|
|
1068
1128
|
version
|
|
1069
1129
|
format
|
|
1070
1130
|
}
|
|
1131
|
+
organization {
|
|
1132
|
+
payerAccount {
|
|
1133
|
+
organizationAccountTags
|
|
1134
|
+
}
|
|
1135
|
+
tags
|
|
1136
|
+
}
|
|
1071
1137
|
}
|
|
1072
1138
|
accessLevel
|
|
1073
1139
|
default
|
|
@@ -1089,6 +1155,12 @@ CLUSTER_PEERING_QUERY = """
|
|
|
1089
1155
|
version
|
|
1090
1156
|
format
|
|
1091
1157
|
}
|
|
1158
|
+
organization {
|
|
1159
|
+
payerAccount {
|
|
1160
|
+
organizationAccountTags
|
|
1161
|
+
}
|
|
1162
|
+
tags
|
|
1163
|
+
}
|
|
1092
1164
|
}
|
|
1093
1165
|
}
|
|
1094
1166
|
}
|
|
@@ -1113,6 +1185,12 @@ CLUSTER_PEERING_QUERY = """
|
|
|
1113
1185
|
version
|
|
1114
1186
|
format
|
|
1115
1187
|
}
|
|
1188
|
+
organization {
|
|
1189
|
+
payerAccount {
|
|
1190
|
+
organizationAccountTags
|
|
1191
|
+
}
|
|
1192
|
+
tags
|
|
1193
|
+
}
|
|
1116
1194
|
}
|
|
1117
1195
|
vpc_id
|
|
1118
1196
|
cidr_block
|
|
@@ -1132,6 +1210,12 @@ CLUSTER_PEERING_QUERY = """
|
|
|
1132
1210
|
version
|
|
1133
1211
|
format
|
|
1134
1212
|
}
|
|
1213
|
+
organization {
|
|
1214
|
+
payerAccount {
|
|
1215
|
+
organizationAccountTags
|
|
1216
|
+
}
|
|
1217
|
+
tags
|
|
1218
|
+
}
|
|
1135
1219
|
}
|
|
1136
1220
|
tags
|
|
1137
1221
|
assumeRole
|
|
@@ -1147,6 +1231,12 @@ CLUSTER_PEERING_QUERY = """
|
|
|
1147
1231
|
version
|
|
1148
1232
|
format
|
|
1149
1233
|
}
|
|
1234
|
+
organization {
|
|
1235
|
+
payerAccount {
|
|
1236
|
+
organizationAccountTags
|
|
1237
|
+
}
|
|
1238
|
+
tags
|
|
1239
|
+
}
|
|
1150
1240
|
}
|
|
1151
1241
|
tags
|
|
1152
1242
|
cidrBlock
|
|
@@ -1176,6 +1266,12 @@ CLUSTER_PEERING_QUERY = """
|
|
|
1176
1266
|
version
|
|
1177
1267
|
format
|
|
1178
1268
|
}
|
|
1269
|
+
organization {
|
|
1270
|
+
payerAccount {
|
|
1271
|
+
organizationAccountTags
|
|
1272
|
+
}
|
|
1273
|
+
tags
|
|
1274
|
+
}
|
|
1179
1275
|
}
|
|
1180
1276
|
}
|
|
1181
1277
|
}
|
|
@@ -1191,6 +1287,12 @@ CLUSTER_PEERING_QUERY = """
|
|
|
1191
1287
|
version
|
|
1192
1288
|
format
|
|
1193
1289
|
}
|
|
1290
|
+
organization {
|
|
1291
|
+
payerAccount {
|
|
1292
|
+
organizationAccountTags
|
|
1293
|
+
}
|
|
1294
|
+
tags
|
|
1295
|
+
}
|
|
1194
1296
|
}
|
|
1195
1297
|
accessLevel
|
|
1196
1298
|
default
|
|
@@ -1217,6 +1319,12 @@ CLUSTER_PEERING_QUERY = """
|
|
|
1217
1319
|
version
|
|
1218
1320
|
format
|
|
1219
1321
|
}
|
|
1322
|
+
organization {
|
|
1323
|
+
payerAccount {
|
|
1324
|
+
organizationAccountTags
|
|
1325
|
+
}
|
|
1326
|
+
tags
|
|
1327
|
+
}
|
|
1220
1328
|
}
|
|
1221
1329
|
}
|
|
1222
1330
|
}
|
|
@@ -1232,6 +1340,12 @@ CLUSTER_PEERING_QUERY = """
|
|
|
1232
1340
|
version
|
|
1233
1341
|
format
|
|
1234
1342
|
}
|
|
1343
|
+
organization {
|
|
1344
|
+
payerAccount {
|
|
1345
|
+
organizationAccountTags
|
|
1346
|
+
}
|
|
1347
|
+
tags
|
|
1348
|
+
}
|
|
1235
1349
|
}
|
|
1236
1350
|
}
|
|
1237
1351
|
}
|
|
@@ -2231,6 +2345,12 @@ JIRA_BOARDS_QUICK_QUERY = """
|
|
|
2231
2345
|
version
|
|
2232
2346
|
format
|
|
2233
2347
|
}
|
|
2348
|
+
email {
|
|
2349
|
+
path
|
|
2350
|
+
field
|
|
2351
|
+
version
|
|
2352
|
+
format
|
|
2353
|
+
}
|
|
2234
2354
|
}
|
|
2235
2355
|
}
|
|
2236
2356
|
}
|
|
@@ -2337,6 +2457,12 @@ DNS_ZONES_QUERY = """
|
|
|
2337
2457
|
version
|
|
2338
2458
|
format
|
|
2339
2459
|
}
|
|
2460
|
+
organization {
|
|
2461
|
+
payerAccount {
|
|
2462
|
+
organizationAccountTags
|
|
2463
|
+
}
|
|
2464
|
+
tags
|
|
2465
|
+
}
|
|
2340
2466
|
}
|
|
2341
2467
|
vpc {
|
|
2342
2468
|
vpc_id
|
|
@@ -2698,6 +2824,10 @@ APP_METADATA = """
|
|
|
2698
2824
|
path
|
|
2699
2825
|
field
|
|
2700
2826
|
}
|
|
2827
|
+
email {
|
|
2828
|
+
path
|
|
2829
|
+
field
|
|
2830
|
+
}
|
|
2701
2831
|
}
|
|
2702
2832
|
}
|
|
2703
2833
|
slackUserGroup {
|
reconcile/rhidp/common.py
CHANGED
|
@@ -7,10 +7,7 @@ from enum import StrEnum
|
|
|
7
7
|
from typing import Any
|
|
8
8
|
from urllib.parse import urlparse
|
|
9
9
|
|
|
10
|
-
from pydantic import
|
|
11
|
-
BaseModel,
|
|
12
|
-
root_validator,
|
|
13
|
-
)
|
|
10
|
+
from pydantic import BaseModel, model_validator
|
|
14
11
|
|
|
15
12
|
from reconcile.gql_definitions.common.ocm_environments import (
|
|
16
13
|
query as ocm_environment_query,
|
|
@@ -63,7 +60,8 @@ class ClusterAuth(BaseModel):
|
|
|
63
60
|
issuer: str
|
|
64
61
|
status: str
|
|
65
62
|
|
|
66
|
-
@
|
|
63
|
+
@model_validator(mode="before")
|
|
64
|
+
@classmethod
|
|
67
65
|
def name_no_spaces(
|
|
68
66
|
cls, values: MutableMapping[str, Any]
|
|
69
67
|
) -> MutableMapping[str, Any]:
|
|
@@ -177,7 +177,7 @@ def is_namespace_addressed_by_selector(
|
|
|
177
177
|
# json representation of namespace to filter on
|
|
178
178
|
# remove all the None values to simplify the jsonpath expressions
|
|
179
179
|
namespace_as_dict = {
|
|
180
|
-
"namespace": [namespace.
|
|
180
|
+
"namespace": [namespace.model_dump(by_alias=True, exclude_none=True)]
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
do_include = any(
|
|
@@ -2,7 +2,7 @@ import hashlib
|
|
|
2
2
|
import logging
|
|
3
3
|
from collections.abc import Iterable
|
|
4
4
|
from dataclasses import dataclass
|
|
5
|
-
from datetime import
|
|
5
|
+
from datetime import timedelta
|
|
6
6
|
|
|
7
7
|
from croniter import croniter
|
|
8
8
|
|
|
@@ -13,6 +13,7 @@ from reconcile.saas_auto_promotions_manager.publisher import (
|
|
|
13
13
|
DeploymentInfo,
|
|
14
14
|
Publisher,
|
|
15
15
|
)
|
|
16
|
+
from reconcile.utils.datetime_util import utc_now
|
|
16
17
|
from reconcile.utils.slo_document_manager import SLODocumentManager
|
|
17
18
|
|
|
18
19
|
CONTENT_HASH_LENGTH = 32
|
|
@@ -113,7 +114,7 @@ class Subscriber:
|
|
|
113
114
|
We accumulate the time a ref is running on all publishers for this subscriber.
|
|
114
115
|
We compare that accumulated time with the soak_days setting of the subscriber.
|
|
115
116
|
"""
|
|
116
|
-
now =
|
|
117
|
+
now = utc_now()
|
|
117
118
|
delta = timedelta(days=0)
|
|
118
119
|
for channel in self.channels:
|
|
119
120
|
for publisher in channel.publishers:
|
|
@@ -136,7 +137,7 @@ class Subscriber:
|
|
|
136
137
|
self.schedule,
|
|
137
138
|
)
|
|
138
139
|
return False
|
|
139
|
-
return croniter.match(self.schedule,
|
|
140
|
+
return croniter.match(self.schedule, utc_now(), day_or=False)
|
|
140
141
|
|
|
141
142
|
def _compute_desired_ref(self) -> None:
|
|
142
143
|
"""
|