qontract-reconcile 0.10.2.dev361__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 (351) hide show
  1. {qontract_reconcile-0.10.2.dev361.dist-info → qontract_reconcile-0.10.2.dev430.dist-info}/METADATA +13 -12
  2. {qontract_reconcile-0.10.2.dev361.dist-info → qontract_reconcile-0.10.2.dev430.dist-info}/RECORD +351 -345
  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_iam_keys.py +1 -0
  19. reconcile/aws_saml_idp/integration.py +12 -4
  20. reconcile/aws_saml_roles/integration.py +30 -23
  21. reconcile/aws_version_sync/integration.py +6 -12
  22. reconcile/change_owners/bundle.py +3 -3
  23. reconcile/change_owners/change_log_tracking.py +3 -2
  24. reconcile/change_owners/change_owners.py +1 -1
  25. reconcile/change_owners/diff.py +0 -2
  26. reconcile/checkpoint.py +11 -3
  27. reconcile/cli.py +93 -10
  28. reconcile/dashdotdb_dora.py +5 -12
  29. reconcile/dashdotdb_slo.py +1 -1
  30. reconcile/database_access_manager.py +123 -117
  31. reconcile/dynatrace_token_provider/integration.py +1 -1
  32. reconcile/endpoints_discovery/integration.py +4 -1
  33. reconcile/endpoints_discovery/merge_request.py +1 -1
  34. reconcile/endpoints_discovery/merge_request_manager.py +8 -8
  35. reconcile/external_resources/factories.py +4 -6
  36. reconcile/external_resources/integration.py +1 -1
  37. reconcile/external_resources/manager.py +8 -6
  38. reconcile/external_resources/meta.py +0 -1
  39. reconcile/external_resources/metrics.py +1 -1
  40. reconcile/external_resources/model.py +19 -15
  41. reconcile/external_resources/reconciler.py +7 -4
  42. reconcile/external_resources/secrets_sync.py +4 -7
  43. reconcile/external_resources/state.py +26 -16
  44. reconcile/fleet_labeler/integration.py +1 -1
  45. reconcile/gabi_authorized_users.py +5 -2
  46. reconcile/gcp_image_mirror.py +2 -2
  47. reconcile/github_org.py +1 -1
  48. reconcile/github_owners.py +4 -0
  49. reconcile/gitlab_housekeeping.py +13 -15
  50. reconcile/gitlab_members.py +6 -12
  51. reconcile/gitlab_owners.py +15 -11
  52. reconcile/gitlab_permissions.py +8 -12
  53. reconcile/glitchtip_project_alerts/integration.py +3 -1
  54. reconcile/gql_definitions/acs/acs_instances.py +5 -5
  55. reconcile/gql_definitions/acs/acs_policies.py +5 -5
  56. reconcile/gql_definitions/acs/acs_rbac.py +5 -5
  57. reconcile/gql_definitions/advanced_upgrade_service/aus_clusters.py +5 -5
  58. reconcile/gql_definitions/advanced_upgrade_service/aus_organization.py +5 -5
  59. reconcile/gql_definitions/app_interface_metrics_exporter/onboarding_status.py +5 -5
  60. reconcile/gql_definitions/app_sre_tekton_access_revalidation/roles.py +5 -5
  61. reconcile/gql_definitions/app_sre_tekton_access_revalidation/users.py +5 -5
  62. reconcile/gql_definitions/automated_actions/instance.py +46 -7
  63. reconcile/gql_definitions/aws_account_manager/aws_accounts.py +5 -5
  64. reconcile/gql_definitions/aws_ami_cleanup/aws_accounts.py +15 -5
  65. reconcile/gql_definitions/aws_cloudwatch_log_retention/aws_accounts.py +27 -66
  66. reconcile/gql_definitions/aws_saml_idp/aws_accounts.py +15 -5
  67. reconcile/gql_definitions/aws_saml_roles/aws_accounts.py +15 -5
  68. reconcile/gql_definitions/aws_saml_roles/roles.py +5 -5
  69. reconcile/gql_definitions/aws_version_sync/clusters.py +5 -5
  70. reconcile/gql_definitions/aws_version_sync/namespaces.py +5 -5
  71. reconcile/gql_definitions/change_owners/queries/change_types.py +5 -5
  72. reconcile/gql_definitions/change_owners/queries/self_service_roles.py +5 -5
  73. reconcile/gql_definitions/cluster_auth_rhidp/clusters.py +5 -5
  74. reconcile/gql_definitions/common/alerting_services_settings.py +5 -5
  75. reconcile/gql_definitions/common/app_code_component_repos.py +5 -5
  76. reconcile/gql_definitions/common/app_interface_custom_messages.py +5 -5
  77. reconcile/gql_definitions/common/app_interface_dms_settings.py +5 -5
  78. reconcile/gql_definitions/common/app_interface_repo_settings.py +5 -5
  79. reconcile/gql_definitions/common/app_interface_roles.py +5 -5
  80. reconcile/gql_definitions/common/app_interface_state_settings.py +5 -5
  81. reconcile/gql_definitions/common/app_interface_vault_settings.py +5 -5
  82. reconcile/gql_definitions/common/app_quay_repos_escalation_policies.py +5 -5
  83. reconcile/gql_definitions/common/apps.py +5 -5
  84. reconcile/gql_definitions/common/aws_vpc_requests.py +15 -5
  85. reconcile/gql_definitions/common/aws_vpcs.py +5 -5
  86. reconcile/gql_definitions/common/clusters.py +5 -5
  87. reconcile/gql_definitions/common/clusters_minimal.py +5 -5
  88. reconcile/gql_definitions/common/clusters_with_dms.py +5 -5
  89. reconcile/gql_definitions/common/clusters_with_peering.py +5 -5
  90. reconcile/gql_definitions/common/github_orgs.py +5 -5
  91. reconcile/gql_definitions/common/jira_settings.py +5 -5
  92. reconcile/gql_definitions/common/jiralert_settings.py +5 -5
  93. reconcile/gql_definitions/common/ldap_settings.py +5 -5
  94. reconcile/gql_definitions/common/namespaces.py +5 -5
  95. reconcile/gql_definitions/common/namespaces_minimal.py +7 -5
  96. reconcile/gql_definitions/common/ocm_env_telemeter.py +5 -5
  97. reconcile/gql_definitions/common/ocm_environments.py +5 -5
  98. reconcile/gql_definitions/common/pagerduty_instances.py +5 -5
  99. reconcile/gql_definitions/common/pgp_reencryption_settings.py +5 -5
  100. reconcile/gql_definitions/common/pipeline_providers.py +5 -5
  101. reconcile/gql_definitions/common/quay_instances.py +5 -5
  102. reconcile/gql_definitions/common/quay_orgs.py +5 -5
  103. reconcile/gql_definitions/common/reserved_networks.py +5 -5
  104. reconcile/gql_definitions/common/rhcs_provider_settings.py +5 -5
  105. reconcile/gql_definitions/common/saas_files.py +5 -5
  106. reconcile/gql_definitions/common/saas_target_namespaces.py +5 -5
  107. reconcile/gql_definitions/common/saasherder_settings.py +5 -5
  108. reconcile/gql_definitions/common/slack_workspaces.py +5 -5
  109. reconcile/gql_definitions/common/smtp_client_settings.py +5 -5
  110. reconcile/gql_definitions/common/state_aws_account.py +5 -5
  111. reconcile/gql_definitions/common/users.py +5 -5
  112. reconcile/gql_definitions/common/users_with_paths.py +5 -5
  113. reconcile/gql_definitions/cost_report/app_names.py +5 -5
  114. reconcile/gql_definitions/cost_report/cost_namespaces.py +5 -5
  115. reconcile/gql_definitions/cost_report/settings.py +5 -5
  116. reconcile/gql_definitions/dashdotdb_slo/slo_documents_query.py +5 -5
  117. reconcile/gql_definitions/dynatrace_token_provider/dynatrace_bootstrap_tokens.py +5 -5
  118. reconcile/gql_definitions/dynatrace_token_provider/token_specs.py +5 -5
  119. reconcile/gql_definitions/email_sender/apps.py +5 -5
  120. reconcile/gql_definitions/email_sender/emails.py +5 -5
  121. reconcile/gql_definitions/email_sender/users.py +5 -5
  122. reconcile/gql_definitions/endpoints_discovery/apps.py +5 -5
  123. reconcile/gql_definitions/external_resources/aws_accounts.py +5 -5
  124. reconcile/gql_definitions/external_resources/external_resources_modules.py +5 -5
  125. reconcile/gql_definitions/external_resources/external_resources_namespaces.py +33 -6
  126. reconcile/gql_definitions/external_resources/external_resources_settings.py +5 -5
  127. reconcile/gql_definitions/external_resources/fragments/external_resources_module_overrides.py +5 -5
  128. reconcile/gql_definitions/fleet_labeler/fleet_labels.py +5 -5
  129. reconcile/gql_definitions/fragments/aus_organization.py +5 -5
  130. reconcile/gql_definitions/fragments/aws_account_common.py +7 -5
  131. reconcile/gql_definitions/fragments/aws_account_managed.py +5 -5
  132. reconcile/gql_definitions/fragments/aws_account_sso.py +5 -5
  133. reconcile/gql_definitions/fragments/aws_infra_management_account.py +5 -5
  134. reconcile/gql_definitions/fragments/aws_organization.py +33 -0
  135. reconcile/gql_definitions/fragments/aws_vpc.py +5 -5
  136. reconcile/gql_definitions/fragments/aws_vpc_request.py +7 -5
  137. reconcile/gql_definitions/fragments/container_image_mirror.py +5 -5
  138. reconcile/gql_definitions/fragments/deploy_resources.py +5 -5
  139. reconcile/gql_definitions/fragments/disable.py +5 -5
  140. reconcile/gql_definitions/fragments/email_service.py +5 -5
  141. reconcile/gql_definitions/fragments/email_user.py +5 -5
  142. reconcile/gql_definitions/fragments/jumphost_common_fields.py +5 -5
  143. reconcile/gql_definitions/fragments/membership_source.py +5 -5
  144. reconcile/gql_definitions/fragments/minimal_ocm_organization.py +5 -5
  145. reconcile/gql_definitions/fragments/oc_connection_cluster.py +5 -5
  146. reconcile/gql_definitions/fragments/ocm_environment.py +5 -5
  147. reconcile/gql_definitions/fragments/pipeline_provider_retention.py +5 -5
  148. reconcile/gql_definitions/fragments/prometheus_instance.py +5 -5
  149. reconcile/gql_definitions/fragments/resource_limits_requirements.py +5 -5
  150. reconcile/gql_definitions/fragments/resource_requests_requirements.py +5 -5
  151. reconcile/gql_definitions/fragments/resource_values.py +5 -5
  152. reconcile/gql_definitions/fragments/saas_slo_document.py +5 -5
  153. reconcile/gql_definitions/fragments/saas_target_namespace.py +5 -5
  154. reconcile/gql_definitions/fragments/serviceaccount_token.py +5 -5
  155. reconcile/gql_definitions/fragments/terraform_state.py +5 -5
  156. reconcile/gql_definitions/fragments/upgrade_policy.py +5 -5
  157. reconcile/gql_definitions/fragments/user.py +5 -5
  158. reconcile/gql_definitions/fragments/vault_secret.py +5 -5
  159. reconcile/gql_definitions/gcp/gcp_docker_repos.py +5 -5
  160. reconcile/gql_definitions/gcp/gcp_projects.py +5 -5
  161. reconcile/gql_definitions/gitlab_members/gitlab_instances.py +5 -5
  162. reconcile/gql_definitions/gitlab_members/permissions.py +5 -5
  163. reconcile/gql_definitions/glitchtip/glitchtip_instance.py +5 -5
  164. reconcile/gql_definitions/glitchtip/glitchtip_project.py +5 -5
  165. reconcile/gql_definitions/glitchtip_project_alerts/glitchtip_project.py +5 -5
  166. reconcile/gql_definitions/integrations/integrations.py +5 -5
  167. reconcile/gql_definitions/introspection.json +724 -129
  168. reconcile/gql_definitions/jenkins_configs/jenkins_configs.py +5 -5
  169. reconcile/gql_definitions/jenkins_configs/jenkins_instances.py +5 -5
  170. reconcile/gql_definitions/jira/jira_servers.py +5 -5
  171. reconcile/gql_definitions/jira_permissions_validator/jira_boards_for_permissions_validator.py +9 -5
  172. reconcile/gql_definitions/jumphosts/jumphosts.py +5 -5
  173. reconcile/gql_definitions/ldap_groups/roles.py +5 -5
  174. reconcile/gql_definitions/ldap_groups/settings.py +5 -5
  175. reconcile/gql_definitions/maintenance/maintenances.py +5 -5
  176. reconcile/gql_definitions/membershipsources/roles.py +5 -5
  177. reconcile/gql_definitions/ocm_labels/clusters.py +5 -5
  178. reconcile/gql_definitions/ocm_labels/organizations.py +5 -5
  179. reconcile/gql_definitions/openshift_cluster_bots/clusters.py +5 -5
  180. reconcile/gql_definitions/openshift_groups/managed_groups.py +5 -5
  181. reconcile/gql_definitions/openshift_groups/managed_roles.py +5 -5
  182. reconcile/gql_definitions/openshift_serviceaccount_tokens/tokens.py +5 -5
  183. reconcile/gql_definitions/quay_membership/quay_membership.py +5 -5
  184. reconcile/gql_definitions/rhcs/certs.py +25 -79
  185. reconcile/gql_definitions/rhcs/openshift_resource_rhcs_cert.py +43 -0
  186. reconcile/gql_definitions/rhidp/organizations.py +5 -5
  187. reconcile/gql_definitions/service_dependencies/jenkins_instance_fragment.py +5 -5
  188. reconcile/gql_definitions/service_dependencies/service_dependencies.py +5 -5
  189. reconcile/gql_definitions/sharding/aws_accounts.py +5 -5
  190. reconcile/gql_definitions/sharding/ocm_organization.py +5 -5
  191. reconcile/gql_definitions/skupper_network/site_controller_template.py +5 -5
  192. reconcile/gql_definitions/skupper_network/skupper_networks.py +5 -5
  193. reconcile/gql_definitions/slack_usergroups/clusters.py +5 -5
  194. reconcile/gql_definitions/slack_usergroups/permissions.py +5 -5
  195. reconcile/gql_definitions/slack_usergroups/users.py +5 -5
  196. reconcile/gql_definitions/slo_documents/slo_documents.py +5 -5
  197. reconcile/gql_definitions/status_board/status_board.py +5 -5
  198. reconcile/gql_definitions/statuspage/statuspages.py +5 -5
  199. reconcile/gql_definitions/templating/template_collection.py +5 -5
  200. reconcile/gql_definitions/templating/templates.py +5 -5
  201. reconcile/gql_definitions/terraform_cloudflare_dns/app_interface_cloudflare_dns_settings.py +5 -5
  202. reconcile/gql_definitions/terraform_cloudflare_dns/terraform_cloudflare_zones.py +5 -5
  203. reconcile/gql_definitions/terraform_cloudflare_resources/terraform_cloudflare_accounts.py +5 -5
  204. reconcile/gql_definitions/terraform_cloudflare_resources/terraform_cloudflare_resources.py +5 -5
  205. reconcile/gql_definitions/terraform_cloudflare_users/app_interface_setting_cloudflare_and_vault.py +5 -5
  206. reconcile/gql_definitions/terraform_cloudflare_users/terraform_cloudflare_roles.py +5 -5
  207. reconcile/gql_definitions/terraform_init/aws_accounts.py +19 -5
  208. reconcile/gql_definitions/terraform_repo/terraform_repo.py +5 -5
  209. reconcile/gql_definitions/terraform_resources/database_access_manager.py +5 -5
  210. reconcile/gql_definitions/terraform_resources/terraform_resources_namespaces.py +30 -6
  211. reconcile/gql_definitions/terraform_tgw_attachments/aws_accounts.py +15 -5
  212. reconcile/gql_definitions/unleash_feature_toggles/feature_toggles.py +5 -5
  213. reconcile/gql_definitions/vault_instances/vault_instances.py +5 -5
  214. reconcile/gql_definitions/vault_policies/vault_policies.py +5 -5
  215. reconcile/gql_definitions/vpc_peerings_validator/vpc_peerings_validator.py +5 -5
  216. reconcile/gql_definitions/vpc_peerings_validator/vpc_peerings_validator_peered_cluster_fragment.py +5 -5
  217. reconcile/integrations_manager.py +3 -3
  218. reconcile/jenkins_worker_fleets.py +10 -8
  219. reconcile/jira_permissions_validator.py +237 -122
  220. reconcile/ldap_groups/integration.py +1 -1
  221. reconcile/ocm/types.py +35 -57
  222. reconcile/ocm_aws_infrastructure_access.py +1 -1
  223. reconcile/ocm_clusters.py +4 -4
  224. reconcile/ocm_labels/integration.py +3 -2
  225. reconcile/ocm_machine_pools.py +33 -27
  226. reconcile/openshift_base.py +113 -4
  227. reconcile/openshift_cluster_bots.py +1 -1
  228. reconcile/openshift_namespace_labels.py +1 -1
  229. reconcile/openshift_namespaces.py +97 -101
  230. reconcile/openshift_resources_base.py +6 -2
  231. reconcile/openshift_rhcs_certs.py +74 -37
  232. reconcile/openshift_rolebindings.py +7 -11
  233. reconcile/openshift_saas_deploy.py +4 -5
  234. reconcile/openshift_saas_deploy_change_tester.py +9 -7
  235. reconcile/openshift_saas_deploy_trigger_cleaner.py +3 -5
  236. reconcile/openshift_serviceaccount_tokens.py +2 -2
  237. reconcile/openshift_upgrade_watcher.py +4 -4
  238. reconcile/oum/labelset.py +5 -3
  239. reconcile/oum/models.py +1 -4
  240. reconcile/prometheus_rules_tester/integration.py +3 -3
  241. reconcile/quay_mirror.py +1 -1
  242. reconcile/queries.py +131 -0
  243. reconcile/rhidp/common.py +3 -5
  244. reconcile/rhidp/sso_client/base.py +16 -5
  245. reconcile/saas_auto_promotions_manager/merge_request_manager/renderer.py +1 -1
  246. reconcile/saas_auto_promotions_manager/subscriber.py +4 -3
  247. reconcile/skupper_network/integration.py +2 -2
  248. reconcile/slack_usergroups.py +35 -14
  249. reconcile/sql_query.py +1 -0
  250. reconcile/status_board.py +6 -6
  251. reconcile/statuspage/atlassian.py +7 -7
  252. reconcile/statuspage/integrations/maintenances.py +4 -3
  253. reconcile/statuspage/page.py +4 -9
  254. reconcile/statuspage/status.py +5 -8
  255. reconcile/templating/lib/rendering.py +3 -3
  256. reconcile/templating/renderer.py +2 -2
  257. reconcile/terraform_aws_route53.py +7 -1
  258. reconcile/terraform_cloudflare_dns.py +3 -3
  259. reconcile/terraform_cloudflare_resources.py +5 -5
  260. reconcile/terraform_cloudflare_users.py +3 -2
  261. reconcile/terraform_init/integration.py +187 -23
  262. reconcile/terraform_repo.py +16 -12
  263. reconcile/terraform_resources.py +6 -6
  264. reconcile/terraform_tgw_attachments.py +27 -19
  265. reconcile/terraform_users.py +7 -0
  266. reconcile/terraform_vpc_peerings.py +14 -3
  267. reconcile/terraform_vpc_resources/integration.py +10 -1
  268. reconcile/typed_queries/aws_account_tags.py +41 -0
  269. reconcile/typed_queries/cost_report/app_names.py +1 -1
  270. reconcile/typed_queries/cost_report/cost_namespaces.py +2 -2
  271. reconcile/typed_queries/saas_files.py +11 -11
  272. reconcile/typed_queries/status_board.py +2 -2
  273. reconcile/unleash_feature_toggles/integration.py +4 -2
  274. reconcile/utils/acs/base.py +6 -3
  275. reconcile/utils/acs/policies.py +2 -2
  276. reconcile/utils/aws_api.py +51 -20
  277. reconcile/utils/aws_api_typed/api.py +38 -9
  278. reconcile/utils/aws_api_typed/cloudformation.py +149 -0
  279. reconcile/utils/aws_api_typed/logs.py +73 -0
  280. reconcile/utils/aws_api_typed/organization.py +4 -2
  281. reconcile/utils/binary.py +7 -12
  282. reconcile/utils/datetime_util.py +67 -0
  283. reconcile/utils/deadmanssnitch_api.py +1 -1
  284. reconcile/utils/differ.py +2 -3
  285. reconcile/utils/early_exit_cache.py +11 -12
  286. reconcile/utils/expiration.py +7 -3
  287. reconcile/utils/filtering.py +1 -1
  288. reconcile/utils/gitlab_api.py +7 -5
  289. reconcile/utils/glitchtip/client.py +6 -2
  290. reconcile/utils/glitchtip/models.py +25 -28
  291. reconcile/utils/gql.py +4 -7
  292. reconcile/utils/helpers.py +1 -1
  293. reconcile/utils/instrumented_wrappers.py +1 -1
  294. reconcile/utils/internal_groups/client.py +2 -2
  295. reconcile/utils/internal_groups/models.py +8 -17
  296. reconcile/utils/jinja2/utils.py +6 -101
  297. reconcile/utils/jira_client.py +82 -63
  298. reconcile/utils/jjb_client.py +7 -10
  299. reconcile/utils/jobcontroller/controller.py +2 -2
  300. reconcile/utils/jobcontroller/models.py +17 -1
  301. reconcile/utils/json.py +43 -1
  302. reconcile/utils/membershipsources/app_interface_resolver.py +4 -2
  303. reconcile/utils/membershipsources/models.py +16 -23
  304. reconcile/utils/membershipsources/resolver.py +4 -2
  305. reconcile/utils/merge_request_manager/merge_request_manager.py +4 -4
  306. reconcile/utils/merge_request_manager/parser.py +6 -6
  307. reconcile/utils/metrics.py +5 -5
  308. reconcile/utils/models.py +304 -82
  309. reconcile/utils/mr/app_interface_reporter.py +2 -2
  310. reconcile/utils/mr/notificator.py +3 -3
  311. reconcile/utils/mr/update_access_report_base.py +3 -4
  312. reconcile/utils/mr/user_maintenance.py +3 -2
  313. reconcile/utils/oc.py +246 -201
  314. reconcile/utils/oc_filters.py +3 -3
  315. reconcile/utils/ocm/addons.py +0 -1
  316. reconcile/utils/ocm/base.py +17 -20
  317. reconcile/utils/ocm/cluster_groups.py +1 -1
  318. reconcile/utils/ocm/identity_providers.py +2 -2
  319. reconcile/utils/ocm/labels.py +1 -1
  320. reconcile/utils/ocm/products.py +8 -8
  321. reconcile/utils/ocm/search_filters.py +3 -6
  322. reconcile/utils/ocm/service_log.py +4 -6
  323. reconcile/utils/ocm/sre_capability_labels.py +20 -13
  324. reconcile/utils/openshift_resource.py +8 -3
  325. reconcile/utils/pagerduty_api.py +10 -7
  326. reconcile/utils/promotion_state.py +6 -11
  327. reconcile/utils/raw_github_api.py +1 -1
  328. reconcile/utils/rhcsv2_certs.py +86 -23
  329. reconcile/utils/rosa/session.py +16 -0
  330. reconcile/utils/runtime/integration.py +2 -3
  331. reconcile/utils/runtime/runner.py +2 -2
  332. reconcile/utils/saasherder/interfaces.py +13 -20
  333. reconcile/utils/saasherder/models.py +23 -20
  334. reconcile/utils/saasherder/saasherder.py +50 -27
  335. reconcile/utils/slack_api.py +2 -2
  336. reconcile/utils/sloth.py +171 -2
  337. reconcile/utils/structs.py +1 -1
  338. reconcile/utils/terraform_client.py +5 -4
  339. reconcile/utils/terrascript_aws_client.py +134 -74
  340. reconcile/utils/unleash/server.py +2 -8
  341. reconcile/utils/vault.py +5 -12
  342. reconcile/utils/vcs.py +8 -8
  343. reconcile/vault_replication.py +107 -42
  344. tools/app_interface_reporter.py +4 -4
  345. tools/cli_commands/cost_report/cost_management_api.py +3 -3
  346. tools/cli_commands/cost_report/view.py +7 -6
  347. tools/cli_commands/erv2.py +1 -1
  348. tools/qontract_cli.py +28 -17
  349. tools/template_validation.py +3 -1
  350. {qontract_reconcile-0.10.2.dev361.dist-info → qontract_reconcile-0.10.2.dev430.dist-info}/WHEEL +0 -0
  351. {qontract_reconcile-0.10.2.dev361.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,15 +12,23 @@ 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
+ from reconcile.gql_definitions.fragments.aws_organization import AWSOrganization
20
21
  from reconcile.gql_definitions.fragments.vault_secret import VaultSecret
21
22
 
22
23
 
23
24
  DEFINITION = """
25
+ fragment AWSOrganization on AWSOrganization_v1 {
26
+ payerAccount {
27
+ organizationAccountTags
28
+ }
29
+ tags
30
+ }
31
+
24
32
  fragment VaultSecret on VaultSecret_v1 {
25
33
  path
26
34
  field
@@ -33,6 +41,7 @@ query TerraformInitAWSAccounts {
33
41
  name
34
42
  terraformUsername
35
43
  terraformState {
44
+ bucket
36
45
  region
37
46
  }
38
47
  resourcesDefaultRegion
@@ -42,18 +51,22 @@ query TerraformInitAWSAccounts {
42
51
  disable {
43
52
  integrations
44
53
  }
54
+ organization {
55
+ ...AWSOrganization
56
+ }
45
57
  }
46
58
  }
47
59
  """
48
60
 
49
61
 
50
62
  class ConfiguredBaseModel(BaseModel):
51
- class Config:
52
- smart_union=True
53
- extra=Extra.forbid
63
+ model_config = ConfigDict(
64
+ extra='forbid'
65
+ )
54
66
 
55
67
 
56
68
  class TerraformStateAWSV1(ConfiguredBaseModel):
69
+ bucket: str = Field(..., alias="bucket")
57
70
  region: str = Field(..., alias="region")
58
71
 
59
72
 
@@ -68,6 +81,7 @@ class AWSAccountV1(ConfiguredBaseModel):
68
81
  resources_default_region: str = Field(..., alias="resourcesDefaultRegion")
69
82
  automation_token: VaultSecret = Field(..., alias="automationToken")
70
83
  disable: Optional[DisableClusterAutomationsV1] = Field(..., alias="disable")
84
+ organization: Optional[AWSOrganization] = Field(..., alias="organization")
71
85
 
72
86
 
73
87
  class TerraformInitAWSAccountsQueryData(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
  )
@@ -71,9 +71,9 @@ query TerraformRepo {
71
71
 
72
72
 
73
73
  class ConfiguredBaseModel(BaseModel):
74
- class Config:
75
- smart_union=True
76
- extra=Extra.forbid
74
+ model_config = ConfigDict(
75
+ extra='forbid'
76
+ )
77
77
 
78
78
 
79
79
  class AWSTerraformStateIntegrationsV1(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
  )
@@ -68,9 +68,9 @@ query DatabaseAccessManager {
68
68
 
69
69
 
70
70
  class ConfiguredBaseModel(BaseModel):
71
- class Config:
72
- smart_union=True
73
- extra=Extra.forbid
71
+ model_config = ConfigDict(
72
+ extra='forbid'
73
+ )
74
74
 
75
75
 
76
76
  class VaultSecretV1(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
  )
@@ -108,6 +108,17 @@ query TerraformResourcesNamespaces {
108
108
  }
109
109
  managed_by_erv2
110
110
  }
111
+ ... on NamespaceTerraformResourceRDSProxy_v1 {
112
+ region
113
+ identifier
114
+ defaults
115
+ overrides
116
+ output_resource_name
117
+ annotations
118
+ tags
119
+ managed_by_erv2
120
+ }
121
+
111
122
  ... on NamespaceTerraformResourceS3_v1 {
112
123
  region
113
124
  identifier
@@ -397,6 +408,7 @@ query TerraformResourcesNamespaces {
397
408
  }
398
409
  output_resource_name
399
410
  annotations
411
+ secret_format
400
412
  }
401
413
  ... on NamespaceTerraformResourceASG_v1 {
402
414
  region
@@ -540,9 +552,9 @@ query TerraformResourcesNamespaces {
540
552
 
541
553
 
542
554
  class ConfiguredBaseModel(BaseModel):
543
- class Config:
544
- smart_union=True
545
- extra=Extra.forbid
555
+ model_config = ConfigDict(
556
+ extra='forbid'
557
+ )
546
558
 
547
559
 
548
560
  class ExternalResourcesProvisionerV1(ConfiguredBaseModel):
@@ -598,6 +610,17 @@ class NamespaceTerraformResourceRDSV1(NamespaceTerraformResourceAWSV1):
598
610
  managed_by_erv2: Optional[bool] = Field(..., alias="managed_by_erv2")
599
611
 
600
612
 
613
+ class NamespaceTerraformResourceRDSProxyV1(NamespaceTerraformResourceAWSV1):
614
+ region: Optional[str] = Field(..., alias="region")
615
+ identifier: str = Field(..., alias="identifier")
616
+ defaults: str = Field(..., alias="defaults")
617
+ overrides: Optional[str] = Field(..., alias="overrides")
618
+ output_resource_name: Optional[str] = Field(..., alias="output_resource_name")
619
+ annotations: Optional[str] = Field(..., alias="annotations")
620
+ tags: Optional[str] = Field(..., alias="tags")
621
+ managed_by_erv2: Optional[bool] = Field(..., alias="managed_by_erv2")
622
+
623
+
601
624
  class AWSS3EventNotificationV1(ConfiguredBaseModel):
602
625
  destination_type: str = Field(..., alias="destination_type")
603
626
  destination: str = Field(..., alias="destination")
@@ -949,6 +972,7 @@ class NamespaceTerraformResourceSecretsManagerV1(NamespaceTerraformResourceAWSV1
949
972
  secret: Optional[VaultSecret] = Field(..., alias="secret")
950
973
  output_resource_name: Optional[str] = Field(..., alias="output_resource_name")
951
974
  annotations: Optional[str] = Field(..., alias="annotations")
975
+ secret_format: Optional[str] = Field(..., alias="secret_format")
952
976
 
953
977
 
954
978
  class CloudinitConfigV1(ConfiguredBaseModel):
@@ -1076,7 +1100,7 @@ class NamespaceTerraformResourceMskV1(NamespaceTerraformResourceAWSV1):
1076
1100
 
1077
1101
 
1078
1102
  class NamespaceTerraformProviderResourceAWSV1(NamespaceExternalResourceV1):
1079
- resources: list[Union[NamespaceTerraformResourceRDSV1, NamespaceTerraformResourceALBV1, NamespaceTerraformResourceRosaAuthenticatorV1, NamespaceTerraformResourceRoleV1, NamespaceTerraformResourceS3V1, NamespaceTerraformResourceASGV1, NamespaceTerraformResourceElastiCacheV1, NamespaceTerraformResourceSNSTopicV1, NamespaceTerraformResourceCloudWatchV1, NamespaceTerraformResourceServiceAccountV1, NamespaceTerraformResourceS3SQSV1, NamespaceTerraformResourceKMSV1, NamespaceTerraformResourceRosaAuthenticatorVPCEV1, NamespaceTerraformResourceMskV1, NamespaceTerraformResourceS3CloudFrontV1, NamespaceTerraformResourceElasticSearchV1, NamespaceTerraformResourceACMV1, NamespaceTerraformResourceKinesisV1, NamespaceTerraformResourceRoute53ZoneV1, NamespaceTerraformResourceSQSV1, NamespaceTerraformResourceDynamoDBV1, NamespaceTerraformResourceECRV1, NamespaceTerraformResourceS3CloudFrontPublicKeyV1, NamespaceTerraformResourceSecretsManagerV1, NamespaceTerraformResourceSecretsManagerServiceAccountV1, NamespaceTerraformResourceAWSV1]] = Field(..., alias="resources")
1103
+ resources: list[Union[NamespaceTerraformResourceRDSV1, NamespaceTerraformResourceALBV1, NamespaceTerraformResourceRosaAuthenticatorV1, NamespaceTerraformResourceRoleV1, NamespaceTerraformResourceS3V1, NamespaceTerraformResourceASGV1, NamespaceTerraformResourceRDSProxyV1, NamespaceTerraformResourceElastiCacheV1, NamespaceTerraformResourceSNSTopicV1, NamespaceTerraformResourceCloudWatchV1, NamespaceTerraformResourceServiceAccountV1, NamespaceTerraformResourceS3SQSV1, NamespaceTerraformResourceKMSV1, NamespaceTerraformResourceRosaAuthenticatorVPCEV1, NamespaceTerraformResourceMskV1, NamespaceTerraformResourceS3CloudFrontV1, NamespaceTerraformResourceElasticSearchV1, NamespaceTerraformResourceACMV1, NamespaceTerraformResourceKinesisV1, NamespaceTerraformResourceSecretsManagerV1, NamespaceTerraformResourceRoute53ZoneV1, NamespaceTerraformResourceSQSV1, NamespaceTerraformResourceDynamoDBV1, NamespaceTerraformResourceECRV1, NamespaceTerraformResourceS3CloudFrontPublicKeyV1, NamespaceTerraformResourceSecretsManagerServiceAccountV1, NamespaceTerraformResourceAWSV1]] = Field(..., alias="resources")
1080
1104
 
1081
1105
 
1082
1106
  class EnvironmentV1(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,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 {
@@ -82,9 +92,9 @@ query AWSAccounts($name: String) {
82
92
 
83
93
 
84
94
  class ConfiguredBaseModel(BaseModel):
85
- class Config:
86
- smart_union=True
87
- extra=Extra.forbid
95
+ model_config = ConfigDict(
96
+ extra='forbid'
97
+ )
88
98
 
89
99
 
90
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
  )
@@ -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
  )
@@ -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
  )
@@ -32,9 +32,9 @@ query VaultPolicies {
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
  )
@@ -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,
@@ -26,7 +26,7 @@ class SSHHostKeyVerificationStrategy(Enum):
26
26
  KNOWN_HOSTS_FILE_KEY_VERIFICATION_STRATEGY = "knownHostsFileKeyVerificationStrategy"
27
27
 
28
28
 
29
- class SSHConnector(BaseModel):
29
+ class SSHConnector(BaseModel, use_enum_values=True):
30
30
  credentials_id: str = Field(..., alias="credentialsId")
31
31
  launch_timeout_seconds: int | None = Field(None, alias="launchTimeoutSeconds")
32
32
  max_num_retries: int | None = Field(None, alias="maxNumRetries")
@@ -38,9 +38,6 @@ class SSHConnector(BaseModel):
38
38
  alias="sshHostKeyVerificationStrategy",
39
39
  )
40
40
 
41
- class Config:
42
- use_enum_values = True
43
-
44
41
 
45
42
  class ComputerConnector(BaseModel):
46
43
  # alias name is defined by jcasc schema
@@ -81,7 +78,7 @@ class JenkinsWorkerFleet(BaseModel):
81
78
  return hash(self.fleet + self.region)
82
79
 
83
80
  def differ(self, other: JenkinsWorkerFleet) -> bool:
84
- return self.dict() != other.dict()
81
+ return self.model_dump(mode="json") != other.model_dump(mode="json")
85
82
 
86
83
 
87
84
  def get_current_state(jenkins: JenkinsApi) -> list[JenkinsWorkerFleet]:
@@ -159,8 +156,8 @@ def act(
159
156
  current_fleet = current_state[current_state.index(f)]
160
157
  desired_fleet = desired_state[desired_state.index(f)]
161
158
  if current_fleet.differ(desired_fleet):
162
- logging.debug("CURRENT: " + str(current_fleet.dict(by_alias=True)))
163
- 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)))
164
161
  to_update.append(desired_fleet)
165
162
 
166
163
  if to_add or to_delete or to_update:
@@ -173,7 +170,11 @@ def act(
173
170
 
174
171
  if not dry_run:
175
172
  d_clouds = [
176
- {"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
+ }
177
178
  for d in desired_state
178
179
  ]
179
180
  config = {"jenkins": {"clouds": d_clouds}}
@@ -195,6 +196,7 @@ def run(dry_run: bool) -> None:
195
196
  accounts=[],
196
197
  settings=settings,
197
198
  prefetch_resources_by_schemas=["/aws/asg-defaults-1.yml"],
199
+ default_tags=None,
198
200
  )
199
201
 
200
202
  for instance in jenkins_instances: