qontract-reconcile 0.10.1rc1201__py3-none-any.whl → 0.10.2.dev1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qontract_reconcile-0.10.2.dev1.dist-info/METADATA +500 -0
- {qontract_reconcile-0.10.1rc1201.dist-info → qontract_reconcile-0.10.2.dev1.dist-info}/RECORD +14 -132
- {qontract_reconcile-0.10.1rc1201.dist-info → qontract_reconcile-0.10.2.dev1.dist-info}/WHEEL +1 -2
- {qontract_reconcile-0.10.1rc1201.dist-info → qontract_reconcile-0.10.2.dev1.dist-info}/entry_points.txt +1 -0
- reconcile/aws_account_manager/README.md +5 -0
- reconcile/change_owners/README.md +34 -0
- reconcile/external_resources/manager.py +12 -1
- reconcile/external_resources/model.py +11 -0
- reconcile/glitchtip/README.md +150 -0
- reconcile/gql_definitions/introspection.json +51176 -0
- reconcile/run_integration.py +293 -0
- reconcile/utils/binary.py +2 -2
- reconcile/utils/mr/README.md +198 -0
- reconcile/utils/oc_map.py +2 -2
- tools/qontract_cli.py +0 -0
- qontract_reconcile-0.10.1rc1201.dist-info/METADATA +0 -64
- qontract_reconcile-0.10.1rc1201.dist-info/top_level.txt +0 -3
- reconcile/test/__init__.py +0 -0
- reconcile/test/conftest.py +0 -157
- reconcile/test/fixtures.py +0 -24
- reconcile/test/saas_auto_promotions_manager/__init__.py +0 -0
- reconcile/test/saas_auto_promotions_manager/conftest.py +0 -170
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/__init__.py +0 -0
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/__init__.py +0 -0
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/conftest.py +0 -115
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/data_keys.py +0 -19
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_desired_state.py +0 -66
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_merge_request_manager.py +0 -86
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_mr_parser.py +0 -352
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_reconciler.py +0 -494
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/__init__.py +0 -0
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/conftest.py +0 -25
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/test_content_multiple_namespaces.py +0 -37
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/test_content_single_namespace.py +0 -81
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/test_content_single_target.py +0 -61
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/test_json_path_selector.py +0 -74
- reconcile/test/saas_auto_promotions_manager/test_integration_test.py +0 -52
- reconcile/test/saas_auto_promotions_manager/utils/__init__.py +0 -0
- reconcile/test/test_acs_notifiers.py +0 -393
- reconcile/test/test_acs_policies.py +0 -497
- reconcile/test/test_acs_rbac.py +0 -865
- reconcile/test/test_aggregated_list.py +0 -237
- reconcile/test/test_amtool.py +0 -37
- reconcile/test/test_aws_ami_cleanup.py +0 -230
- reconcile/test/test_aws_ami_share.py +0 -68
- reconcile/test/test_aws_cloudwatch_log_retention.py +0 -434
- reconcile/test/test_aws_iam_keys.py +0 -70
- reconcile/test/test_aws_iam_password_reset.py +0 -35
- reconcile/test/test_aws_support_cases_sos.py +0 -23
- reconcile/test/test_checkpoint.py +0 -178
- reconcile/test/test_cli.py +0 -41
- reconcile/test/test_closedbox_endpoint_monitoring.py +0 -207
- reconcile/test/test_dashdotdb_dora.py +0 -245
- reconcile/test/test_database_access_manager.py +0 -660
- reconcile/test/test_deadmanssnitch.py +0 -290
- reconcile/test/test_gabi_authorized_users.py +0 -72
- reconcile/test/test_gcr_mirror.py +0 -14
- reconcile/test/test_github_org.py +0 -156
- reconcile/test/test_github_repo_invites.py +0 -119
- reconcile/test/test_gitlab_housekeeping.py +0 -333
- reconcile/test/test_gitlab_labeler.py +0 -126
- reconcile/test/test_gitlab_members.py +0 -219
- reconcile/test/test_gitlab_permissions.py +0 -164
- reconcile/test/test_instrumented_wrappers.py +0 -18
- reconcile/test/test_integrations_manager.py +0 -1252
- reconcile/test/test_jenkins_worker_fleets.py +0 -57
- reconcile/test/test_jira_permissions_validator.py +0 -519
- reconcile/test/test_jump_host.py +0 -114
- reconcile/test/test_ldap_users.py +0 -125
- reconcile/test/test_make.py +0 -28
- reconcile/test/test_ocm_additional_routers.py +0 -133
- reconcile/test/test_ocm_clusters.py +0 -798
- reconcile/test/test_ocm_clusters_manifest_updates.py +0 -87
- reconcile/test/test_ocm_machine_pools.py +0 -1103
- reconcile/test/test_ocm_update_recommended_version.py +0 -145
- reconcile/test/test_ocm_upgrade_scheduler_org_updater.py +0 -125
- reconcile/test/test_openshift_base.py +0 -1269
- reconcile/test/test_openshift_cluster_bots.py +0 -240
- reconcile/test/test_openshift_namespace_labels.py +0 -344
- reconcile/test/test_openshift_namespaces.py +0 -256
- reconcile/test/test_openshift_resource.py +0 -443
- reconcile/test/test_openshift_resources_base.py +0 -478
- reconcile/test/test_openshift_saas_deploy.py +0 -188
- reconcile/test/test_openshift_saas_deploy_change_tester.py +0 -308
- reconcile/test/test_openshift_saas_deploy_trigger_cleaner.py +0 -65
- reconcile/test/test_openshift_serviceaccount_tokens.py +0 -282
- reconcile/test/test_openshift_tekton_resources.py +0 -265
- reconcile/test/test_openshift_upgrade_watcher.py +0 -223
- reconcile/test/test_prometheus_rules_tester.py +0 -151
- reconcile/test/test_quay_membership.py +0 -86
- reconcile/test/test_quay_mirror.py +0 -172
- reconcile/test/test_quay_mirror_org.py +0 -82
- reconcile/test/test_quay_repos.py +0 -59
- reconcile/test/test_queries.py +0 -53
- reconcile/test/test_repo_owners.py +0 -47
- reconcile/test/test_requests_sender.py +0 -139
- reconcile/test/test_saasherder.py +0 -1611
- reconcile/test/test_saasherder_allowed_secret_paths.py +0 -125
- reconcile/test/test_secret_reader.py +0 -153
- reconcile/test/test_slack_base.py +0 -183
- reconcile/test/test_slack_usergroups.py +0 -785
- reconcile/test/test_sql_query.py +0 -316
- reconcile/test/test_status_board.py +0 -258
- reconcile/test/test_terraform_aws_route53.py +0 -29
- reconcile/test/test_terraform_cloudflare_dns.py +0 -117
- reconcile/test/test_terraform_cloudflare_resources.py +0 -408
- reconcile/test/test_terraform_cloudflare_users.py +0 -747
- reconcile/test/test_terraform_repo.py +0 -440
- reconcile/test/test_terraform_resources.py +0 -519
- reconcile/test/test_terraform_tgw_attachments.py +0 -1295
- reconcile/test/test_terraform_users.py +0 -152
- reconcile/test/test_terraform_vpc_peerings.py +0 -576
- reconcile/test/test_terraform_vpc_peerings_build_desired_state.py +0 -1434
- reconcile/test/test_three_way_diff_strategy.py +0 -131
- reconcile/test/test_utils_jinja2.py +0 -130
- reconcile/test/test_vault_replication.py +0 -534
- reconcile/test/test_vault_utils.py +0 -47
- reconcile/test/test_version_bump.py +0 -18
- reconcile/test/test_vpc_peerings_validator.py +0 -194
- reconcile/test/test_wrong_region.py +0 -78
- release/__init__.py +0 -0
- release/test_version.py +0 -50
- release/version.py +0 -104
- tools/cli_commands/test/__init__.py +0 -0
- tools/cli_commands/test/conftest.py +0 -332
- tools/cli_commands/test/test_aws_cost_report.py +0 -258
- tools/cli_commands/test/test_cost_management_api.py +0 -326
- tools/cli_commands/test/test_gpg_encrypt.py +0 -235
- tools/cli_commands/test/test_openshift_cost_optimization_report.py +0 -255
- tools/cli_commands/test/test_openshift_cost_report.py +0 -295
- tools/cli_commands/test/test_util.py +0 -70
- tools/test/__init__.py +0 -0
- tools/test/conftest.py +0 -77
- tools/test/test_app_interface_metrics_exporter.py +0 -48
- tools/test/test_erv2.py +0 -80
- tools/test/test_get_container_images.py +0 -230
- tools/test/test_qontract_cli.py +0 -197
- tools/test/test_saas_promotion_state.py +0 -187
- tools/test/test_sd_app_sre_alert_report.py +0 -74
- tools/test/test_sre_checkpoints.py +0 -79
{qontract_reconcile-0.10.1rc1201.dist-info → qontract_reconcile-0.10.2.dev1.dist-info}/RECORD
RENAMED
@@ -99,6 +99,7 @@ reconcile/query_validator.py,sha256=MSh5pKLBksws4AqfuvT8nrIGucIbqX-IOzYyPYTLO7k,
|
|
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
|
102
|
+
reconcile/run_integration.py,sha256=qGKn1_GxSP9JMvIfPT2qZohgnu6t61zvNAH2WPv2xO8,9700
|
102
103
|
reconcile/saas_file_validator.py,sha256=tyvFYU6lnkfDYIkAIr5pWqSvO5Yc6TagZ-quJYD2dtI,2547
|
103
104
|
reconcile/sendgrid_teammates.py,sha256=oO8QbLb4s1o8A6CGiCagN9CmS05BSS_WLztuY0Ym9D8,4773
|
104
105
|
reconcile/service_dependencies.py,sha256=PMKP9vc6oL-78rzyF_RE8DzLSQMSqN8vCqt9sWpBLAM,4470
|
@@ -138,6 +139,7 @@ reconcile/aus/version_gates/handler.py,sha256=S_isQPYHbG4DERiUEvQBZ6ngiFX3uMmATA
|
|
138
139
|
reconcile/aus/version_gates/ingress_gate_handler.py,sha256=ZCtyggBzzcb0prtdbMpJsVkj5leYN-vS7srM9vbq9xo,1096
|
139
140
|
reconcile/aus/version_gates/ocp_gate_handler.py,sha256=RW1ppDaCZXVegV9AzzqYXxDUu_Z_7d43Z5h2Pk_piKc,716
|
140
141
|
reconcile/aus/version_gates/sts_version_gate_handler.py,sha256=swwwz0YyvrEBf_InqrRRBCt2QzHYNvvq8jz9aYwElh4,3663
|
142
|
+
reconcile/aws_account_manager/README.md,sha256=_XFM3GZNHUzv--e_navqJuaUWpjC6QrHfulreHynFf0,262
|
141
143
|
reconcile/aws_account_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
142
144
|
reconcile/aws_account_manager/integration.py,sha256=WOE_mi45pvJW4TNKh4mCGSViJiElH--T4Wg0CLMYxpY,14988
|
143
145
|
reconcile/aws_account_manager/merge_request_manager.py,sha256=fz9s1VrBGHi0MdUR9D1Pqo7Q2lHlzbgzgYEE4kEYm9s,3950
|
@@ -158,6 +160,7 @@ reconcile/aws_version_sync/utils.py,sha256=x-45QT7zAwdNvCg7w_qJNwLaksFcfz1_6KQoD
|
|
158
160
|
reconcile/aws_version_sync/merge_request_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
159
161
|
reconcile/aws_version_sync/merge_request_manager/merge_request.py,sha256=2FbqLLdqxycWNvX1eNbwMjWSVBb7q0p-8t5Db0m7b4Q,4842
|
160
162
|
reconcile/aws_version_sync/merge_request_manager/merge_request_manager.py,sha256=3bRpw7DluiYw3daRg0yAyCSGYf39Ru0d8lUjoepDSpU,5525
|
163
|
+
reconcile/change_owners/README.md,sha256=NEXVw4SioTWTGo9elSQUjqY10RIUoisl4zkzEBvly8s,3946
|
161
164
|
reconcile/change_owners/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
162
165
|
reconcile/change_owners/approver.py,sha256=Z3_11vnK2WNOxjEEXVDh0224-_-qbt9d6mBeVE-7fsc,2259
|
163
166
|
reconcile/change_owners/bundle.py,sha256=h30fU-JmLH5a-rCAovpzTeTkkkgZztsZ5A2raee0YuU,5355
|
@@ -196,13 +199,14 @@ reconcile/external_resources/aws.py,sha256=NSaOeHqFEcMaMxNjJwuQZosolgsJ8XRVvwkEE
|
|
196
199
|
reconcile/external_resources/factories.py,sha256=TyJMaijDfPIFYks9i6dhKN7nSR1BoCkoBs1iPExKpcE,5493
|
197
200
|
reconcile/external_resources/integration.py,sha256=gBVO5dE8JyZ3xYcYik-MTIp_18oU7_hpYc_oztyfElQ,6753
|
198
201
|
reconcile/external_resources/integration_secrets_sync.py,sha256=dX09O3r6KURziUYYfiki10orNjOGVma-XojhVqd0ww4,1667
|
199
|
-
reconcile/external_resources/manager.py,sha256=
|
202
|
+
reconcile/external_resources/manager.py,sha256=T3z-IEjjr8DpNbnqyzJnnXrdkBksCFcepL6py2U9t-c,15909
|
200
203
|
reconcile/external_resources/meta.py,sha256=noaytFzmShpzLA_ebGh7wuP45mOfHIOnnoUxivjDa1I,672
|
201
204
|
reconcile/external_resources/metrics.py,sha256=8MZgNtNZzIRSYTX97KEUIUTETZBhitULzWxbShGyMO8,3193
|
202
|
-
reconcile/external_resources/model.py,sha256=
|
205
|
+
reconcile/external_resources/model.py,sha256=YJylbAhetN9szpLUFd9jFqxCRMvSWXVxSC9OMQNV-wg,11316
|
203
206
|
reconcile/external_resources/reconciler.py,sha256=K9QvbQCIOCuOHnPIxQE_P_jFtrkF3dGo8d_cCCh08Ys,8973
|
204
207
|
reconcile/external_resources/secrets_sync.py,sha256=H8JfI3JW1XEau1jqv15AhYg49mCZeHwZmqMzMv_6tFc,16344
|
205
208
|
reconcile/external_resources/state.py,sha256=7DBzVhIvYqeZWrWapmU_bXXftTQa_m-EOwJFVlIFnDw,9583
|
209
|
+
reconcile/glitchtip/README.md,sha256=rfXT6jNP9khJW65jL7I2PgoxvxgcGGuJF8NpbzufEQ4,4335
|
206
210
|
reconcile/glitchtip/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
207
211
|
reconcile/glitchtip/integration.py,sha256=XtewM9nfTPLnPSpYebP50GrveYOnhTvKNq3seSvL6u8,8343
|
208
212
|
reconcile/glitchtip/reconciler.py,sha256=nUvDv7qG1ly0cA16MmlL6NV71yl1mJYLT2mui7lmi0Y,12402
|
@@ -211,6 +215,7 @@ reconcile/glitchtip_project_alerts/integration.py,sha256=9faPhmSu5scZ3K3H2IOH31_
|
|
211
215
|
reconcile/glitchtip_project_dsn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
212
216
|
reconcile/glitchtip_project_dsn/integration.py,sha256=2iugub-kHYkHNK33n0v9_TeWonuxCPah_VkoTPvaajE,8077
|
213
217
|
reconcile/gql_definitions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
218
|
+
reconcile/gql_definitions/introspection.json,sha256=_tF-lsViLqXOEGKw-asMqRV94XhmFHuaTxqovWq87gw,2215501
|
214
219
|
reconcile/gql_definitions/acs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
215
220
|
reconcile/gql_definitions/acs/acs_instances.py,sha256=L91WW9LbhJbBSrECqShQpFtjoBOsmNIYLRpMbx1io5o,2181
|
216
221
|
reconcile/gql_definitions/acs/acs_policies.py,sha256=bN5i4mks10Z23KJSj7jqp966Osq2dps4d-sPH9gjxEA,7008
|
@@ -494,109 +499,6 @@ reconcile/terraform_vpc_resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
|
|
494
499
|
reconcile/terraform_vpc_resources/integration.py,sha256=yEMQFNMHDkqIQOIw1XeUY02xWQKrfoVayhmIynJKQvw,8183
|
495
500
|
reconcile/terraform_vpc_resources/merge_request.py,sha256=loRymUigCIvaaT0s_NzktZchh-DGRQnCICdBSCAcFPY,1503
|
496
501
|
reconcile/terraform_vpc_resources/merge_request_manager.py,sha256=Vj2nuQbQyrL4q_il1My-bLxYNh_r3YXqX45P8fwtP6Q,3259
|
497
|
-
reconcile/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
498
|
-
reconcile/test/conftest.py,sha256=_uZRPocbt4-BJ8Lsb9BmjeIPjbdu4SH3gxvXpGEdyFc,4284
|
499
|
-
reconcile/test/fixtures.py,sha256=HjcdF4RWMwdXCsmGljFnPjfzqsHG8_3Zas_W7Y5BSDE,586
|
500
|
-
reconcile/test/test_acs_notifiers.py,sha256=xf3WL6q6V7KQdTVSx6YI-pa4yzOX3mkvIJomgPUc3Mw,12746
|
501
|
-
reconcile/test/test_acs_policies.py,sha256=8pwnXpAO-0OI-6oubjf_oPPlpZjVldeZfJJ9uhsNMWM,17579
|
502
|
-
reconcile/test/test_acs_rbac.py,sha256=lvNd8GY0-GHzcOdOn13QWdrqbBXXKzNT7EEDHNH7cjM,28272
|
503
|
-
reconcile/test/test_aggregated_list.py,sha256=iiWitQuNYC58aimWaiBoE4NROHjr1NCgQ91MnHEG_Ro,6412
|
504
|
-
reconcile/test/test_amtool.py,sha256=vxRhGieeydMBOb9UI2ziMHjJa8puMeGNsUhGhy-yMnk,1032
|
505
|
-
reconcile/test/test_aws_ami_cleanup.py,sha256=s9E82ENpKrzsy9_KTj0tbQN2MVXeacq-_Ztw7FWbq7Q,6603
|
506
|
-
reconcile/test/test_aws_ami_share.py,sha256=eSITdDoXs8mMY7P2lFxAX2DA0sJ9RW6D1tG8Rek0gLE,1981
|
507
|
-
reconcile/test/test_aws_cloudwatch_log_retention.py,sha256=fOUq_vJldGPjXKBdRQsSv4zFz_qenVtRKJFKpbz8BlA,13712
|
508
|
-
reconcile/test/test_aws_iam_keys.py,sha256=MfE9EvItyPNPAl5QaLlJFUvvrZFiar518TM2wWNjJn4,1829
|
509
|
-
reconcile/test/test_aws_iam_password_reset.py,sha256=fnkqB90adR7W4L4saNdrtIiwnQB9bXgqJ9R1CKxjSnk,860
|
510
|
-
reconcile/test/test_aws_support_cases_sos.py,sha256=MLgPHTv8uZhh2iINoBV38jiweEqFhqGg7WYOveXkIXY,837
|
511
|
-
reconcile/test/test_checkpoint.py,sha256=sbDtqTbfw5yMZ_mCltMXxkyyGueVLGUjTDtcWhPP7yA,5340
|
512
|
-
reconcile/test/test_cli.py,sha256=qx_iBwh4Z-YkK3sbjK1wEziPTgn060EN-baf9DNvR3k,1096
|
513
|
-
reconcile/test/test_closedbox_endpoint_monitoring.py,sha256=I0lSFOUQ5dBxjKeq1Dg3E4gWqoZ9d26d5pQmsLqWLPc,7166
|
514
|
-
reconcile/test/test_dashdotdb_dora.py,sha256=MfHGAsX2eSQSvBVt9_1Sah3aQKNJBXA9Iu86X0NWD6c,7705
|
515
|
-
reconcile/test/test_database_access_manager.py,sha256=n37cNan0dcMymWJbpsKN9HaCQ0vzXDn5PZencEH7e98,19592
|
516
|
-
reconcile/test/test_deadmanssnitch.py,sha256=YAf8wlZoEC60Ul7UA6Y6XqwnZ1yqf07J15ABqeLpqW4,9835
|
517
|
-
reconcile/test/test_gabi_authorized_users.py,sha256=6XnV5Q9inxP81ktGMVKyWucjBTUj8Imy2L0HG3YHyUE,2496
|
518
|
-
reconcile/test/test_gcr_mirror.py,sha256=A0y8auKZzr62-mGoxSQ__JnN0-ijZUltzjwR5miBgso,490
|
519
|
-
reconcile/test/test_github_org.py,sha256=aGWeMhkz1fjogvaAQGjemSKR201L5gEZZOe0iMQqj-Y,4487
|
520
|
-
reconcile/test/test_github_repo_invites.py,sha256=WrPn5ROAoJYK0ihzlZcFR0V9Pu2HcMs13I6nazf7hq4,3307
|
521
|
-
reconcile/test/test_gitlab_housekeeping.py,sha256=ScD9Tgf9OOgGfAFfTy6Kn2222l2wH_A3gMRKdpvoWe0,10053
|
522
|
-
reconcile/test/test_gitlab_labeler.py,sha256=PmYXiU2g0_O5OTdMGPzdeqBAfat92U9bhjjfeyiGSmQ,4336
|
523
|
-
reconcile/test/test_gitlab_members.py,sha256=bupl1dsLor-913LGYCuRtJMKqDsXo_d_2nbtDe6B1Us,7016
|
524
|
-
reconcile/test/test_gitlab_permissions.py,sha256=aMf5SUeVp-aQ1bWGQPQLYa85auzRlyfZVTWqyybJ6mo,5850
|
525
|
-
reconcile/test/test_instrumented_wrappers.py,sha256=CZzhnQH0c4i7-Rxjg7-0dfFMvVPegLHL46z5NHOOCwo,608
|
526
|
-
reconcile/test/test_integrations_manager.py,sha256=xpyQAVz57wAbovrcQzAeuyq8VzdItUyW2d2kp1WW_5c,38184
|
527
|
-
reconcile/test/test_jenkins_worker_fleets.py,sha256=o1jlT7OBBSgu0M3iI4xMdz_x6SciF7yhNBpLk5gTJfg,2361
|
528
|
-
reconcile/test/test_jira_permissions_validator.py,sha256=OA3hcnsH0eYXA4khJO6d1PE7zo2f0vYg73PrCqTzkyo,17646
|
529
|
-
reconcile/test/test_jump_host.py,sha256=EeHMhT5rTZgx__R_29mtCBWt-NZCcKsQ6CR-B3xmCps,3284
|
530
|
-
reconcile/test/test_ldap_users.py,sha256=_clylG-Qfes8yNb9T3CMaDQovLwyVZlTfJgRtGHARgE,4080
|
531
|
-
reconcile/test/test_make.py,sha256=zTdjgq-3idFlec_0qJenk9wWw0QMLvSpJfPsptXmync,677
|
532
|
-
reconcile/test/test_ocm_additional_routers.py,sha256=vX_O5js8PDTXU2mLD89tcMBqdpDKRNFWwxBB_UKP3Cc,4206
|
533
|
-
reconcile/test/test_ocm_clusters.py,sha256=QDieDrP7pjH7jw5pFcZkUGx1lUhd2Cdg8BM0bRnhhI8,24322
|
534
|
-
reconcile/test/test_ocm_clusters_manifest_updates.py,sha256=jFRVfc5jby1kI2x_gT6wcqPPgkav1et9wZH6JqQbNSY,3278
|
535
|
-
reconcile/test/test_ocm_machine_pools.py,sha256=_1tG-nF8edU29ONDUGXtR3J2-E8FWv-PI0Y9gb8HQfY,29697
|
536
|
-
reconcile/test/test_ocm_update_recommended_version.py,sha256=01oONkMewUUMrLFwlsUKTuvzL9XEeMk5_kBkYGE-u4Q,4318
|
537
|
-
reconcile/test/test_ocm_upgrade_scheduler_org_updater.py,sha256=V91g2XQMa2nvKwkLVWkiPwNL6pMQE16s4jO0oXJ6wdk,4330
|
538
|
-
reconcile/test/test_openshift_base.py,sha256=SX8URKF8Kn21nA-qcmICSUaZKHuc5YTgPzfcb2rHvk8,36385
|
539
|
-
reconcile/test/test_openshift_cluster_bots.py,sha256=sSGLgxnXO82xcfTFVNJzsrDuNfObwAR_-AkDe4B_4WE,7983
|
540
|
-
reconcile/test/test_openshift_namespace_labels.py,sha256=i4S5QJFxMRjLkwi3iO6A-uhjgZ1QZb4jYXwB696m82Y,12070
|
541
|
-
reconcile/test/test_openshift_namespaces.py,sha256=HmRnCE5EnFt3MYceVEFHmk8wWRtCrxu2AFGFkY9pdyA,9214
|
542
|
-
reconcile/test/test_openshift_resource.py,sha256=0HlknH5SR3H6YXyoaKuk-4Trii04LSowM_pbsGsucjA,13001
|
543
|
-
reconcile/test/test_openshift_resources_base.py,sha256=GOMYGG6yFACXpDWwPMBBIOR0v0ikjefEDON1DPQfdkk,14374
|
544
|
-
reconcile/test/test_openshift_saas_deploy.py,sha256=3QXMrN9dXIiR0JktVDNQ7yJSexMTjZLb1tbRrB3-7uU,5991
|
545
|
-
reconcile/test/test_openshift_saas_deploy_change_tester.py,sha256=1yVe54Hx9YdVjn6qdnKge5Sa_s732c-8uZqCnuT1gGI,12871
|
546
|
-
reconcile/test/test_openshift_saas_deploy_trigger_cleaner.py,sha256=UQx1iJ21rsMa2whG-rtUIuTXbUzc0Ngr7jRLKXZCCCI,2838
|
547
|
-
reconcile/test/test_openshift_serviceaccount_tokens.py,sha256=VvVXDCS94KFvSLOhK8ScKjvmns5k1B6QgWr691AXiKc,8991
|
548
|
-
reconcile/test/test_openshift_tekton_resources.py,sha256=O6-qPQwSiPHQKm1a1iqRU2V8eabc4uiG4mNxPSUBg88,11212
|
549
|
-
reconcile/test/test_openshift_upgrade_watcher.py,sha256=0GDQ_YFHIX8DbkbDYSuLv9uZeeg4NwP1vlOqvSaZvN4,7183
|
550
|
-
reconcile/test/test_prometheus_rules_tester.py,sha256=cgVkPM3KcAw69bOkJ6iR2Lfog_WgblyoqVRtXv4ly7o,5685
|
551
|
-
reconcile/test/test_quay_membership.py,sha256=e29Giz5S9ckFgjpTO8PBo8qVPocIQmy4WqsRhgTFd9A,2643
|
552
|
-
reconcile/test/test_quay_mirror.py,sha256=9TIu1-YQl0CG705m-FeEOs4OwKG3UVJzVhISw525Lco,6324
|
553
|
-
reconcile/test/test_quay_mirror_org.py,sha256=67XwB0WkqO6l9SeR9cSfjODyt-P587Kvqvam7hR8rLQ,3008
|
554
|
-
reconcile/test/test_quay_repos.py,sha256=TdkcRF_a8PLp01Kti9eZZN-vGup2yPBT4Iba3k08qe0,1810
|
555
|
-
reconcile/test/test_queries.py,sha256=SpH3RmNpBjEr_ne3VjAMCgKK8RE1z1zo7bypkT5uoO4,1946
|
556
|
-
reconcile/test/test_repo_owners.py,sha256=uRYMLbMmh-9usF0TerabZTZV-Z1CS4I6ybT-LQqCLe8,1423
|
557
|
-
reconcile/test/test_requests_sender.py,sha256=7fd9C2kEFS0-CYtlsif66N1kO9c44pzuBPAJKR9igqU,5385
|
558
|
-
reconcile/test/test_saasherder.py,sha256=-WGgAsrTm_SJ0OQDLXd4JwEu1Mc6i4AePJqjZQTaRew,58114
|
559
|
-
reconcile/test/test_saasherder_allowed_secret_paths.py,sha256=5NHQwNJO66at6HiyMZ5sVRTQDwxdvlOQo0KmkBWCw5Q,4853
|
560
|
-
reconcile/test/test_secret_reader.py,sha256=kz7nzcPjvA08cytnvcA_PMA98AEyqJWsESkYeRn5xCk,4994
|
561
|
-
reconcile/test/test_slack_base.py,sha256=pTUGvJ2S2wF3PhJyGWmiNXG52QtXKy2cbu-G8Ymrv6I,5019
|
562
|
-
reconcile/test/test_slack_usergroups.py,sha256=OkD2sgTwUp6kahzL0oQM37Q7YNZHsS04hD2yV9skXhQ,25642
|
563
|
-
reconcile/test/test_sql_query.py,sha256=4EfcLH0y3B4d11IEoue5dgA-h6f9pP5xiMCIdILSJaE,11022
|
564
|
-
reconcile/test/test_status_board.py,sha256=o4jTZLtBFJN9FBmaHHkVGGPFSONLoB-P1xCX8giIBLw,7852
|
565
|
-
reconcile/test/test_terraform_aws_route53.py,sha256=xHggb8K1P76OyCfFcogbkmyKle-NlUylcbDnuv3IqvY,771
|
566
|
-
reconcile/test/test_terraform_cloudflare_dns.py,sha256=aQTXX8Vr4h9aWvJZTnpZEhMGYoBpT2d45ZxU_ECIQ6o,3425
|
567
|
-
reconcile/test/test_terraform_cloudflare_resources.py,sha256=1mdSZS-38mtTSg7teJgDCJU1b_yKbwnrr3N5m8kwV4k,13595
|
568
|
-
reconcile/test/test_terraform_cloudflare_users.py,sha256=2VGBtMUhckLPtUnQlHIzpGsCnyVJZPNLFf-ABELkxbQ,27456
|
569
|
-
reconcile/test/test_terraform_repo.py,sha256=r6bwryHtq6-VuUh3fuMsxlsjbQAgrcQUHOEFou_hilQ,12260
|
570
|
-
reconcile/test/test_terraform_resources.py,sha256=8C97yXIEihaQ3DZrtjxLNt4y4G12IOhD01ydm7JjliY,15359
|
571
|
-
reconcile/test/test_terraform_tgw_attachments.py,sha256=pJFmQzUwAn-wKpF6oSkImpdF7WXvcky8iaJiXbjGGgU,41104
|
572
|
-
reconcile/test/test_terraform_users.py,sha256=XOAfGvITCJPI1LTlISmHbA4ONMQMkxYUMTsny7pQCFw,4319
|
573
|
-
reconcile/test/test_terraform_vpc_peerings.py,sha256=bpjCjhmic07cw3XKSHf-2JvmLuWlyQG8laXlC-H7qtI,20796
|
574
|
-
reconcile/test/test_terraform_vpc_peerings_build_desired_state.py,sha256=cHmr1_yhRgfdqlFX6TMw-aiKXebaRv0szl16M9YRJic,49988
|
575
|
-
reconcile/test/test_three_way_diff_strategy.py,sha256=v3rNkQFNy5e1uyfeNSlNBA07fvrPGD0aXD91Lgv8oxc,4062
|
576
|
-
reconcile/test/test_utils_jinja2.py,sha256=rKugJEPl0qFC9joenJBXyk2qe-9md31-4EdxvQ2h5cs,4058
|
577
|
-
reconcile/test/test_vault_replication.py,sha256=WO18WnkXXQDqJ0FnSCl2HOiTfSY3LdRnKn_y6-Gre3w,17490
|
578
|
-
reconcile/test/test_vault_utils.py,sha256=vbJnc89XAuE07qbTuWxHM5o9F6R9SO5aHXA38fwxT7A,1122
|
579
|
-
reconcile/test/test_version_bump.py,sha256=q6-3Y1roriI6YWpFwaHOMN7emEP3yL33sh_0VdbmG7E,511
|
580
|
-
reconcile/test/test_vpc_peerings_validator.py,sha256=dFSmjc_dMN2GqMbntCFpa7PUZmyYuQ9DKffh-T5wmxM,6639
|
581
|
-
reconcile/test/test_wrong_region.py,sha256=7KzL7OaICQ9Z3DW27zt_ykMN7_87owAFC-2CYjvGoyA,2138
|
582
|
-
reconcile/test/saas_auto_promotions_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
583
|
-
reconcile/test/saas_auto_promotions_manager/conftest.py,sha256=m4gOYQIOO9Br9r26erJLXxO6b1IfVKO-QQPm8k2qD5Y,6094
|
584
|
-
reconcile/test/saas_auto_promotions_manager/test_integration_test.py,sha256=S30eXJSy2Vc3YLbCP7AfLkOiFGUVoKhEvEBL5vwnbfg,1848
|
585
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
586
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
587
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/conftest.py,sha256=y_SL9zBr98SlOnvbA9C7a0_dFZrRAbkuR85m_u6ijcI,3520
|
588
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/data_keys.py,sha256=Z1IV51OUuzhd-3S8W-k7ixC-fkaglCokn0eakK0Z73s,606
|
589
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_desired_state.py,sha256=OLtJ11SsznoT39_tudsozcksK0N3TVNv-JWhIrCVaQk,2356
|
590
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_merge_request_manager.py,sha256=5jOrR5flENfqz7c9ADnjm-yPl7DJLTyVZM1ndvm9MVY,2491
|
591
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_mr_parser.py,sha256=aohFc18g9DKt0kK1YypXJrBGE8eGhsVMOGd1KOCzX0k,11677
|
592
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_reconciler.py,sha256=REBOmIt1hwu9K5zqyQdKIDhma2YUWIKidI7SJ4GB9ZE,17969
|
593
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
594
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/conftest.py,sha256=iwmPsgkbwXHeExjL_9mDQdo_JE1zN4S1jBRjdEx00Kk,542
|
595
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/test_content_multiple_namespaces.py,sha256=6LMsnbPx5svTF1nL6oQGLTp1NgjLG_tO56c0hbA2Di4,1059
|
596
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/test_content_single_namespace.py,sha256=dc7vMOiVLl5yRUEfjF4eE7HfMZTbtT2dz1CMGJVLUZA,2526
|
597
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/test_content_single_target.py,sha256=FY9pzmvE8uXvvt_P_G3M7_br8Zt1s428H23FlAj9nuY,1881
|
598
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/test_json_path_selector.py,sha256=jCtG0hVCqJ-A4XBjwexDww5LQUXJFRc44O5rEMA7_7E,2160
|
599
|
-
reconcile/test/saas_auto_promotions_manager/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
600
502
|
reconcile/typed_queries/__init__.py,sha256=rRk4CyslLsBr4vAh1pIPgt6s3P4R1M9NSEPLnyQgBpk,61
|
601
503
|
reconcile/typed_queries/alerting_services_settings.py,sha256=YKQd60O_2C_H103nLrYgcUInndM2vFypqW_NO706L2E,833
|
602
504
|
reconcile/typed_queries/app_interface_custom_messages.py,sha256=bgSAJEzqee8aiPVCj_bIIqb4VTkrF0-vti1dos7ebEg,684
|
@@ -658,7 +560,7 @@ reconcile/utils/amtool.py,sha256=ngtBuVPETH6oAy5RnKzvreVbjwQCaATS_PYYwBprzjQ,228
|
|
658
560
|
reconcile/utils/aws_api.py,sha256=WWttyohsXAH0CCIbW0R5iZBjAiyfeEjcT_DefvM-V7c,67920
|
659
561
|
reconcile/utils/aws_helper.py,sha256=MDbv5jrNdqqJ5pfBxniGdJXBBO_EYc2_Uf2w9ZzeMNs,2854
|
660
562
|
reconcile/utils/batches.py,sha256=TtEm64a8lWhFuNbUVpFEmXVdU2Q0sTBrP_I0Cjbgh7g,320
|
661
|
-
reconcile/utils/binary.py,sha256=
|
563
|
+
reconcile/utils/binary.py,sha256=JwO9BHBqXyvUSJDztUNPYCUnSU31t5XlD_gHATdnduM,2231
|
662
564
|
reconcile/utils/config.py,sha256=kwaAaNBQ9z-fsDJu2-WZFgTnL6HKd3FPjiu0mbriHkg,1004
|
663
565
|
reconcile/utils/constants.py,sha256=pOUd97bqZdsAu5RWJ8NUs9cwCY7K9y0eW9VVeJ4fZIU,138
|
664
566
|
reconcile/utils/data_structures.py,sha256=VyKfnlNJTiRvZKNpfgIrjESQ2YgmEpWuPQXT14WA1vI,311
|
@@ -701,7 +603,7 @@ reconcile/utils/oauth2_backend_application_session.py,sha256=6W16sMpnWEPFDUX7qi5
|
|
701
603
|
reconcile/utils/oc.py,sha256=AjwQnzLxnMv0ML70GfjTHeYmiNsztI8kgXQF3N0Hvfw,66088
|
702
604
|
reconcile/utils/oc_connection_parameters.py,sha256=7DiEGo--TJelfYoZXJFyTBPeTw9kXL3L58vy2fiJnes,9643
|
703
605
|
reconcile/utils/oc_filters.py,sha256=Tz3OwtbUaYKmxENFls5CtPVzkZDeFXknw53dJe-wbT8,1382
|
704
|
-
reconcile/utils/oc_map.py,sha256=
|
606
|
+
reconcile/utils/oc_map.py,sha256=VhvFz3lMlX4US4oUPZDi2JDNkCrFPtQ4y6WmEtsCyCo,8988
|
705
607
|
reconcile/utils/ocm_base_client.py,sha256=DFqm5Z_KqBC3WYzEJH4-Kt6Zow2OLtT0jpHmnhwbSHU,6694
|
706
608
|
reconcile/utils/openshift_resource.py,sha256=ZyQ436YdV80nvKGPuzYyYLLJj8Abjnb3e_PsejxBTNM,24715
|
707
609
|
reconcile/utils/openssl.py,sha256=QVvhzhpChq_4Daf_5wE1qeZJr4thg3DDjJPn4bOPD4E,365
|
@@ -775,6 +677,7 @@ reconcile/utils/membershipsources/resolver.py,sha256=meERrCZqeVJZR2lHdZEznaZDsCs
|
|
775
677
|
reconcile/utils/merge_request_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
776
678
|
reconcile/utils/merge_request_manager/merge_request_manager.py,sha256=3EP6Yw_zB7nY0OkU8D_32nDqta1TITgtRI0cSmOlNQg,3332
|
777
679
|
reconcile/utils/merge_request_manager/parser.py,sha256=5pGoz8Q6EuYXlUc1z-D0FahdRP2YLO8CpACoa9HcgtQ,2098
|
680
|
+
reconcile/utils/mr/README.md,sha256=i9sCLkDFhSxAUtpa_I1_TxhR5vPOLcowuwn2VEWO41w,5794
|
778
681
|
reconcile/utils/mr/__init__.py,sha256=hcfHDIIIsJT4C0BnzDnyeZEfZdamrqHzMLcBzIT1ibI,2578
|
779
682
|
reconcile/utils/mr/app_interface_reporter.py,sha256=6Kpg93V9FvcOke9Jimkva359MQ-ZyBIkUpf8QIA6-to,1793
|
780
683
|
reconcile/utils/mr/aws_access.py,sha256=w-UJutB_OfBJOvr-gsPzhtBPkDfKcNZZWGGuI9cN3HI,2605
|
@@ -830,9 +733,6 @@ reconcile/utils/terrascript/resources.py,sha256=ucuudrCjmJYeSleklXTlmeSEwZOqVtEf
|
|
830
733
|
reconcile/utils/unleash/__init__.py,sha256=2PsN3GlLU8DOyWSvv5q9uzwuFn_vYtfEo-mmVaIFtpA,219
|
831
734
|
reconcile/utils/unleash/client.py,sha256=YrJnauxjcy1ml7W2AHg7dzIH_fVK_GugoRu7IFmk6e0,3505
|
832
735
|
reconcile/utils/unleash/server.py,sha256=907gDh9Ee8UxLqusnfpzE-7LUnttB38D4xhVJ0vMf_M,4439
|
833
|
-
release/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
834
|
-
release/test_version.py,sha256=4DKxDZkT0aoS6ibZFsH2fd_wNETij1qfn2pCgQtVCGo,2093
|
835
|
-
release/version.py,sha256=hLSW-Ai13atY9yBcUkEPEOr-drkZdRC4VcFIm1n5Y8o,4103
|
836
736
|
tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
837
737
|
tools/app_interface_metrics_exporter.py,sha256=zkwkxdAUAxjdc-pzx2_oJXG25fo0Fnyd5JXPk-iPcOQ,1619
|
838
738
|
tools/app_interface_reporter.py,sha256=oZPib4HPq0aZ2Zui1QGJGk6qQdfpeihujGDBnSdKyGE,17627
|
@@ -855,14 +755,6 @@ tools/cli_commands/cost_report/openshift_cost_optimization.py,sha256=lpdqnhQGXaP
|
|
855
755
|
tools/cli_commands/cost_report/response.py,sha256=l5fVNMg8zzoNWm8LquYJsWM3VqxABBG8KT_qN0L3P6c,2689
|
856
756
|
tools/cli_commands/cost_report/util.py,sha256=lKSWjjUfDzMfSSTbFqc4Ln8JfzlWiW8kR2i51VJbEnc,2497
|
857
757
|
tools/cli_commands/cost_report/view.py,sha256=2uNO_fWIUydEL2kQXV959crRkHqzjp9c1OrefXNiJ5s,14033
|
858
|
-
tools/cli_commands/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
859
|
-
tools/cli_commands/test/conftest.py,sha256=ta2eRWhajOdMFMt3AMmh6fvLuM3lBwU9kmkXAaD2_vs,17011
|
860
|
-
tools/cli_commands/test/test_aws_cost_report.py,sha256=YNH_6NXLkWMkrgti4v8HDT2uwveh_ss3GdppjBOXq6I,6993
|
861
|
-
tools/cli_commands/test/test_cost_management_api.py,sha256=g4LCf3KE-KL3DjZLGY7sOcT5Ds_cgDRMqDKgitjvVhI,9607
|
862
|
-
tools/cli_commands/test/test_gpg_encrypt.py,sha256=BIOPMsvytRb_j-Ae7KylcOCUrbNNVw8-WDpvV1FlmDs,6867
|
863
|
-
tools/cli_commands/test/test_openshift_cost_optimization_report.py,sha256=GmfsqzfBkU1yE3o4tBVW7Od09M19EOK4gfX5ExjRiGM,8132
|
864
|
-
tools/cli_commands/test/test_openshift_cost_report.py,sha256=bK9vI5bCBsHyyTNxpVRZ6AxV1JP_5uHqZXITqOJ5GTM,8724
|
865
|
-
tools/cli_commands/test/test_util.py,sha256=51AeUTzS4D_gZqdlq5WDbqWzP5Eet6vAL-DW1Ktcti4,2213
|
866
758
|
tools/saas_metrics_exporter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
867
759
|
tools/saas_metrics_exporter/main.py,sha256=piocx6meMdJxoxeNz52gQGUjt5n7Fma4kgqYamszPrM,3180
|
868
760
|
tools/saas_metrics_exporter/commit_distance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -873,17 +765,7 @@ tools/saas_promotion_state/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
|
|
873
765
|
tools/saas_promotion_state/saas_promotion_state.py,sha256=5LJ9rygZ304vxfsIuRfuxueoYRb72EZNKKITEcJ4Mtk,3908
|
874
766
|
tools/sre_checkpoints/__init__.py,sha256=CDaDaywJnmRCLyl_NCcvxi-Zc0hTi_3OdwKiFOyS39I,145
|
875
767
|
tools/sre_checkpoints/util.py,sha256=zEDbGr18ZeHNQwW8pUsr2JRjuXIPz--WAGJxZo9sv_Y,894
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
tools/test/test_get_container_images.py,sha256=1WOkwW-FeS9tAzVy3n7Kok6StU9Q_lYQ3VF6ZHJE-CQ,7457
|
881
|
-
tools/test/test_qontract_cli.py,sha256=iuzKbQ6ahinvjoQmQLBrG4shey0z-1rB6qCgS8T6dgU,5789
|
882
|
-
tools/test/test_saas_promotion_state.py,sha256=dy4kkSSAQ7bC0Xp2CociETGN-2aABEfL6FU5D9Jl00Y,6056
|
883
|
-
tools/test/test_sd_app_sre_alert_report.py,sha256=v363r9zM7__0kR5K6mvJoGFcM9BvE33fWAayrqkpojA,2116
|
884
|
-
tools/test/test_sre_checkpoints.py,sha256=SKqPPTl9ua0RFdSSofnoQX-JZE6dFLO3LRhfQzqtfh8,2607
|
885
|
-
qontract_reconcile-0.10.1rc1201.dist-info/METADATA,sha256=bKaK5YEUSQkwv2S3e0aRH8VDJfeI27hXXmO5Nhou-iU,2213
|
886
|
-
qontract_reconcile-0.10.1rc1201.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
887
|
-
qontract_reconcile-0.10.1rc1201.dist-info/entry_points.txt,sha256=GKQqCl2j2X1BJQ69een6rHcR26PmnxnONLNOQB-nRjY,491
|
888
|
-
qontract_reconcile-0.10.1rc1201.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
|
889
|
-
qontract_reconcile-0.10.1rc1201.dist-info/RECORD,,
|
768
|
+
qontract_reconcile-0.10.2.dev1.dist-info/METADATA,sha256=7dZrs4QJBFzjalC30zfBVb6qrkCrIi3pLNpBJRez9iA,24664
|
769
|
+
qontract_reconcile-0.10.2.dev1.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
770
|
+
qontract_reconcile-0.10.2.dev1.dist-info/entry_points.txt,sha256=JniHZPadNOILPyfSl0LF2YSp3Db7K2_W2CN7i9f3Gos,540
|
771
|
+
qontract_reconcile-0.10.2.dev1.dist-info/RECORD,,
|
@@ -5,5 +5,6 @@ glitchtip-access-reporter = tools.glitchtip_access_reporter:main
|
|
5
5
|
glitchtip-access-revalidation = tools.glitchtip_access_revalidation:main
|
6
6
|
qontract-cli = tools.qontract_cli:root
|
7
7
|
qontract-reconcile = reconcile.cli:integration
|
8
|
+
run-integration = reconcile.run_integration:main
|
8
9
|
saas-metrics-exporter = tools.saas_metrics_exporter.main:main
|
9
10
|
template-validation = tools.template_validation:main
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Integration change-owners
|
2
|
+
|
3
|
+
`change-owners` uses change-type declarations from `app-interface` to grant self-service change permissions to `app-interface` tenants.
|
4
|
+
|
5
|
+
|
6
|
+
## Module structure
|
7
|
+
|
8
|
+
* `reconcile.change_owners.diff` contains all functionality for low-level diffing on file content. It can be used to extract differences from files as `Diff` dataclasses.
|
9
|
+
* `reconcile.change_owners.change_types` uses the `diff` module to extract relevant changes and tries to cover them with `change-types` from `app-interface`. The results are `BundleFileChange` dataclasses that contain all the found changes along with the `change-types` covering them. A change is considered `covered` when at least one `change-type` allows the changes in a context that provides approvers.
|
10
|
+
* `reconcile.change_owners.self_service_roles` is a change coverage implementation that uses `RoleV1.self_service` configurations from `app-interface` to bring changes, change-types and approvers together in a `ChangeTypeContext`.
|
11
|
+
* `reconcile.change_owners.decision` handles MR decision command parsing from eligible change approvers.
|
12
|
+
* `reconcile.change_owners.change_owners` is the entry point for the integrations and acts mostly as a coordinator between the other modules.
|
13
|
+
|
14
|
+
## Functionality
|
15
|
+
|
16
|
+
`change_owners` uses the `qontract-server` diff endpoint to get a highlevel overview what changed in an MR. It leverages `change_types` to find fine grained differences in datafiles and resourcefiles and build `BundleFileChange` objects that hold the state of diffs and diff coverage.
|
17
|
+
|
18
|
+
`change_owners` checks `BundleFileChange` objects for `change-types` that are `restrictive`. If the MR was created by a user, that has this `change-type` not assigned, the integration will fail. A user with this role assigned could issue an `/good-to-test` command to override this restriction.
|
19
|
+
|
20
|
+
`change_owners` reachs out to pluggable functionality to find out which `change-types` can be applied to which changes with a set of approvers. Currently, the only module to provide such `ChangeTypeContext` is `self_service_roles` which looks for explicitly bound `change-types` and files in the context of a `Role` with users and bots will can act as approvers.
|
21
|
+
|
22
|
+
The functionality provided by `self_service_roles` is very explicit because it sets up the self-service relationship by listing all involved components. Other mechanisms to provide `ChangeTypeContexts` based on other explicit or implicit ownership information can be added easily and plugged into the `change_owners.cover_changes()` function.
|
23
|
+
|
24
|
+
The result of this coverage process is a list of `BundleFileChange` objects, each of them having a list of `DiffCoverage` objects, listing all differences and how (and if) they are covered by `ChangeTypeContexts`. That way every change has a list of `Approvers` provided by the context of the `ChangeType`.
|
25
|
+
|
26
|
+
Next, `change_owners` reaches out to the `app-interface MR` it processes, to find the decisions of the approvers. Decisions are given as `/` command comments on the MR. The `decision` module parses those comments and applies them to the `BundleFileChanges` and their `DiffCoverage` objects. The result is a list of `ChangeDecisions` where every change is `approved` and/or on `hold`.
|
27
|
+
|
28
|
+
The `change_owners` module inspects those `ChangeDecisions` to find out if all changes have been approved. If that is the case, it adds the `bot/approved` label to the MR so that `gitlab-housekeeper` can act on the MR and will try to merge it.
|
29
|
+
|
30
|
+
If at least one `ChangeDecision` is on `hold`, the `bot/hold` label is applied, which prevents `gitlab-housekeeper` from merging.
|
31
|
+
|
32
|
+
If at least one `ChangeDecision` is not `approved`, the the MR can not proceed without further approvals or without AppSRE intervention.
|
33
|
+
|
34
|
+
In the case of changes not having a `ChangeTypeContext` attached allowing approvers to decide, the MR is considered `non-self-serviceable` and can't proceed without AppSRE intervention.
|
@@ -18,6 +18,7 @@ from reconcile.external_resources.model import (
|
|
18
18
|
ExternalResource,
|
19
19
|
ExternalResourceKey,
|
20
20
|
ExternalResourceModuleConfiguration,
|
21
|
+
ExternalResourceOrphanedResourcesError,
|
21
22
|
ExternalResourcesInventory,
|
22
23
|
ExternalResourceValidationError,
|
23
24
|
ModuleInventory,
|
@@ -198,6 +199,13 @@ class ExternalResourcesManager:
|
|
198
199
|
to_reconcile.add(r)
|
199
200
|
return to_reconcile
|
200
201
|
|
202
|
+
def _check_orphaned_objects(self) -> None:
|
203
|
+
state_keys = self.state_mgr.get_all_resource_keys()
|
204
|
+
inventory_keys = set(self.er_inventory.keys())
|
205
|
+
orphans = state_keys - inventory_keys
|
206
|
+
if len(orphans) > 0:
|
207
|
+
raise ExternalResourceOrphanedResourcesError(orphans)
|
208
|
+
|
201
209
|
def _get_reconciliation_status(
|
202
210
|
self,
|
203
211
|
r: Reconciliation,
|
@@ -364,6 +372,7 @@ class ExternalResourcesManager:
|
|
364
372
|
self._sync_secrets(to_sync_keys=to_sync_keys | pending_sync_keys)
|
365
373
|
|
366
374
|
def handle_dry_run_resources(self) -> None:
|
375
|
+
self._check_orphaned_objects()
|
367
376
|
desired_r = self._get_desired_objects_reconciliations()
|
368
377
|
deleted_r = self._get_deleted_objects_reconciliations()
|
369
378
|
reconciliations = desired_r.union(deleted_r)
|
@@ -374,7 +383,9 @@ class ExternalResourcesManager:
|
|
374
383
|
if (
|
375
384
|
r.action == Action.APPLY
|
376
385
|
and state.reconciliation.resource_hash != r.resource_hash
|
377
|
-
) or
|
386
|
+
) or (
|
387
|
+
r.action == Action.DESTROY and not state.resource_status.is_in_progress
|
388
|
+
):
|
378
389
|
triggered.add(r)
|
379
390
|
|
380
391
|
threaded.run(
|
@@ -34,6 +34,17 @@ from reconcile.utils.external_resource_spec import (
|
|
34
34
|
)
|
35
35
|
|
36
36
|
|
37
|
+
class ExternalResourceOrphanedResourcesError(Exception):
|
38
|
+
def __init__(self, orphans: Iterable["ExternalResourceKey"]) -> None:
|
39
|
+
msg = [
|
40
|
+
"There are orphaned resources in the configuration. ",
|
41
|
+
"To delete ERv2 managed external resources, set the 'delete: true' attribute.\n",
|
42
|
+
"Orphans:\n",
|
43
|
+
"\n".join(map(str, orphans)),
|
44
|
+
]
|
45
|
+
super().__init__("".join(msg))
|
46
|
+
|
47
|
+
|
37
48
|
class ExternalResourceValidationError(Exception):
|
38
49
|
errors: list[str] = []
|
39
50
|
|
@@ -0,0 +1,150 @@
|
|
1
|
+
<font size=24> GlitchTip </font>
|
2
|
+
---
|
3
|
+
|
4
|
+
[toc]
|
5
|
+
|
6
|
+
# Introduction
|
7
|
+
|
8
|
+
This integration manages the following glitchtip objects:
|
9
|
+
|
10
|
+
* organizations
|
11
|
+
* teams
|
12
|
+
* projects
|
13
|
+
* and users
|
14
|
+
|
15
|
+
|
16
|
+
# Development
|
17
|
+
|
18
|
+
Development and testing were done for `glitchtip/glitchtip:v2.0.5`
|
19
|
+
|
20
|
+
glitchtip `docker-compose.yml` for local development:
|
21
|
+
|
22
|
+
```yaml
|
23
|
+
x-environment:
|
24
|
+
&default-environment
|
25
|
+
DATABASE_URL: postgres://postgres:postgres@postgres:5432/postgres
|
26
|
+
SECRET_KEY: whatever
|
27
|
+
DEBUG: "true"
|
28
|
+
EMAIL_BACKEND: "django.core.mail.backends.console.EmailBackend"
|
29
|
+
PORT: 8000
|
30
|
+
GLITCHTIP_DOMAIN: http://localhost:8000
|
31
|
+
CELERY_WORKER_CONCURRENCY: 1
|
32
|
+
x-depends_on:
|
33
|
+
&default-depends_on
|
34
|
+
- postgres
|
35
|
+
- redis
|
36
|
+
|
37
|
+
services:
|
38
|
+
postgres:
|
39
|
+
image: postgres:13
|
40
|
+
environment:
|
41
|
+
POSTGRES_HOST_AUTH_METHOD: "trust"
|
42
|
+
restart: unless-stopped
|
43
|
+
volumes:
|
44
|
+
- pg-data:/var/lib/postgresql/data
|
45
|
+
networks:
|
46
|
+
- qontract-development
|
47
|
+
redis:
|
48
|
+
image: redis
|
49
|
+
restart: unless-stopped
|
50
|
+
networks:
|
51
|
+
- qontract-development
|
52
|
+
glitchtip:
|
53
|
+
image: glitchtip/glitchtip:v2.0.5
|
54
|
+
depends_on: *default-depends_on
|
55
|
+
ports:
|
56
|
+
- "8000:8000"
|
57
|
+
environment: *default-environment
|
58
|
+
restart: unless-stopped
|
59
|
+
networks:
|
60
|
+
- qontract-development
|
61
|
+
worker:
|
62
|
+
image: glitchtip/glitchtip:v2.0.5
|
63
|
+
command: ./bin/run-celery-with-beat.sh
|
64
|
+
depends_on: *default-depends_on
|
65
|
+
environment: *default-environment
|
66
|
+
restart: unless-stopped
|
67
|
+
networks:
|
68
|
+
- qontract-development
|
69
|
+
migrate:
|
70
|
+
image: glitchtip/glitchtip:v2.0.5
|
71
|
+
depends_on: *default-depends_on
|
72
|
+
command: "./manage.py migrate"
|
73
|
+
environment: *default-environment
|
74
|
+
networks:
|
75
|
+
- qontract-development
|
76
|
+
|
77
|
+
volumes:
|
78
|
+
pg-data:
|
79
|
+
|
80
|
+
|
81
|
+
networks:
|
82
|
+
qontract-development:
|
83
|
+
external:
|
84
|
+
name: qontract-development
|
85
|
+
```
|
86
|
+
|
87
|
+
# Fixtures
|
88
|
+
|
89
|
+
The unit tests use this structure and are based on these [app-interface-dev-data](https://gitlab.cee.redhat.com/app-sre/app-interface-dev-data/-/merge_requests/19) definitions.
|
90
|
+
|
91
|
+
```mermaid
|
92
|
+
classDiagram
|
93
|
+
direction TB
|
94
|
+
%% Instance & Orgs
|
95
|
+
GlitchTipDev_Instance <-- ESA_Organization
|
96
|
+
GlitchTipDev_Instance <-- NASA_Organization
|
97
|
+
|
98
|
+
%% Projects
|
99
|
+
NASA_Organization <-- apollo_11_flight_control_Project
|
100
|
+
NASA_Organization <-- apollo_11_spacecraft_Project
|
101
|
+
ESA_Organization <-- rosetta_flight_control_Project
|
102
|
+
ESA_Organization <-- rosetta_spacecraft_Project
|
103
|
+
|
104
|
+
%% Teams
|
105
|
+
apollo_11_flight_control_Project <-- nasa_flight_control_Team
|
106
|
+
apollo_11_flight_control_Project <-- nasa_pilots_Team
|
107
|
+
apollo_11_spacecraft_Project <-- nasa_pilots_Team
|
108
|
+
rosetta_flight_control_Project <-- esa_flight_control_Team
|
109
|
+
rosetta_flight_control_Project <-- esa_pilots_Team
|
110
|
+
rosetta_spacecraft_Project <-- esa_pilots_Team
|
111
|
+
|
112
|
+
%% Users
|
113
|
+
%% pilot
|
114
|
+
ESA_Organization <-- SamanthaCristoforetti_User
|
115
|
+
%% flight-control
|
116
|
+
ESA_Organization <-- MatthiasMaurer_User
|
117
|
+
ESA_Organization <-- TimPeake_User
|
118
|
+
%% owner role in organizations;
|
119
|
+
ESA_Organization <-- GlobalFlightDirector_User
|
120
|
+
%% automation account, must be ignored
|
121
|
+
ESA_Organization <-- sd_app_sre_glitchtip_User
|
122
|
+
|
123
|
+
%% automation account, must be ignored
|
124
|
+
NASA_Organization <-- sd_app_sre_glitchtip_User
|
125
|
+
%% owner role in organizations; invited to nasa-flight-control but not accepted yet
|
126
|
+
NASA_Organization <-- GlobalFlightDirector_User
|
127
|
+
%% pilots
|
128
|
+
NASA_Organization <-- NeilArmstrong_User
|
129
|
+
%% user account not created yet, invited but user ignored the invitation
|
130
|
+
NASA_Organization <-- BuzzAldrin_User
|
131
|
+
%% ordinary user
|
132
|
+
NASA_Organization <-- MichaelCollins_User
|
133
|
+
|
134
|
+
%% Team memberships
|
135
|
+
esa_pilots_Team <-- SamanthaCristoforetti_User
|
136
|
+
esa_flight_control_Team <-- MatthiasMaurer_User
|
137
|
+
esa_flight_control_Team <-- TimPeake_User
|
138
|
+
esa_flight_control_Team <-- GlobalFlightDirector_User
|
139
|
+
|
140
|
+
nasa_flight_control_Team <-- GlobalFlightDirector_User
|
141
|
+
nasa_pilots_Team <-- NeilArmstrong_User
|
142
|
+
nasa_pilots_Team <-- BuzzAldrin_User
|
143
|
+
nasa_flight_control_Team <-- MichaelCollins_User
|
144
|
+
```
|
145
|
+
|
146
|
+
# Links
|
147
|
+
|
148
|
+
* [Design Doc](https://gitlab.cee.redhat.com/service/app-interface/-/blob/d12d7faa9d6136da69e4113ccbbed54781319173/docs/app-sre/design-docs/glitchtip.md)
|
149
|
+
* [GlitchTip App](https://visual-app-interface.devshift.net/services#/services/glitchtip/app.yml)
|
150
|
+
* [GlitchTip Stage Instance](https://glitchtip.stage.devshift.net/login)
|