summaryrefslogtreecommitdiffstats
path: root/tests/installer
diff options
context:
space:
mode:
authordongwenjuan <dong.wenjuan@zte.com.cn>2017-08-14 16:58:13 +0800
committerdongwenjuan <dong.wenjuan@zte.com.cn>2017-09-04 22:30:39 +0800
commit19f7ba75850c52e1ae163766b64b6d153e8d7e1b (patch)
treef76b13d9d9092209788624609f65872ca8d0dea5 /tests/installer
parent836a8932d6c6a502980009b9578f0c6ecf64cb47 (diff)
refactor failure inject
JIRA: DOCTOR-116 Change-Id: I14deda4ccb47414cff139a522a9196b68e92500e Signed-off-by: dongwenjuan <dong.wenjuan@zte.com.cn>
Diffstat (limited to 'tests/installer')
-rw-r--r--tests/installer/apex.py40
-rw-r--r--tests/installer/base.py4
-rw-r--r--tests/installer/local.py18
3 files changed, 56 insertions, 6 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......')
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
@@ -24,6 +24,10 @@ class BaseInstaller(object):
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()