qontract-reconcile 0.10.1rc1030__py3-none-any.whl → 0.10.1rc1032__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. {qontract_reconcile-0.10.1rc1030.dist-info → qontract_reconcile-0.10.1rc1032.dist-info}/METADATA +1 -1
  2. {qontract_reconcile-0.10.1rc1030.dist-info → qontract_reconcile-0.10.1rc1032.dist-info}/RECORD +46 -46
  3. reconcile/aws_support_cases_sos.py +1 -1
  4. reconcile/cli.py +1 -1
  5. reconcile/dynatrace_token_provider/integration.py +2 -2
  6. reconcile/endpoints_discovery/merge_request.py +10 -6
  7. reconcile/github_org.py +1 -1
  8. reconcile/gitlab_permissions.py +22 -130
  9. reconcile/ocm_aws_infrastructure_access.py +2 -2
  10. reconcile/openshift_base.py +2 -2
  11. reconcile/openshift_cluster_bots.py +1 -1
  12. reconcile/openshift_namespaces.py +1 -1
  13. reconcile/openshift_resources_base.py +2 -2
  14. reconcile/openshift_saas_deploy_change_tester.py +1 -1
  15. reconcile/openshift_saas_deploy_trigger_base.py +1 -1
  16. reconcile/query_validator.py +2 -2
  17. reconcile/terraform_aws_route53.py +2 -2
  18. reconcile/test/test_closedbox_endpoint_monitoring.py +5 -5
  19. reconcile/test/test_gitlab_permissions.py +9 -97
  20. reconcile/test/test_openshift_resource.py +2 -2
  21. reconcile/test/test_openshift_resources_base.py +7 -7
  22. reconcile/test/test_openshift_serviceaccount_tokens.py +7 -5
  23. reconcile/test/test_terraform_vpc_peerings.py +2 -2
  24. reconcile/utils/acs/base.py +1 -1
  25. reconcile/utils/acs/notifiers.py +1 -1
  26. reconcile/utils/aws_api.py +1 -1
  27. reconcile/utils/config.py +2 -4
  28. reconcile/utils/external_resources.py +1 -1
  29. reconcile/utils/gitlab_api.py +43 -7
  30. reconcile/utils/gql.py +1 -1
  31. reconcile/utils/jinja2/utils.py +1 -1
  32. reconcile/utils/jobcontroller/controller.py +3 -3
  33. reconcile/utils/mr/__init__.py +8 -8
  34. reconcile/utils/ocm/__init__.py +2 -2
  35. reconcile/utils/saasherder/__init__.py +1 -1
  36. reconcile/utils/saasherder/saasherder.py +5 -5
  37. reconcile/utils/state.py +2 -2
  38. reconcile/utils/terraform_client.py +1 -1
  39. reconcile/utils/terrascript_aws_client.py +1 -1
  40. reconcile/utils/unleash/__init__.py +2 -2
  41. reconcile/utils/vcs.py +2 -2
  42. tools/app_interface_reporter.py +7 -7
  43. tools/qontract_cli.py +21 -45
  44. {qontract_reconcile-0.10.1rc1030.dist-info → qontract_reconcile-0.10.1rc1032.dist-info}/WHEEL +0 -0
  45. {qontract_reconcile-0.10.1rc1030.dist-info → qontract_reconcile-0.10.1rc1032.dist-info}/entry_points.txt +0 -0
  46. {qontract_reconcile-0.10.1rc1030.dist-info → qontract_reconcile-0.10.1rc1032.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qontract-reconcile
3
- Version: 0.10.1rc1030
3
+ Version: 0.10.1rc1032
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
@@ -7,10 +7,10 @@ reconcile/aws_ecr_image_pull_secrets.py,sha256=TGEc_0nv8oxV2HqA8VdcM4HHP-B1YqmNO
7
7
  reconcile/aws_garbage_collector.py,sha256=ddwU8IKTueAJc0TzymcREr7hcoVui9kOGvdH1B2EcuM,450
8
8
  reconcile/aws_iam_keys.py,sha256=GpxZR_A4ZQFlOQG1jpNiYhL5GMxdeTJ05aAYgUwWveE,3633
9
9
  reconcile/aws_iam_password_reset.py,sha256=q96mwr2KeEQ5bpNniGlgIMZTxiuLSodcYfX-tSaZPjA,3108
10
- reconcile/aws_support_cases_sos.py,sha256=Jk6_XjDeJSYxgRGqcEAOcynt9qJF2r5HPIPcSKmoBv8,2974
10
+ reconcile/aws_support_cases_sos.py,sha256=hl_9L53yQYRQxKs3IWrd69Cc60XK067g_bJRM9B0udo,2975
11
11
  reconcile/blackbox_exporter_endpoint_monitoring.py,sha256=O1wFp52EyF538c6txaWBs8eMtUIy19gyHZ6VzJ6QXS8,3512
12
12
  reconcile/checkpoint.py,sha256=_JhMxrye5BgkRMxWYuf7Upli6XayPINKSsuo3ynHTRc,5010
13
- reconcile/cli.py,sha256=XYYAh7NPZY86nIIJXNaY3ehbP1ACuix-pMpBUJqsLI4,107372
13
+ reconcile/cli.py,sha256=2hjHLQED4DR41EHoov3uHiURb8dfAbDpaTwxnEvrVhk,107388
14
14
  reconcile/closedbox_endpoint_monitoring_base.py,sha256=rLh16BOlBOxTmJ8Si3wWyyEpmMlhh4Znx1Gc36qsmOc,4865
15
15
  reconcile/cluster_deployment_mapper.py,sha256=5gumAaRCcFXsabUJ1dnuUy9WrP_FEEM5JnOnE8ch9sE,2326
16
16
  reconcile/dashdotdb_base.py,sha256=l34QDu1G96_Ctnh7ZXdxXgSeCE93GQMdLAkWxmN6vDA,4775
@@ -23,7 +23,7 @@ reconcile/deadmanssnitch.py,sha256=n-5W-djUgwzpmdDM4eQIZpkkDmHY0vndt-42LJXI4Y8,7
23
23
  reconcile/email_sender.py,sha256=-5L-Ag_jaEYSzYRoMr52KQBRXz1E8yx9GqLbg2X4XFU,3533
24
24
  reconcile/gabi_authorized_users.py,sha256=rmvJN1TKZbDT0eOYObUeshKpl7uGhPam_r3U5j1eHX4,4854
25
25
  reconcile/gcr_mirror.py,sha256=dXMPHBx_Rdr7HQPfctz7tmBrJHAFG0wos1f4nZe4jRo,8742
26
- reconcile/github_org.py,sha256=m24SQQBlqghh9v663GE3lbHcSCKdcZqHd1hwcfU2PaQ,13455
26
+ reconcile/github_org.py,sha256=Bjxtin6Qlosb7BOVdjPbcQc2QALbEsqnDfYjHAl7OIA,13458
27
27
  reconcile/github_owners.py,sha256=s9NDIqTbaqgGE5lj89eh3Sr52B-6SCUWQILzQlzGyxw,2949
28
28
  reconcile/github_repo_invites.py,sha256=3GOBGZq1DKMIuyYsDxHqXDnMTWlJfeu248-m3ajfV8Y,2672
29
29
  reconcile/github_repo_permissions_validator.py,sha256=dcbXdUx6imjNchjp3pg9-z1i7lFEGOr_28GvsiwO5Xw,1734
@@ -35,7 +35,7 @@ reconcile/gitlab_labeler.py,sha256=4xJHmVX155fclrHqkR926sL1GH6RTN5XfZ8PnqNXbRA,4
35
35
  reconcile/gitlab_members.py,sha256=PrJE9OhDRdGG_gHM_77nQojLb4B18jtUu8DxgLsRS88,8417
36
36
  reconcile/gitlab_mr_sqs_consumer.py,sha256=O46mdziPgGOndbU-0_UJKJVUaiEoVzJPEgKm4_UvYoI,2571
37
37
  reconcile/gitlab_owners.py,sha256=sn9njaKOtqcvnhi2qtm-faAfAR4zNqflbSuusA9RUuI,13456
38
- reconcile/gitlab_permissions.py,sha256=tEjbpr-QH03vZ4L6CuVJhkgA3oaB_gyJ7d58MTR4JJQ,7389
38
+ reconcile/gitlab_permissions.py,sha256=wq0jbWWPN5iOWnRLuZeemCgKh4a_iGy2d4Iq3WFJykM,3636
39
39
  reconcile/gitlab_projects.py,sha256=K3tFf_aD1W4Ijp5q-9Qek3kwFGEWPcZ1kd7tzFJ4GyQ,1781
40
40
  reconcile/integrations_manager.py,sha256=gvOhVklJDeMPURxLjV30Q4hnLET3BZ-NeEEtQBoo_E0,9500
41
41
  reconcile/jenkins_base.py,sha256=0Gocu3fU2YTltaxBlbDQOUvP-7CP2OSQV1ZRwtWeVXw,875
@@ -53,7 +53,7 @@ reconcile/mr_client_gateway.py,sha256=WhjMd-sIXDFCV8-rt8CEjurJ5OYB1pOD0K3o0tZRXQ
53
53
  reconcile/ocm_additional_routers.py,sha256=KfcFDVbNoc6n5dHWjYdAf1_DiVqVG6Tw23WLKoV8cdg,3306
54
54
  reconcile/ocm_addons.py,sha256=qqAyqRBRbdZQvAcjb-QlSVyRAyQBZk6iVlgnI4jyi7s,3353
55
55
  reconcile/ocm_addons_upgrade_tests_trigger.py,sha256=A9zXeYG-_52DsS1dz47yDSnHz62du5XpPBlaeRa6zxY,3975
56
- reconcile/ocm_aws_infrastructure_access.py,sha256=SghVWdmgliPVo_xHsp-e64_iC3mqDiia2ANSHb-g5G8,6891
56
+ reconcile/ocm_aws_infrastructure_access.py,sha256=rrlcQxvRTmKyYOUR1C-Nlxj_o_iCDSxc7PNoELUDiew,6892
57
57
  reconcile/ocm_clusters.py,sha256=0AlqFrUoxxB8rsOgobvnwiBI2Zal8BK2TI2cpWa0Qqg,16895
58
58
  reconcile/ocm_external_configuration_labels.py,sha256=imEpDv1RBpCSj8tHDv0R76hmNCFtcUzVNgS1yOVl8vs,3870
59
59
  reconcile/ocm_github_idp.py,sha256=glwXMsIBcl38-OmDDQCpe0YoLLXfoRgVQmqwXMEXjds,3946
@@ -61,23 +61,23 @@ reconcile/ocm_groups.py,sha256=-rTPMewkdyo1De6gs4u-294p3z34oUbGfuNi8ov56Sk,3424
61
61
  reconcile/ocm_machine_pools.py,sha256=poGfITOCJEMwYAJpiuL8SytgTcBmGIKEZPgNGld80TY,16563
62
62
  reconcile/ocm_update_recommended_version.py,sha256=IYkfLXIprOW1jguZeELcGP1iBPuj-b53R-FTqKulMl8,4204
63
63
  reconcile/ocm_upgrade_scheduler_org_updater.py,sha256=aLgyInt9oIWAg0XtCiwJRUSwdPx3masKV8kHzkyEEOQ,4282
64
- reconcile/openshift_base.py,sha256=ZcyB6FU0MSibu8mLCQrQFOcEIoGITGBjR-g3vbdNKHE,52647
65
- reconcile/openshift_cluster_bots.py,sha256=1aGPaKUOoWuqDt6Jv6hdxc7NfdvjstrCmcDHHFfatIk,10942
64
+ reconcile/openshift_base.py,sha256=l3stMLbjRj3Z18orwyRv8ZN5IqVRaEwQ9tgiQJjDI5w,52641
65
+ reconcile/openshift_cluster_bots.py,sha256=AmCLCrlsZ_Wd5qMPzlv-O01i47WGJuojEc-Jgt2n77c,10942
66
66
  reconcile/openshift_clusterrolebindings.py,sha256=sDgHi_t2ayE3O6zZ5CLao7uBmihxRK8K70w2GSADz-w,5822
67
67
  reconcile/openshift_groups.py,sha256=sK2wLWwNupztbfyFPl32VH42s_s8Mu3g-URdlisnwJc,9382
68
68
  reconcile/openshift_limitranges.py,sha256=UvCGo_OQ4XoDK55TJmn55qEhhlkhLzhU12tX8nT5kPQ,3442
69
69
  reconcile/openshift_namespace_labels.py,sha256=97qZl0MlYCUGP5Uu3zwMoU-qt0Drbhafb2NHy4CZWLo,15619
70
- reconcile/openshift_namespaces.py,sha256=wCDf9LVvk0aTTPUQe_ZycjjWldAjycU6A0_4FQJR74Y,5809
70
+ reconcile/openshift_namespaces.py,sha256=ju6G46odndwQlaMMV6Y6RjcDmtjAAFP4oEEaDuLAbLg,5806
71
71
  reconcile/openshift_network_policies.py,sha256=DyjaeJvSFHmslbM8nyHCxpF9EtU2m-MJokMrAv6Nwoo,4171
72
72
  reconcile/openshift_prometheus_rules.py,sha256=onowXab248zmHH8SbYDTc1W1bl7JiqRFU1xdTkZyLFg,1332
73
73
  reconcile/openshift_resourcequotas.py,sha256=yUi56PiOn3inMMfq_x_FEHmaW-reGipzoorjdar372g,2415
74
74
  reconcile/openshift_resources.py,sha256=I2nO_C37mG3rfyGrd4cGwN3mVseVGuTAHAyhFzLyqF4,1518
75
- reconcile/openshift_resources_base.py,sha256=Seh4T8oA_JO-g0Z5TODDtL5cyRj-o7bmk6-eOmDAL4Q,40751
75
+ reconcile/openshift_resources_base.py,sha256=SKlJffnYjnc7AHIOvi7Ui9TmDA93_t81d5t54wnqCOA,40745
76
76
  reconcile/openshift_rolebindings.py,sha256=9mlJ2FjWUoH-rsjtasreA_hV-K5Z_YR00qR_RR60OZM,6555
77
77
  reconcile/openshift_routes.py,sha256=fXvuPSjcjVw1X3j2EQvUAdbOepmIFdKk-M3qP8QzPiw,1075
78
78
  reconcile/openshift_saas_deploy.py,sha256=UZlm29JujJVS3MzSm6uehlC3y-jZxl6WVwMeKRdN11U,12773
79
- reconcile/openshift_saas_deploy_change_tester.py,sha256=FfXrx_JloAlWeJVsJLIQPqFQ7OoBkaB2TgJJXlNZNCM,8796
80
- reconcile/openshift_saas_deploy_trigger_base.py,sha256=m7aqYEZUM-vr3EBw-hIbz1rHpXZNxs_BAJv3ndfvnAQ,14039
79
+ reconcile/openshift_saas_deploy_change_tester.py,sha256=12uyBwaeMka1C3_pejmQPIBPAx2V1sJ4dJkScq-2e2M,8793
80
+ reconcile/openshift_saas_deploy_trigger_base.py,sha256=Ss_FE31d8jR2f3lbSiU0ROBMVI1kg-Y_8nxLavFPFko,14036
81
81
  reconcile/openshift_saas_deploy_trigger_cleaner.py,sha256=roLyVAVntaQptKaZbnN1LyLvCA8fyvqELfjU6M8xfeY,3511
82
82
  reconcile/openshift_saas_deploy_trigger_configs.py,sha256=eUejMGWuaQabZTLuvPLLvROfN5HOFyYZOpH4YEsiU_g,928
83
83
  reconcile/openshift_saas_deploy_trigger_images.py,sha256=iUsiBGJf-CyFw7tSLWo59rXmSvsVnN6TTaAObbsVpNg,936
@@ -95,7 +95,7 @@ reconcile/quay_mirror_org.py,sha256=utrJpJaKCs7U6WX6DODdfCeB0EmX-lUC8Y5fkmpgFSs,
95
95
  reconcile/quay_permissions.py,sha256=9KOutS1w4RFQqkvMSy54VtsKNx56-phzP6yI_rEW-B8,4244
96
96
  reconcile/quay_repos.py,sha256=cuEYG0HUe0ut5yvLdEwOF5-CmccpXQHRb_wDazvDrvQ,6895
97
97
  reconcile/queries.py,sha256=-mwZ0V89Tik0zB585ID0jEqC4VSuUVaAPlaSXaNAR-E,50180
98
- reconcile/query_validator.py,sha256=BAjGrU8_VhzTOv5k0-uz0hY9ziZyconv8VAhgre1Auc,1497
98
+ reconcile/query_validator.py,sha256=MSh5pKLBksws4AqfuvT8nrIGucIbqX-IOzYyPYTLO7k,1491
99
99
  reconcile/requests_sender.py,sha256=914iluuF4UVgG3VyxxtnHOu4yf6YKS2fIy6PViSsFTQ,3875
100
100
  reconcile/resource_scraper.py,sha256=znXCHrU7YwPfKuxGBiUrV7T1tYtn4vlz9qmZlfy6Flg,2307
101
101
  reconcile/resource_template_tester.py,sha256=DsKvBuNLPxm4Fa-e1YHHySnhThm5i_j-nF3G4b02Mz0,2416
@@ -108,7 +108,7 @@ reconcile/slack_usergroups.py,sha256=tZIpxbCmS8M4A15tYdtgCMEJ1Q6hcrkF9j_5-CZ6Yjs
108
108
  reconcile/sql_query.py,sha256=pH-EHkXiDknn8ZNXVqRZeqFc3sKhu2nhsaykgSytbS8,25895
109
109
  reconcile/status.py,sha256=cY4IJFXemhxptRJqR4qaaOWqei9e4jgLXuVSGajMsjg,544
110
110
  reconcile/status_board.py,sha256=YeoE7kLf1YKpOdN32u3vqhuSI46ep5N_qcVWC1CBCf8,8635
111
- reconcile/terraform_aws_route53.py,sha256=1C1_xd_xjysPLSYKvohS6bfSsjSMP0U3sWVcRNW9cAA,9957
111
+ reconcile/terraform_aws_route53.py,sha256=dQzzT46YhwRA902_H6pi-f7WlX4EaH187wXSdmJAUkQ,9958
112
112
  reconcile/terraform_cloudflare_dns.py,sha256=-aLEe2QnH5cJPu7HWqs-R9NmQ1NlFbcVUm0v7alVL3I,13431
113
113
  reconcile/terraform_cloudflare_resources.py,sha256=41Mj1WkuS75slCDpmhG2GGf1nh3BwfxcdNC73-PNadc,15000
114
114
  reconcile/terraform_cloudflare_users.py,sha256=iyTG5sj20Jg4J4qWJ144KVptfIHGOSfH8wQKxu0imq0,13942
@@ -181,13 +181,13 @@ reconcile/cna/assets/asset_factory.py,sha256=7T7X_J6xIsoGETqBRI45_EyIKEdQcnRPt_G
181
181
  reconcile/cna/assets/null.py,sha256=85mVh97atCoC0aLuX47poTZiyOthmziJeBsUw0c924w,1658
182
182
  reconcile/dynatrace_token_provider/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
183
183
  reconcile/dynatrace_token_provider/dependencies.py,sha256=41q05A4C_eS3E8-MR4veeMxtQNsPoGdxmEa3d-OKxq4,2814
184
- reconcile/dynatrace_token_provider/integration.py,sha256=jOpj2qtkI95b_Ih0IH3cYV5G63RBuxhG6kX4RADBWeg,23003
184
+ reconcile/dynatrace_token_provider/integration.py,sha256=-oAZ40IHLbY99PZB9THtH2FnS5LHCKpQMIYFdy1bp4Q,22997
185
185
  reconcile/dynatrace_token_provider/metrics.py,sha256=xiKkl8fTEBQaXJelGCPNTZhHAWdO1M3pCXNr_Tei63c,1285
186
186
  reconcile/dynatrace_token_provider/model.py,sha256=gkpqo5rRRueBXnIMjp4EEHqBUBuU65TRI8zpdb8GJ0A,241
187
187
  reconcile/dynatrace_token_provider/ocm.py,sha256=iHMsgbsLs-dlrB9UXmWNDF7E4UDe49JOsLa9rnowKfo,4282
188
188
  reconcile/endpoints_discovery/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
189
189
  reconcile/endpoints_discovery/integration.py,sha256=lUx_S_mQNATuB3tqGbyaliHBb355PCuU5SaVAiD_tbQ,12354
190
- reconcile/endpoints_discovery/merge_request.py,sha256=NktpwMUoQ9TvBzOeHSPC09OqxWmgZBZVy-Eqmsm_vrA,2909
190
+ reconcile/endpoints_discovery/merge_request.py,sha256=_yLb4tnvoZMCko8rta2C_CvOInJa9pa3HzSmHNtjgGU,2978
191
191
  reconcile/endpoints_discovery/merge_request_manager.py,sha256=oY3lovy5DcUgHNEDzWrbOPabzZtaGMns6YLl5ipZJ0c,6346
192
192
  reconcile/external_resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
193
193
  reconcile/external_resources/aws.py,sha256=JvjKaABy2Pg8u8Lq82Acv4zMvpE3_qGKes7OG-zlHOM,2956
@@ -507,7 +507,7 @@ reconcile/test/test_aws_iam_password_reset.py,sha256=fnkqB90adR7W4L4saNdrtIiwnQB
507
507
  reconcile/test/test_aws_support_cases_sos.py,sha256=MLgPHTv8uZhh2iINoBV38jiweEqFhqGg7WYOveXkIXY,837
508
508
  reconcile/test/test_checkpoint.py,sha256=sbDtqTbfw5yMZ_mCltMXxkyyGueVLGUjTDtcWhPP7yA,5340
509
509
  reconcile/test/test_cli.py,sha256=qx_iBwh4Z-YkK3sbjK1wEziPTgn060EN-baf9DNvR3k,1096
510
- reconcile/test/test_closedbox_endpoint_monitoring.py,sha256=isMHYwRWMFARU2nbJgbl69kD6H0eA86noCM4MPVI1fo,7151
510
+ reconcile/test/test_closedbox_endpoint_monitoring.py,sha256=I0lSFOUQ5dBxjKeq1Dg3E4gWqoZ9d26d5pQmsLqWLPc,7166
511
511
  reconcile/test/test_dashdotdb_dora.py,sha256=MfHGAsX2eSQSvBVt9_1Sah3aQKNJBXA9Iu86X0NWD6c,7705
512
512
  reconcile/test/test_database_access_manager.py,sha256=n37cNan0dcMymWJbpsKN9HaCQ0vzXDn5PZencEH7e98,19592
513
513
  reconcile/test/test_deadmanssnitch.py,sha256=YAf8wlZoEC60Ul7UA6Y6XqwnZ1yqf07J15ABqeLpqW4,9835
@@ -518,7 +518,7 @@ reconcile/test/test_github_repo_invites.py,sha256=WrPn5ROAoJYK0ihzlZcFR0V9Pu2HcM
518
518
  reconcile/test/test_gitlab_housekeeping.py,sha256=ScD9Tgf9OOgGfAFfTy6Kn2222l2wH_A3gMRKdpvoWe0,10053
519
519
  reconcile/test/test_gitlab_labeler.py,sha256=PmYXiU2g0_O5OTdMGPzdeqBAfat92U9bhjjfeyiGSmQ,4336
520
520
  reconcile/test/test_gitlab_members.py,sha256=yjfQRUFG_F0kLYegax4_ec5VIBAnCPrvAgqMcN1GXzc,9985
521
- reconcile/test/test_gitlab_permissions.py,sha256=aMf5SUeVp-aQ1bWGQPQLYa85auzRlyfZVTWqyybJ6mo,5850
521
+ reconcile/test/test_gitlab_permissions.py,sha256=vPFEsdjyP-lO8pc2rN6acMns3Sjz9YJs16msbBR8DZc,2736
522
522
  reconcile/test/test_instrumented_wrappers.py,sha256=CZzhnQH0c4i7-Rxjg7-0dfFMvVPegLHL46z5NHOOCwo,608
523
523
  reconcile/test/test_integrations_manager.py,sha256=xpyQAVz57wAbovrcQzAeuyq8VzdItUyW2d2kp1WW_5c,38184
524
524
  reconcile/test/test_jenkins_worker_fleets.py,sha256=o1jlT7OBBSgu0M3iI4xMdz_x6SciF7yhNBpLk5gTJfg,2361
@@ -536,12 +536,12 @@ reconcile/test/test_openshift_base.py,sha256=SX8URKF8Kn21nA-qcmICSUaZKHuc5YTgPzf
536
536
  reconcile/test/test_openshift_cluster_bots.py,sha256=sSGLgxnXO82xcfTFVNJzsrDuNfObwAR_-AkDe4B_4WE,7983
537
537
  reconcile/test/test_openshift_namespace_labels.py,sha256=i4S5QJFxMRjLkwi3iO6A-uhjgZ1QZb4jYXwB696m82Y,12070
538
538
  reconcile/test/test_openshift_namespaces.py,sha256=HmRnCE5EnFt3MYceVEFHmk8wWRtCrxu2AFGFkY9pdyA,9214
539
- reconcile/test/test_openshift_resource.py,sha256=lbTf48jX1q6rGnRiA5pPvfU0uPfY8zhNylMtryn0sLI,12995
540
- reconcile/test/test_openshift_resources_base.py,sha256=LtlR9x3o7KkSEw0JN0fZhinFeAAxBAQlB_9PpBnKwOM,14353
539
+ reconcile/test/test_openshift_resource.py,sha256=0HlknH5SR3H6YXyoaKuk-4Trii04LSowM_pbsGsucjA,13001
540
+ reconcile/test/test_openshift_resources_base.py,sha256=GOMYGG6yFACXpDWwPMBBIOR0v0ikjefEDON1DPQfdkk,14374
541
541
  reconcile/test/test_openshift_saas_deploy.py,sha256=3QXMrN9dXIiR0JktVDNQ7yJSexMTjZLb1tbRrB3-7uU,5991
542
542
  reconcile/test/test_openshift_saas_deploy_change_tester.py,sha256=1yVe54Hx9YdVjn6qdnKge5Sa_s732c-8uZqCnuT1gGI,12871
543
543
  reconcile/test/test_openshift_saas_deploy_trigger_cleaner.py,sha256=UQx1iJ21rsMa2whG-rtUIuTXbUzc0Ngr7jRLKXZCCCI,2838
544
- reconcile/test/test_openshift_serviceaccount_tokens.py,sha256=l5de4zsK4-eJMZuLsftYrsdKSXImKsxaWApPbK0pOoY,8958
544
+ reconcile/test/test_openshift_serviceaccount_tokens.py,sha256=VvVXDCS94KFvSLOhK8ScKjvmns5k1B6QgWr691AXiKc,8991
545
545
  reconcile/test/test_openshift_tekton_resources.py,sha256=O6-qPQwSiPHQKm1a1iqRU2V8eabc4uiG4mNxPSUBg88,11212
546
546
  reconcile/test/test_openshift_upgrade_watcher.py,sha256=0GDQ_YFHIX8DbkbDYSuLv9uZeeg4NwP1vlOqvSaZvN4,7183
547
547
  reconcile/test/test_prometheus_rules_tester.py,sha256=cgVkPM3KcAw69bOkJ6iR2Lfog_WgblyoqVRtXv4ly7o,5685
@@ -567,7 +567,7 @@ reconcile/test/test_terraform_repo.py,sha256=INfl-VlUtpV87J0neQt4wliptnX7PKvxLPF
567
567
  reconcile/test/test_terraform_resources.py,sha256=8C97yXIEihaQ3DZrtjxLNt4y4G12IOhD01ydm7JjliY,15359
568
568
  reconcile/test/test_terraform_tgw_attachments.py,sha256=SM6QwogMZNLh0BkUyaxzFafuOLp23-hBtYTu_F53C4I,40922
569
569
  reconcile/test/test_terraform_users.py,sha256=XOAfGvITCJPI1LTlISmHbA4ONMQMkxYUMTsny7pQCFw,4319
570
- reconcile/test/test_terraform_vpc_peerings.py,sha256=Btl0ym7NmO2QFST9Xviz4OO1RjJuhCp1Xhix5A3e_HQ,20822
570
+ reconcile/test/test_terraform_vpc_peerings.py,sha256=bpjCjhmic07cw3XKSHf-2JvmLuWlyQG8laXlC-H7qtI,20796
571
571
  reconcile/test/test_terraform_vpc_peerings_build_desired_state.py,sha256=7VAFVbjlnnUJoOkZ4ApDc1lHFj38Zj4yrbDKvWkqWXE,49545
572
572
  reconcile/test/test_three_way_diff_strategy.py,sha256=v3rNkQFNy5e1uyfeNSlNBA07fvrPGD0aXD91Lgv8oxc,4062
573
573
  reconcile/test/test_utils_jinja2.py,sha256=TpzQlpFnLGzNEZp5WOh0o7AuBiGEktqO4MuwiiJW2YY,3895
@@ -650,11 +650,11 @@ reconcile/unleash_feature_toggles/integration.py,sha256=nx7BhtzCsTfPbOp60vI5MkNw
650
650
  reconcile/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
651
651
  reconcile/utils/aggregated_list.py,sha256=km0xadW0jO4G_CqZPsXmoBURQ8c90FaTu5x4X1K1cZs,3357
652
652
  reconcile/utils/amtool.py,sha256=ngtBuVPETH6oAy5RnKzvreVbjwQCaATS_PYYwBprzjQ,2288
653
- reconcile/utils/aws_api.py,sha256=0Sh83kX8tk-XGwsWbNI19miuits71c3btKxGVhyApuY,66860
653
+ reconcile/utils/aws_api.py,sha256=tYjTEW1uSkWsMWNFxwavJsI9xtq1dEeJ2HPlN5LAHzA,66861
654
654
  reconcile/utils/aws_helper.py,sha256=MDbv5jrNdqqJ5pfBxniGdJXBBO_EYc2_Uf2w9ZzeMNs,2854
655
655
  reconcile/utils/batches.py,sha256=TtEm64a8lWhFuNbUVpFEmXVdU2Q0sTBrP_I0Cjbgh7g,320
656
656
  reconcile/utils/binary.py,sha256=7MaAFBpzuBUTJ_aA6G6-eult_BPMVyiXbBLD0Y6F-DM,2301
657
- reconcile/utils/config.py,sha256=lweqMxBEoSh2anhhvr9CTIYIh2ZtitOLpnlJYmU7p48,1032
657
+ reconcile/utils/config.py,sha256=kwaAaNBQ9z-fsDJu2-WZFgTnL6HKd3FPjiu0mbriHkg,1004
658
658
  reconcile/utils/constants.py,sha256=pOUd97bqZdsAu5RWJ8NUs9cwCY7K9y0eW9VVeJ4fZIU,138
659
659
  reconcile/utils/data_structures.py,sha256=VyKfnlNJTiRvZKNpfgIrjESQ2YgmEpWuPQXT14WA1vI,311
660
660
  reconcile/utils/deadmanssnitch_api.py,sha256=0uajXxRNUEyF8CPTYPFNV4G-_3KB_hDF9L8OtTy2zCk,2476
@@ -669,14 +669,14 @@ reconcile/utils/exceptions.py,sha256=DwfnWUpVOotpP79RWZ2pycmG6nKCL00RBIeZLYkQPW4
669
669
  reconcile/utils/expiration.py,sha256=3JaXH4psksR7z262k7FmdyREjCLqm66OpVMEbcfdWRo,1213
670
670
  reconcile/utils/extended_early_exit.py,sha256=QSktrmfw37zSRMNk930tDbQsVeKxaPPPD43e79DGwZw,6754
671
671
  reconcile/utils/external_resource_spec.py,sha256=bhH_xneFwATdFumTPkiQmcVKYI0gcaWuqV6FpFdf_P0,7006
672
- reconcile/utils/external_resources.py,sha256=ObBOGBRTsDQ2s9rojfeUfFMoR8ls4Kg-AnpsyF6m7u8,7539
672
+ reconcile/utils/external_resources.py,sha256=GC4wYuSXwk2ifr3aDEwnEiumaYqWhzgKK-hXp6pXemA,7516
673
673
  reconcile/utils/filtering.py,sha256=S4PbMHuFr3ED0P2Q_ea5CAaB7FimI62B-F5YTaKrphA,402
674
674
  reconcile/utils/git.py,sha256=JkpbUO10oBTtNHZ1IhjyG6dTOUizc7I5H0vm7NvDVNw,1409
675
675
  reconcile/utils/git_secrets.py,sha256=y1rEhwA8DyDpBSAEuhMS7Y2X3mpxT2zQ4zyDFkhLe_g,1936
676
676
  reconcile/utils/github_api.py,sha256=R8OvqyPdnRqvP-Efnv9RvIcbBlb4M0KC4RlbnJMD0Tg,2426
677
- reconcile/utils/gitlab_api.py,sha256=XCBME1p42D6dbedbcLlFt1VmTLZLlOjZEnusoXEr4ps,29029
677
+ reconcile/utils/gitlab_api.py,sha256=WfhLhOp3-cOwgptiCNPhWja74Lo41ZIlJ6HFSWaIDRw,30512
678
678
  reconcile/utils/gpg.py,sha256=EKG7_fdMv8BMlV5yUdPiqoTx-KrzmVSEAl2sLkaKwWI,1123
679
- reconcile/utils/gql.py,sha256=NqxosFCInLy_dF_fcXnRYcZgsThedSyv_I3U8k2SLMg,14161
679
+ reconcile/utils/gql.py,sha256=C0thIm_k9MBldfqwHzyqtYZk9sIvMdm9IbbnXLGwjD8,14158
680
680
  reconcile/utils/grouping.py,sha256=vr9SFHZ7bqmHYrvYcEZt-Er3-yQYfAAdq5sHLZVmXPY,456
681
681
  reconcile/utils/helm.py,sha256=Zmh9shdcUNJmiHIbBDkuUlk9T_Cg7uvWfw9c4St2n8E,3775
682
682
  reconcile/utils/helpers.py,sha256=k9svgFFZG7H5FvHYY0g5jJyvgvh2UDZxf0Ib221teag,1179
@@ -719,19 +719,19 @@ reconcile/utils/sharding.py,sha256=gkYf0lD3IUKQPEmdRJZ70mdDT1c9qWjbdP7evRsUis4,8
719
719
  reconcile/utils/slack_api.py,sha256=iaOFzv3wiZRhcgYK2NB4lsG6ymNsGk2MEuj0PgZVp7w,17355
720
720
  reconcile/utils/smtp_client.py,sha256=ee8FHnCMt_uhDBJOvIfFtyutbToq-Ni5MECC_c8DXnA,2769
721
721
  reconcile/utils/sqs_gateway.py,sha256=XNIf3PY4UCPNufP2Ul0UJj3fKlt5larBba-VTT-41Fg,2265
722
- reconcile/utils/state.py,sha256=a_EO5u7__Pqd0_E3MqzUttJ-0xRtuxcNx5oQi5WIahI,16392
722
+ reconcile/utils/state.py,sha256=W0_awkLAPX18hNOF_60o73tkPxDUylqbzYNHfl_sDsk,16386
723
723
  reconcile/utils/structs.py,sha256=LcbLEg8WxfRqM6nW7NhcWN0YeqF7SQzxOgntmLs1SgY,352
724
724
  reconcile/utils/template.py,sha256=wTvRU4AnAV_o042tD4Mwls2dwWMuk7MKnde3MaCjaYg,331
725
- reconcile/utils/terraform_client.py,sha256=4eYKaKfG5wYfR--e1jHpmoMq36Q-JX1_WtT916wlMVw,34669
726
- reconcile/utils/terrascript_aws_client.py,sha256=1JgXcCF_-xbaAg7V9qihL1Xz5okQlSSrT1DeXGducHc,278037
725
+ reconcile/utils/terraform_client.py,sha256=jHTkqqJk1HQh2vZP1FkEeDOiMlO-SKmX8oYuS7lzO_o,34672
726
+ reconcile/utils/terrascript_aws_client.py,sha256=eshIGXo9HQkAAANhO_mdL3a7M7A6NbMMlc8nj61k6Lk,278034
727
727
  reconcile/utils/three_way_diff_strategy.py,sha256=oQcHXd9LVhirJfoaOBoHUYuZVGfyL2voKr6KVI34zZE,4833
728
728
  reconcile/utils/throughput.py,sha256=iP4UWAe2LVhDo69mPPmgo9nQ7RxHD6_GS8MZe-aSiuM,344
729
729
  reconcile/utils/vault.py,sha256=9GSNHku8tw5KM2LKpZ1myWYDLtLGUJgpSnD0DxbzeO0,14956
730
730
  reconcile/utils/vaultsecretref.py,sha256=0KUSzuvTRxPyKY919TO3-B_eYg4_76fzKvMF8j5s1G0,911
731
- reconcile/utils/vcs.py,sha256=i2fbeoct1o6vMLON7SqW2IcDUhHQv7eZyNK3r7Ue6_w,8875
731
+ reconcile/utils/vcs.py,sha256=98SLBpqy-j_foE6NRwsyMCiPpNQtM6ujspnk6_qOURI,8881
732
732
  reconcile/utils/acs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
733
- reconcile/utils/acs/base.py,sha256=6bMvtvmqb8j7fvOYqKu3lMWQzRuhMmZ6xv1Gfyev1hU,2535
734
- reconcile/utils/acs/notifiers.py,sha256=WI2HEerP73vDDYtBW-mC40MQAbo-VcTJbonl4_rhCTk,4997
733
+ reconcile/utils/acs/base.py,sha256=4UsDrCpAOuddL3PKNuIQYoJP1BtZQNNB8_KEX0lXneg,2532
734
+ reconcile/utils/acs/notifiers.py,sha256=nHVw9C_2-K4nv5zq26jlOTSw1roY6TKlovi1sOfpxpI,4998
735
735
  reconcile/utils/acs/policies.py,sha256=jpbi3qpGkBD_X6MfzsX12dPajUbmACmhIOz_0rDvYzs,5489
736
736
  reconcile/utils/acs/rbac.py,sha256=ugsLM9Pb7FbUbdq85E3VzXGMaB9ZovXob7tdWCxwqZ8,8808
737
737
  reconcile/utils/aws_api_typed/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -760,9 +760,9 @@ reconcile/utils/internal_groups/models.py,sha256=y_IqBVqfGqNXiu0VudvBWFrm_-uafVm
760
760
  reconcile/utils/jinja2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
761
761
  reconcile/utils/jinja2/extensions.py,sha256=7K-uo6G2eCWa98MHT8fRPYIKCLQB_5D2keqQ_LyAfHM,1293
762
762
  reconcile/utils/jinja2/filters.py,sha256=tmiaYMhji5fv4B66YtR7zc-mE3wQLyj5I5SeX0WA2l4,4754
763
- reconcile/utils/jinja2/utils.py,sha256=gjsTb__eSddY-JyYjx-9AGFzYCEMqfYyMym_B8x0pdo,8045
763
+ reconcile/utils/jinja2/utils.py,sha256=a4vpt8f0UHerPAZs5zFESkVzZdEZRJjZ4mzJ19nubjI,8048
764
764
  reconcile/utils/jobcontroller/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
765
- reconcile/utils/jobcontroller/controller.py,sha256=2V_vm5thFx6adW4bMy9CdHXFesuo6S4lSkEpGxkXSM0,14492
765
+ reconcile/utils/jobcontroller/controller.py,sha256=n9twSH_xZtp5vknM3qByp0eWCn9ED4U1a6yOFBS-GTg,14488
766
766
  reconcile/utils/jobcontroller/models.py,sha256=x9YIvWfYOOvXNKToFVx1H7qDrZb0Sa1KI_4Y0gl7rMM,6336
767
767
  reconcile/utils/membershipsources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
768
768
  reconcile/utils/membershipsources/app_interface_resolver.py,sha256=MqDFvK3aXhmmMuMiIygC-onFVrrIopKHriaYJQ5jnuY,1988
@@ -771,7 +771,7 @@ reconcile/utils/membershipsources/resolver.py,sha256=meERrCZqeVJZR2lHdZEznaZDsCs
771
771
  reconcile/utils/merge_request_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
772
772
  reconcile/utils/merge_request_manager/merge_request_manager.py,sha256=3EP6Yw_zB7nY0OkU8D_32nDqta1TITgtRI0cSmOlNQg,3332
773
773
  reconcile/utils/merge_request_manager/parser.py,sha256=5pGoz8Q6EuYXlUc1z-D0FahdRP2YLO8CpACoa9HcgtQ,2098
774
- reconcile/utils/mr/__init__.py,sha256=IvDRx0x33ROPZ66DDkg3FCt8pLpcaVRGWyCJvZQ1SPE,2578
774
+ reconcile/utils/mr/__init__.py,sha256=hcfHDIIIsJT4C0BnzDnyeZEfZdamrqHzMLcBzIT1ibI,2578
775
775
  reconcile/utils/mr/app_interface_reporter.py,sha256=6Kpg93V9FvcOke9Jimkva359MQ-ZyBIkUpf8QIA6-to,1793
776
776
  reconcile/utils/mr/aws_access.py,sha256=w-UJutB_OfBJOvr-gsPzhtBPkDfKcNZZWGGuI9cN3HI,2605
777
777
  reconcile/utils/mr/base.py,sha256=TP6xaxznxsF_v2KcC_D3ut1cX_4KCcx4pjIC1-4eZUY,7307
@@ -783,7 +783,7 @@ reconcile/utils/mr/ocm_update_recommended_version.py,sha256=p_aVP0TGrlKk9WBwgQnY
783
783
  reconcile/utils/mr/ocm_upgrade_scheduler_org_updates.py,sha256=ojnIjw-8vRnmCCxOGBOEgPZLH4nC1hcuef74LWw2Rpk,3004
784
784
  reconcile/utils/mr/promote_qontract.py,sha256=3o_Lpn3gQc8HP3kSJRB1d7TvaDoIAKWLap5bhagQRaM,5945
785
785
  reconcile/utils/mr/user_maintenance.py,sha256=cHPBn8zrReWLHalyk-EFdkFJe9zjVjRoZhT4t2zZfGE,3956
786
- reconcile/utils/ocm/__init__.py,sha256=xv7CJp7K9LCQfa4gL_W0MMCOD1P4qOy8t5aZj1xXNUE,808
786
+ reconcile/utils/ocm/__init__.py,sha256=Y-bp8GomMpyCo0tFW6kJ78-ZG1UIupYRtBzbMWU0kwM,798
787
787
  reconcile/utils/ocm/addons.py,sha256=_LDdJ-gapM3s5exKlIUt-MlXZTAUoHezbYBU0QmvfWQ,7335
788
788
  reconcile/utils/ocm/base.py,sha256=iL_uMN03URDisWHpsaGGto_pLx652epUkuld_9ctx5o,14555
789
789
  reconcile/utils/ocm/cluster_groups.py,sha256=F8oqVqN_4QUnGL0K61zZhoYIzJeP57EcmZpwmoV0mr4,1751
@@ -811,10 +811,10 @@ reconcile/utils/runtime/integration.py,sha256=H3kDfbc4IKrhubSDCWHs0W9oxM7FoCiPax
811
811
  reconcile/utils/runtime/meta.py,sha256=dWdKS9eHVuowFkTK4lgXJ723vS1y9giOMzePUKnHnDI,214
812
812
  reconcile/utils/runtime/runner.py,sha256=I30KRrX1UQbHc_Ir1cIZX3OfNSdoHKdnDSPAEB69Ilk,7944
813
813
  reconcile/utils/runtime/sharding.py,sha256=r0ieUtNed7NvknSw6qQrCkKpVXE1shuHGnfFcnpA_k4,16142
814
- reconcile/utils/saasherder/__init__.py,sha256=J3MBZBFa5YmhqYm08QsjBXz8mFcVOCiOCkyIcw41t7E,343
814
+ reconcile/utils/saasherder/__init__.py,sha256=3U8plqMAPRE1kjwZ5YnIsYsggTf4_gS7flRUEuXVBAs,343
815
815
  reconcile/utils/saasherder/interfaces.py,sha256=C2wrw34OXypshVocAsPrVZsSHptgw4g9u7Haa2wulZQ,9087
816
816
  reconcile/utils/saasherder/models.py,sha256=z8ln03zi2a8cu716NcNUDHp8Dv1VcVbhqdWVxCl7x9A,10148
817
- reconcile/utils/saasherder/saasherder.py,sha256=rTsBaQrCY7StLWkkHnMLVil8luLMsZ9hRED6SDw4Cds,85698
817
+ reconcile/utils/saasherder/saasherder.py,sha256=qYnVoBydM0lMMW0J4xvMWFi6kBZzpvguqEbQgm2c1QM,85683
818
818
  reconcile/utils/terraform/__init__.py,sha256=zNbiyTWo35AT1sFTElL2j_AA0jJ_yWE_bfFn-nD2xik,250
819
819
  reconcile/utils/terraform/config.py,sha256=5UVrd563TMcvi4ooa5JvWVDW1I3bIWg484u79evfV_8,164
820
820
  reconcile/utils/terraform/config_client.py,sha256=gRL1rQ0AqvShei_rcGqC3HDYGskOFKE1nPrJyJE9yno,4676
@@ -823,7 +823,7 @@ reconcile/utils/terrascript/cloudflare_client.py,sha256=HPmWBF6X2yZ4_Yly5IdMmEwx
823
823
  reconcile/utils/terrascript/cloudflare_resources.py,sha256=AXI0NddGSwn5rro1GvKdL7CAbiobPnb_0KpDUZVpIGk,15973
824
824
  reconcile/utils/terrascript/models.py,sha256=DZfSEqyaZh8fCE_g7toa9TUCzcn3MHnuumoWCdzACh0,441
825
825
  reconcile/utils/terrascript/resources.py,sha256=ucuudrCjmJYeSleklXTlmeSEwZOqVtEfzWFEiDZydxM,1361
826
- reconcile/utils/unleash/__init__.py,sha256=ayCrW7Cw9dxQYq56QwrjtTcCnMp0xAHr1R7re9jo6RM,219
826
+ reconcile/utils/unleash/__init__.py,sha256=2PsN3GlLU8DOyWSvv5q9uzwuFn_vYtfEo-mmVaIFtpA,219
827
827
  reconcile/utils/unleash/client.py,sha256=YrJnauxjcy1ml7W2AHg7dzIH_fVK_GugoRu7IFmk6e0,3505
828
828
  reconcile/utils/unleash/server.py,sha256=907gDh9Ee8UxLqusnfpzE-7LUnttB38D4xhVJ0vMf_M,4439
829
829
  release/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -831,10 +831,10 @@ release/test_version.py,sha256=4DKxDZkT0aoS6ibZFsH2fd_wNETij1qfn2pCgQtVCGo,2093
831
831
  release/version.py,sha256=hLSW-Ai13atY9yBcUkEPEOr-drkZdRC4VcFIm1n5Y8o,4103
832
832
  tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
833
833
  tools/app_interface_metrics_exporter.py,sha256=zkwkxdAUAxjdc-pzx2_oJXG25fo0Fnyd5JXPk-iPcOQ,1619
834
- tools/app_interface_reporter.py,sha256=1ZP58LYV6ww3XOLVxgy8NKasMb1jQmp4BNqzTEB0VBE,17723
834
+ tools/app_interface_reporter.py,sha256=oZPib4HPq0aZ2Zui1QGJGk6qQdfpeihujGDBnSdKyGE,17627
835
835
  tools/glitchtip_access_reporter.py,sha256=oPBnk_YoDuljU3v0FaChzOwwnk4vap1xEE67QEjzdqs,2948
836
836
  tools/glitchtip_access_revalidation.py,sha256=8kbBJk04mkq28kWoRDDkfCGIF3GRg3pJrFAh1sW0dbk,2821
837
- tools/qontract_cli.py,sha256=8HbIKtepnmoQteb9Q31iJXFG7_y2o_g6JEkIhXnoncM,128916
837
+ tools/qontract_cli.py,sha256=LDQgwmAg3kzgtPuODqhGgPeVfD_9g8dgiOOVRsJ3YRA,128234
838
838
  tools/sd_app_sre_alert_report.py,sha256=e9vAdyenUz2f5c8-z-5WY0wv-SJ9aePKDH2r4IwB6pc,5063
839
839
  tools/template_validation.py,sha256=qpKYaTgk0GOPGa2Ct5_5sKdwIHtCAKIBGzsMPuJU5fw,3371
840
840
  tools/cli_commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -865,8 +865,8 @@ tools/test/test_qontract_cli.py,sha256=_D61RFGAN5x44CY1tYbouhlGXXABwYfxKSWSQx3Jr
865
865
  tools/test/test_saas_promotion_state.py,sha256=dy4kkSSAQ7bC0Xp2CociETGN-2aABEfL6FU5D9Jl00Y,6056
866
866
  tools/test/test_sd_app_sre_alert_report.py,sha256=v363r9zM7__0kR5K6mvJoGFcM9BvE33fWAayrqkpojA,2116
867
867
  tools/test/test_sre_checkpoints.py,sha256=SKqPPTl9ua0RFdSSofnoQX-JZE6dFLO3LRhfQzqtfh8,2607
868
- qontract_reconcile-0.10.1rc1030.dist-info/METADATA,sha256=1Kn_s1Qs4zQwmniZl-bI8OXCfwOCb0q2uUMwePoypzk,2213
869
- qontract_reconcile-0.10.1rc1030.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
870
- qontract_reconcile-0.10.1rc1030.dist-info/entry_points.txt,sha256=GKQqCl2j2X1BJQ69een6rHcR26PmnxnONLNOQB-nRjY,491
871
- qontract_reconcile-0.10.1rc1030.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
872
- qontract_reconcile-0.10.1rc1030.dist-info/RECORD,,
868
+ qontract_reconcile-0.10.1rc1032.dist-info/METADATA,sha256=I3gB9OldN-KPBWLzk-Pfm86cPqXs09u0XjHY_sG27rw,2213
869
+ qontract_reconcile-0.10.1rc1032.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
870
+ qontract_reconcile-0.10.1rc1032.dist-info/entry_points.txt,sha256=GKQqCl2j2X1BJQ69een6rHcR26PmnxnONLNOQB-nRjY,491
871
+ qontract_reconcile-0.10.1rc1032.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
872
+ qontract_reconcile-0.10.1rc1032.dist-info/RECORD,,
@@ -53,7 +53,7 @@ def act(dry_run, gitlab_project_id, accounts, keys_to_delete, defer=None):
53
53
  key = k["key"]
54
54
  logging.info(["delete_aws_access_key", account, key])
55
55
  if not dry_run:
56
- path = "data" + [a["path"] for a in accounts if a["name"] == account][0]
56
+ path = "data" + next(a["path"] for a in accounts if a["name"] == account)
57
57
 
58
58
  mr = CreateDeleteAwsAccessKey(account, path, key)
59
59
  mr.submit(cli=mr_cli)
reconcile/cli.py CHANGED
@@ -1003,7 +1003,7 @@ def aws_saml_roles(
1003
1003
  "--initial-user-secret-vault-path",
1004
1004
  help="The path in Vault to store the initial user secret. Python format string with access to 'account_name' attribute.",
1005
1005
  required=True,
1006
- default="app-sre-v2/creds/terraform/{account_name}/config",
1006
+ default="app-sre-v2/creds/terraform/{account_name}/config", # noqa: RUF027
1007
1007
  )
1008
1008
  @click.option(
1009
1009
  "--account-tmpl-resource",
@@ -218,7 +218,7 @@ class DynatraceTokenProviderIntegration(
218
218
  _expose_errors_as_service_log(
219
219
  ocm_client,
220
220
  cluster.external_id,
221
- f"DTP can't create {token_spec.name=} {str(e.args)}",
221
+ f"DTP can't create {token_spec.name=} {e.args!s}",
222
222
  )
223
223
  logging.info(
224
224
  f"{token_spec.name=} created in {dt_api_url} for {cluster.external_id=}."
@@ -271,7 +271,7 @@ class DynatraceTokenProviderIntegration(
271
271
  _expose_errors_as_service_log(
272
272
  ocm_client,
273
273
  cluster.external_id,
274
- f"DTP can't patch {token_spec.name=} for {SYNCSET_AND_MANIFEST_ID} due to {str(e.args)}",
274
+ f"DTP can't patch {token_spec.name=} for {SYNCSET_AND_MANIFEST_ID} due to {e.args!s}",
275
275
  )
276
276
  logging.info(
277
277
  f"Patched {token_spec.name=} for {SYNCSET_AND_MANIFEST_ID} in {cluster.external_id=}."
@@ -72,13 +72,17 @@ class Renderer:
72
72
  """Update the app-interface app file for a merge request."""
73
73
  yml = create_ruamel_instance(explicit_start=True)
74
74
  content = yml.load(current_content)
75
- app_endpoints = content.setdefault("endPoints", [])
76
- for i, app_endpoint in enumerate(app_endpoints):
75
+ new_endpoints = []
76
+ for app_endpoint in content.setdefault("endPoints", []):
77
77
  if app_endpoint["name"] in endpoints_to_delete:
78
- app_endpoints.remove(app_endpoint)
79
- if app_endpoint["name"] in endpoints_to_change:
80
- app_endpoints[i] = endpoints_to_change[app_endpoint["name"]]
81
- app_endpoints.extend(endpoints_to_add)
78
+ continue
79
+ elif app_endpoint["name"] in endpoints_to_change:
80
+ new_endpoints.append(endpoints_to_change[app_endpoint["name"]])
81
+ else:
82
+ new_endpoints.append(app_endpoint)
83
+
84
+ new_endpoints.extend(endpoints_to_add)
85
+ content["endPoints"] = new_endpoints
82
86
  with StringIO() as stream:
83
87
  yml.dump(content, stream)
84
88
  return stream.getvalue()
reconcile/github_org.py CHANGED
@@ -128,7 +128,7 @@ def get_config(default=False):
128
128
 
129
129
  def get_default_config():
130
130
  github_config = get_config(default=True)
131
- return list(github_config["github"].values())[0]
131
+ return next(iter(github_config["github"].values()))
132
132
 
133
133
 
134
134
  @retry()
@@ -1,146 +1,21 @@
1
1
  import itertools
2
2
  import logging
3
- from dataclasses import dataclass
4
3
  from typing import Any
5
4
 
6
- from gitlab.v4.objects import (
7
- GroupProject,
8
- Project,
9
- )
5
+ from gitlab.const import MAINTAINER_ACCESS
10
6
  from sretoolbox.utils import threaded
11
7
 
12
8
  from reconcile import queries
13
9
  from reconcile.utils import batches
14
10
  from reconcile.utils.defer import defer
15
- from reconcile.utils.differ import diff_mappings
16
11
  from reconcile.utils.gitlab_api import GitLabApi
17
12
  from reconcile.utils.unleash import get_feature_toggle_state
18
13
 
19
14
  QONTRACT_INTEGRATION = "gitlab-permissions"
20
15
  APP_SRE_GROUP_NAME = "app-sre"
21
- GROUP_ACCESS = "maintainer"
22
16
  PAGE_SIZE = 100
23
17
 
24
18
 
25
- @dataclass
26
- class GroupSpec:
27
- group_name: str
28
- group_access_level: int
29
-
30
-
31
- class GroupAccessLevelError(Exception):
32
- pass
33
-
34
-
35
- class GroupPermissionHandler:
36
- def __init__(
37
- self, gl: GitLabApi, group_name: str, access: str, dry_run: bool
38
- ) -> None:
39
- self.gl = gl
40
- self.dry_run = dry_run
41
- self.access_level_string = access
42
- self.access_level = self.gl.get_access_level(access)
43
- self.group = self.gl.get_group(group_name)
44
-
45
- def run(self, repos: list[str]) -> None:
46
- # filter projects belonging to the same group and remove it from the state data
47
- filtered_project_repos = self.filter_group_owned_projects(repos)
48
- desired_state = {
49
- project_repo_url: GroupSpec(self.group.name, self.access_level)
50
- for project_repo_url in filtered_project_repos
51
- }
52
- # get all projects shared with group
53
- shared_projects = self.gl.get_items(self.group.shared_projects.list)
54
- current_state = {
55
- project.web_url: self.extract_group_spec(project)
56
- for project in shared_projects
57
- }
58
- self.reconcile(desired_state, current_state)
59
-
60
- def filter_group_owned_projects(self, repos: list[str]) -> set[str]:
61
- # get only the projects that are owned by group and its sub groups
62
- query = {"with_shared": False, "include_subgroups": True}
63
- group_owned_projects = self.gl.get_items(
64
- self.group.projects.list, query_parameters=query
65
- )
66
- group_owned_repo_list = {project.web_url for project in group_owned_projects}
67
- return set(repos) - group_owned_repo_list
68
-
69
- def extract_group_spec(self, project: GroupProject) -> GroupSpec:
70
- return next(
71
- GroupSpec(
72
- group_name=self.group.name,
73
- group_access_level=group["group_access_level"],
74
- )
75
- for group in project.shared_with_groups
76
- if group["group_id"] == self.group.id
77
- )
78
-
79
- def can_share_project(self, project: Project) -> bool:
80
- # check if user have access greater or equal access to be shared with the group
81
- user = project.members_all.get(id=self.gl.user.id)
82
- return user.access_level >= self.access_level
83
-
84
- def reconcile(
85
- self,
86
- desired_state: dict[str, GroupSpec],
87
- current_state: dict[str, GroupSpec],
88
- ) -> None:
89
- # get the diff data
90
- diff_data = diff_mappings(
91
- current=current_state,
92
- desired=desired_state,
93
- equal=lambda current, desired: current.group_access_level
94
- == desired.group_access_level,
95
- )
96
- errors: list[Exception] = []
97
- for repo in diff_data.add:
98
- project = self.gl.get_project(repo)
99
- if not self.can_share_project(project):
100
- errors.append(
101
- GroupAccessLevelError(
102
- f"{repo} is not shared with {self.gl.user.username} as {self.access_level_string}"
103
- )
104
- )
105
- continue
106
- logging.info([
107
- "share",
108
- repo,
109
- self.group.name,
110
- self.access_level_string,
111
- ])
112
- if not self.dry_run:
113
- self.gl.share_project_with_group(
114
- project=project,
115
- group_id=self.group.id,
116
- access_level=self.access_level,
117
- )
118
- for repo in diff_data.change:
119
- project = self.gl.get_project(repo)
120
- if not self.can_share_project(project):
121
- errors.append(
122
- GroupAccessLevelError(
123
- f"{repo} is not shared with {self.gl.user.username} as {self.access_level_string}"
124
- )
125
- )
126
- continue
127
- logging.info([
128
- "reshare",
129
- repo,
130
- self.group.name,
131
- self.access_level_string,
132
- ])
133
- if not self.dry_run:
134
- self.gl.share_project_with_group(
135
- project=project,
136
- group_id=self.group.id,
137
- access_level=self.access_level,
138
- reshare=True,
139
- )
140
- if errors:
141
- raise ExceptionGroup("Reconcile errors occurred", errors)
142
-
143
-
144
19
  def get_members_to_add(repo, gl, app_sre):
145
20
  maintainers = get_all_app_sre_maintainers(repo, gl, app_sre)
146
21
  if maintainers is None:
@@ -181,10 +56,7 @@ def run(dry_run, thread_pool_size=10, defer=None):
181
56
  default=False,
182
57
  )
183
58
  if share_with_group_enabled:
184
- group_permission_handler = GroupPermissionHandler(
185
- gl=gl, group_name=APP_SRE_GROUP_NAME, access=GROUP_ACCESS, dry_run=dry_run
186
- )
187
- group_permission_handler.run(repos=repos)
59
+ share_project_with_group(gl, repos, dry_run)
188
60
  else:
189
61
  share_project_with_group_members(gl, repos, thread_pool_size, dry_run)
190
62
 
@@ -203,6 +75,26 @@ def share_project_with_group_members(
203
75
  gl.add_project_member(m["repo"], m["user"])
204
76
 
205
77
 
78
+ def share_project_with_group(gl: GitLabApi, repos: list[str], dry_run: bool) -> None:
79
+ # get repos not owned by app-sre
80
+ non_app_sre_project_repos = {repo for repo in repos if "/app-sre/" not in repo}
81
+ group_id, shared_projects = gl.get_group_id_and_shared_projects(APP_SRE_GROUP_NAME)
82
+ shared_project_repos = shared_projects.keys()
83
+ repos_to_share = non_app_sre_project_repos - shared_project_repos
84
+ repos_to_reshare = {
85
+ repo
86
+ for repo in non_app_sre_project_repos
87
+ if (group_data := shared_projects.get(repo))
88
+ and group_data["group_access_level"] < MAINTAINER_ACCESS
89
+ }
90
+ for repo in repos_to_share:
91
+ gl.share_project_with_group(repo_url=repo, group_id=group_id, dry_run=dry_run)
92
+ for repo in repos_to_reshare:
93
+ gl.share_project_with_group(
94
+ repo_url=repo, group_id=group_id, dry_run=dry_run, reshare=True
95
+ )
96
+
97
+
206
98
  def early_exit_desired_state(*args, **kwargs) -> dict[str, Any]:
207
99
  instance = queries.get_gitlab_instance()
208
100
  return {
@@ -113,9 +113,9 @@ def fetch_desired_state(clusters):
113
113
  continue
114
114
  if aws_infrastructure_access.get("assume_role"):
115
115
  continue
116
- aws_account_uid = [
116
+ aws_account_uid = next(
117
117
  a["uid"] for a in aws_accounts if a["name"] == spec.provisioner_name
118
- ][0]
118
+ )
119
119
  cluster = aws_infrastructure_access["cluster"]["name"]
120
120
  access_level = aws_infrastructure_access["access_level"]
121
121
  item = {
@@ -316,7 +316,7 @@ def populate_current_state(
316
316
  )
317
317
  except StatusCodeError as e:
318
318
  ri.register_error(cluster=spec.cluster)
319
- logging.error(f"[{spec.cluster}/{spec.namespace}] {str(e)}")
319
+ logging.error(f"[{spec.cluster}/{spec.namespace}] {e!s}")
320
320
 
321
321
 
322
322
  def fetch_current_state(
@@ -907,7 +907,7 @@ def delete_action(
907
907
  )
908
908
  except StatusCodeError as e:
909
909
  ri.register_error()
910
- msg = f"[{cluster}/{namespace}] {str(e)}"
910
+ msg = f"[{cluster}/{namespace}] {e!s}"
911
911
  logging.error(msg)
912
912
 
913
913
 
@@ -91,7 +91,7 @@ def oc(
91
91
  kubeconfig: str, namespace: str, command: list[str], stdin: bytes | None = None
92
92
  ) -> dict | None:
93
93
  ret = subprocess.run(
94
- ["oc", "--kubeconfig", kubeconfig, "-n", namespace, "-o", "json"] + command,
94
+ ["oc", "--kubeconfig", kubeconfig, "-n", namespace, "-o", "json", *command],
95
95
  input=stdin,
96
96
  check=True,
97
97
  capture_output=True,
@@ -132,7 +132,7 @@ def check_results(
132
132
  err = True
133
133
  msg = (
134
134
  f'cluster: {s["cluster"]}, namespace: {s["namespace"]}, '
135
- f"exception: {str(e)}"
135
+ f"exception: {e!s}"
136
136
  )
137
137
  logging.error(msg)
138
138
  return err
@@ -680,7 +680,7 @@ def fetch_desired_state(
680
680
  UnknownProviderError,
681
681
  ) as e:
682
682
  ri.register_error()
683
- msg = f"[{cluster}/{namespace}] {str(e)}"
683
+ msg = f"[{cluster}/{namespace}] {e!s}"
684
684
  _locked_error_log(msg)
685
685
  return
686
686
 
@@ -747,7 +747,7 @@ def fetch_states(
747
747
 
748
748
  except StatusCodeError as e:
749
749
  ri.register_error(cluster=spec.cluster)
750
- logging.error(f"{spec} - exception: {str(e)}")
750
+ logging.error(f"{spec} - exception: {e!s}")
751
751
 
752
752
 
753
753
  def fetch_data(