Add grab version func

Change-Id: I942db548d9df5273da7bb2155fadd06f09b45384
diff --git a/tcp_tests/fixtures/underlay_fixtures.py b/tcp_tests/fixtures/underlay_fixtures.py
index e1420b5..a1476e3 100644
--- a/tcp_tests/fixtures/underlay_fixtures.py
+++ b/tcp_tests/fixtures/underlay_fixtures.py
@@ -196,3 +196,26 @@
         underlay = underlay_ssh_manager.UnderlaySSHManager(config)
 
     return underlay
+
+
+@pytest.fixture(scope='function', autouse=True)
+def grab_versions(request, underlay):
+    """Fixture for grab package versions at the end of test
+
+    Marks:
+        grab_versions(name=None) - make snapshot if test is passed. If
+        name argument provided, it will be used for creating data,
+        otherwise, test function name will be used
+
+    """
+    grab_version = request.keywords.get('grab_versions', None)
+
+    def test_fin():
+        default_name = getattr(request.node.function, '_name',
+                               request.node.function.__name__)
+        if hasattr(request.node, 'rep_call') and request.node.rep_call.passed \
+                and grab_version:
+            artifact_name = utils.extract_name_from_mark(grab_version) or \
+                "{}".format(default_name)
+            underlay.get_logs(artifact_name)
+    request.addfinalizer(test_fin)
diff --git a/tcp_tests/managers/underlay_ssh_manager.py b/tcp_tests/managers/underlay_ssh_manager.py
index 53f5aee..12ea22d 100644
--- a/tcp_tests/managers/underlay_ssh_manager.py
+++ b/tcp_tests/managers/underlay_ssh_manager.py
@@ -12,6 +12,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+import os
 import random
 import StringIO
 
@@ -22,6 +23,7 @@
 import yaml
 
 from tcp_tests import logger
+from tcp_tests.helpers import ext
 from tcp_tests.helpers import utils
 
 LOG = logger.logger
@@ -390,3 +392,40 @@
         }
         template = utils.render_template(file_path, options=options)
         return yaml.load(template)
+
+    def get_logs(self, artifact_name,
+                 node_role=ext.UNDERLAY_NODE_ROLES.salt_master):
+        master_node = [ssh for ssh in self.config_ssh
+                       if node_role in ssh['roles']][0]
+        cmd = ("dpkg -l | grep formula > "
+               "/var/log/{0}_packages.output".format(master_node['node_name']))
+
+        tar_cmd = ('tar --absolute-names'
+                   ' --warning=no-file-changed '
+                   '-czf {t} {d}'.format(
+            t='{0}_log.tar.gz'.format(artifact_name), d='/var/log'))
+        minion_nodes = [ssh for ssh in self.config_ssh
+                        if node_role not in ssh['roles']]
+        for node in minion_nodes:
+            with self.remote(host=node['host']) as r_node:
+                r_node.check_call(('tar '
+                                   '--absolute-names '
+                                   '--warning=no-file-changed '
+                                   '-czf {t} {d}'.format(
+                    t='{0}.tar.gz'.format(node['node_name']), d='/var/log')),
+                    verbose=True, raise_on_err=False)
+        with self.remote(master_node['node_name']) as r:
+            for node in minion_nodes:
+                packages_minion_cmd = ("salt '{0}*' cmd.run "
+                                       "'dpkg -l' > /var/log/"
+                                       "{0}_packages.output".format(
+                    node['node_name']))
+                r.check_call(packages_minion_cmd)
+                r.check_call("rsync {0}:/root/*.tar.gz "
+                             "/var/log/".format(node['node_name']),
+                             verbose=True, raise_on_err=False)
+            r.check_call(cmd)
+
+            r.check_call(tar_cmd)
+            r.download(destination='{0}_log.tar.gz'.format(artifact_name),
+                       target=os.getcwd())
diff --git a/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py b/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py
index 7f2daf5..eb33a2f 100644
--- a/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py
+++ b/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py
@@ -24,6 +24,7 @@
 class Test_Mcp11_install(object):
     """Test class for testing mcp11 vxlan deploy"""
 
+    @pytest.mark.grab_versions
     @pytest.mark.fail_snapshot
     @pytest.mark.cz8119
     def test_mcp11_ocata_ovs_install(self, underlay,