qontract-reconcile 0.10.1rc1056__py3-none-any.whl → 0.10.1rc1058__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.1
2
2
  Name: qontract-reconcile
3
- Version: 0.10.1rc1056
3
+ Version: 0.10.1rc1058
4
4
  Summary: Collection of tools to reconcile services with their desired state as defined in the app-interface DB.
5
5
  Home-page: https://github.com/app-sre/qontract-reconcile
6
6
  Author: Red Hat App-SRE Team
@@ -269,7 +269,7 @@ reconcile/gql_definitions/common/pipeline_providers.py,sha256=JJgmmghqLIwjKOdcWY
269
269
  reconcile/gql_definitions/common/quay_instances.py,sha256=toBkdYYVTmEafezAHZKgaW-mQ29xEW6jeronzsAlNyI,1786
270
270
  reconcile/gql_definitions/common/quay_orgs.py,sha256=NhA8kqvVUDbrsryEvEL5mlIv5R3T4XNhSRXtfL_yptY,1788
271
271
  reconcile/gql_definitions/common/reserved_networks.py,sha256=yP9qSQCaSQcva-ZgTnZp09qH27ur5_qK080ToIs04MY,2560
272
- reconcile/gql_definitions/common/saas_files.py,sha256=JZdFKBygaZVxGwBUYMki9EbnsGdmfmxuAreMZ3dchwo,16702
272
+ reconcile/gql_definitions/common/saas_files.py,sha256=i0U0Ot4DwE3LjigD4ex_ASOPWfSZEpX_4ZrRaWlUhW8,16854
273
273
  reconcile/gql_definitions/common/saas_target_namespaces.py,sha256=4VYP2VbwY8WVwtSFk2-jsUNhSmRD3X4FWKxetOKvmd0,2835
274
274
  reconcile/gql_definitions/common/saasherder_settings.py,sha256=nqQLcMwYxLseqq0BEcVvmrpIj2eQq0h8XDSpLN6GGCw,1793
275
275
  reconcile/gql_definitions/common/slack_workspaces.py,sha256=2o0kgi4QiaRuNmZJnc_By4F6NsKIdRaXkrufRQw7Nok,1753
@@ -443,8 +443,8 @@ reconcile/rhidp/sso_client/metrics.py,sha256=Tq7tSOsqL3XdcPUdozxqzSPIodUeOV87UCT
443
443
  reconcile/saas_auto_promotions_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
444
444
  reconcile/saas_auto_promotions_manager/integration.py,sha256=haXTpwi0rEQtN9-MadBzFvSNtbxw5QQuFpMQLg3bZlQ,6707
445
445
  reconcile/saas_auto_promotions_manager/meta.py,sha256=76Jp50r6Y_KyJoXFfSjrt5YrCtXyg_A4FXXxHYiS3TE,161
446
- reconcile/saas_auto_promotions_manager/publisher.py,sha256=IZGu-PMffyk3fNL8QcZ2VBmYTZ5zigoCwNJ4_Ak6-C8,2966
447
- reconcile/saas_auto_promotions_manager/s3_exporter.py,sha256=IKlVWZmiPnvl7sKeF6JgAlhXZe5CovKTxQc0SNkNSx4,2583
446
+ reconcile/saas_auto_promotions_manager/publisher.py,sha256=_VdmCTiPpOBQBkGRpD6528TGdOV90wRme1q8ep_qo48,2993
447
+ reconcile/saas_auto_promotions_manager/s3_exporter.py,sha256=Y-r5R6viiAzglUHbYKItYSjT_axmLlPEJVmu_H6N170,2682
448
448
  reconcile/saas_auto_promotions_manager/subscriber.py,sha256=kIJKT1Xg5FF7EGT5ayK5ROyu_S7FbsYK91WBqrtYjfA,10030
449
449
  reconcile/saas_auto_promotions_manager/merge_request_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
450
450
  reconcile/saas_auto_promotions_manager/merge_request_manager/batcher.py,sha256=R2CRtjdOggY5lSqt-A5qz2ymqomx4opVeVV_oqBAW0A,7804
@@ -456,7 +456,7 @@ reconcile/saas_auto_promotions_manager/merge_request_manager/mr_parser.py,sha256
456
456
  reconcile/saas_auto_promotions_manager/merge_request_manager/open_merge_requests.py,sha256=-qGQOh6Jdp4lomNDij3zWVC0pl6uPHFWS5Woqcp5HQk,410
457
457
  reconcile/saas_auto_promotions_manager/merge_request_manager/renderer.py,sha256=rnY9CR_0ONDJdJhGaGOQ9yBlKV0bPXQKh9Ped-NA2To,7245
