You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
1.9 KiB

import subprocess
from utils import *
DOCKERFILES = {
'u_agent': {
'ctx': '../bin/u_agent',
},
'u_server': {
'ctx': '../bin/u_server'
},
'tests_runner': {
'ctx': './',
'dockerfile_prefix': 'tests_runner'
},
}
def docker(args):
try:
cmd = ['docker'] + args
#log(f'Running docker cmd: {cmd}')
return subprocess.check_output(
cmd
)
except subprocess.CalledProcessError as e:
err(str(e))
raise
def print_errors(errors):
err_msg = '\n'.join(
' {container}: {error}'.format(container=item['container'],
error=item['error'])
for item in errors)
err('There are some errors in next containers:\n%s' % err_msg)
def check_state(containers):
errors = []
for container in containers:
ret, out = subprocess.getstatusoutput(
'docker inspect --format \'{{ .State.Running }}\' %s'
% container)
out = out.strip()
if ret == 0:
if out == 'true':
continue
else:
errors.append({'container': container,
'error': 'Bad state: Running=%s' % out})
else:
errors.append({'container': container,
'error': out})
return errors
def rebuild_images_if_needed(force_rebuild=False):
for img_name, data in DOCKERFILES.items():
ctx = data['ctx']
df_prefix = data.get('dockerfile_prefix')
df_suffix = 'Dockerfile'
img_name = f'unki/{img_name}'
log(f'Building docker image {img_name}')
cmd = [
'build',
'-t',
img_name,
ctx,
]
if df_prefix:
cmd += ['-f', f'{ctx}/{df_prefix}.{df_suffix}']
if force_rebuild:
cmd += ['--no-cache']
docker(cmd)