qontract-reconcile 0.10.2.dev299__py3-none-any.whl → 0.10.2.dev430__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.
Files changed (403) hide show
  1. {qontract_reconcile-0.10.2.dev299.dist-info → qontract_reconcile-0.10.2.dev430.dist-info}/METADATA +13 -12
  2. {qontract_reconcile-0.10.2.dev299.dist-info → qontract_reconcile-0.10.2.dev430.dist-info}/RECORD +399 -394
  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 +4 -4
  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 +8 -11
  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 +23 -10
  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 +492 -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 +10 -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 +3050 -1393
  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 +448 -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 +5 -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 +4 -0
  270. reconcile/templates/rosa-hcp-cluster-creation.sh.j2 +3 -0
  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 +27 -19
  282. reconcile/terraform_users.py +29 -21
  283. reconcile/terraform_vpc_peerings.py +16 -4
  284. reconcile/terraform_vpc_resources/integration.py +32 -2
  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 +59 -43
  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 +27 -20
  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 +4 -4
  380. reconcile/utils/terraform_client.py +32 -29
  381. reconcile/utils/terrascript_aws_client.py +658 -480
  382. reconcile/utils/three_way_diff_strategy.py +1 -1
  383. reconcile/utils/throughput.py +1 -1
  384. reconcile/utils/unleash/server.py +2 -8
  385. reconcile/utils/vault.py +44 -41
  386. reconcile/utils/vcs.py +8 -8
  387. reconcile/vault_replication.py +119 -58
  388. reconcile/vpc_peerings_validator.py +2 -2
  389. tools/app_interface_reporter.py +4 -4
  390. tools/cli_commands/cost_report/cost_management_api.py +3 -3
  391. tools/cli_commands/cost_report/view.py +7 -6
  392. tools/cli_commands/erv2.py +1 -1
  393. tools/cli_commands/gpg_encrypt.py +4 -1
  394. tools/cli_commands/systems_and_tools.py +5 -1
  395. tools/qontract_cli.py +36 -21
  396. tools/sre_checkpoints/util.py +5 -3
  397. tools/template_validation.py +3 -1
  398. reconcile/gql_definitions/ocm_oidc_idp/__init__.py +0 -0
  399. reconcile/gql_definitions/ocm_subscription_labels/__init__.py +0 -0
  400. reconcile/jenkins/__init__.py +0 -0
  401. reconcile/jenkins/types.py +0 -77
  402. {qontract_reconcile-0.10.2.dev299.dist-info → qontract_reconcile-0.10.2.dev430.dist-info}/WHEEL +0 -0
  403. {qontract_reconcile-0.10.2.dev299.dist-info → qontract_reconcile-0.10.2.dev430.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,5 @@
1
1
  """
2
- Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY!
2
+ Generated by qenerate plugin=pydantic_v2. DO NOT MODIFY MANUALLY!
3
3
  """
4
4
  from collections.abc import Callable # noqa: F401 # pylint: disable=W0611
5
5
  from datetime import datetime # noqa: F401 # pylint: disable=W0611
@@ -12,7 +12,7 @@ from typing import ( # noqa: F401 # pylint: disable=W0611
12
12
 
13
13
  from pydantic import ( # noqa: F401 # pylint: disable=W0611
14
14
  BaseModel,
15
- Extra,
15
+ ConfigDict,
16
16
  Field,
17
17
  Json,
18
18
  )
@@ -37,7 +37,7 @@ fragment AWSAccountCommon on AWSAccount_v1 {
37
37
  email
38
38
  }
39
39
  automationToken {
40
- ... VaultSecret
40
+ ...VaultSecret
41
41
  }
42
42
  enableDeletion
43
43
  deletionApprovals {
@@ -51,6 +51,16 @@ fragment AWSAccountCommon on AWSAccount_v1 {
51
51
  deleteKeys
52
52
  premiumSupport
53
53
  partition
54
+ organization {
55
+ ...AWSOrganization
56
+ }
57
+ }
58
+
59
+ fragment AWSOrganization on AWSOrganization_v1 {
60
+ payerAccount {
61
+ organizationAccountTags
62
+ }
63
+ tags
54
64
  }
55
65
 
56
66
  fragment TerraformState on TerraformStateAWS_v1 {
@@ -64,21 +74,17 @@ fragment TerraformState on TerraformStateAWS_v1 {
64
74
  }
65
75
 
66
76
  fragment VaultSecret on VaultSecret_v1 {
67
- path
68
- field
69
- version
70
- format
77
+ path
78
+ field
79
+ version
80
+ format
71
81
  }
72
82
 
73
83
  query AWSAccounts($name: String) {
74
- accounts: awsaccounts_v1
75
- (
76
- name: $name
77
- )
78
- {
79
- ... AWSAccountCommon
84
+ accounts: awsaccounts_v1(name: $name) {
85
+ ...AWSAccountCommon
80
86
  terraformState {
81
- ... TerraformState
87
+ ...TerraformState
82
88
  }
83
89
  }
84
90
  }
@@ -86,9 +92,9 @@ query AWSAccounts($name: String) {
86
92
 
87
93
 
88
94
  class ConfiguredBaseModel(BaseModel):
89
- class Config:
90
- smart_union=True
91
- extra=Extra.forbid
95
+ model_config = ConfigDict(
96
+ extra='forbid'
97
+ )
92
98
 
93
99
 
94
100
  class AWSAccountV1(AWSAccountCommon):
@@ -1,5 +1,5 @@
1
1
  """
2
- Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY!
2
+ Generated by qenerate plugin=pydantic_v2. DO NOT MODIFY MANUALLY!
3
3
  """
4
4
  from collections.abc import Callable # noqa: F401 # pylint: disable=W0611
5
5
  from datetime import datetime # noqa: F401 # pylint: disable=W0611
@@ -12,7 +12,7 @@ from typing import ( # noqa: F401 # pylint: disable=W0611
12
12
 
13
13
  from pydantic import ( # noqa: F401 # pylint: disable=W0611
14
14
  BaseModel,
15
- Extra,
15
+ ConfigDict,
16
16
  Field,
17
17
  Json,
18
18
  )
@@ -22,10 +22,10 @@ from reconcile.gql_definitions.fragments.vault_secret import VaultSecret
22
22
 
23
23
  DEFINITION = """
24
24
  fragment VaultSecret on VaultSecret_v1 {
25
- path
26
- field
27
- version
28
- format
25
+ path
26
+ field
27
+ version
28
+ format
29
29
  }
30
30
 
31
31
  query UnleashFeatureToggles {
@@ -57,9 +57,9 @@ query UnleashFeatureToggles {
57
57
 
58
58
 
59
59
  class ConfiguredBaseModel(BaseModel):
60
- class Config:
61
- smart_union=True
62
- extra=Extra.forbid
60
+ model_config = ConfigDict(
61
+ extra='forbid'
62
+ )
63
63
 
64
64
 
65
65
  class UnleashFeatureToggleV1(ConfiguredBaseModel):
@@ -1,5 +1,5 @@
1
1
  """
2
- Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY!
2
+ Generated by qenerate plugin=pydantic_v2. DO NOT MODIFY MANUALLY!
3
3
  """
4
4
  from collections.abc import Callable # noqa: F401 # pylint: disable=W0611
5
5
  from datetime import datetime # noqa: F401 # pylint: disable=W0611
@@ -12,7 +12,7 @@ from typing import ( # noqa: F401 # pylint: disable=W0611
12
12
 
13
13
  from pydantic import ( # noqa: F401 # pylint: disable=W0611
14
14
  BaseModel,
15
- Extra,
15
+ ConfigDict,
16
16
  Field,
17
17
  Json,
18
18
  )
@@ -22,10 +22,10 @@ from reconcile.gql_definitions.fragments.vault_secret import VaultSecret
22
22
 
23
23
  DEFINITION = """
24
24
  fragment VaultSecret on VaultSecret_v1 {
25
- path
26
- field
27
- version
28
- format
25
+ path
26
+ field
27
+ version
28
+ format
29
29
  }
30
30
 
31
31
  query VaultInstances {
@@ -37,77 +37,77 @@ query VaultInstances {
37
37
  provider
38
38
  secretEngine
39
39
  ... on VaultInstanceAuthApprole_v1 {
40
- roleID {
41
- ... VaultSecret
42
- }
43
- secretID {
44
- ... VaultSecret
40
+ roleID {
41
+ ...VaultSecret
42
+ }
43
+ secretID {
44
+ ...VaultSecret
45
+ }
45
46
  }
46
47
  }
47
- }
48
48
  replication {
49
49
  vaultInstance {
50
50
  name
51
51
  address
52
52
  auth {
53
- provider
54
- secretEngine
55
- ... on VaultInstanceAuthApprole_v1 {
56
- roleID {
57
- ... VaultSecret
58
- }
59
- secretID {
60
- ... VaultSecret
61
- }
53
+ provider
54
+ secretEngine
55
+ ... on VaultInstanceAuthApprole_v1 {
56
+ roleID {
57
+ ...VaultSecret
58
+ }
59
+ secretID {
60
+ ...VaultSecret
62
61
  }
63
62
  }
63
+ }
64
64
  }
65
- sourceAuth {
66
- provider
67
- secretEngine
68
- ... on VaultInstanceAuthApprole_v1 {
69
- roleID {
70
- ... VaultSecret
71
- }
72
- secretID {
73
- ... VaultSecret
74
- }
75
- }
76
- }
77
- destAuth {
78
- provider
79
- secretEngine
80
- ... on VaultInstanceAuthApprole_v1 {
81
- roleID {
82
- ... VaultSecret
65
+ sourceAuth {
66
+ provider
67
+ secretEngine
68
+ ... on VaultInstanceAuthApprole_v1 {
69
+ roleID {
70
+ ...VaultSecret
71
+ }
72
+ secretID {
73
+ ...VaultSecret
74
+ }
75
+ }
83
76
  }
84
- secretID {
85
- ... VaultSecret
77
+ destAuth {
78
+ provider
79
+ secretEngine
80
+ ... on VaultInstanceAuthApprole_v1 {
81
+ roleID {
82
+ ...VaultSecret
83
+ }
84
+ secretID {
85
+ ...VaultSecret
86
+ }
87
+ }
86
88
  }
87
- }
88
- }
89
89
  paths {
90
90
  provider
91
- ...on VaultReplicationJenkins_v1 {
92
- jenkinsInstance {
93
- name
94
- serverUrl
95
- }
96
- policy {
97
- name
98
- instance {
91
+ ... on VaultReplicationJenkins_v1 {
92
+ jenkinsInstance {
99
93
  name
100
- address
94
+ serverUrl
95
+ }
96
+ policy {
97
+ name
98
+ instance {
99
+ name
100
+ address
101
+ }
101
102
  }
102
103
  }
103
- }
104
- ...on VaultReplicationPolicy_v1 {
104
+ ... on VaultReplicationPolicy_v1 {
105
105
  policy {
106
+ name
107
+ instance {
106
108
  name
107
- instance {
108
- name
109
- address
110
- }
109
+ address
110
+ }
111
111
  }
112
112
  }
113
113
  }
@@ -118,9 +118,9 @@ query VaultInstances {
118
118
 
119
119
 
120
120
  class ConfiguredBaseModel(BaseModel):
121
- class Config:
122
- smart_union=True
123
- extra=Extra.forbid
121
+ model_config = ConfigDict(
122
+ extra='forbid'
123
+ )
124
124
 
125
125
 
126
126
  class VaultInstanceAuthV1(ConfiguredBaseModel):
@@ -1,5 +1,5 @@
1
1
  """
2
- Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY!
2
+ Generated by qenerate plugin=pydantic_v2. DO NOT MODIFY MANUALLY!
3
3
  """
4
4
  from collections.abc import Callable # noqa: F401 # pylint: disable=W0611
5
5
  from datetime import datetime # noqa: F401 # pylint: disable=W0611
@@ -12,7 +12,7 @@ from typing import ( # noqa: F401 # pylint: disable=W0611
12
12
 
13
13
  from pydantic import ( # noqa: F401 # pylint: disable=W0611
14
14
  BaseModel,
15
- Extra,
15
+ ConfigDict,
16
16
  Field,
17
17
  Json,
18
18
  )
@@ -20,21 +20,21 @@ from pydantic import ( # noqa: F401 # pylint: disable=W0611
20
20
 
21
21
  DEFINITION = """
22
22
  query VaultPolicies {
23
- policy: vault_policies_v1 {
24
- name
25
- instance {
26
- name
27
- }
28
- rules
23
+ policy: vault_policies_v1 {
24
+ name
25
+ instance {
26
+ name
29
27
  }
28
+ rules
29
+ }
30
30
  }
31
31
  """
32
32
 
33
33
 
34
34
  class ConfiguredBaseModel(BaseModel):
35
- class Config:
36
- smart_union=True
37
- extra=Extra.forbid
35
+ model_config = ConfigDict(
36
+ extra='forbid'
37
+ )
38
38
 
39
39
 
40
40
  class VaultInstanceV1(ConfiguredBaseModel):
@@ -1,5 +1,5 @@
1
1
  """
2
- Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY!
2
+ Generated by qenerate plugin=pydantic_v2. DO NOT MODIFY MANUALLY!
3
3
  """
4
4
  from collections.abc import Callable # noqa: F401 # pylint: disable=W0611
5
5
  from datetime import datetime # noqa: F401 # pylint: disable=W0611
@@ -12,7 +12,7 @@ from typing import ( # noqa: F401 # pylint: disable=W0611
12
12
 
13
13
  from pydantic import ( # noqa: F401 # pylint: disable=W0611
14
14
  BaseModel,
15
- Extra,
15
+ ConfigDict,
16
16
  Field,
17
17
  Json,
18
18
  )
@@ -51,7 +51,7 @@ query VpcPeeringsValidator {
51
51
  name
52
52
  }
53
53
  }
54
- ... on ClusterPeeringConnectionAccountVPCMesh_v1{
54
+ ... on ClusterPeeringConnectionAccountVPCMesh_v1 {
55
55
  name
56
56
  account {
57
57
  name
@@ -61,12 +61,12 @@ query VpcPeeringsValidator {
61
61
  }
62
62
  ... on ClusterPeeringConnectionClusterRequester_v1 {
63
63
  cluster {
64
- ... VpcPeeringsValidatorPeeredCluster
64
+ ...VpcPeeringsValidatorPeeredCluster
65
65
  }
66
66
  }
67
67
  ... on ClusterPeeringConnectionClusterAccepter_v1 {
68
68
  cluster {
69
- ... VpcPeeringsValidatorPeeredCluster
69
+ ...VpcPeeringsValidatorPeeredCluster
70
70
  }
71
71
  }
72
72
  }
@@ -77,9 +77,9 @@ query VpcPeeringsValidator {
77
77
 
78
78
 
79
79
  class ConfiguredBaseModel(BaseModel):
80
- class Config:
81
- smart_union=True
82
- extra=Extra.forbid
80
+ model_config = ConfigDict(
81
+ extra='forbid'
82
+ )
83
83
 
84
84
 
85
85
  class ClusterNetworkV1(ConfiguredBaseModel):
@@ -1,5 +1,5 @@
1
1
  """
2
- Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY!
2
+ Generated by qenerate plugin=pydantic_v2. DO NOT MODIFY MANUALLY!
3
3
  """
4
4
  from collections.abc import Callable # noqa: F401 # pylint: disable=W0611
5
5
  from datetime import datetime # noqa: F401 # pylint: disable=W0611
@@ -12,16 +12,16 @@ from typing import ( # noqa: F401 # pylint: disable=W0611
12
12
 
13
13
  from pydantic import ( # noqa: F401 # pylint: disable=W0611
14
14
  BaseModel,
15
- Extra,
15
+ ConfigDict,
16
16
  Field,
17
17
  Json,
18
18
  )
19
19
 
20
20
 
21
21
  class ConfiguredBaseModel(BaseModel):
22
- class Config:
23
- smart_union=True
24
- extra=Extra.forbid
22
+ model_config = ConfigDict(
23
+ extra='forbid'
24
+ )
25
25
 
26
26
 
27
27
  class ClusterNetworkV1(ConfiguredBaseModel):
@@ -122,7 +122,7 @@ def _build_helm_integration_spec(
122
122
  managed: IntegrationManagedV1,
123
123
  shard_manager: IntegrationShardManager,
124
124
  ) -> HelmIntegrationSpec:
125
- integration_spec = managed.spec.dict(by_alias=True)
125
+ integration_spec = managed.spec.model_dump(by_alias=True)
126
126
  shard_specs = shard_manager.build_integration_shards(integration_name, managed)
127
127
  his = HelmIntegrationSpec(
128
128
  **integration_spec, name=integration_name, shard_specs=shard_specs
@@ -143,7 +143,7 @@ def build_helm_values(specs: Iterable[HelmIntegrationSpec]) -> dict:
143
143
  else:
144
144
  values.integrations.append(s)
145
145
 
146
- return values.dict(exclude_none=True, by_alias=True)
146
+ return values.model_dump(exclude_none=True, by_alias=True)
147
147
 
148
148
 
149
149
  class IntegrationsEnvironment(BaseModel):
@@ -273,7 +273,7 @@ def run(
273
273
 
274
274
  ri, oc_map = ob.fetch_current_state(
275
275
  namespaces=[
276
- ie.namespace.dict(by_alias=True) for ie in integration_environments
276
+ ie.namespace.model_dump(by_alias=True) for ie in integration_environments
277
277
  ],
278
278
  thread_pool_size=thread_pool_size,
279
279
  integration=QONTRACT_INTEGRATION,
@@ -81,7 +81,7 @@ def run(
81
81
  if not print_only and config_name is not None:
82
82
  raise Exception("--config-name must works with --print-only mode")
83
83
  secret_reader = SecretReader(queries.get_secret_reader_settings())
84
- jjb: JJB = init_jjb(secret_reader, instance_name, config_name, print_only)
84
+ jjb = init_jjb(secret_reader, instance_name, config_name, print_only)
85
85
  if defer:
86
86
  defer(jjb.cleanup)
87
87
 
@@ -1,14 +1,12 @@
1
+ from __future__ import annotations
2
+
1
3
  import logging
2
- from typing import (
3
- Any,
4
- cast,
5
- )
4
+ from enum import Enum
5
+ from typing import Any, cast
6
+
7
+ from pydantic import BaseModel, Field
6
8
 
7
9
  from reconcile import queries
8
- from reconcile.jenkins.types import (
9
- JenkinsWorkerFleet,
10
- SSHConnector,
11
- )
12
10
  from reconcile.utils.external_resources import get_external_resource_specs
13
11
  from reconcile.utils.jenkins_api import JenkinsApi
14
12
  from reconcile.utils.secret_reader import SecretReader
@@ -17,6 +15,72 @@ from reconcile.utils.terrascript_aws_client import TerrascriptClient as Terrascr
17
15
  QONTRACT_INTEGRATION = "jenkins-worker-fleets"
18
16
 
19
17
 
18
+ class SSHHostKeyVerificationStrategy(Enum):
19
+ MANUALLY_TRUSTED_KEY_VERIFICATION_STRATEGY = (
20
+ "manuallyTrustedKeyVerificationStrategy"
21
+ )
22
+ MANUALLY_PROVIDED_KEY_VERIFICATION_STRATEGY = (
23
+ "manuallyProvidedKeyVerificationStrategy"
24
+ )
25
+ NON_VERIFYING_KEY_VERIFICATION_STRATEGY = "nonVerifyingKeyVerificationStrategy"
26
+ KNOWN_HOSTS_FILE_KEY_VERIFICATION_STRATEGY = "knownHostsFileKeyVerificationStrategy"
27
+
28
+
29
+ class SSHConnector(BaseModel, use_enum_values=True):
30
+ credentials_id: str = Field(..., alias="credentialsId")
31
+ launch_timeout_seconds: int | None = Field(None, alias="launchTimeoutSeconds")
32
+ max_num_retries: int | None = Field(None, alias="maxNumRetries")
33
+ retry_wait_time: int | None = Field(None, alias="retryWaitTime")
34
+ port: int | None = 22
35
+ jvm_options: str | None = Field(None, alias="jvmOptions")
36
+ ssh_host_key_verification_strategy: SSHHostKeyVerificationStrategy = Field(
37
+ SSHHostKeyVerificationStrategy.NON_VERIFYING_KEY_VERIFICATION_STRATEGY,
38
+ alias="sshHostKeyVerificationStrategy",
39
+ )
40
+
41
+
42
+ class ComputerConnector(BaseModel):
43
+ # alias name is defined by jcasc schema
44
+ ssh_connector: SSHConnector = Field(..., alias="sSHConnector")
45
+
46
+
47
+ class JenkinsWorkerFleet(BaseModel):
48
+ # following options comes form https://github.com/jenkinsci/ec2-fleet-plugin/blob/master/docs/
49
+ name: str
50
+ fleet: str
51
+ region: str
52
+ min_size: int = Field(..., alias="minSize")
53
+ max_size: int = Field(..., alias="maxSize")
54
+ computer_connector: ComputerConnector = Field(..., alias="computerConnector")
55
+ fs_root: str = Field(..., alias="fsRoot")
56
+ label_string: str = Field(..., alias="labelString")
57
+ num_executors: int = Field(2, alias="numExecutors")
58
+ idle_minutes: int = Field(30, alias="idleMinutes")
59
+ min_spare_size: int = Field(0, alias="minSpareSize")
60
+ max_total_uses: int = Field(-1, alias="maxTotalUses")
61
+ no_delay_provision: bool = Field(False, alias="noDelayProvision")
62
+ add_node_only_if_running: bool = Field(True, alias="addNodeOnlyIfRunning")
63
+ always_reconnect: bool = Field(True, alias="alwaysReconnect")
64
+ private_ip_used: bool = Field(True, alias="privateIpUsed")
65
+ restrict_usage: bool = Field(True, alias="restrictUsage")
66
+
67
+ def __lt__(self, other: JenkinsWorkerFleet) -> bool:
68
+ return self.fleet < other.fleet
69
+
70
+ def __eq__(self, other: object) -> bool:
71
+ if not isinstance(other, JenkinsWorkerFleet):
72
+ raise NotImplementedError(
73
+ "Cannot compare to non JenkinsWorkerFleet objects."
74
+ )
75
+ return self.fleet == other.fleet and self.region == other.region
76
+
77
+ def __hash__(self) -> int:
78
+ return hash(self.fleet + self.region)
79
+
80
+ def differ(self, other: JenkinsWorkerFleet) -> bool:
81
+ return self.model_dump(mode="json") != other.model_dump(mode="json")
82
+
83
+
20
84
  def get_current_state(jenkins: JenkinsApi) -> list[JenkinsWorkerFleet]:
21
85
  current_state = []
22
86
 
@@ -92,8 +156,8 @@ def act(
92
156
  current_fleet = current_state[current_state.index(f)]
93
157
  desired_fleet = desired_state[desired_state.index(f)]
94
158
  if current_fleet.differ(desired_fleet):
95
- logging.debug("CURRENT: " + str(current_fleet.dict(by_alias=True)))
96
- logging.debug("DESIRED: " + str(desired_fleet.dict(by_alias=True)))
159
+ logging.debug("CURRENT: " + str(current_fleet.model_dump(by_alias=True)))
160
+ logging.debug("DESIRED: " + str(desired_fleet.model_dump(by_alias=True)))
97
161
  to_update.append(desired_fleet)
98
162
 
99
163
  if to_add or to_delete or to_update:
@@ -106,7 +170,11 @@ def act(
106
170
 
107
171
  if not dry_run:
108
172
  d_clouds = [
109
- {"eC2Fleet": d.dict(by_alias=True, exclude_none=True)}
173
+ {
174
+ "eC2Fleet": d.model_dump(
175
+ mode="json", by_alias=True, exclude_none=True
176
+ )
177
+ }
110
178
  for d in desired_state
111
179
  ]
112
180
  config = {"jenkins": {"clouds": d_clouds}}
@@ -128,6 +196,7 @@ def run(dry_run: bool) -> None:
128
196
  accounts=[],
129
197
  settings=settings,
130
198
  prefetch_resources_by_schemas=["/aws/asg-defaults-1.yml"],
199
+ default_tags=None,
131
200
  )
132
201
 
133
202
  for instance in jenkins_instances: