From 19f7ba75850c52e1ae163766b64b6d153e8d7e1b Mon Sep 17 00:00:00 2001 From: dongwenjuan Date: Mon, 14 Aug 2017 16:58:13 +0800 Subject: refactor failure inject JIRA: DOCTOR-116 Change-Id: I14deda4ccb47414cff139a522a9196b68e92500e Signed-off-by: dongwenjuan --- tests/installer/apex.py | 40 +++++++++++++++++++++++++++++++++++++--- tests/installer/base.py | 4 ++++ tests/installer/local.py | 18 +++++++++++++++--- 3 files changed, 56 insertions(+), 6 deletions(-) (limited to 'tests/installer') diff --git a/tests/installer/apex.py b/tests/installer/apex.py index e0960a5f..98eb6c9c 100644 --- a/tests/installer/apex.py +++ b/tests/installer/apex.py @@ -11,10 +11,11 @@ import grp import os import pwd import stat +import subprocess import sys +from common.utils import SSHClient from installer.base import BaseInstaller -from utils import SSHClient class ApexInstaller(BaseInstaller): @@ -30,20 +31,28 @@ class ApexInstaller(BaseInstaller): self.key_file = None self.controllers = list() self.controller_clients = list() + self.servers = list() def setup(self): self.log.info('Setup Apex installer start......') - self.key_file = self.get_ssh_key_from_installer() + self.get_ssh_key_from_installer() self.get_controller_ips() self.set_apply_patches() + self.setup_stunnel() def cleanup(self): self.restore_apply_patches() + for server in self.servers: + server.terminate() def get_ssh_key_from_installer(self): self.log.info('Get SSH keys from Apex installer......') + if self.key_file is not None: + self.log.info('Already have SSH keys from Apex installer......') + return self.key_file + self.client.scp('/home/stack/.ssh/id_rsa', './instack_key', method='get') user = getpass.getuser() uid = pwd.getpwnam(user).pw_uid @@ -51,7 +60,8 @@ class ApexInstaller(BaseInstaller): os.chown('./instack_key', uid, gid) os.chmod('./instack_key', stat.S_IREAD) current_dir = sys.path[0] - return '{0}/{1}'.format(current_dir, 'instack_key') + self.key_file = '{0}/{1}'.format(current_dir, 'instack_key') + return self.key_file def get_controller_ips(self): self.log.info('Get controller ips from Apex installer......') @@ -63,8 +73,32 @@ class ApexInstaller(BaseInstaller): if ret: raise Exception('Exec command to get controller ips in Apex installer failed' 'ret=%s, output=%s' % (ret, controllers)) + self.log.info('Get controller_ips:%s from Apex installer' % controllers) self.controllers = controllers + def get_host_ip_from_hostname(self, hostname): + self.log.info('Get host ip from host name in Apex installer......') + + hostname_in_undercloud = hostname.split('.')[0] + + command = "source stackrc; nova show %s | awk '/ ctlplane network /{print $5}'" % (hostname_in_undercloud) + ret, host_ip = self.client.ssh(command) + if ret: + raise Exception('Exec command to get host ip from hostname(%s) in Apex installer failed' + 'ret=%s, output=%s' % (hostname, ret, host_ip)) + self.log.info('Get host_ip:%s from host_name:%s in Apex installer' % (host_ip, hostname)) + return host_ip[0] + + def setup_stunnel(self): + self.log.info('Setup ssh stunnel in controller nodes in Apex installer......') + for node_ip in self.controllers: + cmd = "sudo ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i %s %s@%s -R %s:localhost:%s sleep 600 > ssh_tunnel.%s.log 2>&1 < /dev/null &" \ + % (self.key_file, self.node_user_name, node_ip, + self.conf.consumer.port, self.conf.consumer.port, node_ip) + server = subprocess.Popen(cmd, shell=True) + self.servers.append(server) + server.communicate() + def set_apply_patches(self): self.log.info('Set apply patches start......') diff --git a/tests/installer/base.py b/tests/installer/base.py index f3837f15..fa39816a 100644 --- a/tests/installer/base.py +++ b/tests/installer/base.py @@ -23,6 +23,10 @@ class BaseInstaller(object): def get_ssh_key_from_installer(self): pass + @abc.abstractmethod + def get_host_ip_from_hostname(self, hostname): + pass + @abc.abstractmethod def setup(self): pass diff --git a/tests/installer/local.py b/tests/installer/local.py index abe0ba25..dcdf41e3 100644 --- a/tests/installer/local.py +++ b/tests/installer/local.py @@ -8,10 +8,11 @@ ############################################################################## import os import shutil +import subprocess from installer.base import BaseInstaller -from utils import load_json_file -from utils import write_json_file +from common.utils import load_json_file +from common.utils import write_json_file class LocalInstaller(BaseInstaller): @@ -34,7 +35,18 @@ class LocalInstaller(BaseInstaller): def get_ssh_key_from_installer(self): self.log.info('Assuming SSH keys already exchanged with computer for local installer type') - return + return None + + def get_host_ip_from_hostname(self, hostname): + self.log.info('Get host ip from host name in local installer......') + + cmd = "getent hosts %s | awk '{ print $1 }'" % (hostname) + server = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) + stdout, stderr = server.communicate() + host_ip = stdout.strip() + + self.log.info('Get host_ip:%s from host_name:%s in local installer' % (host_ip, hostname)) + return host_ip def set_apply_patches(self): self._set_nova_policy() -- cgit 1.2.3-korg