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.
- {qontract_reconcile-0.9.1rc162.dist-info → qontract_reconcile-0.9.1rc164.dist-info}/METADATA +2 -2
- {qontract_reconcile-0.9.1rc162.dist-info → qontract_reconcile-0.9.1rc164.dist-info}/RECORD +21 -30
- reconcile/glitchtip_project_dsn/integration.py +3 -0
- reconcile/jenkins_job_builder.py +2 -5
- reconcile/openshift_base.py +11 -11
- reconcile/openshift_saas_deploy.py +52 -57
- reconcile/openshift_saas_deploy_trigger_base.py +48 -55
- reconcile/openshift_saas_deploy_trigger_cleaner.py +2 -2
- reconcile/openshift_tekton_resources.py +1 -1
- reconcile/saas_file_validator.py +10 -23
- reconcile/slack_base.py +2 -5
- reconcile/test/conftest.py +0 -11
- reconcile/test/test_auto_promoter.py +42 -199
- reconcile/test/test_saasherder.py +463 -398
- reconcile/test/test_saasherder_allowed_secret_paths.py +36 -87
- reconcile/utils/mr/auto_promoter.py +50 -58
- reconcile/utils/mr/base.py +2 -6
- reconcile/utils/{saasherder/saasherder.py → saasherder.py} +736 -656
- reconcile/gql_definitions/common/app_code_component_repos.py +0 -68
- reconcile/gql_definitions/common/saas_files.py +0 -542
- reconcile/gql_definitions/common/saasherder_settings.py +0 -62
- reconcile/gql_definitions/fragments/oc_connection_cluster.py +0 -47
- reconcile/typed_queries/repos.py +0 -17
- reconcile/typed_queries/saas_files.py +0 -61
- reconcile/utils/saasherder/__init__.py +0 -17
- reconcile/utils/saasherder/interfaces.py +0 -404
- reconcile/utils/saasherder/models.py +0 -203
- {qontract_reconcile-0.9.1rc162.dist-info → qontract_reconcile-0.9.1rc164.dist-info}/WHEEL +0 -0
- {qontract_reconcile-0.9.1rc162.dist-info → qontract_reconcile-0.9.1rc164.dist-info}/entry_points.txt +0 -0
- {qontract_reconcile-0.9.1rc162.dist-info → qontract_reconcile-0.9.1rc164.dist-info}/top_level.txt +0 -0
{qontract_reconcile-0.9.1rc162.dist-info → qontract_reconcile-0.9.1rc164.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: qontract-reconcile
|
3
|
-
Version: 0.9.
|
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.
|
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=
|
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=
|
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=
|
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=
|
93
|
-
reconcile/openshift_saas_deploy_trigger_cleaner.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
308
|
-
reconcile/test/test_saasherder_allowed_secret_paths.py,sha256=
|
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=
|
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=
|
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.
|
495
|
-
qontract_reconcile-0.9.
|
496
|
-
qontract_reconcile-0.9.
|
497
|
-
qontract_reconcile-0.9.
|
498
|
-
qontract_reconcile-0.9.
|
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
|
)
|
reconcile/jenkins_job_builder.py
CHANGED
@@ -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:
|
71
|
+
secret_reader: SecretReader,
|
75
72
|
instance_name: Optional[str] = None,
|
76
73
|
config_name: Optional[str] = None,
|
77
74
|
print_only: bool = False,
|
reconcile/openshift_base.py
CHANGED
@@ -310,17 +310,17 @@ def populate_current_state(
|
|
310
310
|
|
311
311
|
|
312
312
|
def fetch_current_state(
|
313
|
-
namespaces
|
314
|
-
clusters
|
315
|
-
thread_pool_size
|
316
|
-
integration
|
317
|
-
integration_version
|
318
|
-
override_managed_types
|
319
|
-
internal
|
320
|
-
use_jump_host
|
321
|
-
init_api_resources
|
322
|
-
cluster_admin
|
323
|
-
)
|
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
|
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
|
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(
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
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,
|
47
|
+
pipeline_template_name, saas_file_name
|
51
48
|
)
|
49
|
+
|
52
50
|
return (
|
53
|
-
f"{
|
51
|
+
f"{pp_cluster_console_url}/k8s/ns/{pp_ns_name}/"
|
54
52
|
+ "tekton.dev~v1beta1~Pipeline/"
|
55
|
-
+ f"{pipeline_name}/Runs?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
|
-
|
97
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
121
|
-
|
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
|
-
|
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
|
-
|
153
|
-
|
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
|
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
|
-
|
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
|
-
|
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=
|
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=
|
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
|
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']}] "
|