summaryrefslogtreecommitdiffstats
path: root/doctor_tests/installer/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'doctor_tests/installer/base.py')
-rw-r--r--doctor_tests/installer/base.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/doctor_tests/installer/base.py b/doctor_tests/installer/base.py
index 27e75024..76bbeb1e 100644
--- a/doctor_tests/installer/base.py
+++ b/doctor_tests/installer/base.py
@@ -7,8 +7,15 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
import abc
+import getpass
+import grp
+import os
+import pwd
import six
+import stat
+import subprocess
+from doctor_tests.common.utils import get_doctor_test_root_dir
from doctor_tests.identity_auth import get_session
from doctor_tests.os_clients import nova_client
@@ -18,6 +25,7 @@ class BaseInstaller(object):
def __init__(self, conf, log):
self.conf = conf
self.log = log
+ self.servers = list()
@abc.abstractproperty
def node_user_name(self):
@@ -46,3 +54,69 @@ class BaseInstaller(object):
flavors = {flavor.name: flavor for flavor in self.nova.flavors.list()}
if self.conf.flavor not in flavors:
self.nova.flavors.create(self.conf.flavor, 512, 1, 1)
+
+ def setup_stunnel(self):
+ self.log.info('Setup ssh stunnel in %s installer......'
+ % self.conf.installer.type)
+
+ for node_ip in self.controllers:
+ cmd = ("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 _get_ssh_key(self, client, key_path):
+ self.log.info('Get SSH keys from %s installer......'
+ % self.conf.installer.type)
+
+ if self.key_file is not None:
+ self.log.info('Already have SSH keys from %s installer......'
+ % self.conf.installer.type)
+ return self.key_file
+
+ ssh_key = '{0}/{1}'.format(get_doctor_test_root_dir(), 'instack_key')
+ client.scp(key_path, ssh_key, method='get')
+ user = getpass.getuser()
+ uid = pwd.getpwnam(user).pw_uid
+ gid = grp.getgrnam(user).gr_gid
+ os.chown(ssh_key, uid, gid)
+ os.chmod(ssh_key, stat.S_IREAD)
+ return ssh_key
+
+ def _run_cmd_remote(self, client, command):
+ self.log.info('Run command=%s in %s installer......'
+ % (command, self.conf.installer.type))
+
+ ret, output = client.ssh(command)
+ if ret:
+ raise Exception('Exec command in %s installer failed,'
+ 'ret=%s, output=%s'
+ % (self.conf.installer.type,
+ ret, output))
+ self.log.info('Output=%s command=%s in %s installer'
+ % (output, command, self.conf.installer.type))
+ return output
+
+ def _run_apply_patches(self, client, restart_cmd, script_name):
+ installer_dir = os.path.dirname(os.path.realpath(__file__))
+ script_abs_path = '{0}/{1}/{2}'.format(installer_dir,
+ 'common', script_name)
+
+ client.scp(script_abs_path, script_name)
+ cmd = 'sudo python %s' % script_name
+ ret, output = client.ssh(cmd)
+ if ret:
+ raise Exception('Do the command in controller'
+ ' node failed, ret=%s, cmd=%s, output=%s'
+ % (ret, cmd, output))
+ client.ssh(restart_cmd)