458
458
  reconcile/saas_auto_promotions_manager/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
459
- reconcile/saas_auto_promotions_manager/utils/saas_files_inventory.py,sha256=DZOT8jvM9tmLnipY884XN5T4ViJljAlcEz6XKdNCK5w,8860
459
+ reconcile/saas_auto_promotions_manager/utils/saas_files_inventory.py,sha256=wj7x3DIoetLX5QeaorTH0i8QC5GWsqahbUOrUb0AzJk,8830
460
460
  reconcile/skupper_network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
461
461
  reconcile/skupper_network/integration.py,sha256=oZIVDBRcQPC-lWxNFiJhGbtCM7Yj7fjwAzYZ8JvVe3I,10789
462
462
  reconcile/skupper_network/models.py,sha256=HEwlVKsbmMaKaaBGvITIiSYNEVdjwXVhLaOJgLSZ2xQ,6604
@@ -553,7 +553,7 @@ reconcile/test/test_quay_repos.py,sha256=TdkcRF_a8PLp01Kti9eZZN-vGup2yPBT4Iba3k0
553
553
  reconcile/test/test_queries.py,sha256=SpH3RmNpBjEr_ne3VjAMCgKK8RE1z1zo7bypkT5uoO4,1946
554
554
  reconcile/test/test_repo_owners.py,sha256=uRYMLbMmh-9usF0TerabZTZV-Z1CS4I6ybT-LQqCLe8,1423
555
555
  reconcile/test/test_requests_sender.py,sha256=7fd9C2kEFS0-CYtlsif66N1kO9c44pzuBPAJKR9igqU,5385
556
- reconcile/test/test_saasherder.py,sha256=SXhjDhpmWNM3xWtOGWn5j6BeznuXDwlttVcUtp9drpo,58014
556
+ reconcile/test/test_saasherder.py,sha256=-WGgAsrTm_SJ0OQDLXd4JwEu1Mc6i4AePJqjZQTaRew,58114
557
557
  reconcile/test/test_saasherder_allowed_secret_paths.py,sha256=5NHQwNJO66at6HiyMZ5sVRTQDwxdvlOQo0KmkBWCw5Q,4853
558
558
  reconcile/test/test_secret_reader.py,sha256=kz7nzcPjvA08cytnvcA_PMA98AEyqJWsESkYeRn5xCk,4994
559
559
  reconcile/test/test_slack_base.py,sha256=pTUGvJ2S2wF3PhJyGWmiNXG52QtXKy2cbu-G8Ymrv6I,5019
@@ -578,7 +578,7 @@ reconcile/test/test_version_bump.py,sha256=q6-3Y1roriI6YWpFwaHOMN7emEP3yL33sh_0V
578
578
  reconcile/test/test_vpc_peerings_validator.py,sha256=dFSmjc_dMN2GqMbntCFpa7PUZmyYuQ9DKffh-T5wmxM,6639
579
579
  reconcile/test/test_wrong_region.py,sha256=7KzL7OaICQ9Z3DW27zt_ykMN7_87owAFC-2CYjvGoyA,2138
580
580
  reconcile/test/saas_auto_promotions_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
581
- reconcile/test/saas_auto_promotions_manager/conftest.py,sha256=oRnwwFbL00TNwY1uacjPl0cwU3o064YpDhNkeoerGzE,6085
581
+ reconcile/test/saas_auto_promotions_manager/conftest.py,sha256=m4gOYQIOO9Br9r26erJLXxO6b1IfVKO-QQPm8k2qD5Y,6094
582
582
  reconcile/test/saas_auto_promotions_manager/test_integration_test.py,sha256=S30eXJSy2Vc3YLbCP7AfLkOiFGUVoKhEvEBL5vwnbfg,1848
583
583
  reconcile/test/saas_auto_promotions_manager/merge_request_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
584
584
  reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -724,7 +724,7 @@ reconcile/utils/sqs_gateway.py,sha256=XNIf3PY4UCPNufP2Ul0UJj3fKlt5larBba-VTT-41F
724
724
  reconcile/utils/state.py,sha256=W0_awkLAPX18hNOF_60o73tkPxDUylqbzYNHfl_sDsk,16386
725
725
  reconcile/utils/structs.py,sha256=LcbLEg8WxfRqM6nW7NhcWN0YeqF7SQzxOgntmLs1SgY,352
726
726
  reconcile/utils/template.py,sha256=wTvRU4AnAV_o042tD4Mwls2dwWMuk7MKnde3MaCjaYg,331
