Baremetal Deployment on zte-pod2 47/28347/11
authorZhou Ya <zhou.ya@zte.com.cn>
Thu, 9 Feb 2017 08:19:19 +0000 (16:19 +0800)
committerzhouya <zhou.ya@zte.com.cn>
Wed, 22 Feb 2017 08:49:40 +0000 (16:49 +0800)
JIRA: DAISY-30

Change-Id: Ie34180b9d036797d310f612caa189b0a06efb732
Signed-off-by: Zhou Ya <zhou.ya@zte.com.cn>
ci/deploy/deploy.sh
deploy/check_os_progress.sh
deploy/config/bm_environment/zte-baremetal1/deploy.yml [new file with mode: 0644]
deploy/config/bm_environment/zte-baremetal1/network.yml [new file with mode: 0644]
deploy/config/vm_environment/zte-virtual1/deploy.yml
deploy/config/vm_environment/zte-virtual1/network.yml
deploy/get_para_from_deploy.py [changed mode: 0755->0644]
deploy/tempest.py [changed mode: 0755->0644]
templates/physical_environment/networks/daisy.xml [new file with mode: 0644]
templates/physical_environment/vms/daisy.xml [new file with mode: 0644]

index e68368a..e457032 100755 (executable)
@@ -11,7 +11,7 @@
 # [x] 1. Pass full path for parameter for -d and -n
 # [x] 2. Refactor para fetching procedure of paras_from_deploy
 # [x] 3. Refactor execute_on_jumpserver
-# [ ] 4. Refactor for names for var such like net_daisy1, net_daisy2
+# [ ] 4. Refactor for names for var such like daisy_server_net, target_node_net
 # [ ] 5. Store PODs' configruation files into securelab
 # [ ] 6. Use POD name as the parameter instead of files
 ##############################################################################
@@ -69,6 +69,7 @@ DHA_CONF=''
 NETWORK_CONF=''
 LAB_NAME=''
 POD_NAME=''
+TARGET_HOSTS_NUM=0
 DRY_RUN=0
 IS_BARE=1
 #
@@ -152,15 +153,22 @@ SSH_PARAS="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
 deploy_path=$WORKSPACE/deploy
 
 create_qcow2_path=$WORKSPACE/tools
-net_daisy1=$WORKSPACE/templates/virtual_environment/networks/daisy.xml
-net_daisy2=$WORKSPACE/templates/virtual_environment/networks/os-all_in_one.xml
-pod_daisy=$WORKSPACE/templates/virtual_environment/vms/daisy.xml
-pod_all_in_one=$WORKSPACE/templates/virtual_environment/vms/all_in_one.xml
+
+daisy_server_net=$WORKSPACE/templates/virtual_environment/networks/daisy.xml
+target_node_net=$WORKSPACE/templates/virtual_environment/networks/os-all_in_one.xml
+vmdeploy_daisy_server_vm=$WORKSPACE/templates/virtual_environment/vms/daisy.xml
+vmdeploy_target_node_vm=$WORKSPACE/templates/virtual_environment/vms/all_in_one.xml
+
+
+bmdeploy_daisy_server_net=$WORKSPACE/templates/physical_environment/networks/daisy.xml
+bmdeploy_daisy_server_vm=$WORKSPACE/templates/physical_environment/vms/daisy.xml
 
 PARAS_FROM_DEPLOY=`python $WORKSPACE/deploy/get_para_from_deploy.py --dha $DHA_CONF`
