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.

Files changed (400) hide show
  1. {qontract_reconcile-0.10.2.dev310.dist-info → qontract_reconcile-0.10.2.dev439.dist-info}/METADATA +13 -12
  2. {qontract_reconcile-0.10.2.dev310.dist-info → qontract_reconcile-0.10.2.dev439.dist-info}/RECORD +396 -391
  3. reconcile/acs_rbac.py +2 -2
  4. reconcile/aus/advanced_upgrade_service.py +18 -12
  5. reconcile/aus/base.py +134 -32
  6. reconcile/aus/cluster_version_data.py +15 -5
  7. reconcile/aus/models.py +3 -1
  8. reconcile/aus/ocm_addons_upgrade_scheduler_org.py +1 -0
  9. reconcile/aus/ocm_upgrade_scheduler.py +8 -1
  10. reconcile/aus/ocm_upgrade_scheduler_org.py +20 -5
  11. reconcile/aus/version_gates/sts_version_gate_handler.py +54 -1
  12. reconcile/automated_actions/config/integration.py +16 -4
  13. reconcile/aws_account_manager/integration.py +8 -8
  14. reconcile/aws_account_manager/reconciler.py +3 -3
  15. reconcile/aws_ami_cleanup/integration.py +8 -12
  16. reconcile/aws_ami_share.py +69 -62
  17. reconcile/aws_cloudwatch_log_retention/integration.py +155 -126
  18. reconcile/aws_ecr_image_pull_secrets.py +5 -5
  19. reconcile/aws_iam_keys.py +1 -0
  20. reconcile/aws_saml_idp/integration.py +12 -4
  21. reconcile/aws_saml_roles/integration.py +32 -25
  22. reconcile/aws_version_sync/integration.py +125 -84
  23. reconcile/change_owners/bundle.py +3 -3
  24. reconcile/change_owners/change_log_tracking.py +3 -2
  25. reconcile/change_owners/change_owners.py +1 -1
  26. reconcile/change_owners/diff.py +2 -4
  27. reconcile/checkpoint.py +12 -4
  28. reconcile/cli.py +111 -18
  29. reconcile/cluster_deployment_mapper.py +2 -3
  30. reconcile/dashdotdb_dora.py +5 -12
  31. reconcile/dashdotdb_slo.py +1 -1
  32. reconcile/database_access_manager.py +125 -121
  33. reconcile/deadmanssnitch.py +1 -5
  34. reconcile/dynatrace_token_provider/integration.py +1 -1
  35. reconcile/endpoints_discovery/integration.py +4 -1
  36. reconcile/endpoints_discovery/merge_request.py +1 -1
  37. reconcile/endpoints_discovery/merge_request_manager.py +9 -11
  38. reconcile/external_resources/factories.py +5 -12
  39. reconcile/external_resources/integration.py +1 -1
  40. reconcile/external_resources/manager.py +8 -5
  41. reconcile/external_resources/meta.py +0 -1
  42. reconcile/external_resources/metrics.py +1 -1
  43. reconcile/external_resources/model.py +20 -20
  44. reconcile/external_resources/reconciler.py +7 -4
  45. reconcile/external_resources/secrets_sync.py +10 -14
  46. reconcile/external_resources/state.py +26 -16
  47. reconcile/fleet_labeler/integration.py +1 -1
  48. reconcile/gabi_authorized_users.py +8 -5
  49. reconcile/gcp_image_mirror.py +2 -2
  50. reconcile/github_org.py +1 -1
  51. reconcile/github_owners.py +4 -0
  52. reconcile/gitlab_housekeeping.py +13 -15
  53. reconcile/gitlab_members.py +6 -12
  54. reconcile/gitlab_mr_sqs_consumer.py +2 -2
  55. reconcile/gitlab_owners.py +15 -11
  56. reconcile/gitlab_permissions.py +8 -12
  57. reconcile/glitchtip_project_alerts/integration.py +3 -1
  58. reconcile/gql_definitions/acs/acs_instances.py +10 -10
  59. reconcile/gql_definitions/acs/acs_policies.py +5 -5
  60. reconcile/gql_definitions/acs/acs_rbac.py +6 -6
  61. reconcile/gql_definitions/advanced_upgrade_service/aus_clusters.py +32 -32
  62. reconcile/gql_definitions/advanced_upgrade_service/aus_organization.py +26 -26
  63. reconcile/gql_definitions/app_interface_metrics_exporter/onboarding_status.py +6 -7
  64. reconcile/gql_definitions/app_sre_tekton_access_revalidation/roles.py +5 -5
  65. reconcile/gql_definitions/app_sre_tekton_access_revalidation/users.py +5 -5
  66. reconcile/gql_definitions/automated_actions/instance.py +51 -12
  67. reconcile/gql_definitions/aws_account_manager/aws_accounts.py +11 -11
  68. reconcile/gql_definitions/aws_ami_cleanup/aws_accounts.py +20 -10
  69. reconcile/gql_definitions/aws_cloudwatch_log_retention/aws_accounts.py +28 -68
  70. reconcile/gql_definitions/aws_saml_idp/aws_accounts.py +20 -10
  71. reconcile/gql_definitions/aws_saml_roles/aws_accounts.py +20 -10
  72. reconcile/gql_definitions/aws_saml_roles/roles.py +5 -5
  73. reconcile/gql_definitions/aws_version_sync/clusters.py +10 -10
  74. reconcile/gql_definitions/aws_version_sync/namespaces.py +5 -5
  75. reconcile/gql_definitions/change_owners/queries/change_types.py +5 -5
  76. reconcile/gql_definitions/change_owners/queries/self_service_roles.py +9 -9
  77. reconcile/gql_definitions/cluster_auth_rhidp/clusters.py +18 -18
  78. reconcile/gql_definitions/common/alerting_services_settings.py +9 -9
  79. reconcile/gql_definitions/common/app_code_component_repos.py +5 -5
  80. reconcile/gql_definitions/common/app_interface_custom_messages.py +5 -5
  81. reconcile/gql_definitions/common/app_interface_dms_settings.py +5 -5
  82. reconcile/gql_definitions/common/app_interface_repo_settings.py +5 -5
  83. reconcile/gql_definitions/common/app_interface_roles.py +120 -0
  84. reconcile/gql_definitions/common/app_interface_state_settings.py +10 -10
  85. reconcile/gql_definitions/common/app_interface_vault_settings.py +5 -5
  86. reconcile/gql_definitions/common/app_quay_repos_escalation_policies.py +5 -5
  87. reconcile/gql_definitions/common/apps.py +5 -5
  88. reconcile/gql_definitions/common/aws_vpc_requests.py +22 -9
  89. reconcile/gql_definitions/common/aws_vpcs.py +11 -11
  90. reconcile/gql_definitions/common/clusters.py +37 -35
  91. reconcile/gql_definitions/common/clusters_minimal.py +14 -14
  92. reconcile/gql_definitions/common/clusters_with_dms.py +6 -6
  93. reconcile/gql_definitions/common/clusters_with_peering.py +29 -30
  94. reconcile/gql_definitions/common/github_orgs.py +10 -10
  95. reconcile/gql_definitions/common/jira_settings.py +10 -10
  96. reconcile/gql_definitions/common/jiralert_settings.py +5 -5
  97. reconcile/gql_definitions/common/ldap_settings.py +5 -5
  98. reconcile/gql_definitions/common/namespaces.py +42 -44
  99. reconcile/gql_definitions/common/namespaces_minimal.py +15 -13
  100. reconcile/gql_definitions/common/ocm_env_telemeter.py +12 -12
  101. reconcile/gql_definitions/common/ocm_environments.py +19 -19
  102. reconcile/gql_definitions/common/pagerduty_instances.py +9 -9
  103. reconcile/gql_definitions/common/pgp_reencryption_settings.py +6 -6
  104. reconcile/gql_definitions/common/pipeline_providers.py +29 -29
  105. reconcile/gql_definitions/common/quay_instances.py +5 -5
  106. reconcile/gql_definitions/common/quay_orgs.py +5 -5
  107. reconcile/gql_definitions/common/reserved_networks.py +5 -5
  108. reconcile/gql_definitions/common/rhcs_provider_settings.py +5 -5
  109. reconcile/gql_definitions/common/saas_files.py +44 -44
  110. reconcile/gql_definitions/common/saas_target_namespaces.py +10 -10
  111. reconcile/gql_definitions/common/saasherder_settings.py +5 -5
  112. reconcile/gql_definitions/common/slack_workspaces.py +5 -5
  113. reconcile/gql_definitions/common/smtp_client_settings.py +19 -19
  114. reconcile/gql_definitions/common/state_aws_account.py +7 -8
  115. reconcile/gql_definitions/common/users.py +5 -5
  116. reconcile/gql_definitions/common/users_with_paths.py +5 -5
  117. reconcile/gql_definitions/cost_report/app_names.py +5 -5
  118. reconcile/gql_definitions/cost_report/cost_namespaces.py +5 -5
  119. reconcile/gql_definitions/cost_report/settings.py +9 -9
  120. reconcile/gql_definitions/dashdotdb_slo/slo_documents_query.py +43 -43
  121. reconcile/gql_definitions/dynatrace_token_provider/dynatrace_bootstrap_tokens.py +10 -10
  122. reconcile/gql_definitions/dynatrace_token_provider/token_specs.py +5 -5
  123. reconcile/gql_definitions/email_sender/apps.py +5 -5
  124. reconcile/gql_definitions/email_sender/emails.py +8 -8
  125. reconcile/gql_definitions/email_sender/users.py +6 -6
  126. reconcile/gql_definitions/endpoints_discovery/apps.py +10 -10
  127. reconcile/gql_definitions/external_resources/aws_accounts.py +9 -9
  128. reconcile/gql_definitions/external_resources/external_resources_modules.py +23 -23
  129. reconcile/gql_definitions/external_resources/external_resources_namespaces.py +494 -410
  130. reconcile/gql_definitions/external_resources/external_resources_settings.py +28 -26
  131. reconcile/gql_definitions/external_resources/fragments/external_resources_module_overrides.py +5 -5
  132. reconcile/gql_definitions/fleet_labeler/fleet_labels.py +40 -40
  133. reconcile/gql_definitions/fragments/aus_organization.py +5 -5
  134. reconcile/gql_definitions/fragments/aws_account_common.py +7 -5
  135. reconcile/gql_definitions/fragments/aws_account_managed.py +5 -5
  136. reconcile/gql_definitions/fragments/aws_account_sso.py +5 -5
  137. reconcile/gql_definitions/fragments/aws_infra_management_account.py +5 -5
  138. reconcile/gql_definitions/fragments/{aws_vpc_request_subnet.py → aws_organization.py} +12 -8
  139. reconcile/gql_definitions/fragments/aws_vpc.py +5 -5
  140. reconcile/gql_definitions/fragments/aws_vpc_request.py +12 -5
  141. reconcile/gql_definitions/fragments/container_image_mirror.py +5 -5
  142. reconcile/gql_definitions/fragments/deploy_resources.py +5 -5
  143. reconcile/gql_definitions/fragments/disable.py +5 -5
  144. reconcile/gql_definitions/fragments/email_service.py +5 -5
  145. reconcile/gql_definitions/fragments/email_user.py +5 -5
  146. reconcile/gql_definitions/fragments/jumphost_common_fields.py +5 -5
  147. reconcile/gql_definitions/fragments/membership_source.py +5 -5
  148. reconcile/gql_definitions/fragments/minimal_ocm_organization.py +5 -5
  149. reconcile/gql_definitions/fragments/oc_connection_cluster.py +5 -5
  150. reconcile/gql_definitions/fragments/ocm_environment.py +5 -5
  151. reconcile/gql_definitions/fragments/pipeline_provider_retention.py +5 -5
  152. reconcile/gql_definitions/fragments/prometheus_instance.py +5 -5
  153. reconcile/gql_definitions/fragments/resource_limits_requirements.py +5 -5
  154. reconcile/gql_definitions/fragments/resource_requests_requirements.py +5 -5
  155. reconcile/gql_definitions/fragments/resource_values.py +5 -5
  156. reconcile/gql_definitions/fragments/saas_slo_document.py +5 -5
  157. reconcile/gql_definitions/fragments/saas_target_namespace.py +5 -5
  158. reconcile/gql_definitions/fragments/serviceaccount_token.py +5 -5
  159. reconcile/gql_definitions/fragments/terraform_state.py +5 -5
  160. reconcile/gql_definitions/fragments/upgrade_policy.py +5 -5
  161. reconcile/gql_definitions/fragments/user.py +5 -5
  162. reconcile/gql_definitions/fragments/vault_secret.py +5 -5
  163. reconcile/gql_definitions/gcp/gcp_docker_repos.py +9 -9
  164. reconcile/gql_definitions/gcp/gcp_projects.py +9 -9
  165. reconcile/gql_definitions/gitlab_members/gitlab_instances.py +9 -9
  166. reconcile/gql_definitions/gitlab_members/permissions.py +9 -9
  167. reconcile/gql_definitions/glitchtip/glitchtip_instance.py +9 -9
  168. reconcile/gql_definitions/glitchtip/glitchtip_project.py +11 -11
  169. reconcile/gql_definitions/glitchtip_project_alerts/glitchtip_project.py +9 -9
  170. reconcile/gql_definitions/integrations/integrations.py +48 -51
  171. reconcile/gql_definitions/introspection.json +3510 -1865
  172. reconcile/gql_definitions/jenkins_configs/jenkins_configs.py +11 -11
  173. reconcile/gql_definitions/jenkins_configs/jenkins_instances.py +10 -10
  174. reconcile/gql_definitions/jira/jira_servers.py +5 -5
  175. reconcile/gql_definitions/jira_permissions_validator/jira_boards_for_permissions_validator.py +14 -10
  176. reconcile/gql_definitions/jumphosts/jumphosts.py +13 -13
  177. reconcile/gql_definitions/ldap_groups/roles.py +5 -5
  178. reconcile/gql_definitions/ldap_groups/settings.py +9 -9
  179. reconcile/gql_definitions/maintenance/maintenances.py +5 -5
  180. reconcile/gql_definitions/membershipsources/roles.py +5 -5
  181. reconcile/gql_definitions/ocm_labels/clusters.py +18 -19
  182. reconcile/gql_definitions/ocm_labels/organizations.py +5 -5
  183. reconcile/gql_definitions/openshift_cluster_bots/clusters.py +22 -22
  184. reconcile/gql_definitions/openshift_groups/managed_groups.py +5 -5
  185. reconcile/gql_definitions/openshift_groups/managed_roles.py +6 -6
  186. reconcile/gql_definitions/openshift_serviceaccount_tokens/tokens.py +10 -10
  187. reconcile/gql_definitions/quay_membership/quay_membership.py +6 -6
  188. reconcile/gql_definitions/rhcs/certs.py +33 -87
  189. reconcile/gql_definitions/rhcs/openshift_resource_rhcs_cert.py +43 -0
  190. reconcile/gql_definitions/rhidp/organizations.py +18 -18
  191. reconcile/gql_definitions/service_dependencies/jenkins_instance_fragment.py +5 -5
  192. reconcile/gql_definitions/service_dependencies/service_dependencies.py +8 -8
  193. reconcile/gql_definitions/sharding/aws_accounts.py +10 -10
  194. reconcile/gql_definitions/sharding/ocm_organization.py +8 -8
  195. reconcile/gql_definitions/skupper_network/site_controller_template.py +5 -5
  196. reconcile/gql_definitions/skupper_network/skupper_networks.py +10 -10
  197. reconcile/gql_definitions/slack_usergroups/clusters.py +5 -5
  198. reconcile/gql_definitions/slack_usergroups/permissions.py +9 -9
  199. reconcile/gql_definitions/slack_usergroups/users.py +5 -5
  200. reconcile/gql_definitions/slo_documents/slo_documents.py +5 -5
  201. reconcile/gql_definitions/status_board/status_board.py +6 -7
  202. reconcile/gql_definitions/statuspage/statuspages.py +9 -9
  203. reconcile/gql_definitions/templating/template_collection.py +5 -5
  204. reconcile/gql_definitions/templating/templates.py +5 -5
  205. reconcile/gql_definitions/terraform_cloudflare_dns/app_interface_cloudflare_dns_settings.py +6 -6
  206. reconcile/gql_definitions/terraform_cloudflare_dns/terraform_cloudflare_zones.py +11 -11
  207. reconcile/gql_definitions/terraform_cloudflare_resources/terraform_cloudflare_accounts.py +11 -11
  208. reconcile/gql_definitions/terraform_cloudflare_resources/terraform_cloudflare_resources.py +20 -25
  209. reconcile/gql_definitions/terraform_cloudflare_users/app_interface_setting_cloudflare_and_vault.py +6 -6
  210. reconcile/gql_definitions/terraform_cloudflare_users/terraform_cloudflare_roles.py +12 -12
  211. reconcile/gql_definitions/terraform_init/aws_accounts.py +23 -9
  212. reconcile/gql_definitions/terraform_repo/terraform_repo.py +9 -9
  213. reconcile/gql_definitions/terraform_resources/database_access_manager.py +5 -5
  214. reconcile/gql_definitions/terraform_resources/terraform_resources_namespaces.py +450 -402
  215. reconcile/gql_definitions/terraform_tgw_attachments/aws_accounts.py +23 -17
  216. reconcile/gql_definitions/unleash_feature_toggles/feature_toggles.py +9 -9
  217. reconcile/gql_definitions/vault_instances/vault_instances.py +61 -61
  218. reconcile/gql_definitions/vault_policies/vault_policies.py +11 -11
  219. reconcile/gql_definitions/vpc_peerings_validator/vpc_peerings_validator.py +8 -8
  220. reconcile/gql_definitions/vpc_peerings_validator/vpc_peerings_validator_peered_cluster_fragment.py +5 -5
  221. reconcile/integrations_manager.py +3 -3
  222. reconcile/jenkins_job_builder.py +1 -1
  223. reconcile/jenkins_worker_fleets.py +80 -11
  224. reconcile/jira_permissions_validator.py +237 -122
  225. reconcile/ldap_groups/integration.py +1 -1
  226. reconcile/ocm/types.py +35 -56
  227. reconcile/ocm_aws_infrastructure_access.py +1 -1
  228. reconcile/ocm_clusters.py +4 -4
  229. reconcile/ocm_labels/integration.py +3 -2
  230. reconcile/ocm_machine_pools.py +33 -27
  231. reconcile/openshift_base.py +122 -10
  232. reconcile/openshift_cluster_bots.py +5 -5
  233. reconcile/openshift_groups.py +5 -0
  234. reconcile/openshift_limitranges.py +1 -1
  235. reconcile/openshift_namespace_labels.py +1 -1
  236. reconcile/openshift_namespaces.py +97 -101
  237. reconcile/openshift_resources_base.py +10 -5
  238. reconcile/openshift_rhcs_certs.py +77 -40
  239. reconcile/openshift_rolebindings.py +230 -130
  240. reconcile/openshift_saas_deploy.py +6 -7
  241. reconcile/openshift_saas_deploy_change_tester.py +9 -7
  242. reconcile/openshift_saas_deploy_trigger_cleaner.py +3 -5
  243. reconcile/openshift_serviceaccount_tokens.py +8 -7
  244. reconcile/openshift_tekton_resources.py +1 -1
  245. reconcile/openshift_upgrade_watcher.py +4 -4
  246. reconcile/openshift_users.py +5 -3
  247. reconcile/oum/labelset.py +5 -3
  248. reconcile/oum/models.py +1 -4
  249. reconcile/oum/providers.py +1 -1
  250. reconcile/prometheus_rules_tester/integration.py +4 -4
  251. reconcile/quay_mirror.py +1 -1
  252. reconcile/queries.py +131 -0
  253. reconcile/requests_sender.py +8 -3
  254. reconcile/resource_scraper.py +1 -5
  255. reconcile/rhidp/common.py +3 -5
  256. reconcile/rhidp/sso_client/base.py +19 -10
  257. reconcile/saas_auto_promotions_manager/merge_request_manager/renderer.py +1 -1
  258. reconcile/saas_auto_promotions_manager/subscriber.py +4 -3
  259. reconcile/sendgrid_teammates.py +20 -9
  260. reconcile/skupper_network/integration.py +2 -2
  261. reconcile/slack_usergroups.py +35 -14
  262. reconcile/sql_query.py +1 -0
  263. reconcile/status.py +2 -2
  264. reconcile/status_board.py +6 -6
  265. reconcile/statuspage/atlassian.py +7 -7
  266. reconcile/statuspage/integrations/maintenances.py +4 -3
  267. reconcile/statuspage/page.py +4 -9
  268. reconcile/statuspage/status.py +5 -8
  269. reconcile/templates/rosa-classic-cluster-creation.sh.j2 +5 -1
  270. reconcile/templates/rosa-hcp-cluster-creation.sh.j2 +4 -1
  271. reconcile/templating/lib/merge_request_manager.py +2 -2
  272. reconcile/templating/lib/rendering.py +3 -3
  273. reconcile/templating/renderer.py +12 -13
  274. reconcile/terraform_aws_route53.py +18 -8
  275. reconcile/terraform_cloudflare_dns.py +3 -3
  276. reconcile/terraform_cloudflare_resources.py +12 -13
  277. reconcile/terraform_cloudflare_users.py +3 -2
  278. reconcile/terraform_init/integration.py +187 -23
  279. reconcile/terraform_repo.py +16 -12
  280. reconcile/terraform_resources.py +18 -10
  281. reconcile/terraform_tgw_attachments.py +28 -20
  282. reconcile/terraform_users.py +27 -22
  283. reconcile/terraform_vpc_peerings.py +15 -3
  284. reconcile/terraform_vpc_resources/integration.py +23 -8
  285. reconcile/typed_queries/app_interface_roles.py +10 -0
  286. reconcile/typed_queries/aws_account_tags.py +41 -0
  287. reconcile/typed_queries/cost_report/app_names.py +1 -1
  288. reconcile/typed_queries/cost_report/cost_namespaces.py +2 -2
  289. reconcile/typed_queries/saas_files.py +13 -13
  290. reconcile/typed_queries/status_board.py +2 -2
  291. reconcile/unleash_feature_toggles/integration.py +4 -2
  292. reconcile/utils/acs/base.py +6 -3
  293. reconcile/utils/acs/policies.py +2 -2
  294. reconcile/utils/aggregated_list.py +4 -3
  295. reconcile/utils/aws_api.py +51 -20
  296. reconcile/utils/aws_api_typed/api.py +38 -9
  297. reconcile/utils/aws_api_typed/cloudformation.py +149 -0
  298. reconcile/utils/aws_api_typed/logs.py +73 -0
  299. reconcile/utils/aws_api_typed/organization.py +4 -2
  300. reconcile/utils/binary.py +7 -12
  301. reconcile/utils/datetime_util.py +67 -0
  302. reconcile/utils/deadmanssnitch_api.py +1 -1
  303. reconcile/utils/differ.py +2 -3
  304. reconcile/utils/early_exit_cache.py +11 -12
  305. reconcile/utils/expiration.py +7 -3
  306. reconcile/utils/external_resource_spec.py +24 -1
  307. reconcile/utils/filtering.py +1 -1
  308. reconcile/utils/gitlab_api.py +7 -5
  309. reconcile/utils/glitchtip/client.py +6 -2
  310. reconcile/utils/glitchtip/models.py +25 -28
  311. reconcile/utils/gpg.py +5 -3
  312. reconcile/utils/gql.py +4 -7
  313. reconcile/utils/helm.py +2 -1
  314. reconcile/utils/helpers.py +1 -1
  315. reconcile/utils/imap_client.py +1 -1
  316. reconcile/utils/instrumented_wrappers.py +1 -1
  317. reconcile/utils/internal_groups/client.py +2 -2
  318. reconcile/utils/internal_groups/models.py +8 -17
  319. reconcile/utils/jenkins_api.py +24 -1
  320. reconcile/utils/jinja2/utils.py +6 -8
  321. reconcile/utils/jira_client.py +82 -63
  322. reconcile/utils/jjb_client.py +78 -46
  323. reconcile/utils/jobcontroller/controller.py +2 -2
  324. reconcile/utils/jobcontroller/models.py +17 -1
  325. reconcile/utils/json.py +74 -0
  326. reconcile/utils/ldap_client.py +4 -3
  327. reconcile/utils/lean_terraform_client.py +3 -1
  328. reconcile/utils/membershipsources/app_interface_resolver.py +4 -2
  329. reconcile/utils/membershipsources/models.py +16 -23
  330. reconcile/utils/membershipsources/resolver.py +4 -2
  331. reconcile/utils/merge_request_manager/merge_request_manager.py +4 -4
  332. reconcile/utils/merge_request_manager/parser.py +6 -6
  333. reconcile/utils/metrics.py +5 -5
  334. reconcile/utils/models.py +304 -82
  335. reconcile/utils/mr/__init__.py +3 -1
  336. reconcile/utils/mr/app_interface_reporter.py +6 -3
  337. reconcile/utils/mr/aws_access.py +1 -1
  338. reconcile/utils/mr/base.py +7 -13
  339. reconcile/utils/mr/clusters_updates.py +4 -2
  340. reconcile/utils/mr/notificator.py +3 -3
  341. reconcile/utils/mr/ocm_upgrade_scheduler_org_updates.py +4 -1
  342. reconcile/utils/mr/promote_qontract.py +28 -12
  343. reconcile/utils/mr/update_access_report_base.py +3 -4
  344. reconcile/utils/mr/user_maintenance.py +7 -6
  345. reconcile/utils/oc.py +445 -336
  346. reconcile/utils/oc_filters.py +3 -3
  347. reconcile/utils/ocm/addons.py +0 -1
  348. reconcile/utils/ocm/base.py +18 -21
  349. reconcile/utils/ocm/cluster_groups.py +1 -1
  350. reconcile/utils/ocm/identity_providers.py +2 -2
  351. reconcile/utils/ocm/labels.py +1 -1
  352. reconcile/utils/ocm/ocm.py +81 -71
  353. reconcile/utils/ocm/products.py +9 -3
  354. reconcile/utils/ocm/search_filters.py +3 -6
  355. reconcile/utils/ocm/service_log.py +4 -6
  356. reconcile/utils/ocm/sre_capability_labels.py +20 -13
  357. reconcile/utils/ocm_base_client.py +4 -4
  358. reconcile/utils/openshift_resource.py +83 -52
  359. reconcile/utils/openssl.py +2 -2
  360. reconcile/utils/output.py +3 -2
  361. reconcile/utils/pagerduty_api.py +10 -7
  362. reconcile/utils/promotion_state.py +6 -11
  363. reconcile/utils/raw_github_api.py +11 -8
  364. reconcile/utils/repo_owners.py +21 -29
  365. reconcile/utils/rhcsv2_certs.py +138 -35
  366. reconcile/utils/rosa/session.py +16 -0
  367. reconcile/utils/runtime/integration.py +2 -3
  368. reconcile/utils/runtime/meta.py +2 -1
  369. reconcile/utils/runtime/runner.py +2 -2
  370. reconcile/utils/saasherder/interfaces.py +13 -20
  371. reconcile/utils/saasherder/models.py +25 -21
  372. reconcile/utils/saasherder/saasherder.py +60 -32
  373. reconcile/utils/secret_reader.py +6 -6
  374. reconcile/utils/sharding.py +1 -1
  375. reconcile/utils/slack_api.py +26 -4
  376. reconcile/utils/sloth.py +224 -0
  377. reconcile/utils/sqs_gateway.py +16 -11
  378. reconcile/utils/state.py +2 -1
  379. reconcile/utils/structs.py +1 -1
  380. reconcile/utils/terraform_client.py +29 -26
  381. reconcile/utils/terrascript_aws_client.py +200 -116
  382. reconcile/utils/three_way_diff_strategy.py +1 -1
  383. reconcile/utils/unleash/server.py +2 -8
  384. reconcile/utils/vault.py +44 -41
  385. reconcile/utils/vcs.py +8 -8
  386. reconcile/vault_replication.py +119 -58
  387. tools/app_interface_reporter.py +4 -4
  388. tools/cli_commands/cost_report/cost_management_api.py +3 -3
  389. tools/cli_commands/cost_report/view.py +7 -6
  390. tools/cli_commands/erv2.py +1 -1
  391. tools/cli_commands/gpg_encrypt.py +4 -1
  392. tools/cli_commands/systems_and_tools.py +5 -1
  393. tools/qontract_cli.py +36 -21
  394. tools/template_validation.py +3 -1
  395. reconcile/gql_definitions/ocm_oidc_idp/__init__.py +0 -0
  396. reconcile/gql_definitions/ocm_subscription_labels/__init__.py +0 -0
  397. reconcile/jenkins/__init__.py +0 -0
  398. reconcile/jenkins/types.py +0 -77
  399. {qontract_reconcile-0.10.2.dev310.dist-info → qontract_reconcile-0.10.2.dev439.dist-info}/WHEEL +0 -0
  400. {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.16.2", "4.12.46", "4.10.15"]
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(json.dumps(gqlapi.get_queried_schemas()))
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, thread_pool_size: int, internal: bool, use_jump_host: bool
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, jira_board_name: Iterable[str] | None, board_check_interval: int
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, thread_pool_size: int) -> None:
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, ctx, thread_pool_size
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-data-path",
2169
- help="Path to data dir in app-interface repo. Use this for local rendering or in MR checks.",
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="APP_INTERFACE_DATA_PATH",
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
- app_interface_data_path: str | None,
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
- app_interface_data_path=app_interface_data_path,
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 AdvancedUpgradeServiceIntegration
2832
- from reconcile.aus.base import AdvancedUpgradeSchedulerBaseIntegrationParams
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
- # mypy doesn't like our fancy way of creating a VaultClient
64
- vault_client.write(secret, decode_base64=False) # type: ignore[attr-defined]
63
+ vault_client.write(secret, decode_base64=False)
@@ -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 = datetime.now() - timedelta(days=90)
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 [
@@ -119,4 +119,4 @@ def run(
119
119
 
120
120
 
121
121
  def early_exit_desired_state(*args: Any, **kwargs: Any) -> dict[str, Any]:
122
- return {doc.name: doc.dict() for doc in get_slo_documents()}
122
+ return {doc.name: doc.model_dump() for doc in get_slo_documents()}