2 from utils import utils_yaml
3 from utils.utils_log import for_all_methods, log_enter_exit
4 from utils.service import Service
5 from utils.node_manager import NodeManager
6 from utils.processutils import execute
9 @for_all_methods(log_enter_exit)
10 class DeploymentCloner(Service):
12 undercloud_root_dir = '~/DeploymentCloner/'
14 def create_cli_parser(self, parser):
15 parser.add_argument('--undercloud-ip', help="ip of undercloud",
17 parser.add_argument('--dest-dir', help="where everything should go to",
21 def undercloud_dict(self, undercloud_ip):
22 return {'address': undercloud_ip,
25 def run(self, sys_args, config):
26 dest_dir = sys_args.dest_dir if sys_args.dest_dir[:-1] == '/'\
27 else (sys_args.dest_dir + '/')
28 self.node_manager = NodeManager()
29 underlcloud = self.node_manager.add_node(
31 self.undercloud_dict(sys_args.undercloud_ip))
32 # copy all files to undercloud
33 underlcloud.copy('to', '.', self.undercloud_root_dir)
34 # generate the undercloud yaml
35 underlcloud.execute('cd %s; ./tripleo_manager.sh --out ./cloner-info/'
36 % self.undercloud_root_dir, log_true=True)
37 underlcloud.copy('from', dest_dir,
38 self.undercloud_root_dir + '/cloner-info/')
39 node_yaml_path = dest_dir + '/cloner-info/node.yaml'
40 node_yaml = utils_yaml.read_dict_from_yaml(node_yaml_path)
41 for name, node in node_yaml['servers'].iteritems():
42 node['vNode-name'] = self.get_virtual_node_name_from_mac(
44 utils_yaml.write_dict_to_yaml(node_yaml, node_yaml_path)
45 # TODO copy qcow and tar it
47 def get_virtual_node_name_from_mac(self, mac):
48 vNode_names, _ = execute('virsh list|awk \'{print $2}\'', shell=True)
49 for node in vNode_names.split('\n'):
50 if 'baremetal' in node:
51 admin_net_mac, _ = execute(
52 'virsh domiflist %s |grep admin |awk \'{print $5}\''
54 if admin_net_mac.replace('\n', '') == mac:
56 raise Exception('Could not find corresponding virtual node for MAC: %s'
61 main = DeploymentCloner()
64 if __name__ == '__main__':