-DAISY_IP=`echo $PARAS_FROM_DEPLOY | cut -d " " -f 1`
-DAISY_PASSWD=`echo $PARAS_FROM_DEPLOY | cut -d " " -f 2`
-PARAS_IMAGE=${PARAS_FROM_DEPLOY#* * }
+TARGET_HOSTS_NUM=`echo $PARAS_FROM_DEPLOY | cut -d " " -f 1`
+DAISY_IP=`echo $PARAS_FROM_DEPLOY | cut -d " " -f 2`
+DAISY_PASSWD=`echo $PARAS_FROM_DEPLOY | cut -d " " -f 3`
+PARAS_IMAGE=${PARAS_FROM_DEPLOY#* * * }
+
 
 if [ $DRY_RUN -eq 1 ]; then
     echo """
@@ -171,10 +179,10 @@ if [ $DRY_RUN -eq 1 ]; then
     DAISY_IP: $DAISY_IP
     DAISY_PASSWD: $DAISY_PASSWD
     PARAS_IMAGE: $PARAS_IMAGE
-    net_daisy1: $net_daisy1
-    net_daisy2: $net_daisy2
-    pod_daisy: $pod_daisy
-    pod_all_in_one: $pod_all_in_one
+    daisy_server_net: $daisy_server_net
+    target_node_net: $target_node_net
+    vmdeploy_daisy_server_vm: $vmdeploy_daisy_server_vm
+    vmdeploy_target_node_vm: $vmdeploy_target_node_vm
     """
     exit 1
 fi
@@ -239,15 +247,22 @@ function clean_up
 }
 
 echo "=====clean up all node and network======"
-clean_up all_in_one daisy2
+if [ $IS_BARE == 0 ];then
+    clean_up all_in_one daisy2
+fi
 clean_up daisy daisy1
 if [ -f $WORKDIR/daisy/centos7.qcow2 ]; then
     rm -rf $WORKDIR/daisy/centos7.qcow2
 fi
 
 echo "=======create daisy node================"
-$create_qcow2_path/daisy-img-modify.sh -c $create_qcow2_path/centos-img-modify.sh -a $DAISY_IP $PARAS_IMAGE
-create_node $net_daisy1 daisy1 $pod_daisy daisy
+if [ $IS_BARE == 0 ];then
+    $create_qcow2_path/daisy-img-modify.sh -c $create_qcow2_path/centos-img-modify.sh -a $DAISY_IP $PARAS_IMAGE
+    create_node $daisy_server_net daisy1 $vmdeploy_daisy_server_vm daisy
+else
+    $create_qcow2_path/daisy-img-modify.sh -c $create_qcow2_path/centos-img-modify.sh -a $DAISY_IP $PARAS_IMAGE
+    create_node $bmdeploy_daisy_server_net daisy1 $bmdeploy_daisy_server_vm daisy
+fi
 sleep 20
 
 echo "====== install daisy==========="
@@ -273,24 +288,38 @@ ssh $SSH_PARAS $DAISY_IP "echo -e '[libvirt]\nvirt_type=qemu' > /etc/kolla/confi
 echo "===prepare cluster and pxe==="
 ssh $SSH_PARAS $DAISY_IP "python ${REMOTE_SPACE}/deploy/tempest.py --dha $DHA --network $NETWORK --cluster 'yes'"
 
-echo "=====create all-in-one node======"
-qemu-img create -f qcow2 ${VM_STORAGE}/all_in_one.qcow2 200G
-create_node $net_daisy2 daisy2 $pod_all_in_one all_in_one
-sleep 20
+echo "=====create and find node======"
+if [ $IS_BARE == 0 ];then
+    qemu-img create -f qcow2 ${VM_STORAGE}/all_in_one.qcow2 200G
+    create_node $target_node_net daisy2 $vmdeploy_target_node_vm all_in_one
+    sleep 20
+else
+    for i in $(seq 106 110); do
+        ipmitool -I lanplus -H 192.168.1.$i -U zteroot -P superuser -R 1 chassis bootdev pxe
+        ipmitool -I lanplus -H 192.168.1.$i -U zteroot -P superuser -R 1 chassis  power reset
+    done
+fi
 
 echo "======prepare host and pxe==========="
-ssh $SSH_PARAS $DAISY_IP "python ${REMOTE_SPACE}/deploy/tempest.py  --dha $DHA --network $NETWORK --host 'yes'"
+ssh $SSH_PARAS $DAISY_IP "python ${REMOTE_SPACE}/deploy/tempest.py  --dha $DHA --network $NETWORK --host 'yes' --env $IS_BARE"
 
 echo "======daisy deploy os and openstack==========="
-virsh destroy all_in_one
-virsh start all_in_one
+if [ $IS_BARE == 0 ];then
+    virsh destroy all_in_one
+    virsh start all_in_one
+fi
 
-echo "===========check install progress==========="
+echo "============restart daisy service==========="
 ssh $SSH_PARAS $DAISY_IP "systemctl restart daisy-api"
 ssh $SSH_PARAS $DAISY_IP "systemctl restart daisy-registry"
-ssh $SSH_PARAS $DAISY_IP "${REMOTE_SPACE}/deploy/check_os_progress.sh"
+
+echo "===========check install progress==========="
+ssh $SSH_PARAS $DAISY_IP "${REMOTE_SPACE}/deploy/check_os_progress.sh -d $IS_BARE -n $TARGET_HOSTS_NUM"
 sleep 10
-virsh reboot all_in_one
+
+if [ $IS_BARE == 0 ];then
+    virsh reboot all_in_one
+fi
 ssh $SSH_PARAS $DAISY_IP "${REMOTE_SPACE}/deploy/check_openstack_progress.sh"
 
 exit 0
index bf44fe2..abbd7e5 100755 (executable)
@@ -1,20 +1,62 @@
 #!/bin/bash
+usage()
+{
+    cat << EOF
+USAGE: `basename $0` [-d deploy_env] [-n hosts_num]
+
+OPTIONS:
+  -d deploy environment of daisy(0:virtual or 1:baremetal)
+  -n target node numbers
+
+EXAMPLE:
+    sudo `basename $0` -d 1 -n 5
+EOF
+}
+
+while getopts "d:n:h" OPTION
+do
+    case $OPTION in
+        d)
+            deploy_env=${OPTARG}
+            ;;
+        n)
+            hosts_num=${OPTARG}
+            ;;
+        h)
+            usage
+            exit 0
+            ;;
+        *)
+            echo "${OPTION} is not a valid argument"
+            usage
+            exit 0
+            ;;
+    esac
+done
+
 source /root/daisyrc_admin
 cluster_id=`daisy cluster-list | awk -F "|" '{print $2}' | sed -n '4p'`
