+
+ def create_flavor(self):
+ self.nova = \
+ nova_client(self.conf.nova_version,
+ get_session())
+ 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)
+ tunnels = [self.conf.consumer.port]
+ if self.conf.test_case == 'maintenance':
+ tunnel_uptime = 1200
+ tunnels += [self.conf.app_manager.port, self.conf.inspector.port]
+ elif self.conf.test_case == 'all':
+ tunnel_uptime = 1800
+ tunnels += [self.conf.app_manager.port, self.conf.inspector.port]
+ else:
+ tunnel_uptime = 600
+
+ for node_ip in self.controllers:
+ for port in tunnels:
+ self.log.info('tunnel for port %s' % port)
+ cmd = ("ssh -o UserKnownHostsFile=/dev/null"
+ " -o StrictHostKeyChecking=no"
+ " -i %s %s@%s -R %s:localhost:%s"
+ " sleep %s > ssh_tunnel.%s"
+ " 2>&1 < /dev/null "
+ % (self.key_file,
+ self.node_user_name,
+ node_ip,
+ port,
+ port,
+ tunnel_uptime,
+ node_ip))
+ server = subprocess.Popen('exec ' + cmd, shell=True)
+ self.servers.append(server)
+
+ 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)