727
- reconcile/utils/terraform_client.py,sha256=jHTkqqJk1HQh2vZP1FkEeDOiMlO-SKmX8oYuS7lzO_o,34672
727
+ reconcile/utils/terraform_client.py,sha256=gyTqNyDn0uQISxnfXOWv8HpXSM1-yqvwDiVGIW0jpRk,35215
728
728
  reconcile/utils/terrascript_aws_client.py,sha256=ctNT-TQSMxNicVIjR1gM2OZWzNc_BG820COSXb_E-CE,278933
729
729
  reconcile/utils/three_way_diff_strategy.py,sha256=oQcHXd9LVhirJfoaOBoHUYuZVGfyL2voKr6KVI34zZE,4833
730
730
  reconcile/utils/throughput.py,sha256=iP4UWAe2LVhDo69mPPmgo9nQ7RxHD6_GS8MZe-aSiuM,344
@@ -867,8 +867,8 @@ tools/test/test_qontract_cli.py,sha256=_D61RFGAN5x44CY1tYbouhlGXXABwYfxKSWSQx3Jr
867
867
  tools/test/test_saas_promotion_state.py,sha256=dy4kkSSAQ7bC0Xp2CociETGN-2aABEfL6FU5D9Jl00Y,6056
868
868
  tools/test/test_sd_app_sre_alert_report.py,sha256=v363r9zM7__0kR5K6mvJoGFcM9BvE33fWAayrqkpojA,2116
869
869
  tools/test/test_sre_checkpoints.py,sha256=SKqPPTl9ua0RFdSSofnoQX-JZE6dFLO3LRhfQzqtfh8,2607
870
- qontract_reconcile-0.10.1rc1056.dist-info/METADATA,sha256=CHSafj5u2wG1ldpLxEZLbYfSHBq4_mbszb1qawE6bEk,2213
871
- qontract_reconcile-0.10.1rc1056.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
872
- qontract_reconcile-0.10.1rc1056.dist-info/entry_points.txt,sha256=GKQqCl2j2X1BJQ69een6rHcR26PmnxnONLNOQB-nRjY,491
873
- qontract_reconcile-0.10.1rc1056.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
874
- qontract_reconcile-0.10.1rc1056.dist-info/RECORD,,
870
+ qontract_reconcile-0.10.1rc1058.dist-info/METADATA,sha256=AB6P6QPlXVA-dC5bWhBQqe7u-ZA6gKAP7fNq4a3NunA,2213
871
+ qontract_reconcile-0.10.1rc1058.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
872
+ qontract_reconcile-0.10.1rc1058.dist-info/entry_points.txt,sha256=GKQqCl2j2X1BJQ69een6rHcR26PmnxnONLNOQB-nRjY,491
873
+ qontract_reconcile-0.10.1rc1058.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
874
+ qontract_reconcile-0.10.1rc1058.dist-info/RECORD,,
@@ -265,6 +265,7 @@ query SaasFiles {
265
265
  auto
266
266
  publish
267
267
  subscribe
268
+ redeployOnPublisherConfigChange
268
269
  soakDays
269
270
  schedule
270
271
  promotion_data {
@@ -472,6 +473,7 @@ class SaasResourceTemplateTargetPromotionV1(ConfiguredBaseModel):
472
473
  auto: Optional[bool] = Field(..., alias="auto")
473
474
  publish: Optional[list[str]] = Field(..., alias="publish")
474
475
  subscribe: Optional[list[str]] = Field(..., alias="subscribe")
476
+ redeploy_on_publisher_config_change: Optional[bool] = Field(..., alias="redeployOnPublisherConfigChange")
475
477
  soak_days: Optional[int] = Field(..., alias="soakDays")
476
478
  schedule: Optional[str] = Field(..., alias="schedule")
477
479
  promotion_data: Optional[list[PromotionDataV1]] = Field(..., alias="promotion_data")
@@ -39,7 +39,7 @@ class Publisher:
39
39
  target_name: str | None,
40
40
  cluster_name: str,
41
41
  auth_code: HasSecret | None,
42
- publish_job_logs: bool | None,
42
+ redeploy_on_config_change: bool | None,
43
43
  has_subscriber: bool = True,
44
44
  ):
45
45
  self._ref = ref
@@ -56,7 +56,7 @@ class Publisher:
56
56
  self.resource_template_name = resource_template_name
57
57
  self.target_name = target_name if target_name else "None"
58
58
  self.cluster_name = cluster_name
59
- self.publish_job_logs = bool(publish_job_logs)
59
+ self.redeploy_on_config_change = bool(redeploy_on_config_change)
60
60
  self.has_subscriber = has_subscriber
61
61
 
62
62
  def fetch_commit_shas_and_deployment_info(
@@ -62,7 +62,8 @@ class S3Exporter:
62
62
  data: dict[str, dict] = {}
63
63
  for publisher in publishers:
64
64
  publisher_data = PublisherData.from_publisher(publisher)
65
- key = f"{publisher.app_name}/{publisher.saas_name}/{publisher.resource_template_name}/{publisher.target_name}/{publisher.cluster_name}/{publisher.namespace_name}/{publisher.publish_job_logs}"
65
+ # Note, redeploy_on_config_change indicates that this publisher is a test job
66
+ key = f"{publisher.app_name}/{publisher.saas_name}/{publisher.resource_template_name}/{publisher.target_name}/{publisher.cluster_name}/{publisher.namespace_name}/{publisher.redeploy_on_config_change}"
66
67
  data[key] = {
67
68
  "commit_sha": publisher_data.commit_sha,
68
69
  "deployment_state": publisher_data.deployment_state.value,
@@ -65,8 +65,8 @@ class SaasFilesInventory:
65
65
  cluster_name=target.namespace.cluster.name,
66
66
  resource_template_name=resource_template.name,
67
67
  target_name=target.name,
68
- publish_job_logs=saas_file.publish_job_logs,
69
68
  auth_code=auth_code,
69
+ redeploy_on_config_change=target.promotion.redeploy_on_publisher_config_change,
70
70
  )
71
71
 
72
72
  has_subscriber = False
@@ -122,9 +122,9 @@ class SaasFilesInventory:
122
122
  blocked_versions=blocked_versions.get(
123
123
  resource_template.url, set()
124
124
  ),
125
- # Note: this will be refactored at a later point.
126
- # https://issues.redhat.com/browse/APPSRE-7516
127
- use_target_config_hash=bool(saas_file.publish_job_logs),
125
+ use_target_config_hash=bool(
126
+ target.promotion.redeploy_on_publisher_config_change
127
+ ),
128
128
  )
129
129
  self.subscribers.append(subscriber)
130
130
  for prom_data in target.promotion.promotion_data or []:
@@ -131,7 +131,7 @@ def subscriber_builder(
131
131
  app_name="",
132
132
  resource_template_name="",
133
133
  target_name=None,
134
- publish_job_logs=True,
134
+ redeploy_on_config_change=True,
135
135
  has_subscriber=True,
136
136
  auth_code=None,
137
137
  )
@@ -164,6 +164,7 @@ class TestSaasFileValid(TestCase):
164
164
  auto=True,
165
165
  publish=None,
166
166
  subscribe=None,
167
+ redeployOnPublisherConfigChange=None,
167
168
  promotion_data=None,
168
169
  soakDays=0,
169
170
  schedule="* * * * *",
@@ -190,6 +191,7 @@ class TestSaasFileValid(TestCase):
190
191
  publish=None,
191
192
  subscribe=None,
192
193
  promotion_data=None,
194
+ redeployOnPublisherConfigChange=None,
193
195
  soakDays=0,
194
196
  schedule="* * * * *",
195
197
  )
