-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtask10_12_1.sh
executable file
·141 lines (123 loc) · 4.72 KB
/
task10_12_1.sh
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
#!/bin/bash
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source "$dir/config"
#Change xml according to the config file
#External
MAC=52:54:00:`(date; cat /proc/interrupts) | md5sum | sed -r 's/^(.{6}).*$/\1/; s/([0-9a-f]{2})/\1:/g; s/:$//;'`
echo "<network>
<name>${EXTERNAL_NET_NAME}</name>
<forward mode='nat'/>
<ip address='${EXTERNAL_NET_HOST_IP}' netmask='${EXTERNAL_NET_MASK}'>
<dhcp>
<range start='${EXTERNAL_NET}.2' end='${EXTERNAL_NET}.254'/>
<host mac='${MAC}' name='${VM1_NAME}' ip='${VM1_EXTERNAL_IP}'/>
</dhcp>
</ip>
</network>" > $dir/networks/external.xml
#Inaternal
echo "<network>
<name>${INTERNAL_NET_NAME}</name>
</network>" > $dir/networks/internal.xml
#Management
echo "<network>
<name>${MANAGEMENT_NET_NAME}</name>
<ip address='${MANAGEMENT_HOST_IP}' netmask='${MANAGEMENT_NET_MASK}'/>
</network>" > $dir/networks/management.xml
#VM1-config
#meta-data
echo "instance-id: vm1-123
hostname: ${VM1_NAME}
local-hostname: ${VM1_NAME}
public-keys:
- `cat ${SSH_PUB_KEY}`
network-interfaces: |
auto ${VM1_EXTERNAL_IF}
iface ${VM1_EXTERNAL_IF} inet dhcp
auto ${VM1_INTERNAL_IF}
iface ${VM1_INTERNAL_IF} inet static
address ${VM1_INTERNAL_IP}
netmask ${INTERNAL_NET_MASK}
auto ${VM1_MANAGEMENT_IF}
iface ${VM1_MANAGEMENT_IF} inet static
address ${VM1_MANAGEMENT_IP}
netmask ${MANAGEMENT_NET_MASK}" > $dir/config-drives/vm1-config/meta-data
#user-data
echo "#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ${VM1_EXTERNAL_IF} -j MASQUERADE
ip link add ${VXLAN_IF} type vxlan id ${VID} remote ${VM2_INTERNAL_IP} local ${VM1_INTERNAL_IP} dstport 4789
ip link set ${VXLAN_IF} up
ip addr add ${VM1_VXLAN_IP}/24 dev ${VXLAN_IF}
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt-key fingerprint 0EBFCD88
add-apt-repository 'deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable'
apt-get update
apt-get install docker-ce -y" > $dir/config-drives/vm1-config/user-data
#VM2-config
#meta-data
echo "instance-id: vm2-123
hostname: ${VM2_NAME}
local-hostname: ${VM2_NAME}
public-keys:
- `cat ${SSH_PUB_KEY}`
network-interfaces: |
auto ${VM2_INTERNAL_IF}
iface ${VM2_INTERNAL_IF} inet static
address ${VM2_INTERNAL_IP}
netmask ${INTERNAL_NET_MASK}
gateway ${VM1_INTERNAL_IP}
dns-nameservers ${VM_DNS}
auto ${VM2_MANAGEMENT_IF}
iface ${VM2_MANAGEMENT_IF} inet static
address ${VM2_MANAGEMENT_IP}
netmask ${MANAGEMENT_NET_MASK}" > $dir/config-drives/vm2-config/meta-data
#user-data
echo "#!/bin/bash
ip link add ${VXLAN_IF} type vxlan id ${VID} remote ${VM1_INTERNAL_IP} local ${VM2_INTERNAL_IP} dstport 4789
ip link set ${VXLAN_IF} up
ip addr add ${VM2_VXLAN_IP}/24 dev ${VXLAN_IF}
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt-key fingerprint 0EBFCD88
add-apt-repository 'deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable'
apt-get update
apt-get install docker-ce -y" > $dir/config-drives/vm2-config/user-data
#Create networks
virsh net-define $dir/networks/external.xml
virsh net-define $dir/networks/internal.xml
virsh net-define $dir/networks/management.xml
#Start networks
virsh net-start external
virsh net-start internal
virsh net-start management
#Download image and create disks
wget -O /var/lib/libvirt/images/ubuntu-server-16.04.qcow2 ${VM_BASE_IMAGE}
mkdir /var/lib/libvirt/images/vm1
mkdir /var/lib/libvirt/images/vm2
cp /var/lib/libvirt/images/ubuntu-server-16.04.qcow2 /var/lib/libvirt/images/vm1/vm1.qcow2
cp /var/lib/libvirt/images/ubuntu-server-16.04.qcow2 /var/lib/libvirt/images/vm2/vm2.qcow2
#Create iso conf drive
mkisofs -o "/var/lib/libvirt/images/vm1/config-vm1.iso" -V cidata -r -J $dir/config-drives/vm1-config
mkisofs -o "/var/lib/libvirt/images/vm2/config-vm2.iso" -V cidata -r -J $dir/config-drives/vm2-config
#Install VM1
virt-install --connect qemu:///system \
--name ${VM1_NAME} \
--ram ${VM1_MB_RAM} --vcpus=${VM1_NUM_CPU} --${VM_TYPE} \
--os-type=linux --os-variant=ubuntu16.04 \
--disk path=${VM1_HDD},format=qcow2,bus=virtio,cache=none \
--disk path=${VM1_CONFIG_ISO},device=cdrom \
--network network=${EXTERNAL_NET_NAME},mac=${MAC} \
--network network=${INTERNAL_NET_NAME} \
--network network=${MANAGEMENT_NET_NAME} \
--graphics vnc,port=-1 \
--noautoconsole --virt-type ${VM_VIRT_TYPE} --import
#Install VM2
virt-install --connect qemu:///system \
--name ${VM2_NAME} \
--ram ${VM2_MB_RAM} --vcpus=${VM2_NUM_CPU} --${VM_TYPE} \
--os-type=linux --os-variant=ubuntu16.04 \
--disk path=${VM2_HDD},format=qcow2,bus=virtio,cache=none \
--disk path=${VM2_CONFIG_ISO},device=cdrom \
--network network=${INTERNAL_NET_NAME} \
--network network=${MANAGEMENT_NET_NAME} \
--graphics vnc,port=-1 \
--noautoconsole --virt-type ${VM_VIRT_TYPE} --import