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.
- {qontract_reconcile-0.10.1rc1030.dist-info → qontract_reconcile-0.10.1rc1032.dist-info}/METADATA +1 -1
- {qontract_reconcile-0.10.1rc1030.dist-info → qontract_reconcile-0.10.1rc1032.dist-info}/RECORD +46 -46
- reconcile/aws_support_cases_sos.py +1 -1
- reconcile/cli.py +1 -1
- reconcile/dynatrace_token_provider/integration.py +2 -2
- reconcile/endpoints_discovery/merge_request.py +10 -6
- reconcile/github_org.py +1 -1
- reconcile/gitlab_permissions.py +22 -130
- reconcile/ocm_aws_infrastructure_access.py +2 -2
- reconcile/openshift_base.py +2 -2
- reconcile/openshift_cluster_bots.py +1 -1
- reconcile/openshift_namespaces.py +1 -1
- reconcile/openshift_resources_base.py +2 -2
- reconcile/openshift_saas_deploy_change_tester.py +1 -1
- reconcile/openshift_saas_deploy_trigger_base.py +1 -1
- reconcile/query_validator.py +2 -2
- reconcile/terraform_aws_route53.py +2 -2
- reconcile/test/test_closedbox_endpoint_monitoring.py +5 -5
- reconcile/test/test_gitlab_permissions.py +9 -97
- reconcile/test/test_openshift_resource.py +2 -2
- reconcile/test/test_openshift_resources_base.py +7 -7
- reconcile/test/test_openshift_serviceaccount_tokens.py +7 -5
- reconcile/test/test_terraform_vpc_peerings.py +2 -2
- reconcile/utils/acs/base.py +1 -1
- reconcile/utils/acs/notifiers.py +1 -1
- reconcile/utils/aws_api.py +1 -1
- reconcile/utils/config.py +2 -4
- reconcile/utils/external_resources.py +1 -1
- reconcile/utils/gitlab_api.py +43 -7
- reconcile/utils/gql.py +1 -1
- reconcile/utils/jinja2/utils.py +1 -1
- reconcile/utils/jobcontroller/controller.py +3 -3
- reconcile/utils/mr/__init__.py +8 -8
- reconcile/utils/ocm/__init__.py +2 -2
- reconcile/utils/saasherder/__init__.py +1 -1
- reconcile/utils/saasherder/saasherder.py +5 -5
- reconcile/utils/state.py +2 -2
- reconcile/utils/terraform_client.py +1 -1
- reconcile/utils/terrascript_aws_client.py +1 -1
- reconcile/utils/unleash/__init__.py +2 -2
- reconcile/utils/vcs.py +2 -2
- tools/app_interface_reporter.py +7 -7
- tools/qontract_cli.py +21 -45
- {qontract_reconcile-0.10.1rc1030.dist-info → qontract_reconcile-0.10.1rc1032.dist-info}/WHEEL +0 -0
- {qontract_reconcile-0.10.1rc1030.dist-info → qontract_reconcile-0.10.1rc1032.dist-info}/entry_points.txt +0 -0
- {qontract_reconcile-0.10.1rc1030.dist-info → qontract_reconcile-0.10.1rc1032.dist-info}/top_level.txt +0 -0
{qontract_reconcile-0.10.1rc1030.dist-info → qontract_reconcile-0.10.1rc1032.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: qontract-reconcile
|
3
|
-
Version: 0.10.
|
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
|
{qontract_reconcile-0.10.1rc1030.dist-info → qontract_reconcile-0.10.1rc1032.dist-info}/RECORD
RENAMED
@@ -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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
65
|
-
reconcile/openshift_cluster_bots.py,sha256=
|
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=
|
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=
|
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=
|
80
|
-
reconcile/openshift_saas_deploy_trigger_base.py,sha256=
|
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=
|
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=
|
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
|
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=
|
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=
|
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=
|
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=
|
540
|
-
reconcile/test/test_openshift_resources_base.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
726
|
-
reconcile/utils/terrascript_aws_client.py,sha256=
|
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=
|
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=
|
734
|
-
reconcile/utils/acs/notifiers.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
869
|
-
qontract_reconcile-0.10.
|
870
|
-
qontract_reconcile-0.10.
|
871
|
-
qontract_reconcile-0.10.
|
872
|
-
qontract_reconcile-0.10.
|
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" +
|
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=} {
|
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 {
|
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
|
-
|
76
|
-
for
|
75
|
+
new_endpoints = []
|
76
|
+
for app_endpoint in content.setdefault("endPoints", []):
|
77
77
|
if app_endpoint["name"] in endpoints_to_delete:
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
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
reconcile/gitlab_permissions.py
CHANGED
@@ -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.
|
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
|
-
|
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
|
-
|
118
|
+
)
|
119
119
|
cluster = aws_infrastructure_access["cluster"]["name"]
|
120
120
|
access_level = aws_infrastructure_access["access_level"]
|
121
121
|
item = {
|
reconcile/openshift_base.py
CHANGED
@@ -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}] {
|
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}] {
|
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"
|
94
|
+
["oc", "--kubeconfig", kubeconfig, "-n", namespace, "-o", "json", *command],
|
95
95
|
input=stdin,
|
96
96
|
check=True,
|
97
97
|
capture_output=True,
|
@@ -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}] {
|
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: {
|
750
|
+
logging.error(f"{spec} - exception: {e!s}")
|
751
751
|
|
752
752
|
|
753
753
|
def fetch_data(
|