@@ -790,6 +790,9 @@ class TerraformClient: # pylint: disable=too-many-public-methods
790
790
 
791
791
  blue_green_update = after.get("blue_green_update", [])
792
792
  if blue_green_update and blue_green_update[0]["enabled"]:
793
+ changed_fields = self._resource_diff_changed_fields(
794
+ "update", resource_change
795
+ )
793
796
  replica = before["replicas"] != [] or before["replicate_source_db"]
794
797
  self.validate_blue_green_update_requirements(
795
798
  account_name,
@@ -799,6 +802,7 @@ class TerraformClient: # pylint: disable=too-many-public-methods
799
802
  replica,
800
803
  before["parameter_group_name"],
801
804
  region_name,
805
+ changed_fields=changed_fields,
802
806
  )
803
807
 
804
808
  def validate_blue_green_update_requirements(
@@ -810,6 +814,7 @@ class TerraformClient: # pylint: disable=too-many-public-methods
810
814
  replica: bool,
811
815
  parameter_group: str,
812
816
  region_name: str,
817
+ changed_fields: set[str],
813
818
  ) -> None:
814
819
  min_supported_versions = {
815
820
  "mysql": [pkg_version.parse("5.7"), pkg_version.parse("8.0.15")],
@@ -862,6 +867,13 @@ class TerraformClient: # pylint: disable=too-many-public-methods
862
867
  )
863
868
  return
864
869
 
870
+ if "storage_type" in changed_fields or "allocated_storage" in changed_fields:
871
+ logging.error(
872
+ f"Cannot upgrade RDS instance: {resource_name}. "
873
+ f"Blue/green updates are not supported when 'storage_type' or 'allocated_storage' has changed."
874
+ )
875
+ return
876
+
865
877
 
866
878
  class TerraformPlanFailed(Exception):
867
879
  pass