update from RIFT as of 696b75d2fe9fb046261b08c616f1bcf6c0b54a9b second try
[osm/SO.git] / examples / ping_pong_ns / rift / mano / examples / primitive_test.py
diff --git a/examples/ping_pong_ns/rift/mano/examples/primitive_test.py b/examples/ping_pong_ns/rift/mano/examples/primitive_test.py
new file mode 100755 (executable)
index 0000000..6c75543
--- /dev/null
@@ -0,0 +1,118 @@
+#!/usr/bin/env python3
+
+############################################################################
+# Copyright 2017 RIFT.IO Inc                                               #
+#                                                                          #
+# 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.                                           #
+############################################################################
+
+
+import argparse
+import os
+import sys
+import random
+import paramiko
+import yaml
+from glob import glob
+
+
+def copy_file_ssh_sftp(server, remote_dir, remote_file, local_file):
+    """Copy file to VM."""
+    sshclient = paramiko.SSHClient()
+    sshclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+    sshclient.load_system_host_keys(filename="/dev/null")
+    sshclient.connect(server, username="fedora", password="fedora")
+    sftpclient = sshclient.open_sftp()
+    sftpclient.put(local_file, remote_dir + '/' + remote_file)
+    sshclient.close()
+
+
+def get_full_path(file_name, production_launchpad=True):
+    """Return the full path for the init cfg file."""
+    mpath = os.path.join(
+        os.getenv('RIFT_INSTALL'), 'var', 'rift')
+    if not production_launchpad:
+        launchpad_folder = glob('{}/*mgmt-vm-lp-2'.format(mpath))[0]
+    else:
+        launchpad_folder = ''
+    mpath = os.path.join(
+        os.getenv('RIFT_INSTALL'), 'var', 'rift', launchpad_folder,
+        'launchpad', 'packages', 'vnfd', 'default')
+    vnfd_folder = random.choice(
+        [x for x in os.listdir(mpath) if os.path.isdir(
+            os.path.join(mpath, x))])
+    full_path = glob(
+        '{}/{}/cloud_init/{}'.format(mpath, vnfd_folder, file_name))[0]
+    file_name = os.path.basename(os.path.normpath(full_path))
+    return full_path, file_name
+
+
+def exists_remote(host, path):
+    """Test if a file exists at path on a host accessible with SSH."""
+    ssh = paramiko.SSHClient()
+    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+    try:
+        ssh.connect(host, username="fedora", password="fedora")
+        sftp = ssh.open_sftp()
+        try:
+            sftp.stat(path)
+        except Exception:
+            raise Exception('Transfered file not found on the remote host')
+        ssh.close()
+    except paramiko.SSHException:
+        print("Connection Error")
+
+
+def primitive_test(yaml_cfg):
+    """Transfer a cloud init file from the vnfd descriptor package.
+
+    Verify that the file is transfered.
+    """
+    for index, vnfr in yaml_cfg['vnfr_data_map'].items():
+        vnfd_ip = vnfr['mgmt_interface']['ip_address']
+        file_name = '*_cloud_init.cfg'
+        local_file, file_name = get_full_path(file_name)
+        copy_file_ssh_sftp(vnfd_ip, '/tmp/', file_name, local_file)
+        remote_file_path = os.path.join(
+            '/'
+            'tmp',
+            file_name)
+        exists_remote(vnfd_ip, remote_file_path)
+
+
+def main(argv=sys.argv[1:]):
+    """Main."""
+    try:
+        parser = argparse.ArgumentParser()
+        parser.add_argument("yaml_cfg_file", type=argparse.FileType('r'))
+        parser.add_argument(
+            "-q", "--quiet", dest="verbose",
+            action="store_false")
+        args = parser.parse_args()
+
+    except Exception as e:
+        print("Exception in {}: {}".format(__file__, e))
+        sys.exit(1)
+
+    try:
+        yaml_str = args.yaml_cfg_file.read()
+        yaml_cfg = yaml.load(yaml_str)
+
+        primitive_test(yaml_cfg)
+
+    except Exception as e:
+        print("Exception: {}".format(e))
+        raise e
+
+if __name__ == "__main__":
+    main()