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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qontract-reconcile
3
- Version: 0.10.2.dev299
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
@@ -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=uls0GlTVeSMTZtUGXpqDW8ovKqXV-6036AhmxYOmFbM,18923
113
- reconcile/terraform_users.py,sha256=F-OgRfVV6_MoSvL0oZBtbFtNVS4V48baOWN157IoGEE,10321
114
- reconcile/terraform_vpc_peerings.py,sha256=v1GPiluuPLwpQWrp1j5xT9_QuQw07F_Lj2uL3RX9PZE,27788
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=lZyJP6zaUbp1tqiwJ6HWDu1g0-6aU8L37eMY3U_179g,7085
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=jJN4kUVnrBkb39pHZ0lwt_0ZuIyrhjyzsL17pQuGwXo,2358826
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=2lpyy-QSfHPSTvV_zbnqzqUoFzVNl-CJDmoqd_zVSX4,2366
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=o0qUsPrFXs8GAbtgMXQmIJxc1mw5skSIzCcidE857g8,2460
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=TWsVBUeRLH3lUCf47sWWVgq4Rpkrq0i_eu2vkqQniP0,9619
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=M5UP7_tNWh2LEJ-fMp1SnrNECGHJ0z873tANJK1dpWc,6889
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=8pmcr0YTrW2QynenMCfaaXT4SV8SbH_eXx1OCyh0anA,8181
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=QVvhzhpChq_4Daf_5wE1qeZJr4thg3DDjJPn4bOPD4E,365
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=P0QX6F0oB8wYA08yiyzhYUiBtU57iIK_PsxbzKENbKM,6571
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=CNyU9mkSbt7FRANEhOOZpWJl7L-YliHhaxr898gmX8c,573
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=XNIf3PY4UCPNufP2Ul0UJj3fKlt5larBba-VTT-41Fg,2265
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=LcbLEg8WxfRqM6nW7NhcWN0YeqF7SQzxOgntmLs1SgY,352
660
- reconcile/utils/terraform_client.py,sha256=GoLbfs4d4YItNCeV3NZnrth4sD8ziNYgY2IszruRDpg,37303
661
- reconcile/utils/terrascript_aws_client.py,sha256=o5-K61gEbQN48IRfdHVDfgt0sW-sYN9WYho4ZZ7j7io,295917
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=iP4UWAe2LVhDo69mPPmgo9nQ7RxHD6_GS8MZe-aSiuM,344
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=fMzojq4aR_MWASp7QUWoyPOOgjqJoc_15uiJ3G7uRbw,14618
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=dWdKS9eHVuowFkTK4lgXJ723vS1y9giOMzePUKnHnDI,214
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=zEDbGr18ZeHNQwW8pUsr2JRjuXIPz--WAGJxZo9sv_Y,894
799
- qontract_reconcile-0.10.2.dev299.dist-info/METADATA,sha256=54Nao8mXsCO6eAMPlZPwsMC2JeDlPEBuT1Xgnk40mJk,24916
800
- qontract_reconcile-0.10.2.dev299.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
801
- qontract_reconcile-0.10.2.dev299.dist-info/entry_points.txt,sha256=5i9l54La3vQrDLAdwDKQWC0iG4sV9RRfOb1BpvzOWLc,698
802
- qontract_reconcile-0.10.2.dev299.dist-info/RECORD,,
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,,
@@ -58,10 +58,13 @@ fragment VPCRequest on VPCRequest_v1 {
58
58
  cidr_block {
59
59
  networkAddress
60
60
  }
61
+ vpc_tags
61
62
  subnets {
62
- private
63
+ private
63
64
  public
64
65
  availability_zones
66
+ private_subnet_tags
67
+ public_subnet_tags
65
68
  }
66
69
  }
67
70
 
@@ -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,
@@ -42,7 +42,7 @@ QONTRACT_INTEGRATION_VERSION = make_semver(0, 1, 0)
42
42
  PROVIDERS = ["prometheus-rule"]
43
43
 
44
44
  NAMESPACE_NAME = "openshift-customer-monitoring"
45
- DEFAULT_PROMTOOL_VERSION = "2.55.1"
45
+ DEFAULT_PROMTOOL_VERSION = "3.2.1"
46
46
 
47
47
 
48
48
  class TestContent(BaseModel):
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
 
@@ -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
- def get_tf_roles() -> list[dict[str, Any]]:
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: bool | None = None,
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 TerrascriptClient
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,
@@ -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
  """
@@ -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
@@ -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__(self, git_cli, ref="master", recursive=True):
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 get_owners(self):
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(owners):
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
 
@@ -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)
@@ -8,7 +8,7 @@ SHARDS = int(os.environ.get("SHARDS", "1"))
8
8
  SHARD_ID = int(os.environ.get("SHARD_ID", "0"))
9
9
 
10
10
 
11
- def is_in_shard(value):
11
+ def is_in_shard(value: str) -> bool:
12
12
  if SHARDS == 1:
13
13
  return True
14
14
 
@@ -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__(self, accounts, secret_reader: SecretReader):
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)
@@ -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