qontract-reconcile 0.10.2.dev299__py3-none-any.whl → 0.10.2.dev314__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.dev299.dist-info → qontract_reconcile-0.10.2.dev314.dist-info}/METADATA +1 -1
- {qontract_reconcile-0.10.2.dev299.dist-info → qontract_reconcile-0.10.2.dev314.dist-info}/RECORD +25 -25
- reconcile/gql_definitions/common/aws_vpc_requests.py +4 -1
- reconcile/gql_definitions/fragments/aws_vpc_request.py +3 -0
- reconcile/gql_definitions/introspection.json +36 -12
- reconcile/prometheus_rules_tester/integration.py +1 -1
- reconcile/rhidp/common.py +2 -0
- reconcile/terraform_tgw_attachments.py +1 -1
- reconcile/terraform_users.py +3 -1
- reconcile/terraform_vpc_peerings.py +1 -1
- reconcile/terraform_vpc_resources/integration.py +19 -1
- reconcile/utils/ocm/base.py +10 -0
- reconcile/utils/openssl.py +2 -2
- reconcile/utils/repo_owners.py +21 -29
- reconcile/utils/runtime/meta.py +2 -1
- reconcile/utils/sharding.py +1 -1
- reconcile/utils/sqs_gateway.py +14 -10
- reconcile/utils/structs.py +3 -3
- reconcile/utils/terraform_client.py +27 -25
- reconcile/utils/terrascript_aws_client.py +487 -372
- reconcile/utils/throughput.py +1 -1
- reconcile/vpc_peerings_validator.py +2 -2
- tools/sre_checkpoints/util.py +5 -3
- {qontract_reconcile-0.10.2.dev299.dist-info → qontract_reconcile-0.10.2.dev314.dist-info}/WHEEL +0 -0
- {qontract_reconcile-0.10.2.dev299.dist-info → qontract_reconcile-0.10.2.dev314.dist-info}/entry_points.txt +0 -0
{qontract_reconcile-0.10.2.dev299.dist-info → qontract_reconcile-0.10.2.dev314.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.dev314
|
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
|
{qontract_reconcile-0.10.2.dev299.dist-info → qontract_reconcile-0.10.2.dev314.dist-info}/RECORD
RENAMED
@@ -109,11 +109,11 @@ reconcile/terraform_cloudflare_resources.py,sha256=tK-BxQeNdZjf59deKd51Roz868e7U
|
|
109
109
|
reconcile/terraform_cloudflare_users.py,sha256=mlSYNktRetBvw8mi2TUSdKSZw0aQ821VeU6OQ1WcV3U,13516
|
110
110
|
reconcile/terraform_repo.py,sha256=vVJfaCV9775FGMMTHfoobaPetSlJMiQ4arNudL2pvh8,15607
|
111
111
|
reconcile/terraform_resources.py,sha256=AXO3_Ehcg3I6ao7qiKzXC4Mk6BqwMoNooXU50c2zSTA,19555
|
112
|
-
reconcile/terraform_tgw_attachments.py,sha256=
|
113
|
-
reconcile/terraform_users.py,sha256=
|
114
|
-
reconcile/terraform_vpc_peerings.py,sha256=
|
112
|
+
reconcile/terraform_tgw_attachments.py,sha256=P2HivCjT5AlyODy-fu1qAK5355nDEArE8E4NQlIlF7U,18933
|
113
|
+
reconcile/terraform_users.py,sha256=lzLco8t0_XQ4gWkZdvfOJIckDQpDUqTKqxGcT2P3W_k,10334
|
114
|
+
reconcile/terraform_vpc_peerings.py,sha256=rMotDHy3Fd5QTxrOGjCJ3f2vICk3fmxrKYVCIU8p_y4,27787
|
115
115
|
reconcile/vault_replication.py,sha256=trtbB-jDwca822J5I_s0zlwFtlyaiAtqgbPeqp7Cggc,17714
|
116
|
-
reconcile/vpc_peerings_validator.py,sha256=
|
116
|
+
reconcile/vpc_peerings_validator.py,sha256=_77eu6DSy6VjTE5mhV-sOIVOGIiBvDEEDCdwwRdrgVQ,7101
|
117
117
|
reconcile/aus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
118
118
|
reconcile/aus/advanced_upgrade_service.py,sha256=Cx-WthkvlcX58PrnnNeo_bQG17Xw3BGNu3f53Jc1VoA,23985
|
119
119
|
reconcile/aus/aus_label_source.py,sha256=o0S2f0qwcII_8nzhHZhRQ83gEZ1DrSXyO4xzSwLebuU,4382
|
@@ -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=iXV6SKgNQpvwFvnRTqJsXVPN70Pv4pFTrbNQ-nADp6Y,2359857
|
217
217
|
reconcile/gql_definitions/acs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
218
218
|
reconcile/gql_definitions/acs/acs_instances.py,sha256=L91WW9LbhJbBSrECqShQpFtjoBOsmNIYLRpMbx1io5o,2181
|
219
219
|
reconcile/gql_definitions/acs/acs_policies.py,sha256=Ygpfl2-VkYLSlJvHgp_dJBfb66K_Rwfdfpsa18w1v1s,4338
|
@@ -258,7 +258,7 @@ reconcile/gql_definitions/common/app_interface_state_settings.py,sha256=VXIK0Hmy
|
|
258
258
|
reconcile/gql_definitions/common/app_interface_vault_settings.py,sha256=w8quvdG0cSq71ZyJokPPp7MyMpoDb6-HLQ3o9JHVGRQ,1771
|
259
259
|
reconcile/gql_definitions/common/app_quay_repos_escalation_policies.py,sha256=ckdoGse7O5uAWdZdNinkWicA2EflUb5pe8jWEBtflE8,3236
|
260
260
|
reconcile/gql_definitions/common/apps.py,sha256=lC7uZjyHAvJXhCDPJJ-dQJInBJkUCNZoe129XMa67wo,1868
|
261
|
-
reconcile/gql_definitions/common/aws_vpc_requests.py,sha256=
|
261
|
+
reconcile/gql_definitions/common/aws_vpc_requests.py,sha256=_KhmxOfUhSWdUMGxFzrwlIq5mZHzNqvDBZv5Hgku8mU,2423
|
262
262
|
reconcile/gql_definitions/common/aws_vpcs.py,sha256=Dss9dQ3xagnz3Ltg1e9mtG2PAmQGBbUzKCmmzvuN28s,1892
|
263
263
|
reconcile/gql_definitions/common/clusters.py,sha256=j646LA-vlHbA131OrCF13g8rPPrBPWL3PLrvqWLZs58,21979
|
264
264
|
reconcile/gql_definitions/common/clusters_minimal.py,sha256=JYrJV_aStmryiiGKyiXhj47qpF_8KilCqy-d9CofBCo,4635
|
@@ -318,7 +318,7 @@ reconcile/gql_definitions/fragments/aws_account_managed.py,sha256=V_9pH0wVza2sPy
|
|
318
318
|
reconcile/gql_definitions/fragments/aws_account_sso.py,sha256=ITR3PLz4Iq1SiWAoYGWPDuHJnAmTyZ0QQqs2Zsi8pxA,979
|
319
319
|
reconcile/gql_definitions/fragments/aws_infra_management_account.py,sha256=uAmALVRF2gBM3p_Dmez_ew6KVAtetamwOPkRIPZAlGc,1254
|
320
320
|
reconcile/gql_definitions/fragments/aws_vpc.py,sha256=T2egTwi2Rb0IRBBmsyag8xKpu_m6GbIAy80fhZNZwk8,1434
|
321
|
-
reconcile/gql_definitions/fragments/aws_vpc_request.py,sha256=
|
321
|
+
reconcile/gql_definitions/fragments/aws_vpc_request.py,sha256=RJRNicxHzwrIqPUSjDvtIt9JGu9lov4n3xOVRx8AlVY,2682
|
322
322
|
reconcile/gql_definitions/fragments/aws_vpc_request_subnet.py,sha256=qaTFT8cGzEslw51nUeb45Nfnv6kFxUm4CWrRR3xfBvA,760
|
323
323
|
reconcile/gql_definitions/fragments/container_image_mirror.py,sha256=qyfQlnKUCzFEPgUJ9VGmDYFmiGHR7VZ_YJNd4KeoolM,968
|
324
324
|
reconcile/gql_definitions/fragments/deploy_resources.py,sha256=0u3xYqL5NpMf149BJLfPhHqAOWu06aLULdNk_2Mulxg,1089
|
@@ -456,9 +456,9 @@ reconcile/oum/models.py,sha256=teH0bJTCMTzbdbYD9CU4yXDuMr34ceLcM0KuoIPU8gI,1712
|
|
456
456
|
reconcile/oum/providers.py,sha256=lfG6d7YV-A4Lte45EMv1Gx4A346piJ_jAkrU5AHJZ_g,1834
|
457
457
|
reconcile/oum/standalone.py,sha256=EN5y1S-3DwUZYzSRqRMtf63mI2slvBHKiU9zOTjYvWM,7334
|
458
458
|
reconcile/prometheus_rules_tester/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
459
|
-
reconcile/prometheus_rules_tester/integration.py,sha256=
|
459
|
+
reconcile/prometheus_rules_tester/integration.py,sha256=qa1OrD1gCR1PUrHNFc2AL3J01SdBYfMOX8fHcOUh1T8,9618
|
460
460
|
reconcile/rhidp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
461
|
-
reconcile/rhidp/common.py,sha256=
|
461
|
+
reconcile/rhidp/common.py,sha256=MIOzjObdvDtZuLvrYBp2GhvPfRp6p-Lohbr_hgEsNYM,7025
|
462
462
|
reconcile/rhidp/metrics.py,sha256=Yp0GtpjhieEdru0qkG3osBTJiKUzg6CAjwPoFTQDnCg,417
|
463
463
|
reconcile/rhidp/ocm_oidc_idp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
464
464
|
reconcile/rhidp/ocm_oidc_idp/base.py,sha256=gcrQEmHQ2GF2MtSxBcxTRsK-I19rsfIn9NZvyx8ZbyQ,7133
|
@@ -518,7 +518,7 @@ reconcile/terraform_init/integration.py,sha256=pPi4YAjbEE8vDaaRizGf-d-PewqqSJmjc
|
|
518
518
|
reconcile/terraform_init/merge_request.py,sha256=3CYtgSd7Q9zjKg4wsDz437EPCRfGeZZ8fZ0Y-ChKXJY,1475
|
519
519
|
reconcile/terraform_init/merge_request_manager.py,sha256=TQmtHq4DH-xgyYvuRyGu7VEgjPU2Yjj-uexIy-L7i88,3098
|
520
520
|
reconcile/terraform_vpc_resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
521
|
-
reconcile/terraform_vpc_resources/integration.py,sha256=
|
521
|
+
reconcile/terraform_vpc_resources/integration.py,sha256=Gn98Gt1YqghnkxX2Bs6Q4GAT2H8KhRJsLFf-NnALs8o,8995
|
522
522
|
reconcile/terraform_vpc_resources/merge_request.py,sha256=loRymUigCIvaaT0s_NzktZchh-DGRQnCICdBSCAcFPY,1503
|
523
523
|
reconcile/terraform_vpc_resources/merge_request_manager.py,sha256=6jfwgbqXEFQlgLM6zmModpOkQX8wqddpoE0pZJL1Acc,3256
|
524
524
|
reconcile/typed_queries/__init__.py,sha256=rRk4CyslLsBr4vAh1pIPgt6s3P4R1M9NSEPLnyQgBpk,61
|
@@ -633,7 +633,7 @@ reconcile/utils/oc_filters.py,sha256=Tz3OwtbUaYKmxENFls5CtPVzkZDeFXknw53dJe-wbT8
|
|
633
633
|
reconcile/utils/oc_map.py,sha256=ougQ-Wlsa8ymoE_lPQ7g2LlpsUOsHVeRCLYW_6fjeWU,8976
|
634
634
|
reconcile/utils/ocm_base_client.py,sha256=t5kxhklEqOpenXPkXiwQIk8d3D7hIUndBm5qGusS0bc,6681
|
635
635
|
reconcile/utils/openshift_resource.py,sha256=Nbte4oCzxL27Hrt2vNs2ybV3X3pV4vGJEnErEsiA6UY,24810
|
636
|
-
reconcile/utils/openssl.py,sha256=
|
636
|
+
reconcile/utils/openssl.py,sha256=qdEdSmNXDgx_hhj2psEea6O12cmn3pb4GNhQJtI5l_E,399
|
637
637
|
reconcile/utils/output.py,sha256=wvsyf8NsFTaFHNkc8to75ta8f474Y4TMO4cHyAHEePk,2209
|
638
638
|
reconcile/utils/pagerduty_api.py,sha256=6Ae-KjcmA6Bf328UhTdQ2VwYjh4uFIW1NdZW6PUgT-c,7607
|
639
639
|
reconcile/utils/parse_dhms_duration.py,sha256=TONpLnec5gHeF7k815YNJpQyDjXhkxZIcv9s8ffbTSY,1840
|
@@ -644,23 +644,23 @@ reconcile/utils/promtool.py,sha256=YnqwMAzsQVGuBZ1j9zy3UcVPFQVJgBMLzQkxhK_KFkU,3
|
|
644
644
|
reconcile/utils/quay_api.py,sha256=ZWjfjzFnIsbKRDcdAnP9tWQezclf53I7VWZJ0gbF2kE,8260
|
645
645
|
reconcile/utils/quay_mirror.py,sha256=dpWCNv5lITwIk6Q9RkmqaQKHNk_JPy27UQEribJ7E-U,1324
|
646
646
|
reconcile/utils/raw_github_api.py,sha256=2WKtE8ABYYB9UGOAh9N_kLkksBWL3320Z2_scteZddI,2805
|
647
|
-
reconcile/utils/repo_owners.py,sha256=
|
647
|
+
reconcile/utils/repo_owners.py,sha256=c6Z-U5TkiRPvuhr_zYWvZG9HZGzoT-l-d2PJ33lGflE,6507
|
648
648
|
reconcile/utils/rest_api_base.py,sha256=MT7tp6CQO2S5aKfVOzw_hipWg7wAGoOqkm4qurI1hEU,4342
|
649
649
|
reconcile/utils/rhcsv2_certs.py,sha256=ZnlUlEI2k6UrljGarkm1ey0znMlQtjeZB7VEfCH1A64,2545
|
650
650
|
reconcile/utils/ruamel.py,sha256=FzL4_L0FnMOUZmgThrZSMJs5MTdXwiy-E9MZWfk8bh8,397
|
651
651
|
reconcile/utils/secret_reader.py,sha256=vCU-g7q1Fbd5qOUMn7TAeE5yWhlmXme0OzZgyxk7tkY,10306
|
652
652
|
reconcile/utils/semver_helper.py,sha256=-WfPOMSA2v1h7hT3PwVf-Htg7wOsoKlQC1JdmDX2Ars,1268
|
653
|
-
reconcile/utils/sharding.py,sha256=
|
653
|
+
reconcile/utils/sharding.py,sha256=_0AsDQ_fi9lYjI8MJABP1FaMjJQ3L93xBUDWx5e3DDw,586
|
654
654
|
reconcile/utils/slack_api.py,sha256=fcqdi9cKRpibT5FlaeOY5iBQ3Dnni55u1Va9HcQC3Ls,17863
|
655
655
|
reconcile/utils/slo_document_manager.py,sha256=YqiCYA_kRq5_oNc_VTYipjbph4k0XHDcjwbbcdaW1ag,9563
|
656
656
|
reconcile/utils/smtp_client.py,sha256=0xefB4I9E5eBB-FlxFJYjvz3Kvuqi_K3Ma_Wk0NAQKM,2779
|
657
|
-
reconcile/utils/sqs_gateway.py,sha256=
|
657
|
+
reconcile/utils/sqs_gateway.py,sha256=x0dGIJeuMTsIKhHyosVPqi_POX0IJ9OWVqAHRa55dxI,2551
|
658
658
|
reconcile/utils/state.py,sha256=vCHYIfrWLfPyIWEHSaADWlc4OqhwcOiqM3Egqvw-lfo,16372
|
659
|
-
reconcile/utils/structs.py,sha256=
|
660
|
-
reconcile/utils/terraform_client.py,sha256=
|
661
|
-
reconcile/utils/terrascript_aws_client.py,sha256=
|
659
|
+
reconcile/utils/structs.py,sha256=P57POzpEntu8ZoZDnsOdni9qUuBDWknmw0iinznxXoY,386
|
660
|
+
reconcile/utils/terraform_client.py,sha256=zF_F31WzDA3fjNPj_Jl6mQJMfI3wEQ0gsurtrjqh4Ds,37684
|
661
|
+
reconcile/utils/terrascript_aws_client.py,sha256=KxraVMhv_RcolHthAxucQeb3x0zFD2CCk3gVMjQ_ero,302090
|
662
662
|
reconcile/utils/three_way_diff_strategy.py,sha256=oQcHXd9LVhirJfoaOBoHUYuZVGfyL2voKr6KVI34zZE,4833
|
663
|
-
reconcile/utils/throughput.py,sha256=
|
663
|
+
reconcile/utils/throughput.py,sha256=KNDCVsCLSp89V4pO3sEUd7bJUuh6gNfsxsc_18rEv_Y,357
|
664
664
|
reconcile/utils/vault.py,sha256=6V15LByFghp-U3k0N4lum6V7qt2EAlRfcAxjy5e-FAU,15146
|
665
665
|
reconcile/utils/vcs.py,sha256=2bDk8oYnCP7QMITwOG63LUTzDgqQPEao6trF8gQKtmI,10294
|
666
666
|
reconcile/utils/acs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -721,7 +721,7 @@ reconcile/utils/mr/update_access_report_base.py,sha256=LOXTIonpfxXrvZI9nPqkszW3O
|
|
721
721
|
reconcile/utils/mr/user_maintenance.py,sha256=OC9-3YkpXsYKZGsdOdx-NLq7AkjgrhDR2JL7hov7BV8,5669
|
722
722
|
reconcile/utils/ocm/__init__.py,sha256=Y-bp8GomMpyCo0tFW6kJ78-ZG1UIupYRtBzbMWU0kwM,798
|
723
723
|
reconcile/utils/ocm/addons.py,sha256=_LDdJ-gapM3s5exKlIUt-MlXZTAUoHezbYBU0QmvfWQ,7335
|
724
|
-
reconcile/utils/ocm/base.py,sha256=
|
724
|
+
reconcile/utils/ocm/base.py,sha256=sy8mD9srj5dJjRIk8u8RRmj_D7h4MnpxtZwm4S4BWf8,14883
|
725
725
|
reconcile/utils/ocm/cluster_groups.py,sha256=F8oqVqN_4QUnGL0K61zZhoYIzJeP57EcmZpwmoV0mr4,1751
|
726
726
|
reconcile/utils/ocm/clusters.py,sha256=ev-sT247P3qFs9wzxOs_xFj1vKGpdRYm4INgxTR3Fb0,7792
|
727
727
|
reconcile/utils/ocm/identity_providers.py,sha256=dKed09N8iWmn39tI_MpwgVe47x23eLsknGbjMUxtwr4,2175
|
@@ -744,7 +744,7 @@ reconcile/utils/runtime/__init__.py,sha256=sfk92MGfsBh9tKYHl_FH17NdEsrGBwgDFTb7K
|
|
744
744
|
reconcile/utils/runtime/desired_state_diff.py,sha256=Bw4zqel-klXCMZGqD1gyh8zkFq4h5qzv8rJn7K6WTXs,8132
|
745
745
|
reconcile/utils/runtime/environment.py,sha256=h-CFKLK1qRl_gfOVIUwjqVNOmukIPzUG7AiqpJGrjHA,2038
|
746
746
|
reconcile/utils/runtime/integration.py,sha256=I74KlnsNKd7Hf8rBRug6blXkGKidSDQEjqHRLAfgTXI,10973
|
747
|
-
reconcile/utils/runtime/meta.py,sha256=
|
747
|
+
reconcile/utils/runtime/meta.py,sha256=M_EOxrb0KhQA4TwpHekbog2jOZqaBPVTIijXyRuMjn0,255
|
748
748
|
reconcile/utils/runtime/runner.py,sha256=OGT57aCwspAjdjGXtpbQnTmJeeWnRh9a2N73TLp4jnM,7880
|
749
749
|
reconcile/utils/runtime/sharding.py,sha256=r0ieUtNed7NvknSw6qQrCkKpVXE1shuHGnfFcnpA_k4,16142
|
750
750
|
reconcile/utils/saasherder/__init__.py,sha256=3U8plqMAPRE1kjwZ5YnIsYsggTf4_gS7flRUEuXVBAs,343
|
@@ -795,8 +795,8 @@ tools/saas_metrics_exporter/commit_distance/metrics.py,sha256=5-y6n-sGACAS3eJ5nd
|
|
795
795
|
tools/saas_promotion_state/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
796
796
|
tools/saas_promotion_state/saas_promotion_state.py,sha256=uQv2QJAmUXP1g2GPIH30WTlvL9soY6m9lefpZEVDM5w,3965
|
797
797
|
tools/sre_checkpoints/__init__.py,sha256=CDaDaywJnmRCLyl_NCcvxi-Zc0hTi_3OdwKiFOyS39I,145
|
798
|
-
tools/sre_checkpoints/util.py,sha256=
|
799
|
-
qontract_reconcile-0.10.2.
|
800
|
-
qontract_reconcile-0.10.2.
|
801
|
-
qontract_reconcile-0.10.2.
|
802
|
-
qontract_reconcile-0.10.2.
|
798
|
+
tools/sre_checkpoints/util.py,sha256=KcYVfa3UmJHVP_ocgrKe8NkrO5IDB9aWEDydSokPcRk,975
|
799
|
+
qontract_reconcile-0.10.2.dev314.dist-info/METADATA,sha256=FQlklTqmyArlTeakJ4eRZC7EB_SBoTf-tZy1jMd9EAk,24916
|
800
|
+
qontract_reconcile-0.10.2.dev314.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
801
|
+
qontract_reconcile-0.10.2.dev314.dist-info/entry_points.txt,sha256=5i9l54La3vQrDLAdwDKQWC0iG4sV9RRfOb1BpvzOWLc,698
|
802
|
+
qontract_reconcile-0.10.2.dev314.dist-info/RECORD,,
|
@@ -54,6 +54,8 @@ class VPCRequestSubnetsListsV1(ConfiguredBaseModel):
|
|
54
54
|
private: Optional[list[str]] = Field(..., alias="private")
|
55
55
|
public: Optional[list[str]] = Field(..., alias="public")
|
56
56
|
availability_zones: Optional[list[str]] = Field(..., alias="availability_zones")
|
57
|
+
private_subnet_tags: Optional[Json] = Field(..., alias="private_subnet_tags")
|
58
|
+
public_subnet_tags: Optional[Json] = Field(..., alias="public_subnet_tags")
|
57
59
|
|
58
60
|
|
59
61
|
class VPCRequest(ConfiguredBaseModel):
|
@@ -62,4 +64,5 @@ class VPCRequest(ConfiguredBaseModel):
|
|
62
64
|
account: AWSAccountV1 = Field(..., alias="account")
|
63
65
|
region: str = Field(..., alias="region")
|
64
66
|
cidr_block: NetworkV1 = Field(..., alias="cidr_block")
|
67
|
+
vpc_tags: Optional[Json] = Field(..., alias="vpc_tags")
|
65
68
|
subnets: Optional[VPCRequestSubnetsListsV1] = Field(..., alias="subnets")
|
@@ -10948,18 +10948,6 @@
|
|
10948
10948
|
"isDeprecated": false,
|
10949
10949
|
"deprecationReason": null
|
10950
10950
|
},
|
10951
|
-
{
|
10952
|
-
"name": "slack_username",
|
10953
|
-
"description": null,
|
10954
|
-
"args": [],
|
10955
|
-
"type": {
|
10956
|
-
"kind": "SCALAR",
|
10957
|
-
"name": "String",
|
10958
|
-
"ofType": null
|
10959
|
-
},
|
10960
|
-
"isDeprecated": false,
|
10961
|
-
"deprecationReason": null
|
10962
|
-
},
|
10963
10951
|
{
|
10964
10952
|
"name": "pagerduty_username",
|
10965
10953
|
"description": null,
|
@@ -27860,6 +27848,18 @@
|
|
27860
27848
|
},
|
27861
27849
|
"isDeprecated": false,
|
27862
27850
|
"deprecationReason": null
|
27851
|
+
},
|
27852
|
+
{
|
27853
|
+
"name": "vpc_tags",
|
27854
|
+
"description": null,
|
27855
|
+
"args": [],
|
27856
|
+
"type": {
|
27857
|
+
"kind": "SCALAR",
|
27858
|
+
"name": "JSON",
|
27859
|
+
"ofType": null
|
27860
|
+
},
|
27861
|
+
"isDeprecated": false,
|
27862
|
+
"deprecationReason": null
|
27863
27863
|
}
|
27864
27864
|
],
|
27865
27865
|
"inputFields": null,
|
@@ -28089,6 +28089,30 @@
|
|
28089
28089
|
},
|
28090
28090
|
"isDeprecated": false,
|
28091
28091
|
"deprecationReason": null
|
28092
|
+
},
|
28093
|
+
{
|
28094
|
+
"name": "private_subnet_tags",
|
28095
|
+
"description": null,
|
28096
|
+
"args": [],
|
28097
|
+
"type": {
|
28098
|
+
"kind": "SCALAR",
|
28099
|
+
"name": "JSON",
|
28100
|
+
"ofType": null
|
28101
|
+
},
|
28102
|
+
"isDeprecated": false,
|
28103
|
+
"deprecationReason": null
|
28104
|
+
},
|
28105
|
+
{
|
28106
|
+
"name": "public_subnet_tags",
|
28107
|
+
"description": null,
|
28108
|
+
"args": [],
|
28109
|
+
"type": {
|
28110
|
+
"kind": "SCALAR",
|
28111
|
+
"name": "JSON",
|
28112
|
+
"ofType": null
|
28113
|
+
},
|
28114
|
+
"isDeprecated": false,
|
28115
|
+
"deprecationReason": null
|
28092
28116
|
}
|
28093
28117
|
],
|
28094
28118
|
"inputFields": null,
|
reconcile/rhidp/common.py
CHANGED
@@ -140,6 +140,8 @@ def build_cluster_objects(
|
|
140
140
|
for cluster in cluster_details
|
141
141
|
# we can't calculate the redirect url w/o a console url
|
142
142
|
if cluster.ocm_cluster.console
|
143
|
+
# we can't configure an identity provider if external auth is enabled
|
144
|
+
and not cluster.ocm_cluster.external_auth_enabled
|
143
145
|
]
|
144
146
|
|
145
147
|
|
@@ -93,7 +93,7 @@ class Accepter(BaseModel):
|
|
93
93
|
region: str
|
94
94
|
vpc_id: str | None
|
95
95
|
route_table_ids: list[str] | None
|
96
|
-
subnets_id_az: list[dict] | None
|
96
|
+
subnets_id_az: list[dict[str, str]] | None
|
97
97
|
account: ClusterAccountProviderInfo
|
98
98
|
api_security_group_id: str | None
|
99
99
|
|
reconcile/terraform_users.py
CHANGED
@@ -81,8 +81,10 @@ QONTRACT_INTEGRATION = "terraform_users"
|
|
81
81
|
QONTRACT_INTEGRATION_VERSION = make_semver(0, 4, 2)
|
82
82
|
QONTRACT_TF_PREFIX = "qrtf"
|
83
83
|
|
84
|
+
Role = dict[str, Any]
|
84
85
|
|
85
|
-
|
86
|
+
|
87
|
+
def get_tf_roles() -> list[Role]:
|
86
88
|
gqlapi = gql.get_api()
|
87
89
|
roles: list[dict] = expiration.filter(gqlapi.query(TF_QUERY)["roles"])
|
88
90
|
return [
|
@@ -565,7 +565,7 @@ def build_desired_state_vpc(
|
|
565
565
|
@defer
|
566
566
|
def run(
|
567
567
|
dry_run: bool,
|
568
|
-
print_to_file:
|
568
|
+
print_to_file: str | None = None,
|
569
569
|
enable_deletion: bool = False,
|
570
570
|
thread_pool_size: int = DEFAULT_THREAD_POOL_SIZE,
|
571
571
|
account_name: str | None = None,
|
@@ -31,7 +31,11 @@ from reconcile.utils.runtime.integration import (
|
|
31
31
|
from reconcile.utils.secret_reader import create_secret_reader
|
32
32
|
from reconcile.utils.semver_helper import make_semver
|
33
33
|
from reconcile.utils.terraform_client import TerraformClient
|
34
|
-
from reconcile.utils.terrascript_aws_client import
|
34
|
+
from reconcile.utils.terrascript_aws_client import (
|
35
|
+
VPC_REQUEST_DEFAULT_PRIVATE_SUBNET_TAGS,
|
36
|
+
VPC_REQUEST_DEFAULT_PUBLIC_SUBNET_TAGS,
|
37
|
+
TerrascriptClient,
|
38
|
+
)
|
35
39
|
from reconcile.utils.vcs import VCS
|
36
40
|
|
37
41
|
QONTRACT_INTEGRATION = "terraform_vpc_resources"
|
@@ -90,14 +94,28 @@ class TerraformVpcResources(QontractReconcileIntegration[TerraformVpcResourcesPa
|
|
90
94
|
f"{request.identifier}-public_subnets", {}
|
91
95
|
).get("value", [])
|
92
96
|
|
97
|
+
if request.subnets:
|
98
|
+
private_subnet_tags = VPC_REQUEST_DEFAULT_PRIVATE_SUBNET_TAGS | (
|
99
|
+
request.subnets.private_subnet_tags or {}
|
100
|
+
)
|
101
|
+
public_subnet_tags = VPC_REQUEST_DEFAULT_PUBLIC_SUBNET_TAGS | (
|
102
|
+
request.subnets.public_subnet_tags or {}
|
103
|
+
)
|
104
|
+
else:
|
105
|
+
private_subnet_tags = VPC_REQUEST_DEFAULT_PRIVATE_SUBNET_TAGS
|
106
|
+
public_subnet_tags = VPC_REQUEST_DEFAULT_PUBLIC_SUBNET_TAGS
|
107
|
+
|
93
108
|
values = {
|
94
109
|
"static": {
|
95
110
|
"vpc_id": outputs_per_account.get(
|
96
111
|
f"{request.identifier}-vpc_id", {}
|
97
112
|
).get("value"),
|
113
|
+
"vpc_tags": request.vpc_tags or {},
|
98
114
|
"subnets": {
|
99
115
|
"private": private_subnets,
|
100
116
|
"public": public_subnets,
|
117
|
+
"private_subnet_tags": private_subnet_tags,
|
118
|
+
"public_subnet_tags": public_subnet_tags,
|
101
119
|
},
|
102
120
|
"account_name": request.account.name,
|
103
121
|
"region": request.region,
|
reconcile/utils/ocm/base.py
CHANGED
@@ -215,6 +215,10 @@ class OCMExternalConfiguration(BaseModel):
|
|
215
215
|
syncsets: dict
|
216
216
|
|
217
217
|
|
218
|
+
class OCMExternalAuthConfig(BaseModel):
|
219
|
+
enabled: bool
|
220
|
+
|
221
|
+
|
218
222
|
PRODUCT_ID_OSD = "osd"
|
219
223
|
PRODUCT_ID_ROSA = "rosa"
|
220
224
|
|
@@ -274,6 +278,8 @@ class OCMCluster(BaseModel):
|
|
274
278
|
|
275
279
|
external_configuration: OCMExternalConfiguration | None
|
276
280
|
|
281
|
+
external_auth_config: OCMExternalAuthConfig | None
|
282
|
+
|
277
283
|
def minor_version(self) -> str:
|
278
284
|
version_info = parse_semver(self.version.raw_id)
|
279
285
|
return f"{version_info.major}.{version_info.minor}"
|
@@ -315,6 +321,10 @@ class OCMCluster(BaseModel):
|
|
315
321
|
def base_domain(self) -> str | None:
|
316
322
|
return self.dns.base_domain if self.dns else None
|
317
323
|
|
324
|
+
@property
|
325
|
+
def external_auth_enabled(self) -> bool:
|
326
|
+
return self.external_auth_config.enabled if self.external_auth_config else False
|
327
|
+
|
318
328
|
|
319
329
|
class OCMLabel(BaseModel):
|
320
330
|
"""
|
reconcile/utils/openssl.py
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
from OpenSSL import crypto
|
2
2
|
|
3
3
|
|
4
|
-
def certificate_matches_host(certificate, host):
|
4
|
+
def certificate_matches_host(certificate: bytes, host: str) -> bool:
|
5
5
|
common_name = get_certificate_common_name(certificate)
|
6
6
|
return host.endswith(common_name.replace("*.", ""))
|
7
7
|
|
8
8
|
|
9
|
-
def get_certificate_common_name(certificate):
|
9
|
+
def get_certificate_common_name(certificate: bytes) -> str:
|
10
10
|
cert = crypto.load_certificate(crypto.FILETYPE_PEM, certificate)
|
11
11
|
subject = cert.get_subject()
|
12
12
|
return subject.CN
|
reconcile/utils/repo_owners.py
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
import logging
|
2
2
|
import os
|
3
3
|
import pathlib
|
4
|
+
from collections.abc import Iterable, Mapping
|
4
5
|
|
5
6
|
from ruamel import yaml
|
6
7
|
|
8
|
+
from reconcile.utils.github_api import GithubRepositoryApi
|
9
|
+
from reconcile.utils.gitlab_api import GitLabApi
|
10
|
+
|
7
11
|
_LOG = logging.getLogger(__name__)
|
8
12
|
|
9
13
|
|
@@ -12,38 +16,24 @@ class RepoOwners:
|
|
12
16
|
Abstracts the owners of a repository with per-path granularity.
|
13
17
|
"""
|
14
18
|
|
15
|
-
def __init__(
|
19
|
+
def __init__(
|
20
|
+
self,
|
21
|
+
git_cli: GitLabApi | GithubRepositoryApi,
|
22
|
+
ref: str = "master",
|
23
|
+
recursive: bool = True,
|
24
|
+
) -> None:
|
16
25
|
self._git_cli = git_cli
|
17
26
|
self._ref = ref
|
18
|
-
self._owners_map = None
|
27
|
+
self._owners_map: dict[str, dict[str, set[str]]] | None = None
|
19
28
|
self._recursive = recursive
|
20
29
|
|
21
30
|
@property
|
22
|
-
def owners_map(self):
|
31
|
+
def owners_map(self) -> dict[str, dict[str, set[str]]]:
|
23
32
|
if self._owners_map is None:
|
24
33
|
self._owners_map = self._get_owners_map()
|
25
34
|
return self._owners_map
|
26
35
|
|
27
|
-
def
|
28
|
-
"""
|
29
|
-
Gets all the owners of the repository.
|
30
|
-
|
31
|
-
:return: the repository owners
|
32
|
-
:rtype: dict
|
33
|
-
"""
|
34
|
-
repo_owners = {"approvers": set(), "reviewers": set()}
|
35
|
-
|
36
|
-
if "." in self.owners_map:
|
37
|
-
repo_owners["approvers"].update(self.owners_map["."]["approvers"])
|
38
|
-
repo_owners["reviewers"].update(self.owners_map["."]["reviewers"])
|
39
|
-
|
40
|
-
for owners in self.owners_map.values():
|
41
|
-
repo_owners["approvers"].update(owners["approvers"])
|
42
|
-
repo_owners["reviewers"].update(owners["reviewers"])
|
43
|
-
|
44
|
-
return repo_owners
|
45
|
-
|
46
|
-
def get_root_owners(self):
|
36
|
+
def get_root_owners(self) -> dict[str, list[str]]:
|
47
37
|
"""
|
48
38
|
Gets all the owners defined in the repository root.
|
49
39
|
|
@@ -56,7 +46,7 @@ class RepoOwners:
|
|
56
46
|
|
57
47
|
return {"approvers": [], "reviewers": []}
|
58
48
|
|
59
|
-
def get_path_owners(self, path):
|
49
|
+
def get_path_owners(self, path: str) -> dict[str, list[str]]:
|
60
50
|
"""
|
61
51
|
Gets all the owners of a given path, no matter in which
|
62
52
|
level of the filesystem tree the owner was specified.
|
@@ -67,7 +57,7 @@ class RepoOwners:
|
|
67
57
|
:return: the path owners
|
68
58
|
:rtype: dict
|
69
59
|
"""
|
70
|
-
path_owners = {"approvers": set(), "reviewers": set()}
|
60
|
+
path_owners: dict[str, set[str]] = {"approvers": set(), "reviewers": set()}
|
71
61
|
|
72
62
|
if "." in self.owners_map:
|
73
63
|
path_owners["approvers"].update(self.owners_map["."]["approvers"])
|
@@ -80,7 +70,7 @@ class RepoOwners:
|
|
80
70
|
|
81
71
|
return self._set_to_sorted_list(path_owners)
|
82
72
|
|
83
|
-
def get_path_closest_owners(self, path):
|
73
|
+
def get_path_closest_owners(self, path: str) -> dict[str, list[str]]:
|
84
74
|
"""
|
85
75
|
Gets all closest owners of a given path, no matter in which
|
86
76
|
level of the filesystem tree the owner was specified.
|
@@ -108,7 +98,7 @@ class RepoOwners:
|
|
108
98
|
|
109
99
|
return {"approvers": [], "reviewers": []}
|
110
100
|
|
111
|
-
def _get_owners_map(self):
|
101
|
+
def _get_owners_map(self) -> dict[str, dict[str, set[str]]]:
|
112
102
|
"""
|
113
103
|
Maps all the OWNERS files content to their respective
|
114
104
|
owned directory.
|
@@ -173,7 +163,7 @@ class RepoOwners:
|
|
173
163
|
}
|
174
164
|
return owners_map
|
175
165
|
|
176
|
-
def _get_aliases(self):
|
166
|
+
def _get_aliases(self) -> dict[str, list[str]] | None:
|
177
167
|
"""
|
178
168
|
Retrieves the approvers aliases from the OWNERS_ALIASES file.
|
179
169
|
|
@@ -191,7 +181,9 @@ class RepoOwners:
|
|
191
181
|
return aliases["aliases"]
|
192
182
|
|
193
183
|
@staticmethod
|
194
|
-
def _set_to_sorted_list(
|
184
|
+
def _set_to_sorted_list(
|
185
|
+
owners: Mapping[str, Iterable[str]],
|
186
|
+
) -> dict[str, list[str]]:
|
195
187
|
approvers = owners["approvers"]
|
196
188
|
sorted_approvers = sorted(approvers) if approvers else []
|
197
189
|
|
reconcile/utils/runtime/meta.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import dataclasses
|
2
2
|
from dataclasses import dataclass
|
3
|
+
from typing import Any
|
3
4
|
|
4
5
|
|
5
6
|
@dataclass
|
@@ -8,5 +9,5 @@ class IntegrationMeta:
|
|
8
9
|
args: list[str]
|
9
10
|
short_help: str | None
|
10
11
|
|
11
|
-
def to_dict(self):
|
12
|
+
def to_dict(self) -> dict[str, Any]:
|
12
13
|
return dataclasses.asdict(self)
|
reconcile/utils/sharding.py
CHANGED
reconcile/utils/sqs_gateway.py
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
import json
|
2
2
|
import os
|
3
|
+
from collections.abc import Iterable, Mapping
|
4
|
+
from typing import Any, Self
|
3
5
|
|
4
6
|
from reconcile.utils.aws_api import AWSApi
|
5
7
|
from reconcile.utils.secret_reader import SecretReader
|
@@ -12,7 +14,9 @@ class SQSGatewayInitError(Exception):
|
|
12
14
|
class SQSGateway:
|
13
15
|
"""Wrapper around SQS AWS SDK"""
|
14
16
|
|
15
|
-
def __init__(
|
17
|
+
def __init__(
|
18
|
+
self, accounts: Iterable[Mapping[str, Any]], secret_reader: SecretReader
|
19
|
+
) -> None:
|
16
20
|
queue_url = os.environ.get("gitlab_pr_submitter_queue_url") # noqa: SIM112
|
17
21
|
if not queue_url:
|
18
22
|
raise SQSGatewayInitError(
|
@@ -30,17 +34,17 @@ class SQSGateway:
|
|
30
34
|
self.sqs = self._aws_api.get_session_client(session, "sqs")
|
31
35
|
self.queue_url = queue_url
|
32
36
|
|
33
|
-
def __enter__(self):
|
37
|
+
def __enter__(self) -> Self:
|
34
38
|
return self
|
35
39
|
|
36
|
-
def __exit__(self, *ext):
|
40
|
+
def __exit__(self, *ext: Any) -> None:
|
37
41
|
self.cleanup()
|
38
42
|
|
39
|
-
def cleanup(self):
|
43
|
+
def cleanup(self) -> None:
|
40
44
|
self._aws_api.cleanup()
|
41
45
|
|
42
46
|
@staticmethod
|
43
|
-
def get_queue_account(accounts, queue_url):
|
47
|
+
def get_queue_account(accounts: Iterable[Mapping[str, Any]], queue_url: str) -> str:
|
44
48
|
queue_account_uid = queue_url.split("/")[3]
|
45
49
|
queue_account_name = [
|
46
50
|
a["name"] for a in accounts if a["uid"] == queue_account_uid
|
@@ -49,14 +53,14 @@ class SQSGateway:
|
|
49
53
|
raise SQSGatewayInitError(f"account uid not found: {queue_account_uid}")
|
50
54
|
return queue_account_name[0]
|
51
55
|
|
52
|
-
def send_message(self, body):
|
56
|
+
def send_message(self, body: Mapping[str, Any]) -> None:
|
53
57
|
self.sqs.send_message(QueueUrl=self.queue_url, MessageBody=json.dumps(body))
|
54
58
|
|
55
59
|
def receive_messages(
|
56
60
|
self,
|
57
|
-
visibility_timeout=30,
|
58
|
-
wait_time_seconds=20,
|
59
|
-
):
|
61
|
+
visibility_timeout: int = 30,
|
62
|
+
wait_time_seconds: int = 20,
|
63
|
+
) -> list[tuple[str, dict[str, Any]]]:
|
60
64
|
messages = self.sqs.receive_message(
|
61
65
|
QueueUrl=self.queue_url,
|
62
66
|
VisibilityTimeout=visibility_timeout,
|
@@ -64,5 +68,5 @@ class SQSGateway:
|
|
64
68
|
).get("Messages", [])
|
65
69
|
return [(m["ReceiptHandle"], json.loads(m["Body"])) for m in messages]
|
66
70
|
|
67
|
-
def delete_message(self, receipt_handle):
|
71
|
+
def delete_message(self, receipt_handle: str) -> None:
|
68
72
|
self.sqs.delete_message(QueueUrl=self.queue_url, ReceiptHandle=receipt_handle)
|
reconcile/utils/structs.py
CHANGED
@@ -5,12 +5,12 @@ from pydantic.dataclasses import dataclass
|
|
5
5
|
class CommandExecutionResult:
|
6
6
|
"""This class represents a command execution result"""
|
7
7
|
|
8
|
-
def __init__(self, is_ok, message):
|
8
|
+
def __init__(self, is_ok: bool, message: str) -> None:
|
9
9
|
self.is_ok = is_ok
|
10
10
|
self.message = message
|
11
11
|
|
12
|
-
def __str__(self):
|
12
|
+
def __str__(self) -> str:
|
13
13
|
return str(self.message)
|
14
14
|
|
15
|
-
def __bool__(self):
|
15
|
+
def __bool__(self) -> bool:
|
16
16
|
return self.is_ok
|