Skip to content

Commit 8a8843b

Browse files
authored
chore(controller): update release state when force deploy (#194)
* chore(controller): update release state when force deploy * chore(controller): frequent cert detach may lead to gateway patch 409 sometime * chore(controller): config detach unexpected ptype
1 parent c2156e1 commit 8a8843b

5 files changed

Lines changed: 16 additions & 9 deletions

File tree

rootfs/api/models/app.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ def pipeline(self, release, ptypes, force_deploy=False):
312312
if not rollback_on_failure:
313313
self.log(f"{prefix} deploy do not rollback on failure")
314314
self.deploy(release, ptypes, force_deploy, rollback_on_failure)
315-
if release.state == "created":
315+
if release.state in ["created", "crashed"]:
316316
release.state = "succeed"
317317
ptypes = list(ptypes) if ptypes is not None else ptypes
318318
release.add_condition(state="succeed", action="pipeline", ptypes=ptypes)

rootfs/api/models/gateway.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,17 @@ def refresh_to_k8s(self):
105105
data = self.scheduler.gateways.get(self.app.id, self.name).json()
106106
if len(kwargs["listeners"]) > 0:
107107
kwargs["version"] = data["metadata"]["resourceVersion"]
108-
self.scheduler.gateways.patch(self.app.id, self.name, **kwargs)
108+
response = self.scheduler.gateways.patch(self.app.id, self.name, **kwargs)
109+
if response.status_code == 409:
110+
raise ServiceUnavailable(f'Kubernetes gateway could not be patched: {response.status_code} {response.reason}, please retry') # noqa
109111
else:
110112
logger.debug("delete k8s resource when listeners are empty")
111113
self.scheduler.gateways.delete(
112114
self.app.id, self.name, ignore_exception=True)
113115
except KubeException:
114116
if len(kwargs["listeners"]) > 0:
117+
if "version" in kwargs:
118+
kwargs.pop("version")
115119
self.scheduler.gateways.create(self.app.id, self.name, **kwargs)
116120
else:
117121
logger.debug("skip creating k8s resource when listeners are empty")

rootfs/api/views.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -445,9 +445,10 @@ def delete(self, request, **kwargs):
445445

446446
config = self.model(app=self.get_app(), owner=self.request.user, values_refs={})
447447
old_values_refs = config.previous().values_refs.copy()
448-
for ptype, groups in values_refs.items():
449-
for group in old_values_refs.get(ptype, []):
450-
if group not in groups:
448+
for ptype, old_groups in old_values_refs.items():
449+
groups_to_delete = values_refs.get(ptype, [])
450+
for group in old_groups:
451+
if group not in groups_to_delete:
451452
if ptype not in config.values_refs:
452453
config.values_refs[ptype] = [group]
453454
elif group not in config.values_refs[ptype]:

rootfs/scheduler/resources/deployment.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ def in_progress(self, namespace, name, timeout, batches, replicas, tags):
284284
namespace,
285285
'Deployment {} had stalled due an error and will be rolled back. {}'.format(
286286
name, str(e)),
287-
level='DEBUG'
287+
level=logging.DEBUG
288288
)
289289
return False, True
290290

@@ -305,7 +305,7 @@ def in_progress(self, namespace, name, timeout, batches, replicas, tags):
305305
namespace,
306306
'Deploy operation for Deployment {} in has expired. '
307307
'Rolling back to last good known release'.format(name),
308-
level='DEBUG',
308+
level=logging.DEBUG,
309309
)
310310
return False, True
311311

rootfs/scheduler/resources/gateway.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,10 @@ def patch(self, namespace, name, ignore_exception=False, **kwargs):
5959
json=data,
6060
headers={"Content-Type": "application/merge-patch+json"}
6161
)
62+
if response.status_code == 409:
63+
return response
6264
if not ignore_exception and self.unhealthy(response.status_code):
63-
raise KubeHTTPException(response, "put gateway {}".format(namespace))
65+
raise KubeHTTPException(response, "patch gateway {}".format(namespace))
6466
return response
6567

6668
def delete(self, namespace, name, ignore_exception=True):
@@ -128,7 +130,7 @@ def patch(self, namespace, name, ignore_exception=False, **kwargs):
128130
headers={"Content-Type": "application/merge-patch+json"}
129131
)
130132
if not ignore_exception and self.unhealthy(response.status_code):
131-
raise KubeHTTPException(response, "put {} {}".format(self.kind.lower(), namespace))
133+
raise KubeHTTPException(response, "patch {} {}".format(self.kind.lower(), namespace))
132134
return response
133135

134136
def delete(self, namespace, name, ignore_exception=True):

0 commit comments

Comments
 (0)