3 # Copyright (c) 2017 Okinawa Open Laboratory and others.
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 """vm controll module"""
17 from functest.opnfv_tests.vnf.router.utilvnf import Utilvnf
18 from functest.opnfv_tests.vnf.router.vnf_controller.command_generator import (
20 from functest.opnfv_tests.vnf.router.vnf_controller.ssh_client import (
24 class VmController(object):
25 """vm controll class"""
27 logger = logging.getLogger(__name__)
29 def __init__(self, util_info):
30 self.logger.debug("initialize vm controller")
31 self.command_gen = CommandGenerator()
32 credentials = util_info["credentials"]
35 self.util.set_credentials(credentials["username"],
36 credentials["password"],
37 credentials["auth_url"],
38 credentials["tenant_name"],
39 credentials["region_name"])
41 with open(self.util.test_env_config_yaml) as file_fd:
42 test_env_config_yaml = yaml.safe_load(file_fd)
45 self.reboot_wait = test_env_config_yaml.get("general").get(
47 self.command_wait = test_env_config_yaml.get("general").get(
49 self.ssh_connect_timeout = test_env_config_yaml.get("general").get(
50 "ssh_connect_timeout")
51 self.ssh_connect_retry_count = test_env_config_yaml.get("general").get(
52 "ssh_connect_retry_count")
54 def command_gen_from_template(self, command_file_path, cmd_input_param):
55 (command_file_dir, command_file_name) = os.path.split(
57 template = self.command_gen.load_template(command_file_dir,
59 return self.command_gen.command_create(template,
62 def config_vm(self, vm_info, test_cmd_file_path,
63 cmd_input_param, prompt_file_path):
64 ssh = self.connect_ssh_and_config_vm(vm_info,
75 def connect_ssh_and_config_vm(self, vm_info, test_cmd_file_path,
76 cmd_input_param, prompt_file_path):
79 if "key_path" in vm_info:
80 key_filename = vm_info["key_path"]
82 ssh = SshClient(ip_address=vm_info["floating_ip"],
84 password=vm_info["pass"],
85 key_filename=key_filename)
87 result = ssh.connect(self.ssh_connect_timeout,
88 self.ssh_connect_retry_count)
90 self.logger.debug("try to vm reboot.")
91 self.util.reboot_vm(vm_info["vnf_name"])
92 time.sleep(self.reboot_wait)
93 result = ssh.connect(self.ssh_connect_timeout,
94 self.ssh_connect_retry_count)
98 (result, _) = self.command_create_and_execute(
109 def command_create_and_execute(self, ssh, test_cmd_file_path,
110 cmd_input_param, prompt_file_path):
111 prompt_file = open(prompt_file_path,
113 prompt = yaml.safe_load(prompt_file)
115 config_mode_prompt = prompt["config_mode"]
117 commands = self.command_gen_from_template(test_cmd_file_path,
119 return self.command_list_execute(ssh,
123 def command_list_execute(self, ssh, command_list, prompt):
125 for command in command_list:
126 self.logger.debug("Command : " + command)
127 (res, res_data) = self.command_execute(ssh,
130 self.logger.debug("Response : " + res_data)
131 res_data_list.append(res_data)
133 return res, res_data_list
135 time.sleep(self.command_wait)
137 return True, res_data_list
139 def command_execute(self, ssh, command, prompt):
140 res_data = ssh.send(command, prompt)
142 self.logger.info("retry send command : " + command)
143 res_data = ssh.send(command,
145 if not ssh.error_check(res_data):
146 return False, res_data
148 return True, res_data