-daisy install $cluster_id --skip-pxe-ipmi true
+skip=false
+if [ $deploy_env == 0 ];then
+    skip=true
+fi
+
+echo "run daisy install command"
+daisy install $cluster_id --skip-pxe-ipmi $skip
+
 echo "check os installing progress..."
 while true; do
     os_install_active=`daisy host-list --cluster-id $cluster_id | awk -F "|" '{print $8}' | grep -c "active" `
     os_install_failed=`daisy host-list --cluster-id $cluster_id | awk -F "|" '{print $8}' | grep -c "install-failed" `
-    if [ $os_install_active -eq 1 ]; then
+    if [ $os_install_active -eq $hosts_num ]; then
         echo "os installing successful ..."
         break
     elif [ $os_install_failed -gt 0 ]; then
         echo "os installing have failed..."
         exit 1
     else
-        progress=`daisy host-list --cluster-id $cluster_id |grep DISCOVERY_SUCCESSFUL |awk -F "|" '{print $7}'|sed s/[[:space:]]//g`
-        echo "os in installing, the progress is $progress%"
+        progress=`daisy host-list --cluster-id $cluster_id |grep DISCOVERY_SUCCESSFUL |awk -F "|" '{print $7}'|sed s/[[:space:]]//g|sed ':a;N;$ s/\n/ /g;ba'`
+        echo "os in installing, the progress of each node is $progress%"
         sleep 10
     fi
 done
