[RECV-94] Separate docker/robot invoking 32/1132/1
authorNaga Sugguna <ns156u@att.com>
Fri, 5 Jul 2019 15:37:10 +0000 (10:37 -0500)
committerNaga Sugguna <ns156u@att.com>
Fri, 5 Jul 2019 16:13:47 +0000 (11:13 -0500)
Change-Id: I3dbeda2c11be09fbb250417042c6f76a01c92d0f
Signed-off-by: Naga Sugguna <ns156u@att.com>
bluval/blucon.py [new file with mode: 0644]
bluval/bluutil.py [new file with mode: 0644]
bluval/bluval.py

diff --git a/bluval/blucon.py b/bluval/blucon.py
new file mode 100644 (file)
index 0000000..5d7406b
--- /dev/null
@@ -0,0 +1,95 @@
+#!/usr/bin/python3
+##############################################################################
+# Copyright (c) 2019 AT&T Intellectual Property.                             #
+# Copyright (c) 2019 Nokia.                                                  #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License.                   #
+#                                                                            #
+# You may obtain a copy of the License at                                    #
+#       http://www.apache.org/licenses/LICENSE-2.0                           #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  #
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.           #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+##############################################################################
+"""This module parses yaml file, reads layers runs container for each layer.
+"""
+
+import subprocess
+import sys
+import traceback
+from pathlib import Path
+
+import click
+import yaml
+
+from bluutil import BluvalError
+from bluutil import ShowStopperError
+
+def invoke_docker(bluprint, layer):
+    """Start docker container for given layer
+    """
+    cmd = ("docker run"
+           " -v $HOME/.ssh:/root/.ssh"
+           " -v $HOME/.kube/config:/root/.kube/config"
+           " -v $VALIDATION_HOME/tests/variables.yaml:"
+           "/opt/akraino/validation/tests/variables.yaml"
+           " -v $AKRAINO_HOME/results:/opt/akraino/results"
+           " akraino/validation:{0}-latest"
+           " bin/sh -c"
+           " 'cd /opt/akraino/validation "
+           "&& python bluval/bluval.py -l {0} {1}'").format(layer, bluprint)
+    args = [cmd]
+    try:
+        print('Invoking {}'.format(args))
+        subprocess.call(args, shell=True)
+    except OSError:
+        #print('Error while executing {}'.format(args))
+        raise BluvalError(OSError)
+
+
+def invoke_dockers(yaml_loc, layer, blueprint_name):
+    """Parses yaml file and starts docker container for one/all layers
+    """
+    with open(str(yaml_loc)) as yaml_file:
+        yamldoc = yaml.safe_load(yaml_file)
+    blueprint = yamldoc['blueprint']
+    if layer is None or layer == "all":
+        for each_layer in blueprint['layers']:
+            invoke_docker(blueprint_name, each_layer)
+    else:
+        invoke_docker(blueprint_name, layer)
+
+
+@click.command()
+@click.argument('blueprint')
+@click.option('--layer', '-l')
+def main(blueprint, layer):
+    """Takes blueprint name and optional layer. Validates inputs and derives
+    yaml location from blueprint name. Invokes validate on blue print.
+    """
+    mypath = Path(__file__).absolute()
+    yaml_loc = mypath.parents[0].joinpath('bluval-{}.yaml'.format(blueprint))
+    if layer is not None:
+        layer = layer.lower()
+    try:
+        invoke_dockers(yaml_loc, layer, blueprint)
+    except ShowStopperError as err:
+        print('ShowStopperError:', err)
+    except BluvalError as err:
+        print('Unexpected BluvalError', err)
+        raise
+    except:
+        print("Exception in user code:")
+        print("-"*60)
+        traceback.print_exc(file=sys.stdout)
+        print("-"*60)
+        raise
+
+
+if __name__ == "__main__":
+    # pylint: disable=no-value-for-parameter
+    main()
diff --git a/bluval/bluutil.py b/bluval/bluutil.py
new file mode 100644 (file)
index 0000000..1f8da59
--- /dev/null
@@ -0,0 +1,29 @@
+#!/usr/bin/python3
+##############################################################################
+# Copyright (c) 2019 AT&T Intellectual Property.                             #
+# Copyright (c) 2019 Nokia.                                                  #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License.                   #
+#                                                                            #
+# You may obtain a copy of the License at                                    #
+#       http://www.apache.org/licenses/LICENSE-2.0                           #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  #
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.           #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+##############################################################################
+"""This module some utility classes.
+"""
+
+
+class BluvalError(Exception):
+    """Base class for exceptions in this module."""
+    pass
+
+
+class ShowStopperError(Exception):
+    """Showstopper test case failed"""
+    pass
index 1580a40..a0f02d2 100644 (file)
@@ -20,20 +20,15 @@ testcase
 """
 
 import subprocess
 """
 
 import subprocess
-from pathlib import Path
 import sys
 import traceback
 import sys
 import traceback
+from pathlib import Path
+
 import click
 import yaml
 
 import click
 import yaml
 
-class BluvalError(Exception):
-    """Base class for exceptions in this module."""
-    pass
-
-
-class ShowStopperError(Exception):
-    """Showstopper test case failed"""
-    pass
+from bluutil import BluvalError
+from bluutil import ShowStopperError
 
 
 def run_testcase(testcase):
 
 
 def run_testcase(testcase):
@@ -48,8 +43,10 @@ def run_testcase(testcase):
     show_stopper = testcase.get('show_stopper', "False")
     what = testcase.get('what')
     mypath = Path(__file__).absolute()
     show_stopper = testcase.get('show_stopper', "False")
     what = testcase.get('what')
     mypath = Path(__file__).absolute()
