aboutsummaryrefslogtreecommitdiffstats
path: root/deploy/host_virtual.sh
blob: d955b747b7dcb465177221960597f03d5d6522dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/bash
##############################################################################
# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
#
# 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
##############################################################################
host_vm_dir=$WORK_DIR/vm
function tear_down_machines() {
    old_ifs=$IFS
    IFS=,
    for i in $HOSTNAMES; do
        sudo virsh destroy $i
        if [ "$COMPASS_ARCH" = "aarch64" ]; then
            # --nvram is required for UEFI enabled VM
            sudo virsh undefine --nvram $i
        else
            sudo virsh undefine $i
        fi
        rm -rf $host_vm_dir/$i
    done
    IFS=$old_ifs
}

function reboot_hosts() {
    # We do need it for aarch64
    if [ "$COMPASS_ARCH" = "aarch64" ]; then
        old_ifs=$IFS
        IFS=,
        for i in $HOSTNAMES; do
            sudo virsh destroy $i
            sleep 3
            sudo virsh start $i
            sleep 3
        done
        IFS=$old_ifs
    else
        log_warn "reboot_hosts do nothing"
    fi
}

function launch_host_vms() {
    old_ifs=$IFS
    IFS=,
    #function_bod
    mac_array=($machines)

    # Select vm template per arch
    vm_template_dir="$COMPASS_DIR/deploy/template/vm"
    vm_template_file="$vm_template_dir/host.xml"
    vm_template_arch="$vm_template_dir/host-$COMPASS_ARCH.xml"
    [ -f $vm_template_arch ] && vm_template_file=$vm_template_arch
    if [[ "$NAT_EXTERNAL"  == "false" ]]; then
       NET_IAAS="external"
    else
       NET_IAAS="external_nat"
    fi

    log_info "bringing up pxe boot vms"
    i=0
    for host in $HOSTNAMES; do
        log_info "creating vm disk for instance $host"
        vm_dir=$host_vm_dir/$host
        mkdir -p $vm_dir
        sudo qemu-img create -f raw $vm_dir/disk.img ${VIRT_DISK}
        # create vm xml
        sed -e "s/REPLACE_MEM/$VIRT_MEM/g" \
          -e "s/REPLACE_CPU/$VIRT_CPUS/g" \
          -e "s/REPLACE_NAME/$host/g" \
          -e "s#REPLACE_IMAGE#$vm_dir/disk.img#g" \
          -e "s/REPLACE_BOOT_MAC/${mac_array[i]}/g" \
          -e "s/REPLACE_NET_INSTALL/install/g" \
          -e "s/REPLACE_NET_IAAS/$NET_IAAS/g" \
          "$vm_template_file" \
          > $vm_dir/libvirt.xml

        sudo virsh define $vm_dir/libvirt.xml
        sudo virsh start $host
        let i=i+1
    done
    IFS=$old_ifs
}

function recover_host_vms() {
    old_ifs=$IFS
    IFS=,

    for host in $HOSTNAMES; do
        sudo virsh destroy $host
        sleep 2
        sudo virsh start $host
        sleep 2
    done
    IFS=$old_ifs
}

function get_host_macs() {
    local mac_generator=${COMPASS_DIR}/deploy/mac_generator.sh
    local machines=

    if [[ $REDEPLOY_HOST == "true" ]]; then
        mac_array=`cat $WORK_DIR/switch_machines`
        machines=`echo $mac_array|sed 's/ /,/g'`
    else
        if [[ -z $HOST_MACS ]]; then
            if [[ "$EXPANSION" == "false" ]]; then
                chmod +x $mac_generator
                mac_array=`$mac_generator $VIRT_NUMBER`
                echo $mac_array > $WORK_DIR/switch_machines
                machines=`echo $mac_array|sed 's/ /,/g'`
            else
                machines_old=`cat $WORK_DIR/switch_machines`
                chmod +x $mac_generator
                machines_add=`$mac_generator $VIRT_NUMBER`
                echo $machines_add $machines_old > $WORK_DIR/switch_machines
                machines=`echo $machines_add $machines_old|sed 's/ /,/g'`
            fi
        else
            if [[ "$EXPANSION" == "false" ]]; then
                machines=`echo $HOST_MACS | sed -e 's/,/'\',\''/g' -e 's/^/'\''/g' -e 's/$/'\''/g'`
            else
                machines_old=`cat $WORK_DIR/switch_machines`
                machines_add=`echo $HOST_MACS | sed -e 's/,/'\',\''/g' -e 's/^/'\''/g' -e 's/$/'\''/g'`
                echo $machines_add $machines_old > $WORK_DIR/switch_machines
                machines=`echo $machines_add $machines_old|sed 's/ /,/g'`
            fi
        fi
    fi
    echo $machines
}