qontract-reconcile 0.10.2.dev479__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qontract-reconcile
3
- Version: 0.10.2.dev479
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<0.9.0,>=0.7.0
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<0.8.0,>=0.7.0
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
@@ -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=VqrgrtM1CGWASau73CvphlolCDEIMLX0fwo4kFs55dI,8168
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=5EyuG7bi7KTbJoYnDewiQVLUjm_ERVhJbqutbaLvFj0,57907
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=tuOEH1UKoWksmPAfZJOhmLY6IghkvBcZyqa48kDLeR4,43172
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=xbCih3aOFk_98Nxly7-W8QMrT67loTH2-HVyQudjH00,17162
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=jiQeSVozOls24PtBAn_tKOw4LuzyT5Oy2iTW8eU7lXQ,21373
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=5eSvS2_npUriq9RN4LdAWdYUiNzF91K1pDUEVYDIQ4k,32023
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
@@ -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=yVJiba_kIKYaRqSxXovNC2Zupf-KfWoVWQdOmeD1ccY,14666
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=aSLglYa5bHKmlGwKkxq2RZqyMWuAf0a4S_mOuhDa084,542
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=dEDGFxJYF_JmbqD72qLeTWyUhVQ-YTgBqTr6UMrdn1c,11777
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=wt-dYeCeoiLTkt8VGHI2FXxQjBxuLAIIsWVRC9DfuxE,6613
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=qazXB2Re1DFReDcHwplcIF7_SmlE__z0XJv6hvd0L50,307485
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=6gYe-EKrYnz3SI_JM8gSpbXT9yfMrwDAw23kgiH7pV4,15573
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=3bNip_Eedu3HU8qd02kSBlNCivwSLSE1SlwcGysdrVs,15349
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=OLSTsGVcV-yJFY-RcrscVSKUWuQv63AEcv_69TH2xQk,17642
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=wnaiDGW4MkYONV_erltnJ6nGkEj0kQrAiv04NNnOS0k,2859
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=70fp6gxuEjvEDooqThUyPV6AuXk2UjCFq9rp3-i6bUw,160266
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.dev479.dist-info/METADATA,sha256=S8y7PdpWCuc852MqrZRmjaXKWpQ-grJVtnuqlbn3NiI,24948
807
- qontract_reconcile-0.10.2.dev479.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
808
- qontract_reconcile-0.10.2.dev479.dist-info/entry_points.txt,sha256=5i9l54La3vQrDLAdwDKQWC0iG4sV9RRfOb1BpvzOWLc,698
809
- qontract_reconcile-0.10.2.dev479.dist-info/RECORD,,
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 _state:
63
- if _state.exists:
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 _state.value
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
- _state.value = status.id
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 _state:
84
- if _state.exists:
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 _state.value
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
- _state.value = status.uid
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 _state:
113
- if _state.exists and _state.value == tags:
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
- _state.value = tags
118
+ state.value = tags
119
119
  if self.dry_run:
120
120
  raise AbortStateTransactionError("Dry run")
121
121
 
122
- if _state.exists:
122
+ if state.exists:
123
123
  aws_api.organizations.untag_resource(
124
- resource_id=uid, tag_keys=_state.value.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 _state:
136
- if _state.exists and _state.value == ou:
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
- _state.value = ou
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 _state:
157
- if _state.exists and _state.value == new_alias:
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 _state:
174
- if _state.exists and _state.value["last_applied_quotas"] == quotas_dict:
175
- return _state.value["ids"]
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
- _state.value = {"last_applied_quotas": quotas_dict, "ids": ids}
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 _state:
227
- if _state.exists and _state.value == request_ids:
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
- _state.value = []
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
- _state.value.append(request_id)
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 _state:
257
- if _state.exists:
258
- return _state.value
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
- _state.value = case_id
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 _state:
291
- if _state.exists:
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 _state:
322
- if _state.exists and _state.value == security_contact:
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
- _state.value = security_contact
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 _state:
344
- if _state.exists and _state.value == regions:
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
- _state.value = regions
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 _state:
408
- if _state.exists and _state.value == user_name:
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
- external_resources_aws: 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,
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 _split in self._split_into:
94
- labels.update(_split.change_owner_labels)
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:
@@ -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: current.group_access_level
102
- == desired.group_access_level,
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:
@@ -860,7 +860,8 @@ def patch_desired_resource_for_recycle_annotations(
860
860
  return desired
861
861
 
862
862
  current_annotations = (
863
- current.body.get("spec", {})
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.setdefault("spec", {})
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
- key,
1243
- version=None,
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
- path,
1257
- ref,
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
- bucket_name,
1276
- path,
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
- bucket_name,
1287
- path,
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 _settings := saasherder_settings_query(query_func).settings:
346
- return _settings[0]
345
+ if settings := saasherder_settings_query(query_func).settings:
346
+ return settings[0]
347
347
  raise AppInterfaceSettingsError("settings missing")
@@ -10,8 +10,8 @@ from reconcile.utils.exceptions import (
10
10
 
11
11
 
12
12
  def settings() -> SmtpSettingsV1:
13
- if _settings := query(query_func=gql.get_api().query).settings:
14
- if not _settings[0].smtp:
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 _settings[0].smtp
16
+ return settings_[0].smtp
17
17
  raise AppInterfaceSettingsError("settings missing")
@@ -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 _issue_type in self.project_issue_types(self.project):
237
- if _issue_type.name == issue_type:
238
- return _issue_type
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 _field in self.project_issue_fields(
308
+ for field_ in self.project_issue_fields(
309
309
  project=self.project, issue_type_id=issue_type_id
310
310
  ):
311
- if _field.name == field:
312
- return _field
311
+ if field_.name == field:
312
+ return field_
313
313
  return None
314
314
 
315
315
  def _priorities(self) -> list[Priority]:
@@ -120,7 +120,8 @@ class K8sJobController:
120
120
  if job_resource is None:
121
121
  return None
122
122
  return (
123
- job_resource.body.get("metadata", {})
123
+ job_resource.body
124
+ .get("metadata", {})
124
125
  .get("annotations", {})
125
126
  .get(JOB_GENERATION_ANNOTATION)
126
127
  )
@@ -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.CertificateSigningRequestBuilder()
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 _spec in specs:
3058
- defaults = self.get_values(_spec["defaults"])
3059
- queues = _spec.pop("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 _spec in specs:
3253
- defaults = self.get_values(_spec["defaults"])
3252
+ for spec_ in specs:
3253
+ defaults = self.get_values(spec_["defaults"])
3254
3254
  attributes = defaults.pop("attributes")
3255
- tables = _spec["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.get("logging_info", {})
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.auth_kubernetes(
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.auth_approle(self.role_id, self.secret_id)
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]:
@@ -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, _jobs in jobs.items():
369
+ for instance, jobs_ in jobs.items():
370
370
  jenkins = jenkins_map[instance]
371
- for job in _jobs:
371
+ for job in jobs_:
372
372
  job["jenkins"] = jenkins
373
373
  job["timestamp_limit"] = timestamp_limit
374
374
  history_to_get.append(job)
@@ -66,7 +66,7 @@ def main(
66
66
  ),
67
67
  )
68
68
  if org.name not in [
69
- _org.name for _org in report_user.organizations
69
+ org_.name for org_ in report_user.organizations
70
70
  ]:
71
71
  report_user.organizations.append(
72
72
  GlitchtipAccessReportOrg(
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 _tempdir:
4547
- tempdir = Path(_tempdir)
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 _tempdir:
4586
- tempdir = Path(_tempdir)
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"