diff options
Diffstat (limited to 'tests/installer/apex.py')
-rw-r--r-- | tests/installer/apex.py | 40 |
1 files changed, 37 insertions, 3 deletions
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......') |