summaryrefslogtreecommitdiffstats
path: root/deploy/tempest.py
diff options
context:
space:
mode:
authorYao Lu <lu.yao135@zte.com.cn>2016-11-17 16:02:52 +0800
committerYao Lu <lu.yao135@zte.com.cn>2016-11-19 09:36:40 +0000
commitea776f2faf1d99c49d3dcf256fd0eda840c83639 (patch)
tree45429fe147e03fb99446faa688bf29242c416c04 /deploy/tempest.py
parent463ab9c7337079a68491d2eccb1e3778a8ec4479 (diff)
add common config and parse it to prepare deploy
Change-Id: I864082b885a4c7117f0b546da602e9580e8ccf46 Signed-off-by: Yao Lu <lu.yao135@zte.com.cn>
Diffstat (limited to 'deploy/tempest.py')
-rwxr-xr-xdeploy/tempest.py164
1 files changed, 164 insertions, 0 deletions
diff --git a/deploy/tempest.py b/deploy/tempest.py
new file mode 100755
index 00000000..011f1e5c
--- /dev/null
+++ b/deploy/tempest.py
@@ -0,0 +1,164 @@
+#!/usr/bin/python
+##############################################################################
+# Copyright (c) 2016 ZTE Coreporation and others.
+# hu.zhijiang@zte.com.cn
+# lu.yao135@zte.com.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+from oslo_config import cfg
+import sys
+from daisyclient.v1 import client as daisy_client
+import get_conf
+import traceback
+import time
+import subprocess
+
+daisy_version = 1.0
+daisy_endpoint = "http://127.0.0.1:19292"
+client = daisy_client.Client(version=daisy_version, endpoint=daisy_endpoint)
+
+cluster_name = "clustertest"
+
+_CLI_OPTS = [
+ cfg.StrOpt('dha',
+ help='The dha file path'),
+ cfg.StrOpt('network',
+ help='The network file path'),
+]
+
+
+# ------------------------------------------------------------------------------------------
+def parse(conf, args):
+ conf.register_cli_opts(_CLI_OPTS)
+ conf(args=args)
+
+
+def print_bar(msg):
+ print ("--------------------------------------------")
+ print (msg)
+ print ("--------------------------------------------")
+
+
+def foo():
+ try:
+ print("get config...")
+ conf = cfg.ConfigOpts()
+ parse(conf, sys.argv[1:])
+ host_interface_map, host_role_map, \
+ host_ip_passwd_map, network_map, vip = \
+ get_conf.config(conf['dha'], conf['network'])
+ print("clean deploy host...")
+ clean_deploy_host(host_ip_passwd_map)
+ print("discover host...")
+ discover_host(host_ip_passwd_map)
+ print("add cluster...")
+ cluster_meta = {'name': cluster_name, 'description': ''}
+ clusters_info = client.clusters.add(**cluster_meta)
+ cluster_id = clusters_info.id
+ print("cluster_id=%s." % cluster_id)
+ print("update network...")
+ update_network(cluster_id, network_map)
+ print("update hosts interface...")
+ hosts_info = get_hosts()
+ add_hosts_interface(cluster_id, hosts_info, host_interface_map,
+ host_role_map, vip)
+ except Exception:
+ print("Deploy failed!!!.%s." % traceback.format_exc())
+ else:
+ print_bar("Everything is done!")
+
+
+def clean_deploy_host(host_ip_passwd_map):
+ for host_ip_passwd in host_ip_passwd_map:
+ command = 'sshpass -p %s ssh %s -o UserKnownHostsFile=/dev/null \
+ -oStrictHostKeyChecking=no \
+ "/home/daisy/forDel/tools/cleanup-containers"' % \
+ (host_ip_passwd['passwd'], host_ip_passwd['ip'])
+ subprocess.call(command,
+ shell=True,
+ stdout=open('/dev/null', 'w'),
+ stderr=subprocess.STDOUT)
+ command = 'sshpass -p %s ssh %s -o UserKnownHostsFile=/dev/null \
+ -oStrictHostKeyChecking=no \
+ "/home/daisy/forDel/tools/cleanup-images"' % \
+ (host_ip_passwd['passwd'], host_ip_passwd['ip'])
+ subprocess.call(command,
+ shell=True,
+ stdout=open('/dev/null', 'w'),
+ stderr=subprocess.STDOUT)
+
+
+def discover_host(host_ip_passwd_map):
+ for host_ip_passwd in host_ip_passwd_map:
+ client.hosts.add_discover_host(**host_ip_passwd)
+ client.hosts.discover_host()
+ while True:
+ hosts_info = get_hosts()
+ if len(hosts_info) == len(host_ip_passwd_map):
+ print('discover hosts success!')
+ break
+ else:
+ time.sleep(10)
+
+
+def update_network(cluster_id, network_map):
+ network_meta = {'filters': {'cluster_id': cluster_id}}
+ network_info_gernerator = client.networks.list(**network_meta)
+ network_info_list = [net for net in network_info_gernerator]
+ for net in network_info_list:
+ network_id = net.id
+ network_name = net.name
+ if network_map.get(network_name):
+ network_meta = network_map[network_name]
+ client.networks.update(network_id, **network_meta)
+
+
+def get_hosts():
+ hosts_list_generator = client.hosts.list()
+ hosts_list = [host for host in hosts_list_generator]
+ hosts_info = []
+ for host in hosts_list:
+ host_info = client.hosts.get(host.id)
+ hosts_info.append(host_info)
+ return hosts_info
+
+
+def add_hosts_interface(cluster_id, hosts_info, host_interface_map,
+ host_role_map, vip):
+ for host in hosts_info:
+ host = host.to_dict()
+ host['cluster'] = cluster_id
+ host_name = host['name']
+ for interface in host['interfaces']:
+ interface_name = interface['name']
+ interface['assigned_networks'] = \
+ host_interface_map[host_name][interface_name]
+ client.hosts.update(host['id'], **host)
+ print("update role...")
+ add_host_role(cluster_id, host['id'], host['name'],
+ host_role_map, vip)
+
+
+def add_host_role(cluster_id, host_id, host_name, host_role_map, vip):
+ role_meta = {'filters': {'cluster_id': cluster_id}}
+ role_list_generator = client.roles.list(**role_meta)
+ role_list = [role for role in role_list_generator]
+ lb_role_id = [role.id for role in role_list if
+ role.name == "CONTROLLER_LB"][0]
+ computer_role_id = [role.id for role in role_list if
+ role.name == "COMPUTER"][0]
+ if "CONTROLLER_LB" in host_role_map[host_name]:
+ role_lb_update_meta = {'nodes': [host_id],
+ 'cluster_id': cluster_id, 'vip': vip}
+ client.roles.update(lb_role_id, **role_lb_update_meta)
+ if "COMPUTER" in host_role_map[host_name]:
+ role_computer_update_meta = {'nodes': [host_id],
+ 'cluster_id': cluster_id}
+ client.roles.update(computer_role_id, **role_computer_update_meta)
+
+
+if __name__ == "__main__":
+ foo()