From fdf8cd017eb17a1cf9eaeff7018cbb69e838b891 Mon Sep 17 00:00:00 2001 From: "jose.lausuch" Date: Thu, 17 Nov 2016 11:35:39 +0100 Subject: Transform fetch_os_creds.sh into python Class JIRA: RELENG-168 Change-Id: Id5b1fca430c37917b554a54dd0678d9d7497dc11 Signed-off-by: jose.lausuch --- opnfv/installer_adapters/InstallerHandler.py | 8 +-- opnfv/installer_adapters/fuel/FuelAdapter.py | 4 +- opnfv/installer_adapters/fuel/example.py | 10 +-- opnfv/utils/Connection.py | 30 ++++++++ opnfv/utils/Credentials.py | 101 +++++++++++++++++++++++++++ opnfv/utils/SSHUtils.py | 4 +- 6 files changed, 144 insertions(+), 13 deletions(-) create mode 100644 opnfv/utils/Connection.py create mode 100644 opnfv/utils/Credentials.py diff --git a/opnfv/installer_adapters/InstallerHandler.py b/opnfv/installer_adapters/InstallerHandler.py index b81b806..e353ef3 100644 --- a/opnfv/installer_adapters/InstallerHandler.py +++ b/opnfv/installer_adapters/InstallerHandler.py @@ -7,10 +7,10 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -from FuelAdapter import FuelAdapter -from ApexAdapter import ApexAdapter -from CompassAdapter import CompassAdapter -from JoidAdapter import JoidAdapter +from opnfv.installer_adapters.fuel.FuelAdapter import FuelAdapter +from opnfv.installer_adapters.apex.ApexAdapter import ApexAdapter +from opnfv.installer_adapters.compass.CompassAdapter import CompassAdapter +from opnfv.installer_adapters.joid.JoidAdapter import JoidAdapter INSTALLERS = ["fuel", "apex", "compass", "joid"] diff --git a/opnfv/installer_adapters/fuel/FuelAdapter.py b/opnfv/installer_adapters/fuel/FuelAdapter.py index 95b2ab6..6f07940 100644 --- a/opnfv/installer_adapters/fuel/FuelAdapter.py +++ b/opnfv/installer_adapters/fuel/FuelAdapter.py @@ -8,8 +8,8 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -import opnfv.modules.utils.SSHUtils as ssh_utils -import opnfv.modules.utils.OPNFVLogger as logger +import opnfv.utils.SSHUtils as ssh_utils +import opnfv.utils.OPNFVLogger as logger class FuelAdapter: diff --git a/opnfv/installer_adapters/fuel/example.py b/opnfv/installer_adapters/fuel/example.py index 804d79c..7fea4df 100644 --- a/opnfv/installer_adapters/fuel/example.py +++ b/opnfv/installer_adapters/fuel/example.py @@ -1,12 +1,12 @@ # This is an example of usage of this Tool # Author: Jose Lausuch (jose.lausuch@ericsson.com) -from InstallerHandler import InstallerHandler +import opnfv.installer_adapters.InstallerHandler as ins_handler -fuel_handler = InstallerHandler(installer='fuel', - installer_ip='10.20.0.2', - installer_user='root', - installer_pwd='r00tme') +fuel_handler = ins_handler.InstallerHandler(installer='fuel', + installer_ip='10.20.0.2', + installer_user='root', + installer_pwd='r00tme') print("Nodes in cluster 1:\n%s\n" % fuel_handler.get_nodes(options={'cluster': '1'})) print("Nodes in cluster 2:\n%s\n" % diff --git a/opnfv/utils/Connection.py b/opnfv/utils/Connection.py new file mode 100644 index 0000000..a3be514 --- /dev/null +++ b/opnfv/utils/Connection.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +# Copyright (c) 2016 Orange and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 + + +import os +import time + + +class Connection(object): + + def __init__(self): + pass + + def verify_connectivity(self, target): + for x in range(0, 10): + ping_cmd = ("ping -c 1 -W 1 %s >/dev/null" % target) + response = os.system(ping_cmd) + if response == 0: + return os.EX_OK + time.sleep(1) + return os.EX_UNAVAILABLE + + def check_internet_access(self, url="www.google.com"): + return self.verify_connectivity(url) diff --git a/opnfv/utils/Credentials.py b/opnfv/utils/Credentials.py new file mode 100644 index 0000000..1882692 --- /dev/null +++ b/opnfv/utils/Credentials.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python + +# Copyright (c) 2016 Orange and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Usage example: +# from opnfv.utils.Credentials import Credentials as credentials +# credentials("fuel", "10.20.0.2", "root", "r00tme").fetch('./openrc') +# + +import os + +import opnfv.installer_adapters.InstallerHandler as ins_handler +import opnfv.utils.Connection as con +import opnfv.utils.OPNFVLogger as logger + + +class Credentials(object): + + def __init__(self, installer, ip, user, password=None): + self.installer = installer + self.ip = ip + self.logger = logger.Logger("Credentials", level="DEBUG").getLogger() + self.connection = con.Connection() + + if self.__check_installer_name(self.installer) != os.EX_OK: + self.logger.error("Installer %s not supported!" % self.installer) + return os.EX_CONFIG + else: + self.logger.debug("Installer %s supported." % self.installer) + + if self.connection.verify_connectivity(self.ip) != os.EX_OK: + self.logger.error("Installer %s not reachable!" % self.ip) + return os.EX_UNAVAILABLE + else: + self.logger.debug("IP %s is reachable!" % self.ip) + + self.logger.debug( + "Trying to stablish ssh connection to %s ..." % self.ip) + self.handler = ins_handler.InstallerHandler(installer, + ip, + user, + password) + + def __check_installer_name(self, installer): + if installer not in ("apex", "compass", "fuel", "joid"): + return os.EX_CONFIG + else: + return os.EX_OK + + def __check_path(self, path): + try: + with open(path, 'a'): + os.utime(path, None) + return os.EX_OK + except IOError as e: + self.logger.error(e) + return os.EX_IOERR + + def __fetch_creds_apex(self, target_path): + # TODO + pass + + def __fetch_creds_compass(self, target_path): + # TODO + pass + + def __fetch_creds_fuel(self, target_path): + creds_file = '/root/openrc' + try: + self.handler.get_file_from_controller(creds_file, target_path) + except Exception, e: + self.logger.error( + "Cannot get %s from controller. %e" % (creds_file, e)) + pass + + def __fetch_creds_joid(self, target_path): + # TODO + pass + + def fetch(self, target_path): + if self.__check_path(target_path) != os.EX_OK: + self.logger.error( + "Target path %s does not exist!" % target_path) + return os.EX_IOERR + else: + self.logger.debug("Target path correct.") + + self.logger.info("Fetching credentials from the deployment...") + if self.installer == "apex": + self.__fetch_creds_apex(target_path) + elif self.installer == "compass": + self.__fetch_creds_compass(target_path) + elif self.installer == "fuel": + self.__fetch_creds_fuel(target_path) + elif self.installer == "joid": + self.__fetch_creds_joid(target_path) diff --git a/opnfv/utils/SSHUtils.py b/opnfv/utils/SSHUtils.py index 2f48add..6c794c2 100644 --- a/opnfv/utils/SSHUtils.py +++ b/opnfv/utils/SSHUtils.py @@ -10,7 +10,7 @@ import paramiko -import opnfv.modules.utils.OPNFVLogger as OPNFVLogger +import opnfv.utils.OPNFVLogger as OPNFVLogger import os logger = OPNFVLogger.Logger('SSHUtils').getLogger() @@ -68,7 +68,7 @@ class JumpHostHopClient(paramiko.SSHClient): ''' def __init__(self, *args, **kwargs): - self.logger = rl.Logger("JumpHostHopClient").getLogger() + self.logger = OPNFVLogger.Logger("JumpHostHopClient").getLogger() self.jumphost_ssh = None self.jumphost_transport = None self.jumphost_channel = None -- cgit 1.2.3-korg