qontract-reconcile 0.10.1rc1114__py3-none-any.whl → 0.10.1rc1115__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.1rc1114
3
+ Version: 0.10.1rc1115
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
@@ -467,12 +467,12 @@ reconcile/skupper_network/site_controller.py,sha256=FHVJ72h88VUEga4WH-WltkqovddN
467
467
  reconcile/statuspage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
468
468
  reconcile/statuspage/atlassian.py,sha256=41uE77ZeV0M98k_xVmrXUQ33iVG8Lb3TwrWq2pRc84U,18617
469
469
  reconcile/statuspage/integration.py,sha256=hsazrQMceJbr61nEkJLxJbHhudTGtFuH0mlCo66-2ug,711
470
- reconcile/statuspage/page.py,sha256=k2CeosPG3EhTMSD_OFGm7AfDNX7zqWiibhraYqIIklg,5257
470
+ reconcile/statuspage/page.py,sha256=EWzu7rYjS6QJzgjKmfSV5pGmCAzFR3U5HGiN9ytblog,5375
471
471
  reconcile/statuspage/state.py,sha256=wjX9by5Yy7nobxiE-xNhf6GyNwMVATd0O37jBckJm5M,1591
472
472
  reconcile/statuspage/status.py,sha256=5nYtMaxOqMYdM7n_Glss3ZcaPKQe_nUUQKH6xCTE9rI,2741
473
473
  reconcile/statuspage/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
474
474
  reconcile/statuspage/integrations/components.py,sha256=49KHd_E9AdRvcEA6n75q1McZv2LfN-hRsW-WA7dgw9g,2651
475
- reconcile/statuspage/integrations/maintenances.py,sha256=sAFkZ6CvmA5L391SY80igzTktjE8Z4C12Vzcr_9h0xY,4158
475
+ reconcile/statuspage/integrations/maintenances.py,sha256=8vM0cComM1m-VKIW7NrgprZrix-zLta8-muqriEF09o,4310
476
476
  reconcile/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
477
477
  reconcile/templates/aws_access_key_email.j2,sha256=2MUr1ERmyISzKgHqsWYLd-1Wbl-peUa-FsGUS-JLUFc,238
478
478
  reconcile/templates/email.yml.j2,sha256=OZgczNRgXPj2gVYTgwQyHAQrMGu7xp-e4W1rX19GcrU,690
@@ -869,8 +869,8 @@ tools/test/test_qontract_cli.py,sha256=_D61RFGAN5x44CY1tYbouhlGXXABwYfxKSWSQx3Jr
869
869
  tools/test/test_saas_promotion_state.py,sha256=dy4kkSSAQ7bC0Xp2CociETGN-2aABEfL6FU5D9Jl00Y,6056
870
870
  tools/test/test_sd_app_sre_alert_report.py,sha256=v363r9zM7__0kR5K6mvJoGFcM9BvE33fWAayrqkpojA,2116
871
871
  tools/test/test_sre_checkpoints.py,sha256=SKqPPTl9ua0RFdSSofnoQX-JZE6dFLO3LRhfQzqtfh8,2607
872
- qontract_reconcile-0.10.1rc1114.dist-info/METADATA,sha256=vn63-28mfgbBR3tbkdYLhiq552vpOX4DGe0LqDP4rZQ,2213
873
- qontract_reconcile-0.10.1rc1114.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
874
- qontract_reconcile-0.10.1rc1114.dist-info/entry_points.txt,sha256=GKQqCl2j2X1BJQ69een6rHcR26PmnxnONLNOQB-nRjY,491
875
- qontract_reconcile-0.10.1rc1114.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
876
- qontract_reconcile-0.10.1rc1114.dist-info/RECORD,,
872
+ qontract_reconcile-0.10.1rc1115.dist-info/METADATA,sha256=7Qo-iWGfVILkQKNBZ3KcqKtqjd8P6UXZDtKW1FzjKfw,2213
873
+ qontract_reconcile-0.10.1rc1115.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
874
+ qontract_reconcile-0.10.1rc1115.dist-info/entry_points.txt,sha256=GKQqCl2j2X1BJQ69een6rHcR26PmnxnONLNOQB-nRjY,491
875
+ qontract_reconcile-0.10.1rc1115.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
876
+ qontract_reconcile-0.10.1rc1115.dist-info/RECORD,,
@@ -80,6 +80,7 @@ class StatusPageMaintenancesIntegration(QontractReconcileIntegration[NoParams]):
80
80
  for m in p.maintenances or []
81
81
  if datetime.fromisoformat(m.scheduled_start) > now
82
82
  ]
83
+ desired_state = sorted(desired_state, key=lambda d: d.name)
83
84
  page_provider = AtlassianStatusPageProvider.init_from_page(
84
85
  page=p,
85
86
  token=self.secret_reader.read_secret(p.credentials),
@@ -90,6 +91,7 @@ class StatusPageMaintenancesIntegration(QontractReconcileIntegration[NoParams]):
90
91
  for m in page_provider.scheduled_maintenances
91
92
  if page_provider.has_component_binding_for(m.name)
92
93
  ]
94
+ current_state = sorted(current_state, key=lambda c: c.name)
93
95
  self.reconcile(
94
96
  dry_run=dry_run,
95
97
  desired_state=desired_state,
@@ -146,20 +146,24 @@ class StatusMaintenance(BaseModel):
146
146
  for c in page_components
147
147
  if c.app.name in affected_services
148
148
  ]
149
- if affected_components:
150
- statuspage_announcements = [
151
- StatusMaintenanceAnnouncement.init_from_announcement(
152
- cast(MaintenanceStatuspageAnnouncementV1, m)
153
- )
154
- for m in maintenance.announcements or []
155
- if m.provider == PROVIDER_NAME
156
- ]
157
- else:
158
- statuspage_announcements = [StatusMaintenanceAnnouncement()]
149
+ if not affected_components:
150
+ raise ValueError(
151
+ f"No StatusPage component found for maintenance '{maintenance.name}'"
152
+ f"via apps {affected_services}. Please define at least one StatusPage component."
153
+ )
154
+
155
+ statuspage_announcements = [
156
+ StatusMaintenanceAnnouncement.init_from_announcement(
157
+ cast(MaintenanceStatuspageAnnouncementV1, m)
158
+ )
159
+ for m in maintenance.announcements or []
160
+ if m.provider == PROVIDER_NAME
161
+ ]
159
162
  if len(statuspage_announcements) != 1:
160
163
  raise ValueError(
161
- f"Maintenanace announcements must include exactly one item of provider {PROVIDER_NAME}"
164
+ f"Maintenance announcements must include exactly one item of provider {PROVIDER_NAME}"
162
165
  )
166
+
163
167
  return cls(
164
168
  name=maintenance.name,
165
169
  message=maintenance.message.rstrip("\n"),