-    results_path = mypath.parents[2].joinpath("results/"+testcase.get('layer')+"/"+what)
-    test_path = mypath.parents[1].joinpath("tests/"+testcase.get('layer')+"/"+what)
+    results_path = mypath.parents[2].joinpath(
+        "results/"+testcase.get('layer')+"/"+what)
+    test_path = mypath.parents[1].joinpath(
+        "tests/"+testcase.get('layer')+"/"+what)
 
     # add to the variables file the path to where to sotre the logs
     variables_file = mypath.parents[1].joinpath("tests/variables.yaml")
 
     # add to the variables file the path to where to sotre the logs
     variables_file = mypath.parents[1].joinpath("tests/variables.yaml")
@@ -58,7 +55,8 @@ def run_testcase(testcase):
     variables_file.write_text(str(variables_dict))
 
     # run the test
     variables_file.write_text(str(variables_dict))
 
     # run the test
-    args = ["robot", "-V", str(variables_file), "-d", str(results_path), str(test_path)]
+    args = ["robot", "-V", str(variables_file), "-d",
+            str(results_path), str(test_path)]
 
     print('Executing testcase {}'.format(name))
     print('show_stopper {}'.format(show_stopper))
 
     print('Executing testcase {}'.format(name))
     print('show_stopper {}'.format(show_stopper))
@@ -71,6 +69,7 @@ def run_testcase(testcase):
         #print('Error while executing {}'.format(args))
         raise BluvalError(OSError)
 
         #print('Error while executing {}'.format(args))
         raise BluvalError(OSError)
 
+
 def validate_layer(blueprint, layer):
     """validates a layer by validating all testcases under that layer
     """
 def validate_layer(blueprint, layer):
     """validates a layer by validating all testcases under that layer
     """
@@ -87,53 +86,13 @@ def validate_blueprint(yaml_loc, layer):
     with open(str(yaml_loc)) as yaml_file:
         yamldoc = yaml.safe_load(yaml_file)
     blueprint = yamldoc['blueprint']
     with open(str(yaml_loc)) as yaml_file:
         yamldoc = yaml.safe_load(yaml_file)
     blueprint = yamldoc['blueprint']
-    if layer is None or layer == "all":
-        for each_layer in blueprint['layers']:
-            validate_layer(blueprint, each_layer)
-    else:
-        validate_layer(blueprint, layer)
-
-
-def invoke_docker(bluprint, layer):
-    """Start docker container for given layer
-    """
-    cmd = ("docker run"
-           " -v $HOME/.ssh:/root/.ssh"
-           " -v $HOME/.kube/config:/root/.kube/config"
-           " -v $VALIDATION_HOME/tests/variables.yaml:"
-           "/opt/akraino/validation/tests/variables.yaml"
-           " -v $AKRAINO_HOME/results:/opt/akraino/results"
-           " akraino/validation:{0}-latest"
-           " bin/sh -c"
-           " 'cd /opt/akraino/validation "
-           "&& python bluval/bluval.py -l {0} {1}'").format(layer, bluprint)
-    args = [cmd]
-    try:
-        print('Invoking {}'.format(args))
-        subprocess.call(args, shell=True)
-    except OSError:
-        #print('Error while executing {}'.format(args))
-        raise BluvalError(OSError)
-
-
-def invoke_dockers(yaml_loc, layer, blueprint_name):
-    """Parses yaml file and starts docker container for one/all layers
-    """
-    with open(str(yaml_loc)) as yaml_file:
-        yamldoc = yaml.safe_load(yaml_file)
-    blueprint = yamldoc['blueprint']
-    if layer is None or layer == "all":
-        for each_layer in blueprint['layers']:
-            invoke_docker(blueprint_name, each_layer)
-    else:
-        invoke_docker(blueprint_name, layer)
+    validate_layer(blueprint, layer)
 
 
 @click.command()
 @click.argument('blueprint')
 @click.option('--layer', '-l')
 
 
 @click.command()
 @click.argument('blueprint')
 @click.option('--layer', '-l')
-@click.option('--delegate', '-d', is_flag=True)
-def main(blueprint, layer, delegate):
+def main(blueprint, layer):
     """Takes blueprint name and optional layer. Validates inputs and derives
     yaml location from blueprint name. Invokes validate on blue print.
     """
     """Takes blueprint name and optional layer. Validates inputs and derives
     yaml location from blueprint name. Invokes validate on blue print.
     """
@@ -142,10 +101,7 @@ def main(blueprint, layer, delegate):
     if layer is not None:
         layer = layer.lower()
     try:
     if layer is not None:
         layer = layer.lower()
     try:
-        if delegate is not None:
-            invoke_dockers(yaml_loc, layer, blueprint)
-        else:
-            validate_blueprint(yaml_loc, layer)
+        validate_blueprint(yaml_loc, layer)
     except ShowStopperError as err:
         print('ShowStopperError:', err)
     except BluvalError as err:
     except ShowStopperError as err:
         print('ShowStopperError:', err)
     except BluvalError as err:
@@ -158,6 +114,7 @@ def main(blueprint, layer, delegate):
         print("-"*60)
         raise
 
         print("-"*60)
         raise
 
+
 if __name__ == "__main__":
     # pylint: disable=no-value-for-parameter
     main()
 if __name__ == "__main__":
     # pylint: disable=no-value-for-parameter
     main()