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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
#!/usr/bin/env bash
##############################################################################
# Copyright (c) 2015 Tim Rozet (Red Hat), Dan Radez (Red Hat) 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
##############################################################################
##Create virtual nodes in virsh
##params: vcpus, ramsize
function setup_virtual_baremetal {
local vcpus ramsize
if [ -z "$1" ]; then
vcpus=4
ramsize=8192
elif [ -z "$2" ]; then
vcpus=$1
ramsize=8192
else
vcpus=$1
ramsize=$(($2*1024))
fi
#start by generating the opening json for instackenv.json
cat > $CONFIG/instackenv-virt.json << EOF
{
"nodes": [
EOF
# next create the virtual machines and add their definitions to the file
if [ "$ha_enabled" == "False" ]; then
controller_index=0
else
controller_index=2
# 3 controller + computes
# zero based so add 2 to compute count
if [ $VM_COMPUTES -lt 2 ]; then
VM_COMPUTES=2
fi
fi
for i in $(seq 0 $(($controller_index+$VM_COMPUTES))); do
if [ $i -gt $controller_index ]; then
capability="profile:compute"
else
capability="profile:control"
if [[ "${deploy_options_array['sdn_controller']}" == 'opendaylight' && "$ramsize" -lt 10240 ]]; then
echo "WARN: RAM per controller too low. OpenDaylight specified in HA deployment requires at least 10GB"
echo "INFO: Increasing RAM per controller to 10GB"
ramsize=10240
fi
fi
if ! virsh list --all | grep baremetal${i} > /dev/null; then
define_vm baremetal${i} network 41 'admin_network' $vcpus $ramsize
for n in private_network public_network storage_network api_network; do
if [[ $enabled_network_list =~ $n ]]; then
echo -n "$n "
virsh attach-interface --domain baremetal${i} --type network --source $n --model virtio --config
fi
done
else
echo "Found Baremetal ${i} VM, using existing VM"
fi
#virsh vol-list default | grep baremetal${i} 2>&1> /dev/null || virsh vol-create-as default baremetal${i}.qcow2 41G --format qcow2
mac=$(virsh domiflist baremetal${i} | grep admin_network | awk '{ print $5 }')
cat >> $CONFIG/instackenv-virt.json << EOF
{
"pm_addr": "192.168.122.1",
"pm_user": "root",
"pm_password": "INSERT_STACK_USER_PRIV_KEY",
"pm_type": "pxe_ssh",
"mac": [
"$mac"
],
"cpu": "$vcpus",
"memory": "$ramsize",
"disk": "41",
"arch": "x86_64",
"capabilities": "$capability"
},
EOF
done
#truncate the last line to remove the comma behind the bracket
tail -n 1 $CONFIG/instackenv-virt.json | wc -c | xargs -I {} truncate $CONFIG/instackenv-virt.json -s -{}
#finally reclose the bracket and close the instackenv.json file
cat >> $CONFIG/instackenv-virt.json << EOF
}
],
"arch": "x86_64",
"host-ip": "192.168.122.1",
"power_manager": "nova.virt.baremetal.virtual_power_driver.VirtualPowerManager",
"seed-ip": "",
"ssh-key": "INSERT_STACK_USER_PRIV_KEY",
"ssh-user": "root"
}
EOF
#Overwrite the tripleo-inclubator domain.xml with our own, keeping a backup.
if [ ! -f /usr/share/tripleo/templates/domain.xml.bak ]; then
/usr/bin/mv -f /usr/share/tripleo/templates/domain.xml /usr/share/tripleo/templates/domain.xml.bak
fi
/usr/bin/cp -f $LIB/installer/domain.xml /usr/share/tripleo/templates/domain.xml
}
##Create virtual nodes in virsh
##params: name - String: libvirt name for VM
## bootdev - String: boot device for the VM
## disksize - Number: size of the disk in GB
## ovs_bridges: - List: list of ovs bridges
## vcpus - Number of VCPUs to use (defaults to 4)
## ramsize - Size of RAM for VM in MB (defaults to 8192)
function define_vm () {
local vcpus ramsize
if [ -z "$5" ]; then
vcpus=4
ramsize=8388608
elif [ -z "$6" ]; then
vcpus=$5
ramsize=8388608
else
vcpus=$5
ramsize=$(($6*1024))
fi
# Create the libvirt storage volume
if virsh vol-list default | grep ${1}.qcow2 2>&1> /dev/null; then
volume_path=$(virsh vol-path --pool default ${1}.qcow2 || echo "/var/lib/libvirt/images/${1}.qcow2")
echo "Volume ${1} exists. Deleting Existing Volume $volume_path"
virsh vol-dumpxml ${1}.qcow2 --pool default > /dev/null || echo '' #ok for this to fail
touch $volume_path
virsh vol-delete ${1}.qcow2 --pool default
fi
virsh vol-create-as default ${1}.qcow2 ${3}G --format qcow2
volume_path=$(virsh vol-path --pool default ${1}.qcow2)
if [ ! -f $volume_path ]; then
echo "$volume_path Not created successfully... Aborting"
exit 1
fi
# create the VM
/usr/libexec/openstack-tripleo/configure-vm --name $1 \
--bootdev $2 \
--image "$volume_path" \
--diskbus sata \
--arch x86_64 \
--cpus $vcpus \
--memory $ramsize \
--libvirt-nic-driver virtio \
--baremetal-interface $4
}
|