blucon: Add argument '-p' for pulling latest tag 82/3382/2
authorAlexandru Avadanii <Alexandru.Avadanii@enea.com>
Wed, 22 Apr 2020 13:14:47 +0000 (15:14 +0200)
committerAlexandru Avadanii <Alexandru.Avadanii@enea.com>
Wed, 22 Apr 2020 14:07:12 +0000 (16:07 +0200)
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 <Alexandru.Avadanii@enea.com>
bluval/blucon.py

index ee7f706..8072382 100644 (file)
@@ -29,6 +29,7 @@ import yaml
 from bluutil import BluvalError
 from bluutil import ShowStopperError
 
 from bluutil import BluvalError
 from bluutil import ShowStopperError
 
+_PULL = False
 _OPTIONAL_ALSO = False
 _SUBNET = ""
 
 _OPTIONAL_ALSO = False
 _SUBNET = ""
 
@@ -53,9 +54,25 @@ def get_volumes(layer):
     return volume_list
 
 
     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
     """
 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}"
     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)
 @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.
     """
     """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()
     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))
     if optional_also:
         _OPTIONAL_ALSO = True
         print("_OPTIONAL_ALSO {}".format(_OPTIONAL_ALSO))