qontract-reconcile 0.10.2.dev478__py3-none-any.whl → 0.10.2.dev480__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.10.2.dev478.dist-info → qontract_reconcile-0.10.2.dev480.dist-info}/METADATA +3 -4
- {qontract_reconcile-0.10.2.dev478.dist-info → qontract_reconcile-0.10.2.dev480.dist-info}/RECORD +22 -22
- reconcile/aws_account_manager/reconciler.py +40 -40
- reconcile/aws_version_sync/integration.py +6 -5
- reconcile/change_owners/change_types.py +2 -2
- reconcile/external_resources/manager.py +2 -7
- reconcile/external_resources/model.py +2 -0
- reconcile/gitlab_permissions.py +3 -2
- reconcile/openshift_base.py +4 -2
- reconcile/openshift_resources_base.py +12 -21
- reconcile/typed_queries/saas_files.py +2 -2
- reconcile/typed_queries/smtp.py +3 -3
- reconcile/utils/jira_client.py +6 -6
- reconcile/utils/jobcontroller/controller.py +2 -1
- reconcile/utils/rhcsv2_certs.py +2 -1
- reconcile/utils/terrascript_aws_client.py +8 -7
- reconcile/utils/vault.py +4 -2
- tools/app_interface_reporter.py +2 -2
- tools/glitchtip_access_reporter.py +1 -1
- tools/qontract_cli.py +4 -4
- {qontract_reconcile-0.10.2.dev478.dist-info → qontract_reconcile-0.10.2.dev480.dist-info}/WHEEL +0 -0
- {qontract_reconcile-0.10.2.dev478.dist-info → qontract_reconcile-0.10.2.dev480.dist-info}/entry_points.txt +0 -0
{qontract_reconcile-0.10.2.dev478.dist-info → qontract_reconcile-0.10.2.dev480.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: qontract-reconcile
|
|
3
|
-
Version: 0.10.2.
|
|
3
|
+
Version: 0.10.2.dev480
|
|
4
4
|
Summary: Collection of tools to reconcile services with their desired state as defined in the app-interface DB.
|
|
5
5
|
Project-URL: homepage, https://github.com/app-sre/qontract-reconcile
|
|
6
6
|
Project-URL: repository, https://github.com/app-sre/qontract-reconcile
|
|
@@ -12,7 +12,7 @@ Classifier: Programming Language :: Python
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.12
|
|
14
14
|
Requires-Python: ==3.12.*
|
|
15
|
-
Requires-Dist: anymarkup
|
|
15
|
+
Requires-Dist: anymarkup==0.8.1
|
|
16
16
|
Requires-Dist: boto3==1.34.94
|
|
17
17
|
Requires-Dist: botocore==1.34.94
|
|
18
18
|
Requires-Dist: click<9.0,>=7.0
|
|
@@ -23,7 +23,7 @@ Requires-Dist: dnspython~=2.1
|
|
|
23
23
|
Requires-Dist: dt==1.1.73
|
|
24
24
|
Requires-Dist: filetype~=1.2.0
|
|
25
25
|
Requires-Dist: gql==3.1.0
|
|
26
|
-
Requires-Dist: hvac
|
|
26
|
+
Requires-Dist: hvac==2.4.0
|
|
27
27
|
Requires-Dist: jenkins-job-builder==6.4.2
|
|
28
28
|
Requires-Dist: jinja2<3.2.0,>=2.10.1
|
|
29
29
|
Requires-Dist: jira==3.10.5
|
|
@@ -33,7 +33,6 @@ Requires-Dist: jsonpath-rw<1.5.0,>=1.4.0
|
|
|
33
33
|
Requires-Dist: jsonpointer~=2.4
|
|
34
34
|
Requires-Dist: kubernetes==32.0.1
|
|
35
35
|
Requires-Dist: ldap3<2.10.0,>=2.9.1
|
|
36
|
-
Requires-Dist: markupsafe==2.1.1
|
|
37
36
|
Requires-Dist: networkx~=2.8
|
|
38
37
|
Requires-Dist: parse==1.18.0
|
|
39
38
|
Requires-Dist: prometheus-client~=0.8
|
{qontract_reconcile-0.10.2.dev478.dist-info → qontract_reconcile-0.10.2.dev480.dist-info}/RECORD
RENAMED
|
@@ -31,7 +31,7 @@ reconcile/gitlab_labeler.py,sha256=BA2dbXsN9hErUwJl22qcxfeH7XiPCuQ9LN3NddWdnpo,4
|
|
|
31
31
|
reconcile/gitlab_members.py,sha256=ZpwsN5WkDwo-QroIXBRjJ5qV577o8m3mvVSmpPkNNhE,8252
|
|
32
32
|
reconcile/gitlab_mr_sqs_consumer.py,sha256=3FB5vbVB9INBxMj4s1PrDIX-I1Gwu-CGBOH2_KeYShQ,2718
|
|
33
33
|
reconcile/gitlab_owners.py,sha256=So7OWq3B1f3-aYlhd2kARYt1nwPV4jrbf5YPRXoHPrM,14663
|
|
34
|
-
reconcile/gitlab_permissions.py,sha256=
|
|
34
|
+
reconcile/gitlab_permissions.py,sha256=0H2UCa_44hgWbbOKFTw7zxjOjhjqDmS-m6r1gFFkaLQ,8188
|
|
35
35
|
reconcile/gitlab_projects.py,sha256=JIB1UP8CnwSkngEMZE7DFQETMX6sJMp4DXaKoS-Pdkc,1879
|
|
36
36
|
reconcile/integrations_manager.py,sha256=fk5Vt7MaJMb0XnC2AZjcSPi8RQ-wM8tf8LADKsdu6G0,9416
|
|
37
37
|
reconcile/jenkins_base.py,sha256=0Gocu3fU2YTltaxBlbDQOUvP-7CP2OSQV1ZRwtWeVXw,875
|
|
@@ -54,7 +54,7 @@ reconcile/ocm_groups.py,sha256=gDnkhkYUEoMkI6y6ctyoKIFpJNS18SVnedW4OzJ8VWs,4174
|
|
|
54
54
|
reconcile/ocm_machine_pools.py,sha256=l_ZJNkM-Pl4vl2LRI-aFjBjJm_TFSNKZchIjeZQB-0M,17738
|
|
55
55
|
reconcile/ocm_update_recommended_version.py,sha256=Vi3Y2sX-OQxx1mv_xiPQXnmrpsZzGIE38No0yBcTaD4,4204
|
|
56
56
|
reconcile/ocm_upgrade_scheduler_org_updater.py,sha256=j4qthqx8qREB6mSbV9NT-Giq1Tu5y2EhPgIObkvmjyU,4371
|
|
57
|
-
reconcile/openshift_base.py,sha256=
|
|
57
|
+
reconcile/openshift_base.py,sha256=ERc8BELzWr8PF8SQtBbcYkzvudLe676ecEmS09MYZz0,57929
|
|
58
58
|
reconcile/openshift_cluster_bots.py,sha256=QBflmFjXaIY7bxNlI2qSI5sER3Jks-_FAhrPHschI4g,10939
|
|
59
59
|
reconcile/openshift_clusterrolebindings.py,sha256=jwSaYQvUUY7noQGc148Dkqm6woYxvOEd1sume7k_sUk,6212
|
|
60
60
|
reconcile/openshift_groups.py,sha256=XpIyhgnWY1XUQio1wi6sHoDtoMYdk-lpHp0-1d1RC7o,9471
|
|
@@ -65,7 +65,7 @@ reconcile/openshift_network_policies.py,sha256=e6yo7F0zpeGySycqeK0ugzSmC_kn_5h4W
|
|
|
65
65
|
reconcile/openshift_prometheus_rules.py,sha256=FVVx1D7KCUnNZh7NwVNbD6t4lXKRSO7ph5bvAXruPno,1417
|
|
66
66
|
reconcile/openshift_resourcequotas.py,sha256=0CSuCre3T2ON42Ku1UDhTRugfmUNBx8PILpxIQaAzJU,2882
|
|
67
67
|
reconcile/openshift_resources.py,sha256=YnhDxCvsp0muxEmULiqWhoar9EzxohTrnbY-U7oS5Hc,1603
|
|
68
|
-
reconcile/openshift_resources_base.py,sha256=
|
|
68
|
+
reconcile/openshift_resources_base.py,sha256=wOdQMLqaiQleQTsC8MH9nwpBKFffLcOuZthpOcc1heE,43096
|
|
69
69
|
reconcile/openshift_rhcs_certs.py,sha256=UjBFX344n4eFXZmoEUCVeGECBowWTpbjNyPGrEzAmkA,11544
|
|
70
70
|
reconcile/openshift_rolebindings.py,sha256=G4n7wWTGZ34OsRgen0L3EpdPXuFEdZ_1E-b3ROvSb4I,10824
|
|
71
71
|
reconcile/openshift_routes.py,sha256=xnA34f32xDdkfV2MXIC1QURFJioQUsXT8AZBiY7iSP0,1298
|
|
@@ -142,7 +142,7 @@ reconcile/aws_account_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
|
|
|
142
142
|
reconcile/aws_account_manager/integration.py,sha256=qpqefqnq4sPtXW13LBL0D2a5wXdq44mZzi3JxJtM7P0,16042
|
|
143
143
|
reconcile/aws_account_manager/merge_request_manager.py,sha256=ePdn3c5MHZEW9iawgQWg7L5ydPLh0YZzfmRYV-rBCD8,3987
|
|
144
144
|
reconcile/aws_account_manager/metrics.py,sha256=YB10ea4kIGwJfs5N14RF-RoXPb-QQWaDBz1jLZ3YWE0,917
|
|
145
|
-
reconcile/aws_account_manager/reconciler.py,sha256=
|
|
145
|
+
reconcile/aws_account_manager/reconciler.py,sha256=_CBoRJyfabfesdaP0C_bT-xELwAKtkOiVuMtEQVbP44,17114
|
|
146
146
|
reconcile/aws_account_manager/utils.py,sha256=m40ntjpxREpVPuzJv4pCG3LWtojAeqEoPOfbeIbmQUU,1443
|
|
147
147
|
reconcile/aws_ami_cleanup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
148
148
|
reconcile/aws_ami_cleanup/integration.py,sha256=NJhGzl9lMOG4VgYf8IsoZFJeYTRS1e5ORpHfIUEl3tA,9264
|
|
@@ -153,7 +153,7 @@ reconcile/aws_saml_idp/integration.py,sha256=svCFxrxXY1HOh0ge7LaoeNZ3DskOVKvCCI9
|
|
|
153
153
|
reconcile/aws_saml_roles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
154
154
|
reconcile/aws_saml_roles/integration.py,sha256=WU44OvMHk0huM4MlUS6REdwzfC08iHXbTEtZ3TNEJRQ,11572
|
|
155
155
|
reconcile/aws_version_sync/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
156
|
-
reconcile/aws_version_sync/integration.py,sha256=
|
|
156
|
+
reconcile/aws_version_sync/integration.py,sha256=UGskrZ0DnNRoOIIDJRWrNcCala_zKmtPvOd_r7Lq1Cc,21405
|
|
157
157
|
reconcile/aws_version_sync/utils.py,sha256=x-45QT7zAwdNvCg7w_qJNwLaksFcfz1_6KQoD_0IVuA,1727
|
|
158
158
|
reconcile/aws_version_sync/merge_request_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
159
159
|
reconcile/aws_version_sync/merge_request_manager/merge_request.py,sha256=2FbqLLdqxycWNvX1eNbwMjWSVBb7q0p-8t5Db0m7b4Q,4842
|
|
@@ -164,7 +164,7 @@ reconcile/change_owners/approver.py,sha256=Z3_11vnK2WNOxjEEXVDh0224-_-qbt9d6mBeV
|
|
|
164
164
|
reconcile/change_owners/bundle.py,sha256=6a51hi8yn2QwxQLQ4xc9zwlL5IT2sCbHriFuVJVeqzQ,5376
|
|
165
165
|
reconcile/change_owners/change_log_tracking.py,sha256=njIBC6pRb6U2GmeXxAAc_CruIfnDpEUhOp05DrPFsuk,9531
|
|
166
166
|
reconcile/change_owners/change_owners.py,sha256=Ay3KdLJBKH59xMdNYbiNTr2ow71bKPm0URiv4DjcB2M,18400
|
|
167
|
-
reconcile/change_owners/change_types.py,sha256=
|
|
167
|
+
reconcile/change_owners/change_types.py,sha256=e6zoXQ_kctwqNJyTt0SXqD06VNTIDYAgzu6H05djKzg,32021
|
|
168
168
|
reconcile/change_owners/changes.py,sha256=YTqwUYutQ6JVSSYmC2Ph5ROCiVix42Vnzy47-i57z4Q,18119
|
|
169
169
|
reconcile/change_owners/decision.py,sha256=WaT7ehJFYofsgSbbpabj3a5jniomxy8R4wQpb3xsdsw,7487
|
|
170
170
|
reconcile/change_owners/diff.py,sha256=xuyvnHcdRuQ8Twl0QST3rbbPo-hiH1uTycTet_AoT8k,8944
|
|
@@ -190,10 +190,10 @@ reconcile/external_resources/cloudflare.py,sha256=7Yq31L_enR-iyAAsVx_Z-QVbRjh_Gm
|
|
|
190
190
|
reconcile/external_resources/factories.py,sha256=52GzEmEaLhriG0AQzHh0R8n3IwnGvwpxVCv8U0glGC4,8506
|
|
191
191
|
reconcile/external_resources/integration.py,sha256=Fcc7MjixGx6bE6K4fgXx6yFomVoJavsOLhhDgL7VJgg,7040
|
|
192
192
|
reconcile/external_resources/integration_secrets_sync.py,sha256=M2uOFi2JXWhiw3hQyE_4NVPQmPIYGHlghRti5eLWhkw,1738
|
|
193
|
-
reconcile/external_resources/manager.py,sha256=
|
|
193
|
+
reconcile/external_resources/manager.py,sha256=xf_FGCtgVHN8DnWUwMTX781E06Jnc1mxEce_qoii3Is,18757
|
|
194
194
|
reconcile/external_resources/meta.py,sha256=RM8qGE6UoJR58nLqABReIJrrdmx4Tqt_OcdlT-QygGs,620
|
|
195
195
|
reconcile/external_resources/metrics.py,sha256=ahvlgrc48B214NwBq-G6ncwQE3Qrtif61jtOrklfylQ,3903
|
|
196
|
-
reconcile/external_resources/model.py,sha256=
|
|
196
|
+
reconcile/external_resources/model.py,sha256=XxdIpf4uznYaZzoO_9SYL3x73vFanUi1tAkWOjfzR_g,15503
|
|
197
197
|
reconcile/external_resources/reconciler.py,sha256=-jXny_rFnUpPs_VFbA0Iig37-icOu-9i6R-KXjPuWb8,10150
|
|
198
198
|
reconcile/external_resources/secrets_sync.py,sha256=vdcy2Ydz67pKkSHT2U0-Ucu9cxMr99r15RovLTxmoZU,16162
|
|
199
199
|
reconcile/external_resources/state.py,sha256=zWla2_j6BI1FBrSPqRRfuo55bXK0QWAxtEeafb8ffTg,13811
|
|
@@ -561,10 +561,10 @@ reconcile/typed_queries/quay.py,sha256=3IMy9jjHF2f9t47EXZOQVA3p0nFkWFhaFhxhvib-7
|
|
|
561
561
|
reconcile/typed_queries/repos.py,sha256=8A93dKDt6igT4ClqMjt7YUTsoP4qh1Wnm0W3xsMgj48,824
|
|
562
562
|
reconcile/typed_queries/reserved_networks.py,sha256=XY9y3amtIQT0n06O0Toubqr_UmylJ2ELAv9-BJCK890,345
|
|
563
563
|
reconcile/typed_queries/rhcs_provider_settings.py,sha256=fxD84CPCiH25_qc02p48LOIJHv39Wlc1VwOhs9ZVsKk,743
|
|
564
|
-
reconcile/typed_queries/saas_files.py,sha256=
|
|
564
|
+
reconcile/typed_queries/saas_files.py,sha256=QvAcLxsQZGQcIFSlRCiDaGPaE3G8L92UTVgg5Ncw2M0,14664
|
|
565
565
|
reconcile/typed_queries/slack.py,sha256=r30lspctHloyygPn8_DVybxPwUWwiBpvBRRXiTVcQYk,251
|
|
566
566
|
reconcile/typed_queries/slo_documents.py,sha256=YMdox_-lBRqrdxamPhdnUlRTY_Ro35ptsupq7OaynUQ,362
|
|
567
|
-
reconcile/typed_queries/smtp.py,sha256=
|
|
567
|
+
reconcile/typed_queries/smtp.py,sha256=_mIjwpma4_N0Jhr7jozE_ZAE66MC5r9pAS6lhURcT6M,542
|
|
568
568
|
reconcile/typed_queries/status_board.py,sha256=y-1H3cGYyWKT9OXiq3hNcPieaeHYdAqfne94DUCSHcY,1838
|
|
569
569
|
reconcile/typed_queries/tekton_pipeline_providers.py,sha256=LtoSnSRkuckYsXIU64L1Mf-o3iuUjaN-5O-ARzIROZA,515
|
|
570
570
|
reconcile/typed_queries/terraform_namespaces.py,sha256=4H9WE90jN_BVYBAt1DxJITS4vkL-vykbXZIS1H4EKNM,413
|
|
@@ -619,7 +619,7 @@ reconcile/utils/helpers.py,sha256=DHeMt684XULOLqAwEZs92jrnfG7nOGFArCUgbTbip0U,18
|
|
|
619
619
|
reconcile/utils/imap_client.py,sha256=sJSBBCObR34JTk70raIkJYXZbmEOOyc8IDQ1CrcSO1Q,2019
|
|
620
620
|
reconcile/utils/instrumented_wrappers.py,sha256=BwJBirum_ISxDy1Zf1_90PaQ9Q5JSp0TInv26CmkjiE,1935
|
|
621
621
|
reconcile/utils/jenkins_api.py,sha256=A7J2AnOxHHZfA-dqjUCtFgy4145peA7WwUvRIXjR5Qo,8623
|
|
622
|
-
reconcile/utils/jira_client.py,sha256=
|
|
622
|
+
reconcile/utils/jira_client.py,sha256=Zoj3ehxk4VpH7OlzpwxOwG22cCValZ4XmQUoCmTpZVI,11777
|
|
623
623
|
reconcile/utils/jjb_client.py,sha256=4YyfvQj7Uh7bJ1boczvOo9yrbWUfEDjGjlISw6HW8OE,16917
|
|
624
624
|
reconcile/utils/json.py,sha256=okNqZCz_R54TL4WCTrnsxpdI11VB7wKTSMu7OrKjaAo,2045
|
|
625
625
|
reconcile/utils/jsonpath.py,sha256=wdxOMqR-GMpQf5vRPWRMqAF7bCiXDBkkcFfY2U4j_tk,5536
|
|
@@ -650,7 +650,7 @@ reconcile/utils/quay_mirror.py,sha256=dpWCNv5lITwIk6Q9RkmqaQKHNk_JPy27UQEribJ7E-
|
|
|
650
650
|
reconcile/utils/raw_github_api.py,sha256=ZUDtOxdMSMs-Z0noKi0pyMtXHi5V2nCMFDB5JIM_oQ0,3057
|
|
651
651
|
reconcile/utils/repo_owners.py,sha256=c6Z-U5TkiRPvuhr_zYWvZG9HZGzoT-l-d2PJ33lGflE,6507
|
|
652
652
|
reconcile/utils/rest_api_base.py,sha256=MT7tp6CQO2S5aKfVOzw_hipWg7wAGoOqkm4qurI1hEU,4342
|
|
653
|
-
reconcile/utils/rhcsv2_certs.py,sha256=
|
|
653
|
+
reconcile/utils/rhcsv2_certs.py,sha256=KjtDga8p7DZeUmIg-CJerQIsypVHjPClTCp8hdbDBZA,6622
|
|
654
654
|
reconcile/utils/ruamel.py,sha256=FzL4_L0FnMOUZmgThrZSMJs5MTdXwiy-E9MZWfk8bh8,397
|
|
655
655
|
reconcile/utils/secret_reader.py,sha256=9wcKdC6cuxHFn1j1GpLgBkWl3-7TVGTGWHcevmGtYL0,9988
|
|
656
656
|
reconcile/utils/semver_helper.py,sha256=-WfPOMSA2v1h7hT3PwVf-Htg7wOsoKlQC1JdmDX2Ars,1268
|
|
@@ -663,10 +663,10 @@ reconcile/utils/sqs_gateway.py,sha256=GoStXLTP75zBQIL0ntwVy1oHOquY3XHtadybzifLdX
|
|
|
663
663
|
reconcile/utils/state.py,sha256=kOI5ZorbJKWomQbnOql7uBuO7A0zQu54tUxUTZ2lEKE,16416
|
|
664
664
|
reconcile/utils/structs.py,sha256=ZS3mYM3s188lfLZjcWpOoIpU8Xq76sxaapgRHJCdF-g,377
|
|
665
665
|
reconcile/utils/terraform_client.py,sha256=VexlnYM9h-2-g6Y8HiE48BFi8AX-mYLhIapl2G2PUPQ,37769
|
|
666
|
-
reconcile/utils/terrascript_aws_client.py,sha256=
|
|
666
|
+
reconcile/utils/terrascript_aws_client.py,sha256=t3iKwg3QZbRRRw_T4qZPevgYV1E5X9WA43s3XQamEJE,307498
|
|
667
667
|
reconcile/utils/three_way_diff_strategy.py,sha256=yDEbP3HWvDDVzo_8FEbcT0pA6lz72HviXZkh5wmzkkY,4837
|
|
668
668
|
reconcile/utils/throughput.py,sha256=KNDCVsCLSp89V4pO3sEUd7bJUuh6gNfsxsc_18rEv_Y,357
|
|
669
|
-
reconcile/utils/vault.py,sha256=
|
|
669
|
+
reconcile/utils/vault.py,sha256=bzdHKN2RwLwyZhZeoNiidpYGfcWHa0qjXPKa6FN8UOU,15633
|
|
670
670
|
reconcile/utils/vcs.py,sha256=RDqe4bz01n_oU4VJRjSbbmWn-yqvFNCKCkC8JXgSfuU,10304
|
|
671
671
|
reconcile/utils/acs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
672
672
|
reconcile/utils/acs/base.py,sha256=G10mrztmTbdwcSuuXu4cp5gGH2Ogv9vZAAOBQUdl7e0,2625
|
|
@@ -702,7 +702,7 @@ reconcile/utils/jinja2/extensions.py,sha256=7K-uo6G2eCWa98MHT8fRPYIKCLQB_5D2keqQ
|
|
|
702
702
|
reconcile/utils/jinja2/filters.py,sha256=JfO_14APySBPidsMvHXG-8dULNPddZCE15Umjk_aSBk,4830
|
|
703
703
|
reconcile/utils/jinja2/utils.py,sha256=iTwfFLWwuMIAIMuEnENrwcL7CRWw24fUmcWKLFw6jOE,9231
|
|
704
704
|
reconcile/utils/jobcontroller/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
705
|
-
reconcile/utils/jobcontroller/controller.py,sha256=
|
|
705
|
+
reconcile/utils/jobcontroller/controller.py,sha256=UyV6t7HZH5LxVf3UyGaeN1WzG-tPEPyNg_ksm6zSnUU,15362
|
|
706
706
|
reconcile/utils/jobcontroller/models.py,sha256=okj1zGdharGTJYW-f1XyvmWfp4F2ESTkvhYvrmzSGGE,6936
|
|
707
707
|
reconcile/utils/membershipsources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
708
708
|
reconcile/utils/membershipsources/app_interface_resolver.py,sha256=cK4WkGRtqfdSq-RTswJ47nqQSZYiXshI3gFiKfILZe0,2014
|
|
@@ -772,12 +772,12 @@ reconcile/utils/unleash/server.py,sha256=X79h8E371IeBjJlKtufKxwfo3EBUPxrJ17yVRFM
|
|
|
772
772
|
tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
773
773
|
tools/alert_report.py,sha256=cyQTei8_SYOggW_6uYvzhrF7Nae-9xOz-jmh9O9V8R8,5589
|
|
774
774
|
tools/app_interface_metrics_exporter.py,sha256=mCi6SZf20mo5yvRI2VoqmrCdz46Ph3JhpEJPvryXncY,2261
|
|
775
|
-
tools/app_interface_reporter.py,sha256=
|
|
775
|
+
tools/app_interface_reporter.py,sha256=k_9-qxhp4zORhu4zc8EXdKId_VMoXPoZpAu04u7G4r0,17642
|
|
776
776
|
tools/app_sre_tekton_access_reporter.py,sha256=5qmkevJdlb2j_lpGC5Pu1Pmo0eomX5ZxzS_GNkqHAEE,3104
|
|
777
777
|
tools/app_sre_tekton_access_revalidation.py,sha256=vwL1o_j7oSTOhrHNH1znpgjA2LHGzb8yc5iG3aaY4m0,2684
|
|
778
|
-
tools/glitchtip_access_reporter.py,sha256=
|
|
778
|
+
tools/glitchtip_access_reporter.py,sha256=HRPALTkMiiVJbAJHAQam1ptaDq5eRQXhf4Qt-n1Q-x8,2859
|
|
779
779
|
tools/glitchtip_access_revalidation.py,sha256=jjeLO53LTbz_LfQw3G2Cs8lVLO_6xqU39BYyTH3cEPE,2764
|
|
780
|
-
tools/qontract_cli.py,sha256=
|
|
780
|
+
tools/qontract_cli.py,sha256=wi2loe1dVpj8jYGqVpjaRnF0Wy3bcaPxjY3CjTqbY_M,160266
|
|
781
781
|
tools/template_validation.py,sha256=imLeY5zYE_ITk0yl99pqkoqcG2psFG0jLYKTZ7NXLcY,3393
|
|
782
782
|
tools/cli_commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
783
783
|
tools/cli_commands/container_images_report.py,sha256=8mAjCS6XR0yD7k0mfiVBlt6xbYU47q_ftdYNi5o5VKE,5566
|
|
@@ -803,7 +803,7 @@ tools/saas_promotion_state/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
|
|
|
803
803
|
tools/saas_promotion_state/saas_promotion_state.py,sha256=uQv2QJAmUXP1g2GPIH30WTlvL9soY6m9lefpZEVDM5w,3965
|
|
804
804
|
tools/sre_checkpoints/__init__.py,sha256=CDaDaywJnmRCLyl_NCcvxi-Zc0hTi_3OdwKiFOyS39I,145
|
|
805
805
|
tools/sre_checkpoints/util.py,sha256=KcYVfa3UmJHVP_ocgrKe8NkrO5IDB9aWEDydSokPcRk,975
|
|
806
|
-
qontract_reconcile-0.10.2.
|
|
807
|
-
qontract_reconcile-0.10.2.
|
|
808
|
-
qontract_reconcile-0.10.2.
|
|
809
|
-
qontract_reconcile-0.10.2.
|
|
806
|
+
qontract_reconcile-0.10.2.dev480.dist-info/METADATA,sha256=jpe2_IZtrGHSGKGrq0HZ3Fxyi933BiPjxBqUWNlP_zY,24901
|
|
807
|
+
qontract_reconcile-0.10.2.dev480.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
808
|
+
qontract_reconcile-0.10.2.dev480.dist-info/entry_points.txt,sha256=5i9l54La3vQrDLAdwDKQWC0iG4sV9RRfOb1BpvzOWLc,698
|
|
809
|
+
qontract_reconcile-0.10.2.dev480.dist-info/RECORD,,
|
|
@@ -59,10 +59,10 @@ class AWSReconciler:
|
|
|
59
59
|
email: str,
|
|
60
60
|
) -> str | None:
|
|
61
61
|
"""Create the organization account and return the creation status ID."""
|
|
62
|
-
with self.state.transaction(state_key(name, TASK_CREATE_ACCOUNT)) as
|
|
63
|
-
if
|
|
62
|
+
with self.state.transaction(state_key(name, TASK_CREATE_ACCOUNT)) as state:
|
|
63
|
+
if state.exists:
|
|
64
64
|
# account already exists, nothing to do
|
|
65
|
-
return
|
|
65
|
+
return state.value
|
|
66
66
|
|
|
67
67
|
logging.info(f"{name}: Creating account")
|
|
68
68
|
if self.dry_run:
|
|
@@ -70,7 +70,7 @@ class AWSReconciler:
|
|
|
70
70
|
|
|
71
71
|
status = aws_api.organizations.create_account(email=email, name=name)
|
|
72
72
|
# store the status id for future reference
|
|
73
|
-
|
|
73
|
+
state.value = status.id
|
|
74
74
|
return status.id
|
|
75
75
|
|
|
76
76
|
def _org_account_exists(
|
|
@@ -80,10 +80,10 @@ class AWSReconciler:
|
|
|
80
80
|
create_account_request_id: str,
|
|
81
81
|
) -> str | None:
|
|
82
82
|
"""Check if the organization account exists and return its ID."""
|
|
83
|
-
with self.state.transaction(state_key(name, TASK_DESCRIBE_ACCOUNT)) as
|
|
84
|
-
if
|
|
83
|
+
with self.state.transaction(state_key(name, TASK_DESCRIBE_ACCOUNT)) as state:
|
|
84
|
+
if state.exists:
|
|
85
85
|
# account checked and exists, nothing to do
|
|
86
|
-
return
|
|
86
|
+
return state.value
|
|
87
87
|
|
|
88
88
|
logging.info(f"{name}: Checking account creation status")
|
|
89
89
|
status = aws_api.organizations.describe_create_account_status(
|
|
@@ -91,7 +91,7 @@ class AWSReconciler:
|
|
|
91
91
|
)
|
|
92
92
|
match status.state:
|
|
93
93
|
case "SUCCEEDED":
|
|
94
|
-
|
|
94
|
+
state.value = status.uid
|
|
95
95
|
return status.uid
|
|
96
96
|
case "FAILED":
|
|
97
97
|
raise RuntimeError(
|
|
@@ -109,19 +109,19 @@ class AWSReconciler:
|
|
|
109
109
|
def _tag_account(
|
|
110
110
|
self, aws_api: AWSApi, name: str, uid: str, tags: dict[str, str]
|
|
111
111
|
) -> None:
|
|
112
|
-
with self.state.transaction(state_key(name, TASK_TAG_ACCOUNT)) as
|
|
113
|
-
if
|
|
112
|
+
with self.state.transaction(state_key(name, TASK_TAG_ACCOUNT)) as state:
|
|
113
|
+
if state.exists and state.value == tags:
|
|
114
114
|
# account already tagged, nothing to do
|
|
115
115
|
return
|
|
116
116
|
|
|
117
117
|
logging.info(f"{name}: Setting tags {tags}")
|
|
118
|
-
|
|
118
|
+
state.value = tags
|
|
119
119
|
if self.dry_run:
|
|
120
120
|
raise AbortStateTransactionError("Dry run")
|
|
121
121
|
|
|
122
|
-
if
|
|
122
|
+
if state.exists:
|
|
123
123
|
aws_api.organizations.untag_resource(
|
|
124
|
-
resource_id=uid, tag_keys=
|
|
124
|
+
resource_id=uid, tag_keys=state.value.keys()
|
|
125
125
|
)
|
|
126
126
|
aws_api.organizations.tag_resource(resource_id=uid, tags=tags)
|
|
127
127
|
|
|
@@ -132,8 +132,8 @@ class AWSReconciler:
|
|
|
132
132
|
return org_tree_root.find(destination_path)
|
|
133
133
|
|
|
134
134
|
def _move_account(self, aws_api: AWSApi, name: str, uid: str, ou: str) -> None:
|
|
135
|
-
with self.state.transaction(state_key(name, TASK_MOVE_ACCOUNT)) as
|
|
136
|
-
if
|
|
135
|
+
with self.state.transaction(state_key(name, TASK_MOVE_ACCOUNT)) as state:
|
|
136
|
+
if state.exists and state.value == ou:
|
|
137
137
|
# account already moved, nothing to do
|
|
138
138
|
return
|
|
139
139
|
|
|
@@ -146,15 +146,15 @@ class AWSReconciler:
|
|
|
146
146
|
uid=uid,
|
|
147
147
|
destination_parent_id=destination.id,
|
|
148
148
|
)
|
|
149
|
-
|
|
149
|
+
state.value = ou
|
|
150
150
|
|
|
151
151
|
def _set_account_alias(self, aws_api: AWSApi, name: str, alias: str | None) -> None:
|
|
152
152
|
"""Create an account alias."""
|
|
153
153
|
new_alias = alias or name
|
|
154
154
|
with self.state.transaction(
|
|
155
155
|
state_key(name, TASK_ACCOUNT_ALIAS), new_alias
|
|
156
|
-
) as
|
|
157
|
-
if
|
|
156
|
+
) as state:
|
|
157
|
+
if state.exists and state.value == new_alias:
|
|
158
158
|
return
|
|
159
159
|
|
|
160
160
|
logging.info(f"{name}: Set account alias '{new_alias}'")
|
|
@@ -170,9 +170,9 @@ class AWSReconciler:
|
|
|
170
170
|
quotas_dict = [q.model_dump() for q in quotas]
|
|
171
171
|
with self.state.transaction(
|
|
172
172
|
state_key(name, TASK_REQUEST_SERVICE_QUOTA)
|
|
173
|
-
) as
|
|
174
|
-
if
|
|
175
|
-
return
|
|
173
|
+
) as state:
|
|
174
|
+
if state.exists and state.value["last_applied_quotas"] == quotas_dict:
|
|
175
|
+
return state.value["ids"]
|
|
176
176
|
|
|
177
177
|
# ATTENTION: reverting previously applied quotas or lowering them is not supported
|
|
178
178
|
new_quotas = []
|
|
@@ -211,7 +211,7 @@ class AWSReconciler:
|
|
|
211
211
|
) from None
|
|
212
212
|
ids.append(req.id)
|
|
213
213
|
|
|
214
|
-
|
|
214
|
+
state.value = {"last_applied_quotas": quotas_dict, "ids": ids}
|
|
215
215
|
return ids
|
|
216
216
|
|
|
217
217
|
def _check_quota_change_requests(
|
|
@@ -223,22 +223,22 @@ class AWSReconciler:
|
|
|
223
223
|
"""Check the status of the quota change requests."""
|
|
224
224
|
with self.state.transaction(
|
|
225
225
|
state_key(name, TASK_CHECK_SERVICE_QUOTA_STATUS)
|
|
226
|
-
) as
|
|
227
|
-
if
|
|
226
|
+
) as state:
|
|
227
|
+
if state.exists and state.value == request_ids:
|
|
228
228
|
return
|
|
229
229
|
|
|
230
230
|
logging.info(f"{name}: Checking quota change requests")
|
|
231
231
|
if self.dry_run:
|
|
232
232
|
raise AbortStateTransactionError("Dry run")
|
|
233
233
|
|
|
234
|
-
|
|
234
|
+
state.value = []
|
|
235
235
|
for request_id in request_ids:
|
|
236
236
|
req = aws_api.service_quotas.get_requested_service_quota_change(
|
|
237
237
|
request_id=request_id
|
|
238
238
|
)
|
|
239
239
|
match req.status:
|
|
240
240
|
case "CASE_CLOSED" | "APPROVED":
|
|
241
|
-
|
|
241
|
+
state.value.append(request_id)
|
|
242
242
|
case "DENIED" | "INVALID_REQUEST" | "NOT_APPROVED":
|
|
243
243
|
raise RuntimeError(
|
|
244
244
|
f"Quota change request {request_id} failed: {req.status}"
|
|
@@ -253,9 +253,9 @@ class AWSReconciler:
|
|
|
253
253
|
"""Enable enterprise support for the account."""
|
|
254
254
|
with self.state.transaction(
|
|
255
255
|
state_key(name, TASK_ENABLE_ENTERPRISE_SUPPORT), ""
|
|
256
|
-
) as
|
|
257
|
-
if
|
|
258
|
-
return
|
|
256
|
+
) as state:
|
|
257
|
+
if state.exists:
|
|
258
|
+
return state.value
|
|
259
259
|
|
|
260
260
|
if aws_api.support.get_support_level() == SupportPlan.ENTERPRISE:
|
|
261
261
|
if self.dry_run:
|
|
@@ -278,7 +278,7 @@ class AWSReconciler:
|
|
|
278
278
|
[rh-internal-account-name: {name}]
|
|
279
279
|
"""),
|
|
280
280
|
)
|
|
281
|
-
|
|
281
|
+
state.value = case_id
|
|
282
282
|
return case_id
|
|
283
283
|
|
|
284
284
|
def _check_enterprise_support_status(
|
|
@@ -287,8 +287,8 @@ class AWSReconciler:
|
|
|
287
287
|
"""Check the status of the enterprise support case."""
|
|
288
288
|
with self.state.transaction(
|
|
289
289
|
state_key(case_id, TASK_CHECK_ENTERPRISE_SUPPORT_STATUS), True
|
|
290
|
-
) as
|
|
291
|
-
if
|
|
290
|
+
) as state:
|
|
291
|
+
if state.exists:
|
|
292
292
|
return
|
|
293
293
|
|
|
294
294
|
logging.info(f"{name}: Checking enterprise support case {case_id}")
|
|
@@ -318,8 +318,8 @@ class AWSReconciler:
|
|
|
318
318
|
security_contact = f"{name} {title} {email} {phone_number}"
|
|
319
319
|
with self.state.transaction(
|
|
320
320
|
state_key(account, TASK_SET_SECURITY_CONTACT)
|
|
321
|
-
) as
|
|
322
|
-
if
|
|
321
|
+
) as state:
|
|
322
|
+
if state.exists and state.value == security_contact:
|
|
323
323
|
return
|
|
324
324
|
|
|
325
325
|
logging.info(f"{account}: Setting security contact")
|
|
@@ -329,7 +329,7 @@ class AWSReconciler:
|
|
|
329
329
|
aws_api.account.set_security_contact(
|
|
330
330
|
name=name, title=title, email=email, phone_number=phone_number
|
|
331
331
|
)
|
|
332
|
-
|
|
332
|
+
state.value = security_contact
|
|
333
333
|
|
|
334
334
|
def _set_supported_regions(
|
|
335
335
|
self,
|
|
@@ -340,8 +340,8 @@ class AWSReconciler:
|
|
|
340
340
|
"""Set the supported regions for the account."""
|
|
341
341
|
with self.state.transaction(
|
|
342
342
|
state_key(name, TASK_SET_SUPPORTED_REGIONS)
|
|
343
|
-
) as
|
|
344
|
-
if
|
|
343
|
+
) as state:
|
|
344
|
+
if state.exists and state.value == regions:
|
|
345
345
|
return
|
|
346
346
|
|
|
347
347
|
aws_regions = aws_api.account.list_regions()
|
|
@@ -378,7 +378,7 @@ class AWSReconciler:
|
|
|
378
378
|
for aws_region in to_disable_regions:
|
|
379
379
|
aws_api.account.disable_region(aws_region)
|
|
380
380
|
|
|
381
|
-
|
|
381
|
+
state.value = regions
|
|
382
382
|
|
|
383
383
|
#
|
|
384
384
|
# Public methods
|
|
@@ -404,8 +404,8 @@ class AWSReconciler:
|
|
|
404
404
|
"""Create an IAM user and return its access key."""
|
|
405
405
|
with self.state.transaction(
|
|
406
406
|
state_key(name, TASK_CREATE_IAM_USER), user_name
|
|
407
|
-
) as
|
|
408
|
-
if
|
|
407
|
+
) as state:
|
|
408
|
+
if state.exists and state.value == user_name:
|
|
409
409
|
return None
|
|
410
410
|
|
|
411
411
|
logging.info(f"{name}: Creating IAM user '{user_name}'")
|
|
@@ -434,11 +434,12 @@ class AVSIntegration(QontractReconcileIntegration[AVSIntegrationParams]):
|
|
|
434
434
|
current=external_resources_app_interface,
|
|
435
435
|
desired=external_resources_aws,
|
|
436
436
|
key=lambda r: r.key,
|
|
437
|
-
equal=lambda external_resources_app_interface,
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
437
|
+
equal=lambda external_resources_app_interface, external_resources_aws: (
|
|
438
|
+
external_resources_app_interface.resource_engine_version_string
|
|
439
|
+
== external_resources_aws.resource_engine_version_string
|
|
440
|
+
and external_resources_app_interface.resource_engine
|
|
441
|
+
== external_resources_aws.resource_engine
|
|
442
|
+
),
|
|
442
443
|
)
|
|
443
444
|
for diff_pair in diff.change.values():
|
|
444
445
|
aws_resource = diff_pair.desired
|
|
@@ -90,8 +90,8 @@ class DiffCoverage:
|
|
|
90
90
|
Returns a list of change-owner labels of all involved change-type contexts.
|
|
91
91
|
"""
|
|
92
92
|
labels = {label for c in self.coverage for label in c.change_owner_labels or {}}
|
|
93
|
-
for
|
|
94
|
-
labels.update(
|
|
93
|
+
for split in self._split_into:
|
|
94
|
+
labels.update(split.change_owner_labels)
|
|
95
95
|
return labels
|
|
96
96
|
|
|
97
97
|
def relative_path(self) -> jsonpath_ng.JSONPath:
|
|
@@ -318,6 +318,8 @@ class ExternalResourcesManager:
|
|
|
318
318
|
if r.action == Action.APPLY:
|
|
319
319
|
reconciliation_status.resource_status = (
|
|
320
320
|
ResourceStatus.PENDING_SECRET_SYNC
|
|
321
|
+
if r.module_configuration.outputs_secret_sync
|
|
322
|
+
else ResourceStatus.CREATED
|
|
321
323
|
)
|
|
322
324
|
elif r.action == Action.DESTROY:
|
|
323
325
|
reconciliation_status.resource_status = ResourceStatus.DELETED
|
|
@@ -377,13 +379,6 @@ class ExternalResourcesManager:
|
|
|
377
379
|
state.reconciliation = r
|
|
378
380
|
self.state_mgr.set_external_resource_state(state)
|
|
379
381
|
|
|
380
|
-
def _need_secret_sync(
|
|
381
|
-
self, r: Reconciliation, state: ExternalResourceState
|
|
382
|
-
) -> bool:
|
|
383
|
-
return (
|
|
384
|
-
r.action == Action.APPLY and state.resource_status == ResourceStatus.CREATED
|
|
385
|
-
)
|
|
386
|
-
|
|
387
382
|
def _sync_secrets(
|
|
388
383
|
self,
|
|
389
384
|
to_sync_keys: Iterable[ExternalResourceKey],
|
|
@@ -269,6 +269,7 @@ class ExternalResourceModuleConfiguration(BaseModel, frozen=True):
|
|
|
269
269
|
version: str = ""
|
|
270
270
|
reconcile_drift_interval_minutes: int = 1440
|
|
271
271
|
reconcile_timeout_minutes: int = 1440 # same as https://developer.hashicorp.com/terraform/enterprise/application-administration/general#terraform-run-timeout-settings
|
|
272
|
+
outputs_secret_sync: bool = False
|
|
272
273
|
outputs_secret_image: str = ""
|
|
273
274
|
outputs_secret_version: str = ""
|
|
274
275
|
resources: Resources = Resources()
|
|
@@ -335,6 +336,7 @@ class ExternalResourceModuleConfiguration(BaseModel, frozen=True):
|
|
|
335
336
|
reconcile_drift_interval_minutes=module.reconcile_drift_interval_minutes,
|
|
336
337
|
reconcile_timeout_minutes=module_overrides.reconcile_timeout_minutes
|
|
337
338
|
or module.reconcile_timeout_minutes,
|
|
339
|
+
outputs_secret_sync=module.outputs_secret_sync,
|
|
338
340
|
outputs_secret_image=module_overrides.outputs_secret_image
|
|
339
341
|
or module.outputs_secret_image
|
|
340
342
|
or settings.outputs_secret_image,
|
reconcile/gitlab_permissions.py
CHANGED
|
@@ -98,8 +98,9 @@ class GroupPermissionHandler:
|
|
|
98
98
|
diff_data = diff_mappings(
|
|
99
99
|
current=current_state,
|
|
100
100
|
desired=desired_state,
|
|
101
|
-
equal=lambda current, desired:
|
|
102
|
-
|
|
101
|
+
equal=lambda current, desired: (
|
|
102
|
+
current.group_access_level == desired.group_access_level
|
|
103
|
+
),
|
|
103
104
|
)
|
|
104
105
|
errors: list[Exception] = []
|
|
105
106
|
for repo in diff_data.add:
|
reconcile/openshift_base.py
CHANGED
|
@@ -860,7 +860,8 @@ def patch_desired_resource_for_recycle_annotations(
|
|
|
860
860
|
return desired
|
|
861
861
|
|
|
862
862
|
current_annotations = (
|
|
863
|
-
current.body
|
|
863
|
+
current.body
|
|
864
|
+
.get("spec", {})
|
|
864
865
|
.get("template", {})
|
|
865
866
|
.get("metadata", {})
|
|
866
867
|
.get("annotations")
|
|
@@ -873,7 +874,8 @@ def patch_desired_resource_for_recycle_annotations(
|
|
|
873
874
|
}
|
|
874
875
|
if patch_annotations:
|
|
875
876
|
desired_annotations = (
|
|
876
|
-
desired.body
|
|
877
|
+
desired.body
|
|
878
|
+
.setdefault("spec", {})
|
|
877
879
|
.setdefault("template", {})
|
|
878
880
|
.setdefault("metadata", {})
|
|
879
881
|
.setdefault("annotations", {})
|
|
@@ -1238,13 +1238,9 @@ def early_exit_monkey_patch() -> Generator:
|
|
|
1238
1238
|
) as mocks:
|
|
1239
1239
|
# mock lookup_secret
|
|
1240
1240
|
mocks["lookup_secret"].side_effect = (
|
|
1241
|
-
lambda path,
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
tvars=None,
|
|
1245
|
-
allow_not_found=False,
|
|
1246
|
-
settings=None,
|
|
1247
|
-
secret_reader=None: f"vault({path}, {key}, {version}"
|
|
1241
|
+
lambda path, key, version=None, tvars=None, allow_not_found=False, settings=None, secret_reader=None: (
|
|
1242
|
+
f"vault({path}, {key}, {version}"
|
|
1243
|
+
)
|
|
1248
1244
|
)
|
|
1249
1245
|
# needed for jinja2 `is_safe_callable`
|
|
1250
1246
|
mocks["lookup_secret"].unsafe_callable = False
|
|
@@ -1252,12 +1248,9 @@ def early_exit_monkey_patch() -> Generator:
|
|
|
1252
1248
|
|
|
1253
1249
|
# mock lookup_github_file_content
|
|
1254
1250
|
mocks["lookup_github_file_content"].side_effect = (
|
|
1255
|
-
lambda repo,
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
tvars=None,
|
|
1259
|
-
settings=None,
|
|
1260
|
-
secret_reader=None: f"github({repo}, {path}, {ref})"
|
|
1251
|
+
lambda repo, path, ref, tvars=None, settings=None, secret_reader=None: (
|
|
1252
|
+
f"github({repo}, {path}, {ref})"
|
|
1253
|
+
)
|
|
1261
1254
|
)
|
|
1262
1255
|
# needed for jinja2 `is_safe_callable`
|
|
1263
1256
|
mocks["lookup_github_file_content"].unsafe_callable = False
|
|
@@ -1271,10 +1264,9 @@ def early_exit_monkey_patch() -> Generator:
|
|
|
1271
1264
|
|
|
1272
1265
|
# mock lookup_s3_object
|
|
1273
1266
|
mocks["lookup_s3_object"].side_effect = (
|
|
1274
|
-
lambda account_name,
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
region_name=None: f"lookup_s3_object({account_name}, {bucket_name}, {path}, {region_name})"
|
|
1267
|
+
lambda account_name, bucket_name, path, region_name=None: (
|
|
1268
|
+
f"lookup_s3_object({account_name}, {bucket_name}, {path}, {region_name})"
|
|
1269
|
+
)
|
|
1278
1270
|
)
|
|
1279
1271
|
# needed for jinja2 `is_safe_callable`
|
|
1280
1272
|
mocks["lookup_s3_object"].unsafe_callable = False
|
|
@@ -1282,10 +1274,9 @@ def early_exit_monkey_patch() -> Generator:
|
|
|
1282
1274
|
|
|
1283
1275
|
# mock list_s3_objects
|
|
1284
1276
|
mocks["list_s3_objects"].side_effect = (
|
|
1285
|
-
lambda account_name,
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
region_name=None: f"list_s3_objects({account_name}, {bucket_name}, {path}, {region_name})"
|
|
1277
|
+
lambda account_name, bucket_name, path, region_name=None: (
|
|
1278
|
+
f"list_s3_objects({account_name}, {bucket_name}, {path}, {region_name})"
|
|
1279
|
+
)
|
|
1289
1280
|
)
|
|
1290
1281
|
# needed for jinja2 `is_safe_callable`
|
|
1291
1282
|
mocks["list_s3_objects"].unsafe_callable = False
|
|
@@ -342,6 +342,6 @@ def get_saasherder_settings(
|
|
|
342
342
|
) -> AppInterfaceSettingsV1:
|
|
343
343
|
if not query_func:
|
|
344
344
|
query_func = gql.get_api().query
|
|
345
|
-
if
|
|
346
|
-
return
|
|
345
|
+
if settings := saasherder_settings_query(query_func).settings:
|
|
346
|
+
return settings[0]
|
|
347
347
|
raise AppInterfaceSettingsError("settings missing")
|
reconcile/typed_queries/smtp.py
CHANGED
|
@@ -10,8 +10,8 @@ from reconcile.utils.exceptions import (
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
def settings() -> SmtpSettingsV1:
|
|
13
|
-
if
|
|
14
|
-
if not
|
|
13
|
+
if settings_ := query(query_func=gql.get_api().query).settings:
|
|
14
|
+
if not settings_[0].smtp:
|
|
15
15
|
raise AppInterfaceSmtpSettingsError("settings.smtp missing")
|
|
16
|
-
return
|
|
16
|
+
return settings_[0].smtp
|
|
17
17
|
raise AppInterfaceSettingsError("settings missing")
|
reconcile/utils/jira_client.py
CHANGED
|
@@ -233,9 +233,9 @@ class JiraClient:
|
|
|
233
233
|
|
|
234
234
|
def get_issue_type(self, issue_type: str) -> IssueType | None:
|
|
235
235
|
"""Return a issue type (e.g. Task) for the project if it exists."""
|
|
236
|
-
for
|
|
237
|
-
if
|
|
238
|
-
return
|
|
236
|
+
for issue_type_ in self.project_issue_types(self.project):
|
|
237
|
+
if issue_type_.name == issue_type:
|
|
238
|
+
return issue_type_
|
|
239
239
|
return None
|
|
240
240
|
|
|
241
241
|
@staticmethod
|
|
@@ -305,11 +305,11 @@ class JiraClient:
|
|
|
305
305
|
|
|
306
306
|
This API endpoint needs createIssue project permissions.
|
|
307
307
|
"""
|
|
308
|
-
for
|
|
308
|
+
for field_ in self.project_issue_fields(
|
|
309
309
|
project=self.project, issue_type_id=issue_type_id
|
|
310
310
|
):
|
|
311
|
-
if
|
|
312
|
-
return
|
|
311
|
+
if field_.name == field:
|
|
312
|
+
return field_
|
|
313
313
|
return None
|
|
314
314
|
|
|
315
315
|
def _priorities(self) -> list[Priority]:
|
reconcile/utils/rhcsv2_certs.py
CHANGED
|
@@ -143,7 +143,8 @@ def generate_cert(
|
|
|
143
143
|
) -> RhcsV2CertPem | RhcsV2CertPkcs12:
|
|
144
144
|
private_key = rsa.generate_private_key(65537, 4096)
|
|
145
145
|
csr = (
|
|
146
|
-
x509
|
|
146
|
+
x509
|
|
147
|
+
.CertificateSigningRequestBuilder()
|
|
147
148
|
.subject_name(
|
|
148
149
|
x509.Name([
|
|
149
150
|
x509.NameAttribute(NameOID.USER_ID, uid),
|
|
@@ -3054,9 +3054,9 @@ class TerrascriptClient:
|
|
|
3054
3054
|
assert specs is not None # make mypy happy
|
|
3055
3055
|
all_queues_per_spec = []
|
|
3056
3056
|
kms_keys = set()
|
|
3057
|
-
for
|
|
3058
|
-
defaults = self.get_values(
|
|
3059
|
-
queues =
|
|
3057
|
+
for spec_ in specs:
|
|
3058
|
+
defaults = self.get_values(spec_["defaults"])
|
|
3059
|
+
queues = spec_.pop("queues", [])
|
|
3060
3060
|
all_queues = []
|
|
3061
3061
|
for queue_kv in queues:
|
|
3062
3062
|
queue_key = queue_kv["key"]
|
|
@@ -3249,10 +3249,10 @@ class TerrascriptClient:
|
|
|
3249
3249
|
specs = common_values.get("specs")
|
|
3250
3250
|
assert specs is not None # make mypy happy
|
|
3251
3251
|
all_tables = []
|
|
3252
|
-
for
|
|
3253
|
-
defaults = self.get_values(
|
|
3252
|
+
for spec_ in specs:
|
|
3253
|
+
defaults = self.get_values(spec_["defaults"])
|
|
3254
3254
|
attributes = defaults.pop("attributes")
|
|
3255
|
-
tables =
|
|
3255
|
+
tables = spec_["tables"]
|
|
3256
3256
|
for table_kv in tables:
|
|
3257
3257
|
table_key = table_kv["key"]
|
|
3258
3258
|
table = table_kv["value"]
|
|
@@ -7275,7 +7275,8 @@ class TerrascriptClient:
|
|
|
7275
7275
|
|
|
7276
7276
|
# resource - cloudwatch
|
|
7277
7277
|
if (
|
|
7278
|
-
values
|
|
7278
|
+
values
|
|
7279
|
+
.get("logging_info", {})
|
|
7279
7280
|
.get("broker_logs", {})
|
|
7280
7281
|
.get("cloudwatch_logs", {})
|
|
7281
7282
|
.get("enabled", False)
|
reconcile/utils/vault.py
CHANGED
|
@@ -179,7 +179,7 @@ class VaultClient:
|
|
|
179
179
|
# must read each time to account for sa token refresh
|
|
180
180
|
with open(self.kube_sa_token_path, encoding="locale") as f:
|
|
181
181
|
try:
|
|
182
|
-
self._client.
|
|
182
|
+
self._client.auth.kubernetes.login(
|
|
183
183
|
role=self.kube_auth_role,
|
|
184
184
|
jwt=f.read(),
|
|
185
185
|
mount_point=self.kube_auth_mount,
|
|
@@ -190,7 +190,9 @@ class VaultClient:
|
|
|
190
190
|
f"using role '{self.kube_auth_role}' on mount '{self.kube_auth_mount}': {e}"
|
|
191
191
|
)
|
|
192
192
|
else:
|
|
193
|
-
self._client.
|
|
193
|
+
self._client.auth.approle.login(
|
|
194
|
+
role_id=self.role_id, secret_id=self.secret_id
|
|
195
|
+
)
|
|
194
196
|
|
|
195
197
|
@retry()
|
|
196
198
|
def read_all_with_version(self, secret: Mapping) -> tuple[dict, int | None]:
|
tools/app_interface_reporter.py
CHANGED
|
@@ -366,9 +366,9 @@ def get_build_history_pool(
|
|
|
366
366
|
jenkins_map: Mapping, jobs: Mapping, timestamp_limit: int, thread_pool_size: int
|
|
367
367
|
) -> dict:
|
|
368
368
|
history_to_get = []
|
|
369
|
-
for instance,
|
|
369
|
+
for instance, jobs_ in jobs.items():
|
|
370
370
|
jenkins = jenkins_map[instance]
|
|
371
|
-
for job in
|
|
371
|
+
for job in jobs_:
|
|
372
372
|
job["jenkins"] = jenkins
|
|
373
373
|
job["timestamp_limit"] = timestamp_limit
|
|
374
374
|
history_to_get.append(job)
|
tools/qontract_cli.py
CHANGED
|
@@ -4543,8 +4543,8 @@ def migrate(ctx: click.Context, dry_run: bool, skip_build: bool) -> None:
|
|
|
4543
4543
|
def debug_shell(ctx: click.Context) -> None:
|
|
4544
4544
|
"""Enter an ERv2 debug shell to manually migrate resources."""
|
|
4545
4545
|
# use a temporary directory in $HOME. The MacOS colima default configuration allows docker mounts from $HOME.
|
|
4546
|
-
with tempfile.TemporaryDirectory(dir=Path.home(), prefix="erv2-debug.") as
|
|
4547
|
-
tempdir = Path(
|
|
4546
|
+
with tempfile.TemporaryDirectory(dir=Path.home(), prefix="erv2-debug.") as tempdir_:
|
|
4547
|
+
tempdir = Path(tempdir_)
|
|
4548
4548
|
with progress_spinner() as progress:
|
|
4549
4549
|
with task(progress, "Preparing environment ..."):
|
|
4550
4550
|
credentials_file = tempdir / "credentials"
|
|
@@ -4582,8 +4582,8 @@ def force_unlock(ctx: click.Context, lock_id: str) -> None:
|
|
|
4582
4582
|
# use a temporary directory in $HOME. The MacOS colima default configuration allows docker mounts from $HOME.
|
|
4583
4583
|
with tempfile.TemporaryDirectory(
|
|
4584
4584
|
dir=Path.home(), prefix="erv2-unlock."
|
|
4585
|
-
) as
|
|
4586
|
-
tempdir = Path(
|
|
4585
|
+
) as tempdir_:
|
|
4586
|
+
tempdir = Path(tempdir_)
|
|
4587
4587
|
with progress_spinner() as progress:
|
|
4588
4588
|
with task(progress, "Preparing environment ..."):
|
|
4589
4589
|
credentials_file = tempdir / "credentials"
|
{qontract_reconcile-0.10.2.dev478.dist-info → qontract_reconcile-0.10.2.dev480.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|