qontract-reconcile 0.10.1rc1113__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.1rc1113
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
@@ -702,7 +702,7 @@ reconcile/utils/oc.py,sha256=AjwQnzLxnMv0ML70GfjTHeYmiNsztI8kgXQF3N0Hvfw,66088
702
702
  reconcile/utils/oc_connection_parameters.py,sha256=7DiEGo--TJelfYoZXJFyTBPeTw9kXL3L58vy2fiJnes,9643
703
703
  reconcile/utils/oc_filters.py,sha256=Tz3OwtbUaYKmxENFls5CtPVzkZDeFXknw53dJe-wbT8,1382
704
704
  reconcile/utils/oc_map.py,sha256=U8cYhiaZsomkofzbIjVrl7E7crRxkS2JKsFpVeeHVE8,8964
705
- reconcile/utils/ocm_base_client.py,sha256=t5xwO-atG3e64tiMFLF5Szzcq1KLYf4g7g294YmaeMo,6332
705
+ reconcile/utils/ocm_base_client.py,sha256=ntBCtm-njkGsI_wMpdLk5iLukbKz1zKNyo4rCWlKxFU,6427
706
706
  reconcile/utils/openshift_resource.py,sha256=ZyQ436YdV80nvKGPuzYyYLLJj8Abjnb3e_PsejxBTNM,24715
707
707
  reconcile/utils/openssl.py,sha256=QVvhzhpChq_4Daf_5wE1qeZJr4thg3DDjJPn4bOPD4E,365
708
708
  reconcile/utils/output.py,sha256=xh2Not-Xm97KeRx_J5nc2PP5tDwpDLZBeCrWI0S-al4,2034
@@ -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.1rc1113.dist-info/METADATA,sha256=LJxCt1WmYLBNl5XvtV_mNedg6BB6ETu4q7Ojm8WUfaE,2213
873
- qontract_reconcile-0.10.1rc1113.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
874
- qontract_reconcile-0.10.1rc1113.dist-info/entry_points.txt,sha256=GKQqCl2j2X1BJQ69een6rHcR26PmnxnONLNOQB-nRjY,491
875
- qontract_reconcile-0.10.1rc1113.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
876
- qontract_reconcile-0.10.1rc1113.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"),
@@ -142,7 +142,11 @@ class OCMBaseClient:
142
142
  def delete(self, api_path: str):
143
143
  ocm_request.labels(verb="DELETE", client_id=self._access_token_client_id).inc()
144
144
  r = self._session.delete(f"{self._url}{api_path}", timeout=REQUEST_TIMEOUT_SEC)
145
- r.raise_for_status()
145
+ try:
146
+ r.raise_for_status()
147
+ except Exception:
148
+ logging.error(r.text)
149
+ raise
146
150
 
147
151
  def close(self) -> None:
148
152
  self._session.close()