diff --git a/deploy/config/bm_environment/zte-baremetal1/deploy.yml b/deploy/config/bm_environment/zte-baremetal1/deploy.yml
new file mode 100644 (file)
index 0000000..eafff5f
--- /dev/null
@@ -0,0 +1,23 @@
+hosts:\r
+- name: 'controller01'\r
+  roles:\r
+    - 'CONTROLLER_LB'\r
+- name: 'controller02'\r
+  roles:\r
+    - 'CONTROLLER_LB'\r
+- name: 'controller03'\r
+  roles:\r
+    - 'CONTROLLER_LB'\r
+- name: 'computer01'\r
+  roles:\r
+    - 'COMPUTER'\r
+- name: 'computer02'\r
+  roles:\r
+    - 'COMPUTER'\r
+disks:\r
+  daisy: 50\r
+  controller: 50\r
+  compute: 50\r
+daisy_passwd: 'r00tme'\r
+daisy_ip: '10.20.7.3'\r
+daisy_gateway: '10.20.7.1'\r
diff --git a/deploy/config/bm_environment/zte-baremetal1/network.yml b/deploy/config/bm_environment/zte-baremetal1/network.yml
new file mode 100644 (file)
index 0000000..53f21d9
--- /dev/null
@@ -0,0 +1,59 @@
+##############################################################################\r
+# Copyright (c) 2017 ZTE Coreporation and others.\r
+# hu.zhijiang@zte.com.cn\r
+# sun.jing22@zte.com.cn\r
+# All rights reserved. This program and the accompanying materials\r
+# are made available under the terms of the Apache License, Version 2.0\r
+# which accompanies this distribution, and is available at\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+##############################################################################\r
+\r
+network-config-metadata:\r
+  title: 'zte-bm-deploy network config'\r
+  version: '0.1'\r
+  created: 'Mon Oct 31 2016'\r
+  comment:\r
+networks:\r
+  - cidr: '10.20.7.0/24'\r
+    gateway: '10.20.7.1'\r
+    ip_ranges:\r
+    - 'start': '10.20.7.4'\r
+      'end': '10.20.7.11'\r
+    name: 'MANAGEMENT'\r
+  - cidr: '10.20.7.0/24'\r
+    gateway: '10.20.7.1'\r
+    ip_ranges:\r
+    - start: '10.20.7.4'\r
+      end: '10.20.7.11'\r
+    name: 'STORAGE'\r
+  - cidr: '172.10.101.0/24'\r
+    gateway: '172.10.101.0'\r
+    ip_ranges:\r
+    - 'start': '172.10.101.1'\r
+      'end': '172.10.101.10'\r
+    'name': 'EXTERNAL'\r
+  - cidr: '10.20.7.0/24'\r
+    gateway: '10.20.7.1'\r
+    ip_ranges:\r
+    - 'start': '10.20.7.4'\r
+      'end': '10.20.7.11'\r
+    name: 'PUBLICAPI'\r
+  - cidr: '10.20.7.0/24'\r
+    gateway: '10.20.7.1'\r
+    ip_ranges:\r
+    - 'start': '10.20.7.4'\r
+      'end': '10.20.7.11'\r
+    name: 'TENANT'\r
+interfaces:\r
+  - name: 'EXTERNAL'\r
+    interface: 'ens12f1'\r
+  - name: 'MANAGEMENT'\r
+    interface: 'ens4f0'\r
+  - name: 'PUBLICAPI'\r
+    interface: 'ens4f0'\r
+  - name: 'STORAGE'\r
+    interface: 'ens4f0'\r
+  - name: 'TENANT'\r
+    interface: 'ens4f0'\r
+internal_vip: '10.20.7.12'\r
+public_vip: '10.20.7.12'\r
index b094947..1bf254f 100644 (file)
@@ -1,12 +1,13 @@
-hosts:
-- name: 'all_in_one'
-  roles:
-    - 'CONTROLLER_LB'
-    - 'COMPUTER'
-disks:
-  daisy: 50
-  controller: 50
-  compute: 50
-daisy_passwd: 'r00tme'
-daisy_ip: '10.20.11.2'
-daisy_gateway: '10.20.11.1'
+hosts:\r
+- name: 'all_in_one'\r
+  roles:\r
+    - 'CONTROLLER_LB'\r
+    - 'COMPUTER'\r
+disks:\r
+  daisy: 50\r
+  controller: 50\r
+  compute: 50\r
+daisy_passwd: 'r00tme'\r
+daisy_ip: '10.20.11.2'\r
+daisy_gateway: '10.20.11.1'\r
+deploy_env: 'virtual'
\ No newline at end of file
index 3686388..7d746be 100644 (file)
@@ -1,59 +1,59 @@
-##############################################################################
-# Copyright (c) 2016 ZTE Coreporation and others.
-# hu.zhijiang@zte.com.cn
-# sun.jing22@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
-##############################################################################
-
-network-config-metadata:
-  title: 'zte-virtual1 network config'
-  version: '0.1'
-  created: 'Mon Oct 31 2016'
-  comment:
-networks:
-  - cidr: '10.20.11.0/24'
-    gateway: '10.20.11.1'
-    ip_ranges:
-    - 'start': '10.20.11.3'
-      'end': '10.20.11.10'
-    name: 'MANAGEMENT'
-  - cidr: '10.20.11.0/24'
-    gateway: '10.20.11.1'
-    ip_ranges:
-    - start: '10.20.11.3'
-      end: '10.20.11.10'
-    name: 'STORAGE'
-  - cidr: '172.10.101.0/24'
-    gateway: '172.10.101.0'
-    ip_ranges:
-    - 'start': '172.10.101.1'
-      'end': '172.10.101.10'
-    'name': 'EXTERNAL'
-  - cidr: '10.20.11.0/24'
-    gateway: '10.20.11.1'
-    ip_ranges:
-    - 'start': '10.20.11.3'
-      'end': '10.20.11.10'
-    name: 'PUBLICAPI'
-  - cidr: '10.20.11.0/24'
-    gateway: '10.20.11.1'
-    ip_ranges:
-    - 'start': '10.20.11.3'
-      'end': '10.20.11.10'
-    name: 'TENANT'
-interfaces:
-  - name: 'EXTERNAL'
-    interface: 'ens8'
-  - name: 'MANAGEMENT'
-    interface: 'ens3'
-  - name: 'PUBLICAPI'
-    interface: 'ens3'
-  - name: 'STORAGE'
-    interface: 'ens3'
-  - name: 'TENANT'
-    interface: 'ens3'
-internal_vip: '10.20.11.11'
-public_vip: '10.20.11.11'
+##############################################################################\r
+# Copyright (c) 2016 ZTE Coreporation and others.\r
+# hu.zhijiang@zte.com.cn\r
+# sun.jing22@zte.com.cn\r
+# All rights reserved. This program and the accompanying materials\r
+# are made available under the terms of the Apache License, Version 2.0\r
+# which accompanies this distribution, and is available at\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+##############################################################################\r
+\r
+network-config-metadata:\r
+  title: 'zte-virtual1 network config'\r
+  version: '0.1'\r
+  created: 'Mon Oct 31 2016'\r
+  comment:\r
+networks:\r
+  - cidr: '10.20.11.0/24'\r
+    gateway: '10.20.11.1'\r
+    ip_ranges:\r
+    - 'start': '10.20.11.3'\r
+      'end': '10.20.11.10'\r
+    name: 'MANAGEMENT'\r
+  - cidr: '10.20.11.0/24'\r
+    gateway: '10.20.11.1'\r
+    ip_ranges:\r
+    - start: '10.20.11.3'\r
+      end: '10.20.11.10'\r
+    name: 'STORAGE'\r
+  - cidr: '172.10.101.0/24'\r
+    gateway: '172.10.101.0'\r
+    ip_ranges:\r
+    - 'start': '172.10.101.1'\r
+      'end': '172.10.101.10'\r
+    'name': 'EXTERNAL'\r
+  - cidr: '10.20.11.0/24'\r
+    gateway: '10.20.11.1'\r
+    ip_ranges:\r
+    - 'start': '10.20.11.3'\r
+      'end': '10.20.11.10'\r
+    name: 'PUBLICAPI'\r
+  - cidr: '10.20.11.0/24'\r
+    gateway: '10.20.11.1'\r
+    ip_ranges:\r
+    - 'start': '10.20.11.3'\r
+      'end': '10.20.11.10'\r
+    name: 'TENANT'\r
+interfaces:\r
+  - name: 'EXTERNAL'\r
+    interface: 'ens8'\r
+  - name: 'MANAGEMENT'\r
+    interface: 'ens3'\r
+  - name: 'PUBLICAPI'\r
+    interface: 'ens3'\r
+  - name: 'STORAGE'\r
+    interface: 'ens3'\r
+  - name: 'TENANT'\r
+    interface: 'ens3'\r
+internal_vip: '10.20.11.11'\r
+public_vip: '10.20.11.11'\r
old mode 100755 (executable)
new mode 100644 (file)
index d142af3..c75ba07
@@ -32,19 +32,26 @@ def get_yml_para(dha_file):
     daisy_passwd = data.get("daisy_passwd", "")
     daisy_ip = data.get("daisy_ip", "")
     daisy_gateway = data.get("daisy_gateway", "")
