Commit 247e908b authored by Robert Schmidt's avatar Robert Schmidt

Simplify UndeployObject() and GetDeployedObjects()

GetRunningServices() was returning all services, running or stopped.
Hence, rename to reflect what this function does, and rewrite slightly
to better capture what is actually happening. Also, don't return the
container ID, as we don't use it.

Call stop on all services, as we will down the deployment right after.
The list of services is still used to retrieve logs.

Remove a stray "return False", which would sometimes prevent us from
seeing all error messages.
parent 8cf7dd86
...@@ -165,25 +165,26 @@ def CopyinServiceLog(ssh, lSourcePath, svcName, wd_yaml, ctx): ...@@ -165,25 +165,26 @@ def CopyinServiceLog(ssh, lSourcePath, svcName, wd_yaml, ctx):
ssh.run(f'docker compose -f {wd_yaml} logs {svcName} --no-log-prefix &> {remote_filename}') ssh.run(f'docker compose -f {wd_yaml} logs {svcName} --no-log-prefix &> {remote_filename}')
return archiveArtifact(ssh, ctx, remote_filename) return archiveArtifact(ssh, ctx, remote_filename)
def GetRunningServices(ssh, file): def GetDeployedServices(ssh, file):
ret = ssh.run(f'docker compose -f {file} config --services') ret = ssh.run(f'docker compose -f {file} config --services')
if ret.returncode != 0: if ret.returncode != 0:
logging.error("could not get services")
return None return None
allServices = ret.stdout.splitlines() allServices = ret.stdout.splitlines()
running_services = [] deployed_services = []
for s in allServices: for s in allServices:
# outputs the hash if the container is running # outputs the hash if the container has been deployed (but might be stopped)
ret = ssh.run(f'docker compose -f {file} ps --all --quiet -- {s}') ret = ssh.run(f'docker compose -f {file} ps --all --quiet -- {s}', silent=True)
if ret.returncode != 0: if ret.returncode != 0:
logging.info(f"service {s}: {ret.stdout}") # error: should not happen as we iterate over docker-provided service list
logging.error(f"service {s}: {ret.stdout}")
elif ret.stdout == "": elif ret.stdout == "":
logging.warning(f"could not retrieve information for service {s}") logging.info(f"service {s} not deployed")
else: else:
c = ret.stdout c = ret.stdout
logging.debug(f'running service {s} with container id {c}') logging.info(f'service {s} with container id {c}')
running_services.append((s, c)) deployed_services.append(s)
logging.info(f'stopping services: {running_services}') return deployed_services
return running_services
def CheckLogs(self, filename, HTML, RAN): def CheckLogs(self, filename, HTML, RAN):
success = True success = True
...@@ -763,19 +764,19 @@ class Containerize(): ...@@ -763,19 +764,19 @@ class Containerize():
wd_yaml = f'{wd}/docker-compose.y*ml' wd_yaml = f'{wd}/docker-compose.y*ml'
with cls_cmd.getConnection(node) as ssh: with cls_cmd.getConnection(node) as ssh:
ExistEnvFilePrint(ssh, wd) ExistEnvFilePrint(ssh, wd)
services = GetRunningServices(ssh, wd_yaml) services = GetDeployedServices(ssh, wd_yaml)
copyin_res = None copyin_res = None
ssh.run(f'docker compose -f {wd_yaml} stop')
if services is not None: if services is not None:
all_serv = " ".join([s for s, _ in services]) copyin_res = [CopyinServiceLog(ssh, lSourcePath, s, wd_yaml, ctx) for s in services]
ssh.run(f'docker compose -f {wd_yaml} stop -- {all_serv}')
copyin_res = [CopyinServiceLog(ssh, lSourcePath, s, wd_yaml, ctx) for s, _ in services]
else: else:
logging.warning('could not identify services to stop => no log file') logging.warning('could not identify services to stop => no log file')
ssh.run(f'docker compose -f {wd_yaml} down -v') ssh.run(f'docker compose -f {wd_yaml} down -v')
ssh.run(f'rm {wd}/.env') ssh.run(f'rm {wd}/.env')
if not copyin_res: if not copyin_res:
HTML.CreateHtmlTestRowQueue('N/A', 'KO', ['Could not copy logfile(s)']) HTML.CreateHtmlTestRowQueue('N/A', 'KO', ['Could not copy logfile(s)'])
return False logging.error(f"could not copy all files: {copyin_res=} {services=}")
success = False
else: else:
log_results = [CheckLogs(self, f, HTML, RAN) for f in copyin_res] log_results = [CheckLogs(self, f, HTML, RAN) for f in copyin_res]
success = all(log_results) success = all(log_results)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment