Delete initialization job before undeploying

To reduce potential conflicts between the cleanup job
and the initialization job.
This commit is contained in:
Stéphane Bidoul 2021-10-31 17:10:41 +01:00
parent 62bdcb6cd6
commit 5a4f2ad83a
No known key found for this signature in database
GPG key ID: BCAB2555446B5B92
2 changed files with 12 additions and 7 deletions

View file

@ -79,7 +79,7 @@ class DeploymentMode(str, Enum):
class DeploymentVars(BaseModel): class DeploymentVars(BaseModel):
namespace: str namespace: str
mode: str mode: DeploymentMode
build_name: str build_name: str
repo: str repo: str
target_branch: str target_branch: str
@ -178,7 +178,7 @@ async def delete_resources(build_name: str) -> None:
) )
async def delete_job(build_name: str, job_kind: str) -> None: async def delete_job(build_name: str, job_kind: DeploymentMode) -> None:
await _kubectl( await _kubectl(
[ [
"-n", "-n",

View file

@ -156,7 +156,7 @@ class Build(BaseModel):
return return
elif self.status == BuildStatus.failed: elif self.status == BuildStatus.failed:
_logger.info(f"Marking failed {self} for reinitialization.") _logger.info(f"Marking failed {self} for reinitialization.")
await k8s.delete_job(self.name, job_kind="initialize") await k8s.delete_job(self.name, job_kind=k8s.DeploymentMode.initialize)
await self._patch(init_status=BuildInitStatus.todo, desired_replicas=0) await self._patch(init_status=BuildInitStatus.todo, desired_replicas=0)
elif self.status == BuildStatus.stopped: elif self.status == BuildStatus.stopped:
_logger.info(f"Starting {self} that was last scaled on {self.last_scaled}.") _logger.info(f"Starting {self} that was last scaled on {self.last_scaled}.")
@ -170,8 +170,9 @@ class Build(BaseModel):
_logger.info(f"Ignoring stop command for {self} that is not started.") _logger.info(f"Ignoring stop command for {self} that is not started.")
async def initialize(self) -> None: async def initialize(self) -> None:
# Start initizalization job. on_init_started/on_init_succeeded/on_init_failed """Initialize a build."""
# will be callsed back when it starts/succeeds/fails. # Start initizalization job. on_initialize_{started,succeeded,failed} callbacks
# will follow from job events.
_logger.info(f"Deploying initialize job for {self}.") _logger.info(f"Deploying initialize job for {self}.")
deployment_vars = k8s.make_deployment_vars( deployment_vars = k8s.make_deployment_vars(
k8s.DeploymentMode.initialize, k8s.DeploymentMode.initialize,
@ -187,8 +188,12 @@ class Build(BaseModel):
async def undeploy(self) -> None: async def undeploy(self) -> None:
"""Undeploy a build.""" """Undeploy a build."""
await self.stop() # Delete the initialization job to reduce conflict with the cleanup job.
# Start cleanup job. on_cleanup_XXX callbacks will follow. await k8s.delete_job(self.name, job_kind=k8s.DeploymentMode.initialize)
# Be sure it is stopped.
await self._patch(desired_replicas=0)
# Start cleanup job. on_cleanup_{started,succeeded,failed} callbacks will follow
# from job events.
_logger.info(f"Deploying cleanup job for {self}.") _logger.info(f"Deploying cleanup job for {self}.")
deployment_vars = k8s.make_deployment_vars( deployment_vars = k8s.make_deployment_vars(
k8s.DeploymentMode.cleanup, k8s.DeploymentMode.cleanup,