+    daisy_target_node = data.get("hosts", "")
+    hosts_num = len(daisy_target_node)
     return daisyserver_size, controller_node_size,\
-        compute_node_size, daisy_passwd, daisy_ip, daisy_gateway
+        compute_node_size, daisy_passwd, daisy_ip, daisy_gateway,\
+        hosts_num
 
 
 def get_conf_from_deploy():
     conf = cfg.ConfigOpts()
     parse(conf, sys.argv[1:])
     daisyserver_size, controller_node_size, compute_node_size,\
-        daisy_passwd, daisy_ip, daisy_gateway = get_yml_para(conf['dha'])
-    print "{ip} {passwd} -s {size} -g {gateway}".format(passwd=daisy_passwd,
-                                                        size=daisyserver_size,
-                                                        ip=daisy_ip,
-                                                        gateway=daisy_gateway)
+        daisy_passwd, daisy_ip, daisy_gateway,\
+        hosts_num = get_yml_para(conf['dha'])
+    print "{hosts_num} {ip} {passwd} -s {size} -g {gateway}".format(
+        hosts_num=hosts_num,
+        passwd=daisy_passwd,
+        size=daisyserver_size,
+        ip=daisy_ip,
+        gateway=daisy_gateway)
+
 
 if __name__ == "__main__":
     get_conf_from_deploy()
