qontract-reconcile 0.10.2.dev395__py3-none-any.whl → 0.10.2.dev408__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.dev395.dist-info → qontract_reconcile-0.10.2.dev408.dist-info}/METADATA +2 -2
- {qontract_reconcile-0.10.2.dev395.dist-info → qontract_reconcile-0.10.2.dev408.dist-info}/RECORD +23 -23
- reconcile/automated_actions/config/integration.py +12 -0
- reconcile/aws_ami_share.py +69 -62
- reconcile/change_owners/change_owners.py +1 -1
- reconcile/endpoints_discovery/integration.py +4 -1
- reconcile/external_resources/integration.py +1 -1
- reconcile/external_resources/reconciler.py +5 -2
- reconcile/gql_definitions/automated_actions/instance.py +41 -2
- reconcile/gql_definitions/introspection.json +219 -0
- reconcile/ocm/types.py +6 -1
- reconcile/openshift_base.py +47 -1
- reconcile/openshift_resources_base.py +6 -2
- reconcile/queries.py +6 -0
- reconcile/utils/aws_api.py +51 -20
- reconcile/utils/jobcontroller/controller.py +1 -1
- reconcile/utils/jobcontroller/models.py +17 -1
- reconcile/utils/oc.py +107 -90
- reconcile/utils/ocm/products.py +5 -5
- reconcile/utils/openshift_resource.py +5 -0
- reconcile/utils/terrascript_aws_client.py +41 -40
- {qontract_reconcile-0.10.2.dev395.dist-info → qontract_reconcile-0.10.2.dev408.dist-info}/WHEEL +0 -0
- {qontract_reconcile-0.10.2.dev395.dist-info → qontract_reconcile-0.10.2.dev408.dist-info}/entry_points.txt +0 -0
{qontract_reconcile-0.10.2.dev395.dist-info → qontract_reconcile-0.10.2.dev408.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: qontract-reconcile
|
|
3
|
-
Version: 0.10.2.
|
|
3
|
+
Version: 0.10.2.dev408
|
|
4
4
|
Summary: Collection of tools to reconcile services with their desired state as defined in the app-interface DB.
|
|
5
5
|
Project-URL: homepage, https://github.com/app-sre/qontract-reconcile
|
|
6
6
|
Project-URL: repository, https://github.com/app-sre/qontract-reconcile
|
|
@@ -53,7 +53,7 @@ Requires-Dist: sendgrid<6.5.0,>=6.4.8
|
|
|
53
53
|
Requires-Dist: sentry-sdk~=2.0
|
|
54
54
|
Requires-Dist: setuptools==80.8.0
|
|
55
55
|
Requires-Dist: slack-sdk<4.0,>=3.10
|
|
56
|
-
Requires-Dist: sretoolbox==
|
|
56
|
+
Requires-Dist: sretoolbox==3.0.0
|
|
57
57
|
Requires-Dist: sshtunnel>=0.4.0
|
|
58
58
|
Requires-Dist: tabulate<0.9.0,>=0.8.6
|
|
59
59
|
Requires-Dist: terrascript==0.9.0
|
{qontract_reconcile-0.10.2.dev395.dist-info → qontract_reconcile-0.10.2.dev408.dist-info}/RECORD
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
reconcile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
reconcile/acs_policies.py,sha256=1LKnRRPa6h3QewsDhv0epINi9RJtQmT88mPgcU2LhDM,8667
|
|
3
3
|
reconcile/acs_rbac.py,sha256=15vNfNzdG_DeXaJ-f5m8DSaJh__LUK766_xAECqyTsg,22657
|
|
4
|
-
reconcile/aws_ami_share.py,sha256=
|
|
4
|
+
reconcile/aws_ami_share.py,sha256=JqevGzjLKlktRDeL01ukBko5ope5Xhl_0NvdjfGdENA,3503
|
|
5
5
|
reconcile/aws_ecr_image_pull_secrets.py,sha256=r9Dy01w4kNPWh3LO2tSGH_x4rQg3B2FJc5sVjPJxZdI,2622
|
|
6
6
|
reconcile/aws_iam_keys.py,sha256=YHp-K8K8Dqm7vVKzry0RyhM6Egmpp7eCWMNdKk0vbME,4118
|
|
7
7
|
reconcile/aws_iam_password_reset.py,sha256=5oajSspJVAvpGd445hKsxtEGYb75dM4l1_PJTzrfHk0,3253
|
|
@@ -54,7 +54,7 @@ reconcile/ocm_groups.py,sha256=gDnkhkYUEoMkI6y6ctyoKIFpJNS18SVnedW4OzJ8VWs,4174
|
|
|
54
54
|
reconcile/ocm_machine_pools.py,sha256=KnTYAOw25N-QRb3Y7zbNY8w8xCR55WyqVjycYz24Yxk,17243
|
|
55
55
|
reconcile/ocm_update_recommended_version.py,sha256=Vi3Y2sX-OQxx1mv_xiPQXnmrpsZzGIE38No0yBcTaD4,4204
|
|
56
56
|
reconcile/ocm_upgrade_scheduler_org_updater.py,sha256=j4qthqx8qREB6mSbV9NT-Giq1Tu5y2EhPgIObkvmjyU,4371
|
|
57
|
-
reconcile/openshift_base.py,sha256=
|
|
57
|
+
reconcile/openshift_base.py,sha256=TTw6da2Efyy5CMxh18CUCtuZgToMnbtszBosflLDkUs,55989
|
|
58
58
|
reconcile/openshift_cluster_bots.py,sha256=POs2kBwKjzD--lElGDQbF7HOuCcOpMEclw4a9usntos,10933
|
|
59
59
|
reconcile/openshift_clusterrolebindings.py,sha256=jwSaYQvUUY7noQGc148Dkqm6woYxvOEd1sume7k_sUk,6212
|
|
60
60
|
reconcile/openshift_groups.py,sha256=XpIyhgnWY1XUQio1wi6sHoDtoMYdk-lpHp0-1d1RC7o,9471
|
|
@@ -65,7 +65,7 @@ reconcile/openshift_network_policies.py,sha256=e6yo7F0zpeGySycqeK0ugzSmC_kn_5h4W
|
|
|
65
65
|
reconcile/openshift_prometheus_rules.py,sha256=FVVx1D7KCUnNZh7NwVNbD6t4lXKRSO7ph5bvAXruPno,1417
|
|
66
66
|
reconcile/openshift_resourcequotas.py,sha256=0CSuCre3T2ON42Ku1UDhTRugfmUNBx8PILpxIQaAzJU,2882
|
|
67
67
|
reconcile/openshift_resources.py,sha256=YnhDxCvsp0muxEmULiqWhoar9EzxohTrnbY-U7oS5Hc,1603
|
|
68
|
-
reconcile/openshift_resources_base.py,sha256=
|
|
68
|
+
reconcile/openshift_resources_base.py,sha256=tuOEH1UKoWksmPAfZJOhmLY6IghkvBcZyqa48kDLeR4,43172
|
|
69
69
|
reconcile/openshift_rhcs_certs.py,sha256=Zm9cazEN-k0tR1FCe26x1guTkQKYMz4HC9sKyEyyha8,10470
|
|
70
70
|
reconcile/openshift_rolebindings.py,sha256=pFPhJvVsHpJMzKxlVqDmIf6cwBfc7tf8kFucuYkvBiE,10816
|
|
71
71
|
reconcile/openshift_routes.py,sha256=xnA34f32xDdkfV2MXIC1QURFJioQUsXT8AZBiY7iSP0,1298
|
|
@@ -88,7 +88,7 @@ reconcile/quay_mirror.py,sha256=pA1_OujRduwQ6dYljoWXU_VJgAwlv7DzThk26ymKmGs,1432
|
|
|
88
88
|
reconcile/quay_mirror_org.py,sha256=ltPbHuWUI8Wnl8gV4aeYmvoYFA1uXLWqlXqEPpw7Hi0,11065
|
|
89
89
|
reconcile/quay_permissions.py,sha256=BF539lRxjpgwm88WzazklzgaCF_ipRALwbO2AdpqUqE,4388
|
|
90
90
|
reconcile/quay_repos.py,sha256=fBleLzMtfDmTidpzbrTt8kGCy-Bk3J06EO4hhyghGnQ,7570
|
|
91
|
-
reconcile/queries.py,sha256=
|
|
91
|
+
reconcile/queries.py,sha256=L0NbIr6-M12P7xqU2s_2-tgi5BOC5QEo6Otu33WG5tI,56598
|
|
92
92
|
reconcile/query_validator.py,sha256=csOSkKxcf6ZlpchJu4ck2jLYKUN6y1l-UmSQUFHgssY,1618
|
|
93
93
|
reconcile/requests_sender.py,sha256=g-tlrudvIqhneQPDMrfYF0Xsq7BSW2QcBPirl7hFM6I,4058
|
|
94
94
|
reconcile/resource_scraper.py,sha256=TcMhXga7konX9x97NhpoijnDGWA-ZjdpiiXjm5qCmPk,2249
|
|
@@ -135,7 +135,7 @@ reconcile/aus/version_gates/ocp_gate_handler.py,sha256=RW1ppDaCZXVegV9AzzqYXxDUu
|
|
|
135
135
|
reconcile/aus/version_gates/sts_version_gate_handler.py,sha256=QDk53hXAEr6o8w3nGeVCrcihNohrMJztq4ZlsHq_35o,3655
|
|
136
136
|
reconcile/automated_actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
137
137
|
reconcile/automated_actions/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
138
|
-
reconcile/automated_actions/config/integration.py,sha256=
|
|
138
|
+
reconcile/automated_actions/config/integration.py,sha256=LTsKxePcyEwQdkMYuBsm4aaWhDddf40ena_-Vrbq1to,15315
|
|
139
139
|
reconcile/aws_account_manager/README.md,sha256=_XFM3GZNHUzv--e_navqJuaUWpjC6QrHfulreHynFf0,262
|
|
140
140
|
reconcile/aws_account_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
141
141
|
reconcile/aws_account_manager/integration.py,sha256=_TnQrewnBhsUEakknzwe1TstrTwySzBhZK__EGgoKn4,15350
|
|
@@ -162,7 +162,7 @@ reconcile/change_owners/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
|
|
|
162
162
|
reconcile/change_owners/approver.py,sha256=Z3_11vnK2WNOxjEEXVDh0224-_-qbt9d6mBeVE-7fsc,2259
|
|
163
163
|
reconcile/change_owners/bundle.py,sha256=h30fU-JmLH5a-rCAovpzTeTkkkgZztsZ5A2raee0YuU,5355
|
|
164
164
|
reconcile/change_owners/change_log_tracking.py,sha256=lRHdC6-sqzUClmoVNq8v5rygAzeQJRxbKbJNDB3YI8E,9499
|
|
165
|
-
reconcile/change_owners/change_owners.py,sha256=
|
|
165
|
+
reconcile/change_owners/change_owners.py,sha256=e9ujTibYL5-2Pbf1UuewMFw9Vettfe_WLqiHl4Ad9Y0,17133
|
|
166
166
|
reconcile/change_owners/change_types.py,sha256=5eSvS2_npUriq9RN4LdAWdYUiNzF91K1pDUEVYDIQ4k,32023
|
|
167
167
|
reconcile/change_owners/changes.py,sha256=YTqwUYutQ6JVSSYmC2Ph5ROCiVix42Vnzy47-i57z4Q,18119
|
|
168
168
|
reconcile/change_owners/decision.py,sha256=755rHmrnhfM_xVKnCPlLPOVm_TCJVb3lSkkUvxFM61Q,7491
|
|
@@ -180,19 +180,19 @@ reconcile/dynatrace_token_provider/model.py,sha256=VU2tZT_NAdoCovGFVj5ZoEKhWfMsC
|
|
|
180
180
|
reconcile/dynatrace_token_provider/ocm.py,sha256=e5kzzofwMTAPUyOE20QpLZt-Do5xn4RaUhtN1Rdy828,3768
|
|
181
181
|
reconcile/dynatrace_token_provider/validate.py,sha256=40_9QmHoB3-KBc0k_0D4QO00PpNNPS-gU9Z6cIcWga8,1920
|
|
182
182
|
reconcile/endpoints_discovery/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
183
|
-
reconcile/endpoints_discovery/integration.py,sha256=
|
|
183
|
+
reconcile/endpoints_discovery/integration.py,sha256=Pg7ur-01_vFdXx5mlB9FBRManSFLEw_ueaoYP1JpJjY,15065
|
|
184
184
|
reconcile/endpoints_discovery/merge_request.py,sha256=_yLb4tnvoZMCko8rta2C_CvOInJa9pa3HzSmHNtjgGU,2978
|
|
185
185
|
reconcile/endpoints_discovery/merge_request_manager.py,sha256=86uy9i_IJkt_TtxRzCtzNL1pL3bYnuYzI5MRLseKSlM,6291
|
|
186
186
|
reconcile/external_resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
187
187
|
reconcile/external_resources/aws.py,sha256=kh5p9KsYB7naewVPLPtcCjnIrUECmdR6lUgDrzIlL1k,11985
|
|
188
188
|
reconcile/external_resources/factories.py,sha256=ftHFxEvzFp-oAOOLeR9viTLLVz0g6Hgs8ZNEsJKKOcs,5903
|
|
189
|
-
reconcile/external_resources/integration.py,sha256=
|
|
189
|
+
reconcile/external_resources/integration.py,sha256=Fcc7MjixGx6bE6K4fgXx6yFomVoJavsOLhhDgL7VJgg,7040
|
|
190
190
|
reconcile/external_resources/integration_secrets_sync.py,sha256=M2uOFi2JXWhiw3hQyE_4NVPQmPIYGHlghRti5eLWhkw,1738
|
|
191
191
|
reconcile/external_resources/manager.py,sha256=4UxcrJzgIDiVBClIhIbIAZ11yZ5a6YQW7xUKpns7juo,18344
|
|
192
192
|
reconcile/external_resources/meta.py,sha256=RM8qGE6UoJR58nLqABReIJrrdmx4Tqt_OcdlT-QygGs,620
|
|
193
193
|
reconcile/external_resources/metrics.py,sha256=KiBjMUaN_z0cSkF_7Ar_a8RiuiwVqjyMcVdISlxhzXE,3898
|
|
194
194
|
reconcile/external_resources/model.py,sha256=dDYTlMNL8vy07lquPnj_QXTGDK5punKSmP4fvbz83Uc,15021
|
|
195
|
-
reconcile/external_resources/reconciler.py,sha256=
|
|
195
|
+
reconcile/external_resources/reconciler.py,sha256=Ip84k-yL4-eHDkdT7BMwmou5jd5berIEkthqJWyWX_Q,9720
|
|
196
196
|
reconcile/external_resources/secrets_sync.py,sha256=iz5qoyxFCCQ66EwiCy20ZiIurq8FEDHKOPpUhIkkMxk,16177
|
|
197
197
|
reconcile/external_resources/state.py,sha256=6GTwsmEqDuKz8mSPJtVzGtzgwAWJgBiotH_2hfTYZHo,13451
|
|
198
198
|
reconcile/fleet_labeler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -213,7 +213,7 @@ reconcile/glitchtip_project_alerts/integration.py,sha256=d3PMy-mQSbSZdIGAVaZCA2U
|
|
|
213
213
|
reconcile/glitchtip_project_dsn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
214
214
|
reconcile/glitchtip_project_dsn/integration.py,sha256=3GgcqUM6hWhLpo9Yx5Xr9vrdexF-WNevVCNL9bJ0Upc,8162
|
|
215
215
|
reconcile/gql_definitions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
216
|
-
reconcile/gql_definitions/introspection.json,sha256=
|
|
216
|
+
reconcile/gql_definitions/introspection.json,sha256=tSvCBt6qqlVlIy70PtVs3r4EWavYhrU3Sd6maglDxsQ,2427030
|
|
217
217
|
reconcile/gql_definitions/acs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
218
218
|
reconcile/gql_definitions/acs/acs_instances.py,sha256=sfCd6CXr66BLOCxEF9kyRN04HURHAOeDWVznYXj_opU,2172
|
|
219
219
|
reconcile/gql_definitions/acs/acs_policies.py,sha256=Ygpfl2-VkYLSlJvHgp_dJBfb66K_Rwfdfpsa18w1v1s,4338
|
|
@@ -227,7 +227,7 @@ reconcile/gql_definitions/app_sre_tekton_access_revalidation/__init__.py,sha256=
|
|
|
227
227
|
reconcile/gql_definitions/app_sre_tekton_access_revalidation/roles.py,sha256=8Y4NsS5T7tumDWxY5MuoV50MK2i-DsLYSpCRjb7KaLE,2353
|
|
228
228
|
reconcile/gql_definitions/app_sre_tekton_access_revalidation/users.py,sha256=XdVxBxiyTR6Cy939EHNw__0k7iWrZWlhrgS5DakST0I,2504
|
|
229
229
|
reconcile/gql_definitions/automated_actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
230
|
-
reconcile/gql_definitions/automated_actions/instance.py,sha256=
|
|
230
|
+
reconcile/gql_definitions/automated_actions/instance.py,sha256=zF-CFhwgZqsQHVBdpwq1l7KS7FMnc1YXwlRUFk2Dlmg,15815
|
|
231
231
|
reconcile/gql_definitions/aws_account_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
232
232
|
reconcile/gql_definitions/aws_account_manager/aws_accounts.py,sha256=8fW5GiThEcEeODDiYxysvccqRVOpyJUYa6ge6n3KjEk,5138
|
|
233
233
|
reconcile/gql_definitions/aws_ami_cleanup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -440,7 +440,7 @@ reconcile/gql_definitions/vpc_peerings_validator/vpc_peerings_validator_peered_c
|
|
|
440
440
|
reconcile/ldap_groups/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
441
441
|
reconcile/ldap_groups/integration.py,sha256=hx-JX9TgUJMIZoQRWO3nmQLjAPnJaQ-tNud4ky8JQdA,10622
|
|
442
442
|
reconcile/ocm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
443
|
-
reconcile/ocm/types.py,sha256=
|
|
443
|
+
reconcile/ocm/types.py,sha256=iWoYAH1mBiVumk23erfaw2D6UPUMUsUeBWnmohvWRF0,2558
|
|
444
444
|
reconcile/ocm_internal_notifications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
445
445
|
reconcile/ocm_internal_notifications/integration.py,sha256=MX0nXFNMS5mUAPVYAxK8MfXJ-pYanvOgyK3M5iALCZ0,4480
|
|
446
446
|
reconcile/ocm_labels/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -584,7 +584,7 @@ reconcile/unleash_feature_toggles/integration.py,sha256=Etp6D-UPkGy16IGHMsWBJscg
|
|
|
584
584
|
reconcile/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
585
585
|
reconcile/utils/aggregated_list.py,sha256=IxQoMpKV2HHuZOxRmVIew2WQ7SutuLJ_VxlewieK3nY,4036
|
|
586
586
|
reconcile/utils/amtool.py,sha256=Ng5VVNCiPYEK67eDjIwfuuTLs5JsfltCwt6w5UfXbcY,2289
|
|
587
|
-
reconcile/utils/aws_api.py,sha256=
|
|
587
|
+
reconcile/utils/aws_api.py,sha256=M2EQfDg2Aa8gKDh5aZDL8-Zd0vBXD7FQSySv-ivmYE4,62002
|
|
588
588
|
reconcile/utils/aws_helper.py,sha256=9u4m94bnc3chFIDDEXwYXRXj5b--D6CTRy6g234jhNY,2972
|
|
589
589
|
reconcile/utils/batches.py,sha256=TtEm64a8lWhFuNbUVpFEmXVdU2Q0sTBrP_I0Cjbgh7g,320
|
|
590
590
|
reconcile/utils/binary.py,sha256=lSIevhilMeoGMePPHD7A-pxe45LVpBT0LksecYbM-EA,2477
|
|
@@ -628,12 +628,12 @@ reconcile/utils/make.py,sha256=QaEwucrzbl8-VHS66Wfdjfo0ubmAcvt_hZGpiGsKU50,231
|
|
|
628
628
|
reconcile/utils/metrics.py,sha256=kiOoWO0b0mO-MDZWxyClYz9SeohQ0QU-xji0p-cSiLo,18462
|
|
629
629
|
reconcile/utils/models.py,sha256=N-cOLsLbZAzVazFImue4d1pllCGd_vVcIrFKykYZXZo,4682
|
|
630
630
|
reconcile/utils/oauth2_backend_application_session.py,sha256=6W16sMpnWEPFDUX7qi5Cui2yOnmLfpgUxWtB3Ii35D0,4177
|
|
631
|
-
reconcile/utils/oc.py,sha256=
|
|
631
|
+
reconcile/utils/oc.py,sha256=tk1En7ShB-ny0vKL2tTPvVBHMMZcfdRS4JkTwkZ6mYU,69639
|
|
632
632
|
reconcile/utils/oc_connection_parameters.py,sha256=-H2crz0UOVKWlNrexf04ip8Vu57rE2QZLJuurvin1_c,9705
|
|
633
633
|
reconcile/utils/oc_filters.py,sha256=DXIA2--jlYadPGsKynnnXW_LIZra6N2wmD0MVngir5Y,1427
|
|
634
634
|
reconcile/utils/oc_map.py,sha256=ougQ-Wlsa8ymoE_lPQ7g2LlpsUOsHVeRCLYW_6fjeWU,8976
|
|
635
635
|
reconcile/utils/ocm_base_client.py,sha256=niBN-yHiML5ljqKMOabFTaYW9iQ8JAway37BQF2NvtM,6713
|
|
636
|
-
reconcile/utils/openshift_resource.py,sha256=
|
|
636
|
+
reconcile/utils/openshift_resource.py,sha256=XTFLkaWOjNbkOD5XmCwMGdc9gKbgtKg819pWNcQVfpc,26189
|
|
637
637
|
reconcile/utils/openssl.py,sha256=qdEdSmNXDgx_hhj2psEea6O12cmn3pb4GNhQJtI5l_E,399
|
|
638
638
|
reconcile/utils/output.py,sha256=Rcz9BWaUDLlEWov5NSUSVy5ucx2WKeKNlUddrDjIQtk,2242
|
|
639
639
|
reconcile/utils/pagerduty_api.py,sha256=kPMdegdnb9muL4PttbMVlOAbxMHltMPFLiUyQu6S7wo,7641
|
|
@@ -660,7 +660,7 @@ reconcile/utils/sqs_gateway.py,sha256=GoStXLTP75zBQIL0ntwVy1oHOquY3XHtadybzifLdX
|
|
|
660
660
|
reconcile/utils/state.py,sha256=kOI5ZorbJKWomQbnOql7uBuO7A0zQu54tUxUTZ2lEKE,16416
|
|
661
661
|
reconcile/utils/structs.py,sha256=P57POzpEntu8ZoZDnsOdni9qUuBDWknmw0iinznxXoY,386
|
|
662
662
|
reconcile/utils/terraform_client.py,sha256=CeTZCSEb0RBIQI4AUaAN5jhTZm5KRxjClgcQBU0OcLA,37766
|
|
663
|
-
reconcile/utils/terrascript_aws_client.py,sha256=
|
|
663
|
+
reconcile/utils/terrascript_aws_client.py,sha256=0f6JCniheItvXDVkyh0vkewIh3osxfmXc3Q3t-TWW_0,304274
|
|
664
664
|
reconcile/utils/three_way_diff_strategy.py,sha256=yDEbP3HWvDDVzo_8FEbcT0pA6lz72HviXZkh5wmzkkY,4837
|
|
665
665
|
reconcile/utils/throughput.py,sha256=KNDCVsCLSp89V4pO3sEUd7bJUuh6gNfsxsc_18rEv_Y,357
|
|
666
666
|
reconcile/utils/vault.py,sha256=pbeE0kkwJZAT4u0dgLfjJrc0suYSECHqikYUUR5n1m4,15477
|
|
@@ -699,8 +699,8 @@ reconcile/utils/jinja2/extensions.py,sha256=7K-uo6G2eCWa98MHT8fRPYIKCLQB_5D2keqQ
|
|
|
699
699
|
reconcile/utils/jinja2/filters.py,sha256=JfO_14APySBPidsMvHXG-8dULNPddZCE15Umjk_aSBk,4830
|
|
700
700
|
reconcile/utils/jinja2/utils.py,sha256=ScFapI-Qh9uUklMYoMSr_AKhzyMuMhF558RSUGBTaxE,9253
|
|
701
701
|
reconcile/utils/jobcontroller/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
702
|
-
reconcile/utils/jobcontroller/controller.py,sha256=
|
|
703
|
-
reconcile/utils/jobcontroller/models.py,sha256=
|
|
702
|
+
reconcile/utils/jobcontroller/controller.py,sha256=NBsmH8kKGrGIcQFtJI77kP2yYoYZiCmGY4AhbqBx1Es,15379
|
|
703
|
+
reconcile/utils/jobcontroller/models.py,sha256=okj1zGdharGTJYW-f1XyvmWfp4F2ESTkvhYvrmzSGGE,6936
|
|
704
704
|
reconcile/utils/membershipsources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
705
705
|
reconcile/utils/membershipsources/app_interface_resolver.py,sha256=MqDFvK3aXhmmMuMiIygC-onFVrrIopKHriaYJQ5jnuY,1988
|
|
706
706
|
reconcile/utils/membershipsources/models.py,sha256=yuEbG4HJ3NOEpSS9EH7OAx1U-uiRW-QmNMAZJe1Rb-U,1898
|
|
@@ -733,7 +733,7 @@ reconcile/utils/ocm/label_sources.py,sha256=ES_5VP4X6gsRxMFZ95WgbwE_HqqIUo_JRjHj
|
|
|
733
733
|
reconcile/utils/ocm/labels.py,sha256=CmAgaOEPiaUb4gLtKab9vNkSDJceuREPd4ApgGcIA1U,6240
|
|
734
734
|
reconcile/utils/ocm/manifests.py,sha256=Q6kgOeiAwLbJY_vO_BEW2oePvbLDZcMZk20YpJJGpOA,1195
|
|
735
735
|
reconcile/utils/ocm/ocm.py,sha256=1nBhA_h1SjTwCFF6aMMVRSDw0geg9vs0ul3WfnN2F_M,32748
|
|
736
|
-
reconcile/utils/ocm/products.py,sha256=
|
|
736
|
+
reconcile/utils/ocm/products.py,sha256=9KQd7KhjaIdoyO_br5wf40SVjxRNzrUtf6vTokbsIOM,26264
|
|
737
737
|
reconcile/utils/ocm/search_filters.py,sha256=7XWwAEHA_yam9xN7ktRWkRqKOaSa2MF1csfqeryQWb8,14753
|
|
738
738
|
reconcile/utils/ocm/service_log.py,sha256=7qrL5Mm_0Yk8dxC1YujQvHh-Z0HI_sXzUt4fuWBnwLU,2037
|
|
739
739
|
reconcile/utils/ocm/sre_capability_labels.py,sha256=nqh0imrYczNeeeC7ZNX3pEwuAIVkKLTKZf0YHSPZYpE,1537
|
|
@@ -800,7 +800,7 @@ tools/saas_promotion_state/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
|
|
|
800
800
|
tools/saas_promotion_state/saas_promotion_state.py,sha256=uQv2QJAmUXP1g2GPIH30WTlvL9soY6m9lefpZEVDM5w,3965
|
|
801
801
|
tools/sre_checkpoints/__init__.py,sha256=CDaDaywJnmRCLyl_NCcvxi-Zc0hTi_3OdwKiFOyS39I,145
|
|
802
802
|
tools/sre_checkpoints/util.py,sha256=KcYVfa3UmJHVP_ocgrKe8NkrO5IDB9aWEDydSokPcRk,975
|
|
803
|
-
qontract_reconcile-0.10.2.
|
|
804
|
-
qontract_reconcile-0.10.2.
|
|
805
|
-
qontract_reconcile-0.10.2.
|
|
806
|
-
qontract_reconcile-0.10.2.
|
|
803
|
+
qontract_reconcile-0.10.2.dev408.dist-info/METADATA,sha256=bpa0bqIpyhfe7HGg2o5adEJjqDdgbXC_aC3FLUJgEH4,24946
|
|
804
|
+
qontract_reconcile-0.10.2.dev408.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
805
|
+
qontract_reconcile-0.10.2.dev408.dist-info/entry_points.txt,sha256=5i9l54La3vQrDLAdwDKQWC0iG4sV9RRfOb1BpvzOWLc,698
|
|
806
|
+
qontract_reconcile-0.10.2.dev408.dist-info/RECORD,,
|
|
@@ -20,6 +20,7 @@ from reconcile.gql_definitions.automated_actions.instance import (
|
|
|
20
20
|
AutomatedActionExternalResourceFlushElastiCacheV1,
|
|
21
21
|
AutomatedActionExternalResourceRdsRebootV1,
|
|
22
22
|
AutomatedActionExternalResourceRdsSnapshotV1,
|
|
23
|
+
AutomatedActionOpenshiftTriggerCronjobV1,
|
|
23
24
|
AutomatedActionOpenshiftWorkloadDeleteV1,
|
|
24
25
|
AutomatedActionOpenshiftWorkloadRestartArgumentV1,
|
|
25
26
|
AutomatedActionOpenshiftWorkloadRestartV1,
|
|
@@ -205,6 +206,17 @@ class AutomatedActionsConfigIntegration(
|
|
|
205
206
|
"account": f"^{rds_snapshot_er.provisioner.name}$",
|
|
206
207
|
"identifier": rds_snapshot_arg.identifier,
|
|
207
208
|
})
|
|
209
|
+
case AutomatedActionOpenshiftTriggerCronjobV1():
|
|
210
|
+
parameters.extend(
|
|
211
|
+
{
|
|
212
|
+
# all parameter values are regexes in the OPA policy
|
|
213
|
+
# therefore, cluster and namespace must be fixed to the current strings
|
|
214
|
+
"cluster": f"^{arg.namespace.cluster.name}$",
|
|
215
|
+
"namespace": f"^{arg.namespace.name}$",
|
|
216
|
+
"cronjob": arg.cronjob,
|
|
217
|
+
}
|
|
218
|
+
for arg in action.openshift_trigger_cronjob_arguments
|
|
219
|
+
)
|
|
208
220
|
case AutomatedActionOpenshiftWorkloadDeleteV1():
|
|
209
221
|
parameters.extend(
|
|
210
222
|
{
|
reconcile/aws_ami_share.py
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import logging
|
|
2
|
+
import re
|
|
2
3
|
from collections.abc import (
|
|
3
|
-
Callable,
|
|
4
4
|
Iterable,
|
|
5
5
|
Mapping,
|
|
6
6
|
)
|
|
7
7
|
from typing import Any
|
|
8
8
|
|
|
9
9
|
from reconcile import queries
|
|
10
|
+
from reconcile.typed_queries.aws_account_tags import get_aws_account_tags
|
|
11
|
+
from reconcile.typed_queries.external_resources import get_settings
|
|
10
12
|
from reconcile.utils.aws_api import AWSApi
|
|
11
|
-
from reconcile.utils.defer import defer
|
|
12
13
|
|
|
13
14
|
QONTRACT_INTEGRATION = "aws-ami-share"
|
|
14
|
-
|
|
15
|
+
|
|
16
|
+
MANAGED_TAG = {"managed_by_integration": QONTRACT_INTEGRATION}
|
|
15
17
|
|
|
16
18
|
|
|
17
19
|
def filter_accounts(accounts: Iterable[dict[str, Any]]) -> list[dict[str, Any]]:
|
|
@@ -37,65 +39,70 @@ def get_region(
|
|
|
37
39
|
return region
|
|
38
40
|
|
|
39
41
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
def share_ami(
|
|
43
|
+
dry_run: bool,
|
|
44
|
+
src_account: Mapping[str, Any],
|
|
45
|
+
share: Mapping[str, Any],
|
|
46
|
+
default_tags: dict[str, str],
|
|
47
|
+
aws_api: AWSApi,
|
|
48
|
+
) -> None:
|
|
49
|
+
dst_account = share["account"]
|
|
50
|
+
regex = re.compile(share["regex"])
|
|
51
|
+
region = get_region(share, src_account, dst_account)
|
|
52
|
+
src_amis = aws_api.get_amis_details(src_account, src_account, regex, region)
|
|
53
|
+
dst_amis = aws_api.get_amis_details(dst_account, src_account, regex, region)
|
|
54
|
+
|
|
55
|
+
for ami_id, src_ami_tags in src_amis.items():
|
|
56
|
+
dst_ami_tags = dst_amis.get(ami_id)
|
|
57
|
+
if dst_ami_tags is None:
|
|
58
|
+
logging.info([
|
|
59
|
+
"share_ami",
|
|
60
|
+
src_account["name"],
|
|
61
|
+
dst_account["name"],
|
|
62
|
+
ami_id,
|
|
63
|
+
])
|
|
64
|
+
if not dry_run:
|
|
65
|
+
aws_api.share_ami(src_account, dst_account["uid"], ami_id, region)
|
|
66
|
+
dst_account_tags = default_tags | get_aws_account_tags(
|
|
67
|
+
dst_account.get("organization", None)
|
|
68
|
+
)
|
|
69
|
+
desired_tags = src_ami_tags | dst_account_tags | MANAGED_TAG
|
|
70
|
+
current_tags = dst_ami_tags or {}
|
|
71
|
+
|
|
72
|
+
if desired_tags != current_tags:
|
|
73
|
+
logging.info([
|
|
74
|
+
"tag_shared_ami",
|
|
75
|
+
dst_account["name"],
|
|
76
|
+
ami_id,
|
|
77
|
+
desired_tags,
|
|
78
|
+
])
|
|
79
|
+
if not dry_run:
|
|
80
|
+
aws_api.create_tags(dst_account, ami_id, desired_tags)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def run(dry_run: bool) -> None:
|
|
42
84
|
accounts = queries.get_aws_accounts(sharing=True)
|
|
43
85
|
sharing_accounts = filter_accounts(accounts)
|
|
44
86
|
settings = queries.get_app_interface_settings()
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
"share_ami",
|
|
68
|
-
src_account["name"],
|
|
69
|
-
dst_account["name"],
|
|
70
|
-
src_ami_id,
|
|
71
|
-
])
|
|
72
|
-
if not dry_run:
|
|
73
|
-
aws_api.share_ami(
|
|
74
|
-
src_account, dst_account["uid"], src_ami_id, region
|
|
75
|
-
)
|
|
76
|
-
# we assume an unshared ami does not have tags
|
|
77
|
-
found_dst_amis = [{"image_id": src_ami_id, "tags": []}]
|
|
78
|
-
|
|
79
|
-
dst_ami = found_dst_amis[0]
|
|
80
|
-
dst_ami_id = dst_ami["image_id"]
|
|
81
|
-
dst_ami_tags = dst_ami["tags"]
|
|
82
|
-
if MANAGED_TAG not in dst_ami_tags:
|
|
83
|
-
logging.info([
|
|
84
|
-
"tag_shared_ami",
|
|
85
|
-
dst_account["name"],
|
|
86
|
-
dst_ami_id,
|
|
87
|
-
MANAGED_TAG,
|
|
88
|
-
])
|
|
89
|
-
if not dry_run:
|
|
90
|
-
aws_api.create_tag(dst_account, dst_ami_id, MANAGED_TAG)
|
|
91
|
-
src_ami_tags = src_ami["tags"]
|
|
92
|
-
for src_tag in src_ami_tags:
|
|
93
|
-
if src_tag not in dst_ami_tags:
|
|
94
|
-
logging.info([
|
|
95
|
-
"tag_shared_ami",
|
|
96
|
-
dst_account["name"],
|
|
97
|
-
dst_ami_id,
|
|
98
|
-
src_tag,
|
|
99
|
-
])
|
|
100
|
-
if not dry_run:
|
|
101
|
-
aws_api.create_tag(dst_account, dst_ami_id, src_tag)
|
|
87
|
+
try:
|
|
88
|
+
default_tags = get_settings().default_tags
|
|
89
|
+
except ValueError:
|
|
90
|
+
# no external resources settings found
|
|
91
|
+
default_tags = {}
|
|
92
|
+
|
|
93
|
+
with AWSApi(
|
|
94
|
+
1,
|
|
95
|
+
sharing_accounts,
|
|
96
|
+
settings=settings,
|
|
97
|
+
init_users=False,
|
|
98
|
+
) as aws_api:
|
|
99
|
+
for src_account in sharing_accounts:
|
|
100
|
+
for share in src_account.get("sharing") or []:
|
|
101
|
+
if share["provider"] == "ami":
|
|
102
|
+
share_ami(
|
|
103
|
+
dry_run=dry_run,
|
|
104
|
+
src_account=src_account,
|
|
105
|
+
share=share,
|
|
106
|
+
default_tags=default_tags,
|
|
107
|
+
aws_api=aws_api,
|
|
108
|
+
)
|
|
@@ -140,7 +140,7 @@ def write_coverage_report_to_mr(
|
|
|
140
140
|
approver_reachability = set()
|
|
141
141
|
for d in change_decisions:
|
|
142
142
|
approvers = [
|
|
143
|
-
f"{cr.context} - {' '.join([f'@{a.org_username}' if a.tag_on_merge_requests else a.org_username for a in cr.approvers])}"
|
|
143
|
+
f"{cr.context} - {' '.join([f'@{a.org_username}' if (a.tag_on_merge_requests or len(cr.approvers) == 1) else a.org_username for a in cr.approvers])}"
|
|
144
144
|
for cr in d.change_responsibles
|
|
145
145
|
]
|
|
146
146
|
if d.coverable_by_fragment_decisions:
|
|
@@ -150,7 +150,10 @@ class EndpointsDiscoveryIntegration(
|
|
|
150
150
|
return []
|
|
151
151
|
|
|
152
152
|
routes = defaultdict(list)
|
|
153
|
-
for item in oc.get_items(
|
|
153
|
+
for item in oc.get_items(
|
|
154
|
+
kind="Route.route.openshift.io",
|
|
155
|
+
namespace=namespace.name,
|
|
156
|
+
):
|
|
154
157
|
tls = bool(item["spec"].get("tls"))
|
|
155
158
|
host = item["spec"]["host"]
|
|
156
159
|
# group all routes with the same hostname/tls
|
|
@@ -45,7 +45,7 @@ from reconcile.utils.secret_reader import SecretReaderBase, create_secret_reader
|
|
|
45
45
|
def fetch_current_state(
|
|
46
46
|
ri: ResourceInventory, oc: OCCli, cluster: str, namespace: str
|
|
47
47
|
) -> None:
|
|
48
|
-
for item in oc.get_items("Job", namespace=namespace):
|
|
48
|
+
for item in oc.get_items("Job.batch", namespace=namespace):
|
|
49
49
|
r = OpenshiftResource(item, QONTRACT_INTEGRATION, QONTRACT_INTEGRATION_VERSION)
|
|
50
50
|
ri.add_current(cluster, namespace, "Job", r.name, r)
|
|
51
51
|
|
|
@@ -70,10 +70,13 @@ class ReconciliationK8sJob(K8sJob, BaseModel, frozen=True):
|
|
|
70
70
|
dry_run_suffix: str = ""
|
|
71
71
|
|
|
72
72
|
def name_prefix(self) -> str:
|
|
73
|
+
identifier = (
|
|
74
|
+
f"{self.reconciliation.key.provider}-{self.reconciliation.key.identifier}"
|
|
75
|
+
)
|
|
73
76
|
if self.is_dry_run:
|
|
74
|
-
return f"er-dry-run-mr-{self.dry_run_suffix}"
|
|
77
|
+
return f"er-dry-run-mr-{self.dry_run_suffix}-{identifier}"
|
|
75
78
|
else:
|
|
76
|
-
return "er"
|
|
79
|
+
return f"er-{identifier}"
|
|
77
80
|
|
|
78
81
|
def unit_of_work_identity(self) -> Any:
|
|
79
82
|
return self.reconciliation.key
|
|
@@ -132,6 +132,21 @@ query AutomatedActionsInstances {
|
|
|
132
132
|
identifier
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
|
+
... on AutomatedActionOpenshiftTriggerCronjob_v1 {
|
|
136
|
+
openshift_trigger_cronjob_arguments: arguments {
|
|
137
|
+
namespace {
|
|
138
|
+
name
|
|
139
|
+
delete
|
|
140
|
+
cluster {
|
|
141
|
+
name
|
|
142
|
+
disable {
|
|
143
|
+
integrations
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
cronjob
|
|
148
|
+
}
|
|
149
|
+
}
|
|
135
150
|
... on AutomatedActionOpenshiftWorkloadDelete_v1 {
|
|
136
151
|
openshift_workload_delete_arguments: arguments {
|
|
137
152
|
namespace {
|
|
@@ -297,11 +312,35 @@ class DisableClusterAutomationsV1(ConfiguredBaseModel):
|
|
|
297
312
|
integrations: Optional[list[str]] = Field(..., alias="integrations")
|
|
298
313
|
|
|
299
314
|
|
|
300
|
-
class
|
|
315
|
+
class AutomatedActionOpenshiftTriggerCronjobArgumentV1_NamespaceV1_ClusterV1(ConfiguredBaseModel):
|
|
301
316
|
name: str = Field(..., alias="name")
|
|
302
317
|
disable: Optional[DisableClusterAutomationsV1] = Field(..., alias="disable")
|
|
303
318
|
|
|
304
319
|
|
|
320
|
+
class AutomatedActionOpenshiftTriggerCronjobArgumentV1_NamespaceV1(ConfiguredBaseModel):
|
|
321
|
+
name: str = Field(..., alias="name")
|
|
322
|
+
delete: Optional[bool] = Field(..., alias="delete")
|
|
323
|
+
cluster: AutomatedActionOpenshiftTriggerCronjobArgumentV1_NamespaceV1_ClusterV1 = Field(..., alias="cluster")
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
class AutomatedActionOpenshiftTriggerCronjobArgumentV1(ConfiguredBaseModel):
|
|
327
|
+
namespace: AutomatedActionOpenshiftTriggerCronjobArgumentV1_NamespaceV1 = Field(..., alias="namespace")
|
|
328
|
+
cronjob: str = Field(..., alias="cronjob")
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
class AutomatedActionOpenshiftTriggerCronjobV1(AutomatedActionV1):
|
|
332
|
+
openshift_trigger_cronjob_arguments: list[AutomatedActionOpenshiftTriggerCronjobArgumentV1] = Field(..., alias="openshift_trigger_cronjob_arguments")
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
class AutomatedActionOpenshiftWorkloadDeleteArgumentV1_NamespaceV1_ClusterV1_DisableClusterAutomationsV1(ConfiguredBaseModel):
|
|
336
|
+
integrations: Optional[list[str]] = Field(..., alias="integrations")
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
class AutomatedActionOpenshiftWorkloadDeleteArgumentV1_NamespaceV1_ClusterV1(ConfiguredBaseModel):
|
|
340
|
+
name: str = Field(..., alias="name")
|
|
341
|
+
disable: Optional[AutomatedActionOpenshiftWorkloadDeleteArgumentV1_NamespaceV1_ClusterV1_DisableClusterAutomationsV1] = Field(..., alias="disable")
|
|
342
|
+
|
|
343
|
+
|
|
305
344
|
class AutomatedActionOpenshiftWorkloadDeleteArgumentV1_NamespaceV1(ConfiguredBaseModel):
|
|
306
345
|
name: str = Field(..., alias="name")
|
|
307
346
|
delete: Optional[bool] = Field(..., alias="delete")
|
|
@@ -347,7 +386,7 @@ class AutomatedActionOpenshiftWorkloadRestartV1(AutomatedActionV1):
|
|
|
347
386
|
class AutomatedActionsInstanceV1(ConfiguredBaseModel):
|
|
348
387
|
name: str = Field(..., alias="name")
|
|
349
388
|
deployment: NamespaceV1 = Field(..., alias="deployment")
|
|
350
|
-
actions: Optional[list[Union[AutomatedActionActionListV1, AutomatedActionExternalResourceFlushElastiCacheV1, AutomatedActionExternalResourceRdsRebootV1, AutomatedActionExternalResourceRdsSnapshotV1, AutomatedActionOpenshiftWorkloadDeleteV1, AutomatedActionOpenshiftWorkloadRestartV1, AutomatedActionV1]]] = Field(..., alias="actions")
|
|
389
|
+
actions: Optional[list[Union[AutomatedActionActionListV1, AutomatedActionExternalResourceFlushElastiCacheV1, AutomatedActionExternalResourceRdsRebootV1, AutomatedActionExternalResourceRdsSnapshotV1, AutomatedActionOpenshiftTriggerCronjobV1, AutomatedActionOpenshiftWorkloadDeleteV1, AutomatedActionOpenshiftWorkloadRestartV1, AutomatedActionV1]]] = Field(..., alias="actions")
|
|
351
390
|
|
|
352
391
|
|
|
353
392
|
class AutomatedActionsInstancesQueryData(ConfiguredBaseModel):
|