qontract-reconcile 0.10.2.dev57__py3-none-any.whl → 0.10.2.dev58__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.dev57.dist-info → qontract_reconcile-0.10.2.dev58.dist-info}/METADATA +1 -1
- {qontract_reconcile-0.10.2.dev57.dist-info → qontract_reconcile-0.10.2.dev58.dist-info}/RECORD +28 -29
- reconcile/aws_cloudwatch_log_retention/integration.py +10 -17
- reconcile/dashdotdb_dora.py +5 -4
- reconcile/gitlab_housekeeping.py +10 -6
- reconcile/terraform_tgw_attachments.py +5 -5
- reconcile/terraform_vpc_peerings.py +1 -1
- reconcile/utils/aggregated_list.py +30 -20
- reconcile/utils/aws_api.py +595 -168
- reconcile/utils/aws_helper.py +7 -7
- reconcile/utils/binary.py +14 -7
- reconcile/utils/config.py +9 -6
- reconcile/utils/defer.py +4 -2
- reconcile/utils/elasticsearch_exceptions.py +7 -4
- reconcile/utils/environ.py +5 -3
- reconcile/utils/exceptions.py +5 -2
- reconcile/utils/git.py +6 -4
- reconcile/utils/gitlab_api.py +103 -82
- reconcile/utils/mr/base.py +6 -3
- reconcile/utils/mr/update_access_report_base.py +2 -2
- reconcile/utils/output.py +6 -3
- reconcile/utils/vcs.py +5 -3
- reconcile/vpc_peerings_validator.py +21 -15
- tools/app_interface_reporter.py +70 -44
- tools/cli_commands/gpg_encrypt.py +2 -2
- tools/qontract_cli.py +255 -307
- reconcile/utils/data_structures.py +0 -13
- {qontract_reconcile-0.10.2.dev57.dist-info → qontract_reconcile-0.10.2.dev58.dist-info}/WHEEL +0 -0
- {qontract_reconcile-0.10.2.dev57.dist-info → qontract_reconcile-0.10.2.dev58.dist-info}/entry_points.txt +0 -0
{qontract_reconcile-0.10.2.dev57.dist-info → qontract_reconcile-0.10.2.dev58.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.dev58
|
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.dev57.dist-info → qontract_reconcile-0.10.2.dev58.dist-info}/RECORD
RENAMED
@@ -15,7 +15,7 @@ reconcile/closedbox_endpoint_monitoring_base.py,sha256=MvGKBqH9PdHWdMjhLuptze-dk
|
|
15
15
|
reconcile/cluster_deployment_mapper.py,sha256=5gumAaRCcFXsabUJ1dnuUy9WrP_FEEM5JnOnE8ch9sE,2326
|
16
16
|
reconcile/dashdotdb_base.py,sha256=83ZWIf5JJk3P_D69y2TmXRcQr6ELJGlv10OM0h7fJVs,4767
|
17
17
|
reconcile/dashdotdb_cso.py,sha256=QRK0YfIqO4rehs8btD3l_GXIO2ZIycTQEKEthBdB0xA,3639
|
18
|
-
reconcile/dashdotdb_dora.py,sha256=
|
18
|
+
reconcile/dashdotdb_dora.py,sha256=olQnGp4JYpoh1lQEf9kHc2y3bMaAIUXEB6eFohWH8Io,17859
|
19
19
|
reconcile/dashdotdb_dvo.py,sha256=lCkZ0iby6HrNQb-3kYb6xrt8wCjVUZYxKzz9SiStfHU,8946
|
20
20
|
reconcile/dashdotdb_slo.py,sha256=PU1GzT6Uy07IIO3Y62cFfRfaBJYUPrMkMp71Up80_bg,8334
|
21
21
|
reconcile/database_access_manager.py,sha256=Z3aAmw2LsmMIIor-bOGzziVZdVNC82Gmw8oHBUAFf-8,25577
|
@@ -30,7 +30,7 @@ reconcile/github_repo_permissions_validator.py,sha256=dcbXdUx6imjNchjp3pg9-z1i7l
|
|
30
30
|
reconcile/github_users.py,sha256=nfTq78QRONIfDVj-5O3bD6psllJjzWFnog-EJ1WqFPU,3672
|
31
31
|
reconcile/github_validator.py,sha256=cVTVxJIGR4a1Jz8wrdXEAb_CMpXUzvykVmUURX4cook,917
|
32
32
|
reconcile/gitlab_fork_compliance.py,sha256=c7UfqSAsW04c1bWJmXXaQDwtUcG4Kb6nCJAyRU2uAuw,4449
|
33
|
-
reconcile/gitlab_housekeeping.py,sha256=
|
33
|
+
reconcile/gitlab_housekeeping.py,sha256=Gy1mhn33xGp9IyQFqs4VrBmhwJBD6x90XITDR_pU4MU,25416
|
34
34
|
reconcile/gitlab_labeler.py,sha256=4xJHmVX155fclrHqkR926sL1GH6RTN5XfZ8PnqNXbRA,4534
|
35
35
|
reconcile/gitlab_members.py,sha256=MUIgYDLeJx2-_vMypyq2Pa17cpKdXATYhtVACS2ghpQ,8297
|
36
36
|
reconcile/gitlab_mr_sqs_consumer.py,sha256=O46mdziPgGOndbU-0_UJKJVUaiEoVzJPEgKm4_UvYoI,2571
|
@@ -115,11 +115,11 @@ reconcile/terraform_cloudflare_resources.py,sha256=pq8Ieo5NmB-dYQ9X2F0s6iEoINMzh
|
|
115
115
|
reconcile/terraform_cloudflare_users.py,sha256=-dCJZqpZH1vD_Gri9QAZbqpKWiN-tsSWllIp0JuZ_-M,13938
|
116
116
|
reconcile/terraform_repo.py,sha256=xHk0-7wgZchh_eqI-7oX4br9pYkKvYa6m7-8VPWqiZ4,15777
|
117
117
|
reconcile/terraform_resources.py,sha256=iufjMJs_aSEvmh7Cg11beCxKmV8nrOLOpEtiTryPNx0,19470
|
118
|
-
reconcile/terraform_tgw_attachments.py,sha256
|
118
|
+
reconcile/terraform_tgw_attachments.py,sha256=-x7OV5fBmTh9t3N8f4t-AnvQozU1kQUxWKwVzk4GWWM,18838
|
119
119
|
reconcile/terraform_users.py,sha256=rt62m9Yb0mkyhza07t_c6vlrFWF-OeJGJ9oGaCVK72M,10234
|
120
|
-
reconcile/terraform_vpc_peerings.py,sha256=
|
120
|
+
reconcile/terraform_vpc_peerings.py,sha256=0N7uxG6Afe2oNrUyw-apjV-fX2P9TbI5A3xjXO_83eA,27658
|
121
121
|
reconcile/vault_replication.py,sha256=YD70ROZXC1dYnUcS3q1WgnAoIDSdoZVdZsUGc5fanNU,17556
|
122
|
-
reconcile/vpc_peerings_validator.py,sha256
|
122
|
+
reconcile/vpc_peerings_validator.py,sha256=aESqrhm1tpkc2iqSL1UV5to_HjNgjRSffD0crb_q49g,7113
|
123
123
|
reconcile/aus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
124
124
|
reconcile/aus/advanced_upgrade_service.py,sha256=NF3UQ02MdUpVPup50EqnTbTn3dRHGoXoSfFLZxOjr8Q,23744
|
125
125
|
reconcile/aus/aus_label_source.py,sha256=2Rktyvs7ZvCwsRwmbGUhddycTBTq0jHq8wpBaiDHAMA,4165
|
@@ -149,7 +149,7 @@ reconcile/aws_account_manager/utils.py,sha256=iYPPOtbZ7FiKkz9v5f1YXRIHw5YFOtSavU
|
|
149
149
|
reconcile/aws_ami_cleanup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
150
150
|
reconcile/aws_ami_cleanup/integration.py,sha256=KG7g9NpbKmoaveDD3oi9SinqUE29NaM-4lGo-6YuHlM,9302
|
151
151
|
reconcile/aws_cloudwatch_log_retention/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
152
|
-
reconcile/aws_cloudwatch_log_retention/integration.py,sha256=
|
152
|
+
reconcile/aws_cloudwatch_log_retention/integration.py,sha256=qVggTjGwP_6xTCXo2o3brSPtjwArNhZiGPy8YiBrCMM,7779
|
153
153
|
reconcile/aws_saml_idp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
154
154
|
reconcile/aws_saml_idp/integration.py,sha256=Z2JtUx2YIbkn0KVrVa2CoAErPB8vTykOOkWD_ZPoB94,6511
|
155
155
|
reconcile/aws_saml_roles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -564,32 +564,31 @@ reconcile/typed_queries/terraform_tgw_attachments/aws_accounts.py,sha256=2idUmpa
|
|
564
564
|
reconcile/unleash_feature_toggles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
565
565
|
reconcile/unleash_feature_toggles/integration.py,sha256=nx7BhtzCsTfPbOp60vI5MkNwuj8QrPay52msjADLbfI,10995
|
566
566
|
reconcile/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
567
|
-
reconcile/utils/aggregated_list.py,sha256=
|
567
|
+
reconcile/utils/aggregated_list.py,sha256=_9UeaS1TWbJsGIESvXlzzK-omPI2lMMcCsoqc9LBclc,4022
|
568
568
|
reconcile/utils/amtool.py,sha256=3dHViQ_esKPaMEpiOVVSnxTaySM8ELpGVVvppqqPvUY,2289
|
569
|
-
reconcile/utils/aws_api.py,sha256=
|
570
|
-
reconcile/utils/aws_helper.py,sha256=
|
569
|
+
reconcile/utils/aws_api.py,sha256=n2HMUPOnztcDt7c8GvGpT0qrpwArXke0hSCHQ1dSk6w,79439
|
570
|
+
reconcile/utils/aws_helper.py,sha256=8PvDR17ntAGX3bBzlTIxDuENl2rkK-RECsNYKm2_DZw,2955
|
571
571
|
reconcile/utils/batches.py,sha256=TtEm64a8lWhFuNbUVpFEmXVdU2Q0sTBrP_I0Cjbgh7g,320
|
572
|
-
reconcile/utils/binary.py,sha256=
|
573
|
-
reconcile/utils/config.py,sha256=
|
572
|
+
reconcile/utils/binary.py,sha256=lSIevhilMeoGMePPHD7A-pxe45LVpBT0LksecYbM-EA,2477
|
573
|
+
reconcile/utils/config.py,sha256=UhF9U6A0TLmoPTGwhOclUKcSEChu5_Gqwm8VTM1X0ow,1156
|
574
574
|
reconcile/utils/constants.py,sha256=pOUd97bqZdsAu5RWJ8NUs9cwCY7K9y0eW9VVeJ4fZIU,138
|
575
|
-
reconcile/utils/data_structures.py,sha256=VyKfnlNJTiRvZKNpfgIrjESQ2YgmEpWuPQXT14WA1vI,311
|
576
575
|
reconcile/utils/deadmanssnitch_api.py,sha256=0uajXxRNUEyF8CPTYPFNV4G-_3KB_hDF9L8OtTy2zCk,2476
|
577
|
-
reconcile/utils/defer.py,sha256=
|
576
|
+
reconcile/utils/defer.py,sha256=LYTqcvyifCg71_C2i7pbxdqd8-NrXrUhcvuLFy1bQN0,476
|
578
577
|
reconcile/utils/differ.py,sha256=WFW8GoFPMEw9TD1irPpIan6aILF-kjeWWsKLuvqnv64,7554
|
579
578
|
reconcile/utils/disabled_integrations.py,sha256=z1ZGUOKjZ99R-YZ68w1xnLQ_wUccI27NcmdzfK9TARs,1077
|
580
579
|
reconcile/utils/dnsutils.py,sha256=Zit4U-DAt_6AD4NVvic3I7EO5DdjNEeu8Qn_x84i-44,258
|
581
580
|
reconcile/utils/early_exit_cache.py,sha256=9zj4ksXCq2qK2oGO0zW9aZ5tkjC5sRCms0ismZOmBv4,8725
|
582
|
-
reconcile/utils/elasticsearch_exceptions.py,sha256=
|
583
|
-
reconcile/utils/environ.py,sha256=
|
584
|
-
reconcile/utils/exceptions.py,sha256=
|
581
|
+
reconcile/utils/elasticsearch_exceptions.py,sha256=4lwms6yjDYJzhD_xXgb96Juax5DHp_LXEUaME6t59A4,578
|
582
|
+
reconcile/utils/environ.py,sha256=j43kXnqE9uVg__N-83HpcWUqv1Q8ge8ykTL3OnVs-yc,653
|
583
|
+
reconcile/utils/exceptions.py,sha256=2cKJD01d_uZM_j0CTcvDoo-WDisZJVYaeY2KUbfUHCc,686
|
585
584
|
reconcile/utils/expiration.py,sha256=3JaXH4psksR7z262k7FmdyREjCLqm66OpVMEbcfdWRo,1213
|
586
585
|
reconcile/utils/extended_early_exit.py,sha256=QSktrmfw37zSRMNk930tDbQsVeKxaPPPD43e79DGwZw,6754
|
587
586
|
reconcile/utils/external_resource_spec.py,sha256=qeupz4t4trd2uPjlHjf_AFA9Y-EKrMnaXi72tAuCxig,7177
|
588
587
|
reconcile/utils/external_resources.py,sha256=YzTb0xAcNdmKO326mGQy7BmST56CZcdru4lX7ai_7kw,7579
|
589
588
|
reconcile/utils/filtering.py,sha256=S4PbMHuFr3ED0P2Q_ea5CAaB7FimI62B-F5YTaKrphA,402
|
590
|
-
reconcile/utils/git.py,sha256=
|
589
|
+
reconcile/utils/git.py,sha256=o4p9m8jlzCJDcutl2HErvGLhL6sZ1NB4Aw3zGcQIzso,2427
|
591
590
|
reconcile/utils/github_api.py,sha256=y3fxty7FKvfhdzfHgGSaIstL6A_Y2loUcMiyIK5TMDg,2750
|
592
|
-
reconcile/utils/gitlab_api.py,sha256=
|
591
|
+
reconcile/utils/gitlab_api.py,sha256=WMTNXtldW0L9qhC0rfd3ssGeHu9khmzU1RBG6lZHpQM,29723
|
593
592
|
reconcile/utils/gpg.py,sha256=EKG7_fdMv8BMlV5yUdPiqoTx-KrzmVSEAl2sLkaKwWI,1123
|
594
593
|
reconcile/utils/gql.py,sha256=C0thIm_k9MBldfqwHzyqtYZk9sIvMdm9IbbnXLGwjD8,14158
|
595
594
|
reconcile/utils/grouping.py,sha256=vr9SFHZ7bqmHYrvYcEZt-Er3-yQYfAAdq5sHLZVmXPY,456
|
@@ -616,7 +615,7 @@ reconcile/utils/oc_map.py,sha256=ougQ-Wlsa8ymoE_lPQ7g2LlpsUOsHVeRCLYW_6fjeWU,897
|
|
616
615
|
reconcile/utils/ocm_base_client.py,sha256=t5kxhklEqOpenXPkXiwQIk8d3D7hIUndBm5qGusS0bc,6681
|
617
616
|
reconcile/utils/openshift_resource.py,sha256=DI-e04f4NqEUFJ_9HzjY-QMhFt7o2XVauM09mzMC5Vs,24716
|
618
617
|
reconcile/utils/openssl.py,sha256=QVvhzhpChq_4Daf_5wE1qeZJr4thg3DDjJPn4bOPD4E,365
|
619
|
-
reconcile/utils/output.py,sha256=
|
618
|
+
reconcile/utils/output.py,sha256=xh2Not-Xm97KeRx_J5nc2PP5tDwpDLZBeCrWI0S-al4,2034
|
620
619
|
reconcile/utils/pagerduty_api.py,sha256=_24i9S_4X7nlvHb-7clXRE0p1BG4ODjOzKxWO-F9WgI,7627
|
621
620
|
reconcile/utils/parse_dhms_duration.py,sha256=TONpLnec5gHeF7k815YNJpQyDjXhkxZIcv9s8ffbTSY,1840
|
622
621
|
reconcile/utils/password_validator.py,sha256=XwuWg-8CPlcuG7dl_oQ1G1h2gSVSnfMym_VkuprpWVg,2183
|
@@ -643,7 +642,7 @@ reconcile/utils/three_way_diff_strategy.py,sha256=oQcHXd9LVhirJfoaOBoHUYuZVGfyL2
|
|
643
642
|
reconcile/utils/throughput.py,sha256=iP4UWAe2LVhDo69mPPmgo9nQ7RxHD6_GS8MZe-aSiuM,344
|
644
643
|
reconcile/utils/vault.py,sha256=aSA8l9cJlPUHpChFGl27nSY-Mpq9FMjBo7Dcgb1BVfM,15036
|
645
644
|
reconcile/utils/vaultsecretref.py,sha256=0KUSzuvTRxPyKY919TO3-B_eYg4_76fzKvMF8j5s1G0,911
|
646
|
-
reconcile/utils/vcs.py,sha256=
|
645
|
+
reconcile/utils/vcs.py,sha256=fcNwWlhrknxg3QUs8BZ23wxTe3ISS7GFZxwFUZZG-wg,8718
|
647
646
|
reconcile/utils/acs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
648
647
|
reconcile/utils/acs/base.py,sha256=4UsDrCpAOuddL3PKNuIQYoJP1BtZQNNB8_KEX0lXneg,2532
|
649
648
|
reconcile/utils/acs/notifiers.py,sha256=nHVw9C_2-K4nv5zq26jlOTSw1roY6TKlovi1sOfpxpI,4998
|
@@ -691,7 +690,7 @@ reconcile/utils/mr/__init__.py,sha256=hcfHDIIIsJT4C0BnzDnyeZEfZdamrqHzMLcBzIT1ib
|
|
691
690
|
reconcile/utils/mr/app_interface_reporter.py,sha256=6Kpg93V9FvcOke9Jimkva359MQ-ZyBIkUpf8QIA6-to,1793
|
692
691
|
reconcile/utils/mr/app_sre_tekton_access_report.py,sha256=i7JeTkyaq0HyVGbAFKCNbiLy3NVE05IXqJzwArsGre4,1513
|
693
692
|
reconcile/utils/mr/aws_access.py,sha256=9MMpYD24j2lLr_hLeMSh_OsJ07waalrlNpz-JlOsKAM,2575
|
694
|
-
reconcile/utils/mr/base.py,sha256=
|
693
|
+
reconcile/utils/mr/base.py,sha256=pHRmyxJzlBy9ldjYKOdHg9-9KbsK8bdRScntKZa5Tew,8130
|
695
694
|
reconcile/utils/mr/clusters_updates.py,sha256=pcusPAwRUkvyk_-bixsRNTzSvpTLypJ1kflq5UEVgcM,2271
|
696
695
|
reconcile/utils/mr/glitchtip_access_reporter.py,sha256=cTkOtzdgeKPaqro0VS2hDuAClQiN4nZATh-mplQC-AI,1369
|
697
696
|
reconcile/utils/mr/labels.py,sha256=9QRTRjZAtq45zELd9SwavaraczMjwjn5no3RK1YxFTg,825
|
@@ -699,7 +698,7 @@ reconcile/utils/mr/notificator.py,sha256=f8IcGQ1_iBsXJFnhPsWQ7UE3NfigaOrXcVieJPp
|
|
699
698
|
reconcile/utils/mr/ocm_update_recommended_version.py,sha256=p_aVP0TGrlKk9WBwgQnYWqUDsED_Hg6G5Bqj0UvtRwA,1536
|
700
699
|
reconcile/utils/mr/ocm_upgrade_scheduler_org_updates.py,sha256=5EncHGr4QRnZgHedRfCwMYZ9CaijYzHGj7-M6lhtQRo,3004
|
701
700
|
reconcile/utils/mr/promote_qontract.py,sha256=wgvX2CBlcZaihKJSXJ0zcEK8NGaEP2_DUQDz0STzGes,7158
|
702
|
-
reconcile/utils/mr/update_access_report_base.py,sha256=
|
701
|
+
reconcile/utils/mr/update_access_report_base.py,sha256=4Grohtp44v1sSHZyIAYOwClxH8SLj_nnOrCcHPKp9p0,4361
|
703
702
|
reconcile/utils/mr/user_maintenance.py,sha256=ZlR1Id_r2BUXsoerJW-0Ioh5bcbwlnQxBBhSs-ri9Dk,5099
|
704
703
|
reconcile/utils/ocm/__init__.py,sha256=Y-bp8GomMpyCo0tFW6kJ78-ZG1UIupYRtBzbMWU0kwM,798
|
705
704
|
reconcile/utils/ocm/addons.py,sha256=_LDdJ-gapM3s5exKlIUt-MlXZTAUoHezbYBU0QmvfWQ,7335
|
@@ -746,18 +745,18 @@ reconcile/utils/unleash/client.py,sha256=YrJnauxjcy1ml7W2AHg7dzIH_fVK_GugoRu7IFm
|
|
746
745
|
reconcile/utils/unleash/server.py,sha256=907gDh9Ee8UxLqusnfpzE-7LUnttB38D4xhVJ0vMf_M,4439
|
747
746
|
tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
748
747
|
tools/app_interface_metrics_exporter.py,sha256=f1qwTmQfEcs98uBVRyBa0k7GQXdiSwd7w1hDVjhdGcQ,2303
|
749
|
-
tools/app_interface_reporter.py,sha256=
|
748
|
+
tools/app_interface_reporter.py,sha256=gR2EgHmgSIxzK5xxDW1SduFU6OkPaf2LlAQjhV3NYIg,17623
|
750
749
|
tools/app_sre_tekton_access_reporter.py,sha256=o9prLUgQpwO3msRWc2as1xT1y9OB3znkpgvLr0Ys8_M,3146
|
751
750
|
tools/app_sre_tekton_access_revalidation.py,sha256=66nHEaY-bIqxIhpcmwN8AvQZu6ZXenfkg4Fut0pVZRM,2726
|
752
751
|
tools/glitchtip_access_reporter.py,sha256=o01A6b88t3Wie6tj_tJWWVo2J01LxQ_a9giGm4UzEaU,2901
|
753
752
|
tools/glitchtip_access_revalidation.py,sha256=8kbBJk04mkq28kWoRDDkfCGIF3GRg3pJrFAh1sW0dbk,2821
|
754
|
-
tools/qontract_cli.py,sha256=
|
753
|
+
tools/qontract_cli.py,sha256=DCgIaGxZlYG5TVWUifAQGfp81aop9SLu0ezVVg4x2NM,148792
|
755
754
|
tools/sd_app_sre_alert_report.py,sha256=jQpJdXVID68bSNtJNOGDh0-ei1CfEUS4Itr4MAaBNFA,5062
|
756
755
|
tools/template_validation.py,sha256=qpKYaTgk0GOPGa2Ct5_5sKdwIHtCAKIBGzsMPuJU5fw,3371
|
757
756
|
tools/cli_commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
758
757
|
tools/cli_commands/container_images_report.py,sha256=8fG9XU-eEhJ7hKCdQzBcdPpvIJR-8WGkHOgFEulpfYQ,5213
|
759
758
|
tools/cli_commands/erv2.py,sha256=VxUlNXllo947UwmtvS-42IeI9x_t_X3MHrrSI3K_GRo,23274
|
760
|
-
tools/cli_commands/gpg_encrypt.py,sha256=
|
759
|
+
tools/cli_commands/gpg_encrypt.py,sha256=NhzwN49UN7P5_FJgTUN5A4BIwNbFokIE4lwDax2iP5k,4891
|
761
760
|
tools/cli_commands/systems_and_tools.py,sha256=EMHOF1AtUDaoSk0bbjl6oUKYAz4rTZjIBaF-6E6GspM,16816
|
762
761
|
tools/cli_commands/cost_report/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
763
762
|
tools/cli_commands/cost_report/aws.py,sha256=JtwDfhaYLfa4Uz1LR6OfSBh_3nBlb90kQq6i3MV_ims,4563
|
@@ -778,7 +777,7 @@ tools/saas_promotion_state/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
|
|
778
777
|
tools/saas_promotion_state/saas_promotion_state.py,sha256=UfwwRLS5Ya4_Nh1w5n1dvoYtchQvYE9yj1VANt2IKqI,3925
|
779
778
|
tools/sre_checkpoints/__init__.py,sha256=CDaDaywJnmRCLyl_NCcvxi-Zc0hTi_3OdwKiFOyS39I,145
|
780
779
|
tools/sre_checkpoints/util.py,sha256=zEDbGr18ZeHNQwW8pUsr2JRjuXIPz--WAGJxZo9sv_Y,894
|
781
|
-
qontract_reconcile-0.10.2.
|
782
|
-
qontract_reconcile-0.10.2.
|
783
|
-
qontract_reconcile-0.10.2.
|
784
|
-
qontract_reconcile-0.10.2.
|
780
|
+
qontract_reconcile-0.10.2.dev58.dist-info/METADATA,sha256=rQJYMzaII94AgfVybASnf6jWezt2vOg4-p1vRIuKKyc,24665
|
781
|
+
qontract_reconcile-0.10.2.dev58.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
782
|
+
qontract_reconcile-0.10.2.dev58.dist-info/entry_points.txt,sha256=5i9l54La3vQrDLAdwDKQWC0iG4sV9RRfOb1BpvzOWLc,698
|
783
|
+
qontract_reconcile-0.10.2.dev58.dist-info/RECORD,,
|
@@ -3,10 +3,7 @@ import re
|
|
3
3
|
import typing
|
4
4
|
from collections import defaultdict
|
5
5
|
from collections.abc import Iterable
|
6
|
-
from datetime import
|
7
|
-
datetime,
|
8
|
-
timedelta,
|
9
|
-
)
|
6
|
+
from datetime import UTC, datetime, timedelta
|
10
7
|
from enum import Enum
|
11
8
|
from typing import TYPE_CHECKING
|
12
9
|
|
@@ -18,9 +15,9 @@ from reconcile.queries import get_aws_accounts
|
|
18
15
|
from reconcile.utils.aws_api import AWSApi
|
19
16
|
|
20
17
|
if TYPE_CHECKING:
|
21
|
-
from mypy_boto3_logs import
|
18
|
+
from mypy_boto3_logs.type_defs import LogGroupTypeDef
|
22
19
|
else:
|
23
|
-
|
20
|
+
LogGroupTypeDef = object
|
24
21
|
|
25
22
|
QONTRACT_INTEGRATION = "aws_cloudwatch_log_retention"
|
26
23
|
MANAGED_BY_INTEGRATION_KEY = "managed_by_integration"
|
@@ -69,21 +66,17 @@ def create_awsapi_client(accounts: list, thread_pool_size: int) -> AWSApi:
|
|
69
66
|
return AWSApi(thread_pool_size, accounts, settings=settings, init_users=False)
|
70
67
|
|
71
68
|
|
72
|
-
def is_empty(
|
73
|
-
log_group: dict,
|
74
|
-
) -> bool:
|
69
|
+
def is_empty(log_group: LogGroupTypeDef) -> bool:
|
75
70
|
return log_group["storedBytes"] == 0
|
76
71
|
|
77
72
|
|
78
73
|
def is_longer_than_retention(
|
79
|
-
log_group:
|
74
|
+
log_group: LogGroupTypeDef,
|
80
75
|
desired_retention_days: int,
|
81
76
|
) -> bool:
|
82
|
-
return (
|
83
|
-
|
84
|
-
|
85
|
-
< datetime.utcnow()
|
86
|
-
)
|
77
|
+
return datetime.fromtimestamp(log_group["creationTime"] / 1000, tz=UTC) + timedelta(
|
78
|
+
days=desired_retention_days
|
79
|
+
) < datetime.now(tz=UTC)
|
87
80
|
|
88
81
|
|
89
82
|
class TagStatus(Enum):
|
@@ -93,7 +86,7 @@ class TagStatus(Enum):
|
|
93
86
|
|
94
87
|
|
95
88
|
def get_tag_status(
|
96
|
-
log_group:
|
89
|
+
log_group: LogGroupTypeDef,
|
97
90
|
account_name: str,
|
98
91
|
region: str,
|
99
92
|
aws_api: AWSApi,
|
@@ -113,7 +106,7 @@ def get_tag_status(
|
|
113
106
|
|
114
107
|
def _reconcile_log_group(
|
115
108
|
dry_run: bool,
|
116
|
-
aws_log_group:
|
109
|
+
aws_log_group: LogGroupTypeDef,
|
117
110
|
desired_cleanup_options: Iterable[AWSCloudwatchCleanupOption],
|
118
111
|
account_name: str,
|
119
112
|
region: str,
|
reconcile/dashdotdb_dora.py
CHANGED
@@ -397,10 +397,11 @@ class DashdotdbDORA(DashdotdbBase):
|
|
397
397
|
self, saastarget: SaasTarget, sha: str
|
398
398
|
) -> tuple[str | None, str | None]:
|
399
399
|
try:
|
400
|
-
saas_file_yaml = self.gl_app_interface_get_file(
|
401
|
-
|
402
|
-
|
403
|
-
|
400
|
+
saas_file_yaml = self.gl_app_interface_get_file(saastarget.path, ref=sha)
|
401
|
+
if not saas_file_yaml:
|
402
|
+
LOG.info(f"failed to fetch saas file {saastarget.path} at {sha}")
|
403
|
+
return (None, None)
|
404
|
+
saas_file = yaml.safe_load(saas_file_yaml.decode())
|
404
405
|
except Exception as e:
|
405
406
|
LOG.info(f"failed to decode saas file {saastarget.path} with error: {e}")
|
406
407
|
return (None, None)
|
reconcile/gitlab_housekeeping.py
CHANGED
@@ -11,10 +11,11 @@ from datetime import (
|
|
11
11
|
timedelta,
|
12
12
|
)
|
13
13
|
from operator import itemgetter
|
14
|
-
from typing import Any
|
14
|
+
from typing import Any, cast
|
15
15
|
|
16
16
|
import gitlab
|
17
17
|
from gitlab.v4.objects import (
|
18
|
+
ProjectCommit,
|
18
19
|
ProjectIssue,
|
19
20
|
ProjectMergeRequest,
|
20
21
|
)
|
@@ -335,12 +336,15 @@ def is_good_to_merge(labels):
|
|
335
336
|
|
336
337
|
def is_rebased(mr, gl: GitLabApi) -> bool:
|
337
338
|
target_branch = mr.target_branch
|
338
|
-
head =
|
339
|
-
|
340
|
-
|
341
|
-
|
339
|
+
head = cast(
|
340
|
+
list[ProjectCommit],
|
341
|
+
gl.project.commits.list(
|
342
|
+
ref_name=target_branch,
|
343
|
+
per_page=1,
|
344
|
+
page=1,
|
345
|
+
),
|
342
346
|
)[0].id
|
343
|
-
result = gl.project.repository_compare(mr.sha, head)
|
347
|
+
result = cast(dict, gl.project.repository_compare(mr.sha, head))
|
344
348
|
return len(result["commits"]) == 0
|
345
349
|
|
346
350
|
|
@@ -195,9 +195,9 @@ def _build_desired_state_tgw_connection(
|
|
195
195
|
cluster_region,
|
196
196
|
cluster_cidr_block,
|
197
197
|
tags=peer_connection.tags or {},
|
198
|
-
route_tables=peer_connection.manage_routes,
|
199
|
-
security_groups=peer_connection.manage_security_groups,
|
200
|
-
route53_associations=peer_connection.manage_route53_associations,
|
198
|
+
route_tables=bool(peer_connection.manage_routes),
|
199
|
+
security_groups=bool(peer_connection.manage_security_groups),
|
200
|
+
route53_associations=bool(peer_connection.manage_route53_associations),
|
201
201
|
)
|
202
202
|
for tgw in account_tgws:
|
203
203
|
connection_name = (
|
@@ -268,13 +268,13 @@ def _build_accepter(
|
|
268
268
|
awsapi: AWSApi,
|
269
269
|
private_hcp: bool = False,
|
270
270
|
) -> Accepter:
|
271
|
-
allow_hcp_private_api_access = (
|
271
|
+
allow_hcp_private_api_access = bool(
|
272
272
|
private_hcp and peer_connection.allow_private_hcp_api_access
|
273
273
|
)
|
274
274
|
(vpc_id, route_table_ids, subnets_id_az, api_security_group_id) = (
|
275
275
|
awsapi.get_cluster_vpc_details(
|
276
276
|
account.dict(by_alias=True),
|
277
|
-
route_tables=peer_connection.manage_routes,
|
277
|
+
route_tables=bool(peer_connection.manage_routes),
|
278
278
|
subnets=True,
|
279
279
|
hcp_vpc_endpoint_sg=allow_hcp_private_api_access,
|
280
280
|
)
|
@@ -198,7 +198,7 @@ def build_desired_state_single_cluster(
|
|
198
198
|
f"{peer_connection_name}"
|
199
199
|
)
|
200
200
|
|
201
|
-
accepter_manage_routes = peer_info.get("manageRoutes")
|
201
|
+
accepter_manage_routes = peer_info.get("manageRoutes", False)
|
202
202
|
|
203
203
|
infra_account_name, req_aws, acc_aws = aws_assume_roles_for_cluster_vpc_peering(
|
204
204
|
peer_connection, cluster_info, peer_info, peer_cluster, ocm
|
@@ -1,17 +1,27 @@
|
|
1
1
|
import json
|
2
2
|
import logging
|
3
|
+
from collections.abc import Callable, KeysView
|
4
|
+
from typing import Any, TypedDict
|
5
|
+
|
6
|
+
Action = Callable[[Any, list[Any]], bool]
|
7
|
+
Cond = Callable[[Any], bool]
|
3
8
|
|
4
9
|
|
5
10
|
class RunnerException(Exception):
|
6
11
|
pass
|
7
12
|
|
8
13
|
|
14
|
+
class AggregatedItem(TypedDict):
|
15
|
+
params: Any
|
16
|
+
items: list[Any]
|
17
|
+
|
18
|
+
|
9
19
|
class AggregatedList:
|
10
|
-
def __init__(self):
|
11
|
-
self._dict = {}
|
20
|
+
def __init__(self) -> None:
|
21
|
+
self._dict: dict[int, AggregatedItem] = {}
|
12
22
|
|
13
|
-
def add(self, params, new_items):
|
14
|
-
params_hash = self.hash_params(params)
|
23
|
+
def add(self, params: Any, new_items: Any | list[Any]) -> None:
|
24
|
+
params_hash: int = self.hash_params(params)
|
15
25
|
|
16
26
|
if self._dict.get(params_hash) is None:
|
17
27
|
self._dict[params_hash] = {"params": params, "items": []}
|
@@ -23,20 +33,20 @@ class AggregatedList:
|
|
23
33
|
if item not in self._dict[params_hash]["items"]:
|
24
34
|
self._dict[params_hash]["items"].append(item)
|
25
35
|
|
26
|
-
def get(self, params):
|
36
|
+
def get(self, params: Any) -> AggregatedItem:
|
27
37
|
return self._dict[self.hash_params(params)]
|
28
38
|
|
29
|
-
def get_all_params_hash(self):
|
39
|
+
def get_all_params_hash(self) -> KeysView[int]:
|
30
40
|
return self._dict.keys()
|
31
41
|
|
32
|
-
def get_by_params_hash(self, params_hash):
|
42
|
+
def get_by_params_hash(self, params_hash: int) -> AggregatedItem:
|
33
43
|
return self._dict[params_hash]
|
34
44
|
|
35
|
-
def diff(self, right_state):
|
45
|
+
def diff(self, right_state: "AggregatedList") -> dict[str, list[AggregatedItem]]:
|
36
46
|
left_params = self.get_all_params_hash()
|
37
47
|
right_params = right_state.get_all_params_hash()
|
38
48
|
|
39
|
-
diff = {
|
49
|
+
diff: dict[str, list[AggregatedItem]] = {
|
40
50
|
"insert": [
|
41
51
|
right_state.get_by_params_hash(p)
|
42
52
|
for p in right_params
|
@@ -52,11 +62,11 @@ class AggregatedList:
|
|
52
62
|
union = [p for p in left_params if p in right_params]
|
53
63
|
|
54
64
|
for p in union:
|
55
|
-
left = self.get_by_params_hash(p)
|
56
|
-
right = right_state.get_by_params_hash(p)
|
65
|
+
left: AggregatedItem = self.get_by_params_hash(p)
|
66
|
+
right: AggregatedItem = right_state.get_by_params_hash(p)
|
57
67
|
|
58
|
-
l_items = left["items"]
|
59
|
-
r_items = right["items"]
|
68
|
+
l_items: list[Any] = left["items"]
|
69
|
+
r_items: list[Any] = right["items"]
|
60
70
|
|
61
71
|
update_insert = [i for i in r_items if i not in l_items]
|
62
72
|
update_delete = [i for i in l_items if i not in r_items]
|
@@ -75,28 +85,28 @@ class AggregatedList:
|
|
75
85
|
|
76
86
|
return diff
|
77
87
|
|
78
|
-
def dump(self):
|
88
|
+
def dump(self) -> list[AggregatedItem]:
|
79
89
|
return list(self._dict.values())
|
80
90
|
|
81
|
-
def toJSON(self):
|
91
|
+
def toJSON(self) -> str:
|
82
92
|
return json.dumps(self.dump(), indent=4)
|
83
93
|
|
84
94
|
@staticmethod
|
85
|
-
def hash_params(params):
|
95
|
+
def hash_params(params: Any) -> int:
|
86
96
|
return hash(json.dumps(params, sort_keys=True))
|
87
97
|
|
88
98
|
|
89
99
|
class AggregatedDiffRunner:
|
90
|
-
def __init__(self, diff):
|
100
|
+
def __init__(self, diff: dict[str, list[AggregatedItem]]) -> None:
|
91
101
|
self.diff = diff
|
92
|
-
self.actions = []
|
102
|
+
self.actions: list[tuple[str, Action, Cond | None]] = []
|
93
103
|
|
94
|
-
def register(self, on, action, cond=None):
|
104
|
+
def register(self, on: str, action: Action, cond: Cond | None = None) -> None:
|
95
105
|
if on not in self.diff:
|
96
106
|
raise Exception(f"Unknown diff key for 'on': {on}")
|
97
107
|
self.actions.append((on, action, cond))
|
98
108
|
|
99
|
-
def run(self):
|
109
|
+
def run(self) -> bool:
|
100
110
|
status = True
|
101
111
|
|
102
112
|
for on, action, cond in self.actions:
|