From fbde8757f3d54d62cf5ba8adf2789a338540871e Mon Sep 17 00:00:00 2001 From: Alexandru Avadanii Date: Wed, 22 Apr 2020 15:14:47 +0200 Subject: [PATCH] blucon: Add argument '-p' for pulling latest tag If `--pull` or `-p` argument is passed to blucon, it will now run a `docker pull` command prior to launching the testcases with `docker run`. This should prevent the testcases from using stale docker images if already present on the machine. JIRA: VAL-107 Change-Id: Id4b7947a0de7abf07f69812c6deef71919b9041a Signed-off-by: Alexandru Avadanii --- bluval/blucon.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/bluval/blucon.py b/bluval/blucon.py index ee7f706..8072382 100644 --- a/bluval/blucon.py +++ b/bluval/blucon.py @@ -29,6 +29,7 @@ import yaml from bluutil import BluvalError from bluutil import ShowStopperError +_PULL = False _OPTIONAL_ALSO = False _SUBNET = "" @@ -53,9 +54,25 @@ def get_volumes(layer): return volume_list +def pull_docker(layer, tag): + """Pull docker image for given layer + """ + cmd = ("docker pull akraino/validation:{0}-{1}" + .format(layer, tag)) + + args = [cmd] + try: + print('\nPulling image using {}'.format(args), flush=True) + subprocess.call(args, shell=True) + except OSError: + raise BluvalError(OSError) + + def invoke_docker(bluprint, layer, tag): """Start docker container for given layer """ + if _PULL: + pull_docker(layer, tag) volume_list = get_volumes('common') + get_volumes(layer) cmd = ("docker run --rm" + volume_list + _SUBNET + " akraino/validation:{0}-{3}" @@ -92,16 +109,22 @@ def invoke_dockers(yaml_loc, layer, blueprint_name, tag): @click.option('--network', '-n') @click.option('--tag', '-t') @click.option('--optional_also', '-o', is_flag=True) -def main(blueprint, layer, network, tag, optional_also): +@click.option('--pull', '-p', is_flag=True) +# pylint: disable=too-many-arguments +def main(blueprint, layer, network, tag, optional_also, pull): """Takes blueprint name and optional layer. Validates inputs and derives yaml location from blueprint name. Invokes validate on blueprint. """ + global _PULL # pylint: disable=global-statement global _OPTIONAL_ALSO # pylint: disable=global-statement global _SUBNET # pylint: disable=global-statement mypath = Path(__file__).absolute() yaml_loc = mypath.parents[0].joinpath('bluval-{}.yaml'.format(blueprint)) if layer is not None: layer = layer.lower() + if pull: + _PULL = True + print("_PULL {}".format(_PULL)) if optional_also: _OPTIONAL_ALSO = True print("_OPTIONAL_ALSO {}".format(_OPTIONAL_ALSO)) -- 2.16.6