old mode 100755 (executable)
new mode 100644 (file)
index 3459cb0..34af9b5
@@ -31,6 +31,8 @@ _CLI_OPTS = [
                help='Config cluster'),
     cfg.StrOpt('host',
                help='Config host'),
+    cfg.StrOpt('env',
+               help='deploy environment'),
 ]
 
 
@@ -82,9 +84,10 @@ def prepare_install():
             hosts_info = get_hosts()
             cluster_info = get_cluster()
             cluster_id = cluster_info.id
-            add_hosts_interface(cluster_id, hosts_info,
+            add_hosts_interface(cluster_id, hosts_info, hosts_name,
                                 host_interface_map, vip)
-            build_pxe_for_os(cluster_id)
+            if conf['env'] and conf['env'] == 0:
+                build_pxe_for_os(cluster_id)
     except Exception:
         print("Deploy failed!!!.%s." % traceback.format_exc())
     else:
@@ -143,15 +146,16 @@ def get_cluster():
     return cluster_info
 
 
-def add_hosts_interface(cluster_id, hosts_info, host_interface_map,
+def add_hosts_interface(cluster_id, hosts_info, hosts_name, host_interface_map,
                         vip):
-    for host in hosts_info:
+    for host_name, host in zip(hosts_name, hosts_info):
         host = host.to_dict()
         host['cluster'] = cluster_id
         for interface in host['interfaces']:
             interface_name = interface['name']
-            interface['assigned_networks'] = \
-                host_interface_map[interface_name]
+            if interface_name in host_interface_map:
+                interface['assigned_networks'] = \
+                    host_interface_map[interface_name]
         pathlist = os.listdir(iso_path)
         for filename in pathlist:
             if filename.endswith('iso'):
@@ -160,10 +164,10 @@ def add_hosts_interface(cluster_id, hosts_info, host_interface_map,
             print("do not have os iso file in /var/lib/daisy/kolla/.")
         client.hosts.update(host['id'], **host)
         print("update role...")
-        add_host_role(cluster_id, host['id'], host['name'], vip)
+        add_host_role(cluster_id, host['id'], host_name, host['name'], vip)
 
 
-def add_host_role(cluster_id, host_id, host_name, vip):
+def add_host_role(cluster_id, host_id, host_exp_name, host_real_name, 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]
@@ -171,12 +175,21 @@ def add_host_role(cluster_id, host_id, host_name, vip):
                   role.name == "CONTROLLER_LB"][0]
     computer_role_id = [role.id for role in role_list if
                         role.name == "COMPUTER"][0]
-    role_lb_update_meta = {'nodes': [host_id],
-                           'cluster_id': cluster_id, 'vip': vip}
-    client.roles.update(lb_role_id, **role_lb_update_meta)
-    role_computer_update_meta = {'nodes': [host_id],
-                                 'cluster_id': cluster_id}
-    client.roles.update(computer_role_id, **role_computer_update_meta)
+    if host_exp_name in ['all_in_one']:
+        role_lb_update_meta = {'nodes': [host_id],
+                               'cluster_id': cluster_id, 'vip': vip}
+        client.roles.update(lb_role_id, **role_lb_update_meta)
+        role_computer_update_meta = {'nodes': [host_id],
+                                     'cluster_id': cluster_id}
+        client.roles.update(computer_role_id, **role_computer_update_meta)
+    if host_exp_name in ['controller01', 'controller02', 'controller03']:
+        role_lb_update_meta = {'nodes': [host_id],
+                               'cluster_id': cluster_id, 'vip': vip}
+        client.roles.update(lb_role_id, **role_lb_update_meta)
+    if host_exp_name in ['computer01', 'computer02']:
+        role_computer_update_meta = {'nodes': [host_id],
+                                     'cluster_id': cluster_id}
+        client.roles.update(computer_role_id, **role_computer_update_meta)
 
 
 if __name__ == "__main__":
diff --git a/templates/physical_environment/networks/daisy.xml b/templates/physical_environment/networks/daisy.xml
new file mode 100644 (file)
index 0000000..884cb28
--- /dev/null
@@ -0,0 +1,12 @@
+<network connections='1'>
+  <name>daisy1</name>
+  <forward mode='nat'>
+    <nat>
+      <port start='1024' end='65535'/>
+    </nat>
+  </forward>
+  <bridge name='daisy1' stp='on' delay='0'/>
+  <domain name='daisy1'/>
+  <ip address='10.20.7.1' netmask='255.255.255.0'>
+  </ip>
+</network>
diff --git a/templates/physical_environment/vms/daisy.xml b/templates/physical_environment/vms/daisy.xml
new file mode 100644 (file)
index 0000000..e91acc4
--- /dev/null
@@ -0,0 +1,126 @@
+<domain type='kvm' id='72'>\r
+  <name>daisy</name>\r
+  <uuid>9bee58b0-dfa6-485f-a205-d72848893551</uuid>\r
+  <memory unit='KiB'>4194304</memory>\r
+  <currentMemory unit='KiB'>4194304</currentMemory>\r
+  <vcpu placement='static'>4</vcpu>\r
+  <resource>\r
+    <partition>/machine</partition>\r
+  </resource>\r
+  <os>\r
+    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>\r
+    <boot dev='hd'/>\r
+  </os>\r
+  <features>\r
+    <acpi/>\r
+    <apic/>\r
+  </features>\r
+  <cpu mode='custom' match='exact'>\r
+    <model fallback='allow'>IvyBridge</model>\r
+  </cpu>\r
+  <clock offset='utc'>\r
+    <timer name='rtc' tickpolicy='catchup'/>\r
+    <timer name='pit' tickpolicy='delay'/>\r
+    <timer name='hpet' present='no'/>\r
+  </clock>\r
+  <on_poweroff>destroy</on_poweroff>\r
+  <on_reboot>restart</on_reboot>\r
+  <on_crash>restart</on_crash>\r
+  <pm>\r
+    <suspend-to-mem enabled='no'/>\r
+    <suspend-to-disk enabled='no'/>\r
+  </pm>\r
+  <devices>\r
+    <emulator>/usr/libexec/qemu-kvm</emulator>\r
+    <disk type='file' device='disk'>\r
+      <driver name='qemu' type='qcow2'/>\r
+      <source file='/tmp/workdir/daisy/centos7.qcow2'/>\r
+      <backingStore/>\r
+      <target dev='hda' bus='ide'/>\r
+      <alias name='ide0-0-0'/>\r
+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>\r
+    </disk>\r
+    <controller type='usb' index='0' model='ich9-ehci1'>\r
+      <alias name='usb'/>\r
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x7'/>\r
+    </controller>\r
+    <controller type='usb' index='0' model='ich9-uhci1'>\r
+      <alias name='usb'/>\r
+      <master startport='0'/>\r
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0' multifunction='on'/>\r
+    </controller>\r
+    <controller type='usb' index='0' model='ich9-uhci2'>\r
+      <alias name='usb'/>\r
+      <master startport='2'/>\r
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x1'/>\r
+    </controller>\r
+    <controller type='usb' index='0' model='ich9-uhci3'>\r
+      <alias name='usb'/>\r
+      <master startport='4'/>\r
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x2'/>\r
+    </controller>\r
+    <controller type='pci' index='0' model='pci-root'>\r
+      <alias name='pci.0'/>\r
+    </controller>\r
+    <controller type='ide' index='0'>\r
+      <alias name='ide'/>\r
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>\r
+    </controller>\r
+    <controller type='virtio-serial' index='0'>\r
+      <alias name='virtio-serial0'/>\r
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>\r
+    </controller>\r
+    <interface type='bridge'>\r
+      <mac address='52:54:00:73:8b:50'/>\r
+      <source bridge='daisy1'/>\r
+      <target dev='vnet1'/>\r
+      <model type='rtl8139'/>\r
+      <alias name='net0'/>\r
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>\r
+    </interface>\r
+    <serial type='pty'>\r
+      <source path='/dev/pts/9'/>\r
+      <target port='0'/>\r
+      <alias name='serial0'/>\r
+    </serial>\r
+    <console type='pty' tty='/dev/pts/9'>\r
+      <source path='/dev/pts/9'/>\r
+      <target type='serial' port='0'/>\r
+      <alias name='serial0'/>\r
+    </console>\r
+    <channel type='spicevmc'>\r
+      <target type='virtio' name='com.redhat.spice.0' state='disconnected'/>\r
+      <alias name='channel0'/>\r
+      <address type='virtio-serial' controller='0' bus='0' port='1'/>\r
+    </channel>\r
+    <input type='mouse' bus='ps2'/>\r
+    <input type='keyboard' bus='ps2'/>\r
+    <graphics type='spice' port='5902' autoport='yes' listen='127.0.0.1'>\r
+      <listen type='address' address='127.0.0.1'/>\r
+      <image compression='off'/>\r
+    </graphics>\r
+    <sound model='ich6'>\r
+      <alias name='sound0'/>\r
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>\r
+    </sound>\r
+    <video>\r
+      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1'/>\r
+      <alias name='video0'/>\r
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>\r
+    </video>\r
+    <redirdev bus='usb' type='spicevmc'>\r
+      <alias name='redir0'/>\r
+    </redirdev>\r
+    <redirdev bus='usb' type='spicevmc'>\r
+      <alias name='redir1'/>\r
+    </redirdev>\r
+    <memballoon model='virtio'>\r
+      <alias name='balloon0'/>\r
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>\r
+    </memballoon>\r
+  </devices>\r
+  <seclabel type='dynamic' model='selinux' relabel='yes'>\r
+    <label>system_u:system_r:svirt_t:s0:c482,c747</label>\r
+    <imagelabel>system_u:object_r:svirt_image_t:s0:c482,c747</imagelabel>\r
+  </seclabel>\r
+</domain>\r