qontract-reconcile 0.9.1rc162__py3-none-any.whl → 0.9.1rc164__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 (30) hide show
  1. {qontract_reconcile-0.9.1rc162.dist-info → qontract_reconcile-0.9.1rc164.dist-info}/METADATA +2 -2
  2. {qontract_reconcile-0.9.1rc162.dist-info → qontract_reconcile-0.9.1rc164.dist-info}/RECORD +21 -30
  3. reconcile/glitchtip_project_dsn/integration.py +3 -0
  4. reconcile/jenkins_job_builder.py +2 -5
  5. reconcile/openshift_base.py +11 -11
  6. reconcile/openshift_saas_deploy.py +52 -57
  7. reconcile/openshift_saas_deploy_trigger_base.py +48 -55
  8. reconcile/openshift_saas_deploy_trigger_cleaner.py +2 -2
  9. reconcile/openshift_tekton_resources.py +1 -1
  10. reconcile/saas_file_validator.py +10 -23
  11. reconcile/slack_base.py +2 -5
  12. reconcile/test/conftest.py +0 -11
  13. reconcile/test/test_auto_promoter.py +42 -199
  14. reconcile/test/test_saasherder.py +463 -398
  15. reconcile/test/test_saasherder_allowed_secret_paths.py +36 -87
  16. reconcile/utils/mr/auto_promoter.py +50 -58
  17. reconcile/utils/mr/base.py +2 -6
  18. reconcile/utils/{saasherder/saasherder.py → saasherder.py} +736 -656
  19. reconcile/gql_definitions/common/app_code_component_repos.py +0 -68
  20. reconcile/gql_definitions/common/saas_files.py +0 -542
  21. reconcile/gql_definitions/common/saasherder_settings.py +0 -62
  22. reconcile/gql_definitions/fragments/oc_connection_cluster.py +0 -47
  23. reconcile/typed_queries/repos.py +0 -17
  24. reconcile/typed_queries/saas_files.py +0 -61
  25. reconcile/utils/saasherder/__init__.py +0 -17
  26. reconcile/utils/saasherder/interfaces.py +0 -404
  27. reconcile/utils/saasherder/models.py +0 -203
  28. {qontract_reconcile-0.9.1rc162.dist-info → qontract_reconcile-0.9.1rc164.dist-info}/WHEEL +0 -0
  29. {qontract_reconcile-0.9.1rc162.dist-info → qontract_reconcile-0.9.1rc164.dist-info}/entry_points.txt +0 -0
  30. {qontract_reconcile-0.9.1rc162.dist-info → qontract_reconcile-0.9.1rc164.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qontract-reconcile
3
- Version: 0.9.1rc162
3
+ Version: 0.9.1rc164
4
4
  Summary: Collection of tools to reconcile services with their desired state as defined in the app-interface DB.
5
5
  Home-page: https://github.com/app-sre/qontract-reconcile
6
6
  Author: Red Hat App-SRE Team
@@ -17,7 +17,7 @@ Requires-Dist: Click (<9.0,>=7.0)
17
17
  Requires-Dist: gql (==3.1.0)
18
18
  Requires-Dist: toml (<0.11.0,>=0.10.0)
19
19
  Requires-Dist: jsonpath-rw (<1.5.0,>=1.4.0)
20
- Requires-Dist: PyGithub (<1.59,>=1.58)
20
+ Requires-Dist: PyGithub (<1.56,>=1.55)
21
21
  Requires-Dist: hvac (<0.8.0,>=0.7.0)
22
22
  Requires-Dist: ldap3 (<2.10.0,>=2.9.1)
23
23
  Requires-Dist: anymarkup (<0.9.0,>=0.7.0)
@@ -46,7 +46,7 @@ reconcile/gitlab_permissions.py,sha256=6ZXnSsEhoz-gSeUnBoU0t-4yAMuRggXzVE4tKtVca
46
46
  reconcile/gitlab_projects.py,sha256=io68p74nlcTLRrg0mpMenKsAp3nmhqFPXfM2ilprHvc,1700
47
47
  reconcile/integrations_manager.py,sha256=8AvlOUr2RwVPrb_OfGPC6zyWxL5NZBAHFRn6UYnXjAA,13937
48
48
  reconcile/integrations_validator.py,sha256=zvm_KpMLVusjv-4IAtm0GYAamS2_Z31ia56h0P9tOXM,422
49
- reconcile/jenkins_job_builder.py,sha256=pWgxViv4OkCAMm6wtwQuf-YrFJgwwaFcsgEWp4lNcBk,4058
49
+ reconcile/jenkins_job_builder.py,sha256=hWIrTLGUhnfpbnaFAVrHcUqixYJFqKJPu-ZahCAGGY8,4023
50
50
  reconcile/jenkins_job_builds_cleaner.py,sha256=C7bCPyl1OKKFEBV_d-rgVe47K_VLC-wNCqfC1fyeW38,3230
51
51
  reconcile/jenkins_job_cleaner.py,sha256=-haVsulTDOTq519mwCsIjOD2hPcMtKZeicdUlrWLjvQ,1834
52
52
  reconcile/jenkins_plugins.py,sha256=m7bGrHqswUioC5-d2cw2lkUXatP7FrhDU42Ver9bSzs,3393
@@ -75,7 +75,7 @@ reconcile/ocm_upgrade_scheduler.py,sha256=z0qVYX1M5wEfSk5q5OTbKPezc6xZHQdy6zfyFS
75
75
  reconcile/ocm_upgrade_scheduler_org.py,sha256=3g696Y2p3iLNzqXqOD-nQmu6PkiZ13X9sB0GaKvgZ6w,1254
76
76
  reconcile/ocm_upgrade_scheduler_org_updater.py,sha256=KJgJJpSnfQSPP0sY3EfcPaUxhrqrGexSuwqzaUK1JZY,4004
77
77
  reconcile/ocp_release_mirror.py,sha256=5qVLz1WpJAs0miPyC1kmGcFoeEI3eA73E_p0-a_XvdI,13174
78
- reconcile/openshift_base.py,sha256=36kgARd-aPvIgL_mvW_CQrSLbi3-17npDNK_zt3cKwU,42489
78
+ reconcile/openshift_base.py,sha256=eHEW6hrR0cAFRt4Z1vVm1n30T-x4PjF7wcJOKeUgyA4,42271
79
79
  reconcile/openshift_clusterrolebindings.py,sha256=cztreWXqrkxLgKvJGGWJg4ZleU1hxvY8Z6rRgCbyahc,5771
80
80
  reconcile/openshift_groups.py,sha256=C1L0tIWbXbpvQVCIoc6z9HMGixxWWx5EGmJtWv17s7w,9376
81
81
  reconcile/openshift_limitranges.py,sha256=SZkHhGS3m9oBUkzcclRiszfLEB7jQ8z8xh9P2Y8KTzg,3393
@@ -87,17 +87,17 @@ reconcile/openshift_resources.py,sha256=Lkn3KdIqxUCmOzlwoKjM2xVotTbJDfgjMGySvWtB
87
87
  reconcile/openshift_resources_base.py,sha256=AvUs4kJtFaBV9HGA1RvP0LjW0oBSr0AOsNwm6lrrwYM,40781
88
88
  reconcile/openshift_rolebindings.py,sha256=1k0o3hb3ZhhlbUjc8cP7IjKFux0oZApT8kLT8Y-pvqI,6579
89
89
  reconcile/openshift_routes.py,sha256=fXvuPSjcjVw1X3j2EQvUAdbOepmIFdKk-M3qP8QzPiw,1075
90
- reconcile/openshift_saas_deploy.py,sha256=mqgDmGHvQKcTGEcLbrceide8SDkxnGOJ4xPXCI4rxAA,9258
90
+ reconcile/openshift_saas_deploy.py,sha256=URaGXvp5C4rrQS3rgBLS-Czw5eJadByvYh1wvbENajI,8710
91
91
  reconcile/openshift_saas_deploy_change_tester.py,sha256=gdEke-uNKv1v8vuveThCn8_zEdP-BpiltS_OugqDFhg,9105
92
- reconcile/openshift_saas_deploy_trigger_base.py,sha256=FSgtkOL0A5nVq8EbD3cHFvawI9GTLmKDBFGIwreIavU,14071
93
- reconcile/openshift_saas_deploy_trigger_cleaner.py,sha256=U1JsDxO2Sr0zY4lPpXJhbnLe-6trjedqtSrRiRnqLio,2740
92
+ reconcile/openshift_saas_deploy_trigger_base.py,sha256=WARMn3elQ8TN0Z-9NKQLQZMhtSN2JO6iD3pRaaa44GY,13343
93
+ reconcile/openshift_saas_deploy_trigger_cleaner.py,sha256=fbSO48dnIMPV6XKPDoPD0pEFrhHYWfZcmvQfxAwQ-Ps,2728
94
94
  reconcile/openshift_saas_deploy_trigger_configs.py,sha256=uWzUV5D5CW0frdi1ys7BObNg-rA-VZKlefd4TD_Z-pY,959
95
95
  reconcile/openshift_saas_deploy_trigger_images.py,sha256=Yl4lMtxqab-c04I2Ju8isAJuYuNTbHN01Bk3dF9nTos,967
96
96
  reconcile/openshift_saas_deploy_trigger_moving_commits.py,sha256=VqjwgRhA-yOSq0WFPqGIJVgYkdq_UrTHcVusBzOFgMY,973
97
97
  reconcile/openshift_saas_deploy_trigger_upstream_jobs.py,sha256=etfBGj7GDXTOhNHKc40ee5QM0Chq3oHE40HrbWgopc8,971
98
98
  reconcile/openshift_saas_deploy_wrapper.py,sha256=worob8HdaQ31kndkQoWXqD-wK2jAIa4IR5um6KRsyf4,1854
99
99
  reconcile/openshift_serviceaccount_tokens.py,sha256=UlBRjfAxzf9-h4uxQwHqrYnBWMUGFqqfp6KvW2lM76k,6369
100
- reconcile/openshift_tekton_resources.py,sha256=2BiTYkJqMqqrOdI6jxhLvTJQNWCeWpgxaz1v2LzU-Eo,13558
100
+ reconcile/openshift_tekton_resources.py,sha256=nSJDPqL6Rl3jeUQKS6mFIqkWPdbXu_FNCeHER8w_GyY,13552
101
101
  reconcile/openshift_upgrade_watcher.py,sha256=4LtXziBS1tGfUiioGGzx6h7ZHXdGk97DSMLNblcGmHk,4843
102
102
  reconcile/openshift_users.py,sha256=dKWS3AVmgMKcblafHYz1pLVnTOp1ZzfePGQCaTpVc_8,5213
103
103
  reconcile/openshift_vault_secrets.py,sha256=Hy6pVWLsbEjxvn4S1k1zacbM447i5uDdyeT263-bNOI,1562
@@ -113,13 +113,13 @@ reconcile/query_validator.py,sha256=oLEZIAsQCzxmmZ7b9dSw-OKuEjpI1dbVu4XfCfjpmi8,
113
113
  reconcile/requests_sender.py,sha256=m00QET0mh6rys5r0y5uurZS7RIylXf04HU1dTdhjt0A,3791
114
114
  reconcile/resource_scraper.py,sha256=vo1N9vLJCYWvXlTwFRIpEuWjx_39ZV9zxJlpoPq4g3U,2330
115
115
  reconcile/saas_file_owners.py,sha256=w9U3HQNX5PXz0Rr6L07kFkFU1pj4DLCmRwEytScP2ks,11298
116
- reconcile/saas_file_validator.py,sha256=GCEFZyaioou58LUpE8ARHuGoYHns-56GGF6cEm_8TSI,1775
116
+ reconcile/saas_file_validator.py,sha256=beNvXE0lDS3QlfYYVi2ydnJw8Z6bBw0VLQwvsEcEMhQ,1235
117
117
  reconcile/sendgrid_teammates.py,sha256=v7zdkhjn-1uD-n3dzCmpGu_zlHfG_7UHAD9zT7FBg1Y,4379
118
118
  reconcile/sentry_config.py,sha256=iIrjc3N8WTURb0UiB4gELoT6tk3EhlSqPJWD8-RKo3c,20262
119
119
  reconcile/sentry_helper.py,sha256=gBrLZmpXCmnk1q3Mn6f-Ir7mL34h7YTKfsk0mmc0IdU,2198
120
120
  reconcile/service_dependencies.py,sha256=L3GgAFGeqGxqh7_Fzt0L3geS4x2yAQz8zQ_wUiYmPXY,4654
121
121
  reconcile/signalfx_endpoint_monitoring.py,sha256=D1m8iq0EAKie0OD59FOcVCtpWWZ7xlo6lwBS9urwMIk,2894
122
- reconcile/slack_base.py,sha256=K3fSYx46G1djoPb07_C9j6ChhMCt5LgV5l6v2TFkNZk,3479
122
+ reconcile/slack_base.py,sha256=bsVx9mwqFjBFGdG61QRQ77RjJKof9iXfduuQs4Fa-h4,3444
123
123
  reconcile/slack_usergroups.py,sha256=I9lj-DCPnsSxM0IofKry0vKiAVaLZSsT-gZGh2YW9rU,26841
124
124
  reconcile/sql_query.py,sha256=qnNPKwHIRz4rNMnFqMn0LHPiODkmUWi4qHfJVK08bVQ,22044
125
125
  reconcile/status.py,sha256=tRYtzPFsGETOfN57rcsLIJRl7cZVFkfQXNsUtoeJ7ns,545
@@ -157,7 +157,7 @@ reconcile/glitchtip/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
157
157
  reconcile/glitchtip/integration.py,sha256=52TnE8OH3I-GMg7p3IvlbnV-ysgnGBM2Rt57Hi0KI7s,6216
158
158
  reconcile/glitchtip/reconciler.py,sha256=U0ywAmdKjBU8Y75_YJhKEbTUJmX0IDjHvgLDb31xXPY,11608
159
159
  reconcile/glitchtip_project_dsn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
- reconcile/glitchtip_project_dsn/integration.py,sha256=Dg3NVrR5fnFJXJqqkPJy3Niil7aCOsD9JjCGgYVtcwU,7811
160
+ reconcile/glitchtip_project_dsn/integration.py,sha256=IvFlSYumDPhUw7gLfFX1P8tg-7Vns0ot2-Nqf2_sE18,7997
161
161
  reconcile/gql_definitions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
162
  reconcile/gql_definitions/change_owners/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
163
  reconcile/gql_definitions/change_owners/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -168,7 +168,6 @@ reconcile/gql_definitions/cna/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCe
168
168
  reconcile/gql_definitions/cna/queries/cna_provisioners.py,sha256=daQw9Nqith1jaFFDXc68iFggPxq1WUCF8C54F-3WiDg,2653
169
169
  reconcile/gql_definitions/cna/queries/cna_resources.py,sha256=B8deNpCTpRDLuJIULT4zSArPocMTsYTdweOZj5wtGdc,2728
170
170
  reconcile/gql_definitions/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
171
- reconcile/gql_definitions/common/app_code_component_repos.py,sha256=kWjhUj-_BQCYIbzxGXVJA0UbrWmNc8QXqubqMo8kdqU,1853
172
171
  reconcile/gql_definitions/common/app_interface_vault_settings.py,sha256=GEjbO_R9qSWy-tyLoSR8P1usQ3QPA8kxIofd507xJzs,1789
173
172
  reconcile/gql_definitions/common/clusters.py,sha256=5aPRj5ureg59tTD7E_xzni9fIqYh9tLcg3nz6iZW6cw,23942
174
173
  reconcile/gql_definitions/common/clusters_minimal.py,sha256=iYnAPQ7jDtEu06XgkDlltXa2_iJsp56rIfDqEYef-uM,5257
@@ -176,8 +175,6 @@ reconcile/gql_definitions/common/namespaces.py,sha256=HNu55aeBQUGr4JfjQFj8sGAE2S
176
175
  reconcile/gql_definitions/common/namespaces_minimal.py,sha256=0n9f2ldd_aEN9tzcqKvtzZ53ceH-1v411vVkD8wPaeY,3539
177
176
  reconcile/gql_definitions/common/pagerduty_instances.py,sha256=8NBHKRXg_OKG9NsJv6FOj8UVFcjkdJg-9E16ZqZIRPQ,2006
178
177
  reconcile/gql_definitions/common/pgp_reencryption_settings.py,sha256=tS68-tBBd7BJYmfTjtdTlxpABF3f_z9eJdtaKnyZc0Q,2305
179
- reconcile/gql_definitions/common/saas_files.py,sha256=oMR5w7GHxG5QgAzmbB1ZmtzTglwuxnPLNnerVp1JVwY,14975
180
- reconcile/gql_definitions/common/saasherder_settings.py,sha256=jxrFr03NmiwV3uegKCxQgB5iveC2IaGZIoguXoiNMgs,1797
181
178
  reconcile/gql_definitions/common/smtp_client_settings.py,sha256=Pb8VgTGFqCh4_rI0BOHoXuicfdNyol1kIN8NLONHaxI,2252
182
179
  reconcile/gql_definitions/common/users.py,sha256=C5EvC5gNBHqWuY4tvOG5oZUiFV4eognyu-KjBRsIkMM,1685
183
180
  reconcile/gql_definitions/dashdotdb_slo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -185,7 +182,6 @@ reconcile/gql_definitions/dashdotdb_slo/slo_documents_query.py,sha256=B7IoVDjyMm
185
182
  reconcile/gql_definitions/fragments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
186
183
  reconcile/gql_definitions/fragments/aws_infra_management_account.py,sha256=IuXBBDc0GHPvbw7TZcTM750L1gl8Rkqgf3Cco_YPe2w,1258
187
184
  reconcile/gql_definitions/fragments/jumphost_common_fields.py,sha256=yQYTbQs9yQDO9Vs-pv_99e_dSq48_SwUVpotRfFlihM,1038
188
- reconcile/gql_definitions/fragments/oc_connection_cluster.py,sha256=DoAYQLQXB-TYuQNLpnlNzzHYPzxAW64Fd9-94-1ZTLE,1623
189
185
  reconcile/gql_definitions/fragments/resource_values.py,sha256=DS3KqzgjT_wJ36SWPZ9HyNXOBNvbhhGnh06IMQmrFXQ,746
190
186
  reconcile/gql_definitions/fragments/user.py,sha256=6RVsHZVHjOrZKcH8rWGQG9V1OtPpACSZ3wNwca3H8pA,943
191
187
  reconcile/gql_definitions/fragments/vault_secret.py,sha256=pXbTPa-ptuT1L5HF83pEGMxhjRVA_b_wfGHS4NoZEW8,837
@@ -255,11 +251,11 @@ reconcile/templates/aws_access_key_email.j2,sha256=2MUr1ERmyISzKgHqsWYLd-1Wbl-pe
255
251
  reconcile/templates/email.yml.j2,sha256=R3zJrO8kV5RmEViSK9CdF7hH6Q-hdaEjeOkGuFUhXoI,513
256
252
  reconcile/templates/jira-checkpoint-missinginfo.j2,sha256=c_Vvg-lEENsB3tgxm9B6Y9igCUQhCnFDYh6xw-zcIbU,570
257
253
  reconcile/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
258
- reconcile/test/conftest.py,sha256=KxmkS055BlnzF0LaNbekFLLEsgYcrWOxULMi2zPAoV4,3251
254
+ reconcile/test/conftest.py,sha256=zCGUR0Ej5_0ts1wNE4ahXC1-GdYQdtNT-Idk4RQFfkw,2719
259
255
  reconcile/test/fixtures.py,sha256=VhvLXH0AWXEyu3FgPp7bcSTPmDPfMEa2v-_9cd8dCmw,572
260
256
  reconcile/test/test_aggregated_list.py,sha256=iiWitQuNYC58aimWaiBoE4NROHjr1NCgQ91MnHEG_Ro,6412
261
257
  reconcile/test/test_amtool.py,sha256=vxRhGieeydMBOb9UI2ziMHjJa8puMeGNsUhGhy-yMnk,1032
262
- reconcile/test/test_auto_promoter.py,sha256=_TBlDpl2DjjoCYR-DwiS1DvsJo6qr2FyNjVmQlxlEsU,10405
258
+ reconcile/test/test_auto_promoter.py,sha256=PH1g9kRENrTOYF9h1LM3vIq00uLl1F2CnFwht1igUHg,4278
263
259
  reconcile/test/test_aws_ami_share.py,sha256=eSITdDoXs8mMY7P2lFxAX2DA0sJ9RW6D1tG8Rek0gLE,1981
264
260
  reconcile/test/test_aws_iam_keys.py,sha256=MfE9EvItyPNPAl5QaLlJFUvvrZFiar518TM2wWNjJn4,1829
265
261
  reconcile/test/test_aws_iam_password_reset.py,sha256=fnkqB90adR7W4L4saNdrtIiwnQB9bXgqJ9R1CKxjSnk,860
@@ -304,8 +300,8 @@ reconcile/test/test_quay_repos.py,sha256=TdkcRF_a8PLp01Kti9eZZN-vGup2yPBT4Iba3k0
304
300
  reconcile/test/test_queries.py,sha256=jrc9OCGLGPrqX_XUSKHiOpIAVPHa1omYJ-Zy7a5Hk9U,2262
305
301
  reconcile/test/test_repo_owners.py,sha256=uRYMLbMmh-9usF0TerabZTZV-Z1CS4I6ybT-LQqCLe8,1423
306
302
  reconcile/test/test_requests_sender.py,sha256=7fd9C2kEFS0-CYtlsif66N1kO9c44pzuBPAJKR9igqU,5385
307
- reconcile/test/test_saasherder.py,sha256=wLUte46D8klMhAfhBIENgfgkzNLMSjzfT4x81tEe5hQ,33141
308
- reconcile/test/test_saasherder_allowed_secret_paths.py,sha256=L9xoTm2BF76RfMacGgi9bHUQ9RUsobIBU83Yh47xxK8,4914
303
+ reconcile/test/test_saasherder.py,sha256=CDj2w2cWqMGqZfwzthlT4PMZ8vgKz1EXdGHcoh07Lvw,34141
304
+ reconcile/test/test_saasherder_allowed_secret_paths.py,sha256=_fRNiu6NApgnzhkE7f3wY3svfezf7CZ5OZ64AY-ViB4,2522
309
305
  reconcile/test/test_secret_reader.py,sha256=kz7nzcPjvA08cytnvcA_PMA98AEyqJWsESkYeRn5xCk,4994
310
306
  reconcile/test/test_slack_base.py,sha256=UqMjYt4hPmStJfog06qwJM_afbf-E9uzy-GX741KgTY,5058
311
307
  reconcile/test/test_slack_usergroups.py,sha256=FxAuKIS1bx4LiVxNidvirpyHtiZepqMaW3aGxYJn0OI,23609
@@ -372,8 +368,6 @@ reconcile/typed_queries/namespaces.py,sha256=vItPrn7sfcHOix-VvkzQkf54_ljzI_ymyxh
372
368
  reconcile/typed_queries/namespaces_minimal.py,sha256=rUtqNQ0ORXXUTQfnpsMURymAJ4gYtE77V-Lb3LiJFEY,278
373
369
  reconcile/typed_queries/ocp_release_mirror.py,sha256=jwX29Tcdvov8oEDNkE4t1j-2Hz8QJrjg9ITppP-panQ,313
374
370
  reconcile/typed_queries/pagerduty_instances.py,sha256=QCHqEAakiH6eSob0Pnnn3IBd8Ga0zpEp1Z6Qu3v2uH4,733
375
- reconcile/typed_queries/repos.py,sha256=RKBsf7IDS6NsXTtXxJ9Ol9G3bxG9sr3vW9QQ2bahEHo,512
376
- reconcile/typed_queries/saas_files.py,sha256=ZCf_Zo1mXjpnsoSzogPSzzFATKkHZvJAsJVtZdQkwEk,2112
377
371
  reconcile/typed_queries/smtp.py,sha256=aSLglYa5bHKmlGwKkxq2RZqyMWuAf0a4S_mOuhDa084,542
378
372
  reconcile/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
379
373
  reconcile/utils/aggregated_list.py,sha256=svF8qu2U8iAIUPrGbKiMzuzz2RffI0GOJzWDxBDgSIQ,3332
@@ -430,6 +424,7 @@ reconcile/utils/promtool.py,sha256=G8Rar7sA85J8vrAgesaZdPaJ11M-RqdsgcSDUuNgWN8,2
430
424
  reconcile/utils/quay_api.py,sha256=EuOegpb-7ntEjkKLFwM2Oo4Nw7SyFtmyl3sQ9aXMtrM,8152
431
425
  reconcile/utils/raw_github_api.py,sha256=ZHC-SZuAyRe1zaMoOU7Krt1-zecDxENd9c_NzQYqK9g,2968
432
426
  reconcile/utils/repo_owners.py,sha256=j-pUjc9PuDzq7KpjNLpnhqfU8tUG4nj2WMhFp4ick7g,6629
427
+ reconcile/utils/saasherder.py,sha256=RGUofmzjoECPbwupJAnAWLVZeXpyhmL0EM4-zGckpSQ,79380
433
428
  reconcile/utils/secret_reader.py,sha256=eHbFZIBtr7BZ3YIrHcVzxwqy-Xw_8RexVkhmZGSa2sg,10361
434
429
  reconcile/utils/semver_helper.py,sha256=4Rrkz9Cj9A6oHPVgA-nGj6MBoxlFT4eyxTcslWqow3I,771
435
430
  reconcile/utils/sentry_client.py,sha256=eJ8YrjKpgHGJYP38rDDETkUhT_fnJd-K34po4WHEXIU,11913
@@ -451,9 +446,9 @@ reconcile/utils/glitchtip/client.py,sha256=xra8V8R6p0NGISD5PWbl4uSIecoIm7xBqVTIL
451
446
  reconcile/utils/glitchtip/models.py,sha256=hZphtws-06IJUdd5uTpt22r8cv5Z4MLNE4OTo3zo6Lc,3800
452
447
  reconcile/utils/mr/__init__.py,sha256=O9Qlx8tnSncM0D8UjEQ-0ECZ8zs3FVd0w-h9P6OCMpQ,2444
453
448
  reconcile/utils/mr/app_interface_reporter.py,sha256=XCaM4p-kiBJtGfeDHl9RbgSx4glhsL3mimiEoGrNid0,1996
454
- reconcile/utils/mr/auto_promoter.py,sha256=AsFNOQWxOF2R19kJftpYXlsmiryDQCJxx3H83mMky3E,8331
449
+ reconcile/utils/mr/auto_promoter.py,sha256=fr9xQP_qDZE0TVn2R9mo-ulspC1h9xAP3cDu7yzF3K4,7650
455
450
  reconcile/utils/mr/aws_access.py,sha256=2Qk0ph5S_iQpTQ5GcVrUTBOuFkw_T4rvIA5ThzUiV18,2719
456
- reconcile/utils/mr/base.py,sha256=0-HDFU4Gmze33FoRMe8kxAddLEOfZaMGtssaUto8KH4,6318
451
+ reconcile/utils/mr/base.py,sha256=TJ1h26p-Ms1BhjyLAg7y_uQAfgI-Jsj77vKAqmcK9S4,6233
457
452
  reconcile/utils/mr/clusters_updates.py,sha256=WQ5HDlKmJqDaAdK8ZX3AN-9iKJpHt031LM2dC8s0IUI,2153
458
453
  reconcile/utils/mr/labels.py,sha256=RKg8_dSQBZBoRbU-a8VH90UTYmwjFH1GodLQDsRrcDE,525
459
454
  reconcile/utils/mr/notificator.py,sha256=MbXA7pgaB-CN1R1kY88MNQ27ZMXX56myqJY4jRSqDhQ,2419
@@ -466,10 +461,6 @@ reconcile/utils/runtime/environment.py,sha256=cJgCMRBeschdeKJuk_N6BhDWaOCZbo-41i
466
461
  reconcile/utils/runtime/integration.py,sha256=iUPlei8Kx1ulrN379i9k8b_Npw4zVTZa9u_d_y96eYU,10461
467
462
  reconcile/utils/runtime/meta.py,sha256=hQ_jHPY0zbyA08hzpfu4FzOw25NqMg_fgCr2r9gGXx8,246
468
463
  reconcile/utils/runtime/runner.py,sha256=yXWEQF5S8DAnEo6XDyJ8R8Z1Y8wi0ykL8_OKn3vzBQA,7546
469
- reconcile/utils/saasherder/__init__.py,sha256=J3MBZBFa5YmhqYm08QsjBXz8mFcVOCiOCkyIcw41t7E,343
470
- reconcile/utils/saasherder/interfaces.py,sha256=HAcSoGHacCNkNDcvKaYpnogVpWheL0wstDoygPsbVeU,8448
471
- reconcile/utils/saasherder/models.py,sha256=nAFwtSYMCCjDoT85R9JifKo4NOTrZ8wYWuvKO8n1u8s,4705
472
- reconcile/utils/saasherder/saasherder.py,sha256=gKve2Z-GXPuIb-Go3C6CtLTGgm5-6xYr4TQJ3_WgGIE,76569
473
464
  reconcile/utils/terraform/__init__.py,sha256=zNbiyTWo35AT1sFTElL2j_AA0jJ_yWE_bfFn-nD2xik,250
474
465
  reconcile/utils/terraform/config.py,sha256=5UVrd563TMcvi4ooa5JvWVDW1I3bIWg484u79evfV_8,164
475
466
  reconcile/utils/terraform/config_client.py,sha256=91611UNL4xFdoERiRRamb8Da55amV62kGlSws2JzVrE,4417
@@ -491,8 +482,8 @@ tools/sre_checkpoints/util.py,sha256=zEDbGr18ZeHNQwW8pUsr2JRjuXIPz--WAGJxZo9sv_Y
491
482
  tools/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
492
483
  tools/test/test_qontract_cli.py,sha256=awwTHEc2DWlykuqGIYM0WOBoSL0KRnOraCLk3C7izis,1401
493
484
  tools/test/test_sre_checkpoints.py,sha256=SKqPPTl9ua0RFdSSofnoQX-JZE6dFLO3LRhfQzqtfh8,2607
494
- qontract_reconcile-0.9.1rc162.dist-info/METADATA,sha256=uGjhqqC6Z7G3qeCgtExjPl4uYFeSgO9s-OQ2IbxdVfI,2259
495
- qontract_reconcile-0.9.1rc162.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
496
- qontract_reconcile-0.9.1rc162.dist-info/entry_points.txt,sha256=3BPvsRryM1C4S_mb5kXmP5AVv-wJBzVCrOJyv6qUmc0,195
497
- qontract_reconcile-0.9.1rc162.dist-info/top_level.txt,sha256=j0CHPIc8TsVRB50wOz_jhxjjaRyCJB3NOQeXhuHS67c,34
498
- qontract_reconcile-0.9.1rc162.dist-info/RECORD,,
485
+ qontract_reconcile-0.9.1rc164.dist-info/METADATA,sha256=LcfNXIQP59di8kjIiUsOqFcH7S3wyZQiTH36PElzOkk,2259
486
+ qontract_reconcile-0.9.1rc164.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
487
+ qontract_reconcile-0.9.1rc164.dist-info/entry_points.txt,sha256=3BPvsRryM1C4S_mb5kXmP5AVv-wJBzVCrOJyv6qUmc0,195
488
+ qontract_reconcile-0.9.1rc164.dist-info/top_level.txt,sha256=j0CHPIc8TsVRB50wOz_jhxjjaRyCJB3NOQeXhuHS67c,34
489
+ qontract_reconcile-0.9.1rc164.dist-info/RECORD,,
@@ -117,6 +117,9 @@ def fetch_desired_state(
117
117
  for glitchtip_project in glitchtip_projects:
118
118
  org = Organization(name=glitchtip_project.organization.name)
119
119
  project = Project(name=glitchtip_project.name)
120
+ if project not in glitchtip_client.projects(organization_slug=org.slug):
121
+ logging.info(f"Project {project.name} does not exist (yet). Skipping.")
122
+ continue
120
123
  key = glitchtip_client.project_key(
121
124
  organization_slug=org.slug, project_slug=project.slug
122
125
  )
@@ -7,10 +7,7 @@ from reconcile import queries
7
7
  from reconcile.utils import gql
8
8
  from reconcile.utils.defer import defer
9
9
  from reconcile.utils.jjb_client import JJB
10
- from reconcile.utils.secret_reader import (
11
- SecretReader,
12
- SecretReaderBase,
13
- )
10
+ from reconcile.utils.secret_reader import SecretReader
14
11
  from reconcile.utils.state import init_state
15
12
 
16
13
  QUERY = """
@@ -71,7 +68,7 @@ def collect_configs(instance_name, config_name):
71
68
 
72
69
 
73
70
  def init_jjb(
74
- secret_reader: SecretReaderBase,
71
+ secret_reader: SecretReader,
75
72
  instance_name: Optional[str] = None,
76
73
  config_name: Optional[str] = None,
77
74
  print_only: bool = False,
@@ -310,17 +310,17 @@ def populate_current_state(
310
310
 
311
311
 
312
312
  def fetch_current_state(
313
- namespaces: Optional[Iterable[Mapping]] = None,
314
- clusters: Optional[Iterable[Mapping]] = None,
315
- thread_pool_size: Optional[int] = None,
316
- integration: Optional[str] = None,
317
- integration_version: Optional[str] = None,
318
- override_managed_types: Optional[Iterable[str]] = None,
319
- internal: Optional[bool] = None,
320
- use_jump_host: bool = True,
321
- init_api_resources: bool = False,
322
- cluster_admin: bool = False,
323
- ) -> tuple[ResourceInventory, OC_Map]:
313
+ namespaces=None,
314
+ clusters=None,
315
+ thread_pool_size=None,
316
+ integration=None,
317
+ integration_version=None,
318
+ override_managed_types=None,
319
+ internal=None,
320
+ use_jump_host=True,
321
+ init_api_resources=False,
322
+ cluster_admin=False,
323
+ ):
324
324
  ri = ResourceInventory()
325
325
  settings = queries.get_app_interface_settings()
326
326
  oc_map = OC_Map(
@@ -1,7 +1,10 @@
1
1
  import logging
2
2
  import sys
3
3
  from collections.abc import Callable
4
- from typing import Optional
4
+ from typing import (
5
+ Any,
6
+ Optional,
7
+ )
5
8
 
6
9
  import reconcile.jenkins_plugins as jenkins_base
7
10
  import reconcile.openshift_base as ob
@@ -9,50 +12,45 @@ from reconcile import (
9
12
  mr_client_gateway,
10
13
  queries,
11
14
  )
12
- from reconcile.gql_definitions.common.saas_files import (
13
- PipelinesProviderTektonV1,
14
- SaasFileV2,
15
- )
16
15
  from reconcile.openshift_tekton_resources import build_one_per_saas_file_tkn_object_name
17
16
  from reconcile.slack_base import slackapi_from_slack_workspace
18
17
  from reconcile.status import ExitCodes
19
- from reconcile.typed_queries.app_interface_vault_settings import (
20
- get_app_interface_vault_settings,
21
- )
22
- from reconcile.typed_queries.saas_files import (
23
- get_saas_files,
24
- get_saasherder_settings,
25
- )
26
18
  from reconcile.utils.defer import defer
27
19
  from reconcile.utils.gitlab_api import GitLabApi
28
20
  from reconcile.utils.openshift_resource import ResourceInventory
29
21
  from reconcile.utils.saasherder import SaasHerder
30
- from reconcile.utils.secret_reader import create_secret_reader
22
+ from reconcile.utils.secret_reader import SecretReader
31
23
  from reconcile.utils.semver_helper import make_semver
32
24
  from reconcile.utils.slack_api import SlackApi
33
- from reconcile.utils.state import init_state
34
25
 
35
26
  QONTRACT_INTEGRATION = "openshift-saas-deploy"
36
27
  QONTRACT_INTEGRATION_VERSION = make_semver(0, 1, 0)
37
28
 
38
29
 
39
- def compose_console_url(saas_file: SaasFileV2, env_name: str) -> str:
40
- if not isinstance(saas_file.pipelines_provider, PipelinesProviderTektonV1):
41
- raise ValueError(
42
- f"Unsupported pipelines_provider: {saas_file.pipelines_provider}"
43
- )
44
- pipeline_template_name = (
45
- saas_file.pipelines_provider.defaults.pipeline_templates.openshift_saas_deploy.name
46
- if not saas_file.pipelines_provider.pipeline_templates
47
- else saas_file.pipelines_provider.pipeline_templates.openshift_saas_deploy.name
48
- )
30
+ def compose_console_url(
31
+ saas_file: dict[str, Any], saas_file_name: str, env_name: str
32
+ ) -> str:
33
+ pp = saas_file["pipelinesProvider"]
34
+ pp_ns = pp["namespace"]
35
+ pp_ns_name = pp_ns["name"]
36
+ pp_cluster = pp_ns["cluster"]
37
+ pp_cluster_console_url = pp_cluster["consoleUrl"]
38
+
39
+ pipeline_template_name = pp["defaults"]["pipelineTemplates"]["openshiftSaasDeploy"][
40
+ "name"
41
+ ]
42
+
43
+ if pp["pipelineTemplates"]:
44
+ pipeline_template_name = pp["pipelineTemplates"]["openshiftSaasDeploy"]["name"]
45
+
49
46
  pipeline_name = build_one_per_saas_file_tkn_object_name(
50
- pipeline_template_name, saas_file.name
47
+ pipeline_template_name, saas_file_name
51
48
  )
49
+
52
50
  return (
53
- f"{saas_file.pipelines_provider.namespace.cluster.console_url}/k8s/ns/{saas_file.pipelines_provider.namespace.name}/"
51
+ f"{pp_cluster_console_url}/k8s/ns/{pp_ns_name}/"
54
52
  + "tekton.dev~v1beta1~Pipeline/"
55
- + f"{pipeline_name}/Runs?name={saas_file.name}-{env_name}"
53
+ + f"{pipeline_name}/Runs?name={saas_file_name}-{env_name}"
56
54
  )
57
55
 
58
56
 
@@ -93,37 +91,34 @@ def run(
93
91
  gitlab_project_id: Optional[str] = None,
94
92
  defer: Optional[Callable] = None,
95
93
  ) -> None:
96
- vault_settings = get_app_interface_vault_settings()
97
- secret_reader = create_secret_reader(use_vault=vault_settings.vault)
98
-
99
- all_saas_files = get_saas_files()
100
- saas_files = get_saas_files(saas_file_name, env_name)
94
+ all_saas_files = queries.get_saas_files()
95
+ saas_files = queries.get_saas_files(saas_file_name, env_name)
101
96
  if not saas_files:
102
97
  logging.error("no saas files found")
103
- raise RuntimeError("no saas files found")
98
+ sys.exit(ExitCodes.ERROR)
104
99
 
105
100
  # notify different outputs (publish results, slack notifications)
106
101
  # we only do this if:
107
102
  # - this is not a dry run
108
103
  # - there is a single saas file deployed
109
104
  notify = not dry_run and len(saas_files) == 1
110
- slack = None
111
105
  if notify:
112
106
  saas_file = saas_files[0]
113
- if saas_file.slack:
107
+ slack_info = saas_file.get("slack")
108
+ if slack_info:
114
109
  if not saas_file_name or not env_name:
115
110
  raise RuntimeError(
116
111
  "saas_file_name and env_name must be provided "
117
112
  + "when using slack notifications"
118
113
  )
119
114
  slack = slackapi_from_slack_workspace(
120
- saas_file.slack.dict(by_alias=True),
121
- secret_reader,
115
+ slack_info,
116
+ SecretReader(queries.get_secret_reader_settings()),
122
117
  QONTRACT_INTEGRATION,
123
118
  init_usergroups=False,
124
119
  )
125
120
  ri = ResourceInventory()
126
- console_url = compose_console_url(saas_file, env_name)
121
+ console_url = compose_console_url(saas_file, saas_file_name, env_name)
127
122
  if (
128
123
  defer
129
124
  ): # defer is provided by the method decorator. this makes just mypy happy
@@ -139,7 +134,8 @@ def run(
139
134
  )
140
135
  )
141
136
  # deployment start notification
142
- if saas_file.slack.notifications and saas_file.slack.notifications.start:
137
+ slack_notifications = slack_info.get("notifications")
138
+ if slack_notifications and slack_notifications.get("start"):
143
139
  slack_notify(
144
140
  saas_file_name,
145
141
  env_name,
@@ -148,9 +144,16 @@ def run(
148
144
  console_url,
149
145
  in_progress=True,
150
146
  )
147
+ else:
148
+ slack = None
151
149
 
152
- jenkins_map = jenkins_base.get_jenkins_map()
153
- saasherder_settings = get_saasherder_settings()
150
+ # instance exists in v1 saas files only
151
+ desired_jenkins_instances = [
152
+ s["instance"]["name"] for s in saas_files if s.get("instance")
153
+ ]
154
+ jenkins_map = jenkins_base.get_jenkins_map(
155
+ desired_instances=desired_jenkins_instances
156
+ )
154
157
  settings = queries.get_app_interface_settings()
155
158
  try:
156
159
  instance = queries.get_gitlab_instance()
@@ -161,28 +164,26 @@ def run(
161
164
  gl = None
162
165
 
163
166
  saasherder = SaasHerder(
164
- saas_files=saas_files,
167
+ saas_files,
165
168
  thread_pool_size=thread_pool_size,
169
+ gitlab=gl,
166
170
  integration=QONTRACT_INTEGRATION,
167
171
  integration_version=QONTRACT_INTEGRATION_VERSION,
168
- secret_reader=secret_reader,
169
- hash_length=saasherder_settings.hash_length,
170
- repo_url=saasherder_settings.repo_url,
171
- gitlab=gl,
172
+ settings=settings,
172
173
  jenkins_map=jenkins_map,
173
- state=init_state(integration=QONTRACT_INTEGRATION, secret_reader=secret_reader),
174
+ initialise_state=True,
174
175
  )
175
176
  if len(saasherder.namespaces) == 0:
176
177
  logging.warning("no targets found")
177
178
  sys.exit(ExitCodes.SUCCESS)
178
179
 
179
180
  ri, oc_map = ob.fetch_current_state(
180
- namespaces=[ns.dict(by_alias=True) for ns in saasherder.namespaces],
181
+ namespaces=saasherder.namespaces,
181
182
  thread_pool_size=thread_pool_size,
182
183
  integration=QONTRACT_INTEGRATION,
183
184
  integration_version=QONTRACT_INTEGRATION_VERSION,
184
185
  init_api_resources=True,
185
- cluster_admin=bool(saasherder.cluster_admin),
186
+ cluster_admin=saasherder.cluster_admin,
186
187
  use_jump_host=use_jump_host,
187
188
  )
188
189
  if defer: # defer is provided by the method decorator. this makes just mypy happy
@@ -208,7 +209,7 @@ def run(
208
209
  ri,
209
210
  thread_pool_size,
210
211
  caller=saas_file_name,
211
- all_callers=[sf.name for sf in all_saas_files if not sf.deprecated],
212
+ all_callers=[sf["name"] for sf in all_saas_files if not sf["deprecated"]],
212
213
  wait_for_namespace=True,
213
214
  no_dry_run_skip_compare=(not saasherder.compare),
214
215
  take_over=saasherder.take_over,
@@ -247,13 +248,7 @@ def run(
247
248
  # - there is a single saas file deployed
248
249
  # - output is 'events'
249
250
  # - no errors were registered
250
- if (
251
- notify
252
- and slack
253
- and actions
254
- and saas_file.slack
255
- and saas_file.slack.output == "events"
256
- ):
251
+ if notify and slack and actions and slack_info.get("output") == "events":
257
252
  for action in actions:
258
253
  message = (
259
254
  f"[{action['cluster']}] "