blob: b74a1b40e40626d1b920a667afd1e12e4d099891 (
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
|
#!/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
##############################################################################
function clear_forward_rejct_rules()
{
while sudo iptables -nL FORWARD --line-number|grep -E 'REJECT +all +-- +0.0.0.0/0 +0.0.0.0/0 +reject-with icmp-port-unreachable'|head -1|awk '{print $1}'|xargs sudo iptables -D FORWARD; do :; done
ip_forward=$(cat /proc/sys/net/ipv4/ip_forward)
if [ $ip_forward -eq 0 ]; then
sysctl -w net.ipv4.ip_forward=1
fi
}
function setup_bridge_net()
{
net_name=$1
nic=$2
sudo ifconfig $nic up
sudo virsh net-destroy $net_name
sudo virsh net-undefine $net_name
sed -e "s/REPLACE_NAME/$net_name/g" \
-e "s/REPLACE_NIC/$nic/g" \
$COMPASS_DIR/deploy/template/network/bridge_nic.xml \
> $WORK_DIR/network/$net_name.xml
sudo virsh net-define $WORK_DIR/network/$net_name.xml
sudo virsh net-start $net_name
sudo virsh net-autostart $net_name
}
function recover_bridge_net()
{
net_name=$1
sudo virsh net-start $net_name
}
function save_network_info()
{
sudo ovs-vsctl list-br |grep br-external
br_exist=$?
external_nic=`ip route |grep '^default'|awk '{print $5F}'`
route_info=`ip route |grep -Eo '^default via [^ ]+'`
ip_info=`ip addr show $external_nic|grep -Eo '[^ ]+ brd [^ ]+ '`
if [ $br_exist -eq 0 ]; then
if [ "$external_nic" != "br-external" ]; then
sudo ip link set br-external up
sudo ovs-vsctl --may-exist add-port br-external $external_nic
sudo ip addr flush $external_nic
sudo ip addr add $ip_info dev br-external
sudo ip route add $route_info dev br-external
fi
else
sudo ovs-vsctl add-br br-external
sudo ip link set br-external up
sudo ovs-vsctl add-port br-external $external_nic
sudo ip addr flush $external_nic
sudo ip addr add $ip_info dev br-external
sudo ip route add $route_info dev br-external
fi
# Configure OS_MGMT_NIC when openstack external network and mgmt network use different nics
if [[ x"$OS_MGMT_NIC" != "x" ]]; then
sudo ovs-vsctl --may-exist add-port br-external $OS_MGMT_NIC
sudo ip link set $OS_MGMT_NIC up
sudo ip addr flush $OS_MGMT_NIC
fi
}
function setup_bridge_external()
{
sudo virsh net-destroy external
sudo virsh net-undefine external
save_network_info
sed -e "s/REPLACE_NAME/external/g" \
-e "s/REPLACE_OVS/br-external/g" \
$COMPASS_DIR/deploy/template/network/bridge_ovs.xml \
> $WORK_DIR/network/external.xml
sudo virsh net-define $WORK_DIR/network/external.xml
sudo virsh net-start external
sudo virsh net-autostart external
}
function recover_bridge_external()
{
sudo virsh net-start external
}
function setup_nat_net() {
net_name=$1
gw=$2
mask=$3
ip_start=$4
ip_end=$5
sudo virsh net-destroy $net_name
sudo virsh net-undefine $net_name
# create install network
sed -e "s/REPLACE_BRIDGE/br_$net_name/g" \
-e "s/REPLACE_NAME/$net_name/g" \
-e "s/REPLACE_GATEWAY/$gw/g" \
-e "s/REPLACE_MASK/$mask/g" \
-e "s/REPLACE_START/$ip_start/g" \
-e "s/REPLACE_END/$ip_end/g" \
$COMPASS_DIR/deploy/template/network/nat.xml \
> $WORK_DIR/network/$net_name.xml
sudo virsh net-define $WORK_DIR/network/$net_name.xml
sudo virsh net-start $net_name
sudo virsh net-autostart $net_name
}
function recover_nat_net() {
net_name=$1
sudo virsh net-start $net_name
}
function setup_virtual_net() {
setup_nat_net install $INSTALL_GW $INSTALL_NETMASK
if [[ "$NAT_EXTERNAL" == "false" ]]; then
setup_bridge_external
else
setup_nat_net external_nat $EXT_NAT_GW $EXT_NAT_MASK $EXT_NAT_IP_START $EXT_NAT_IP_END
fi
}
function recover_virtual_net() {
recover_nat_net install
}
function setup_baremetal_net() {
if [[ -z $INSTALL_NIC ]]; then
exit 1
fi
sudo ifconfig $INSTALL_NIC up
sudo ifconfig $INSTALL_NIC promisc
sudo ifconfig $INSTALL_NIC $INSTALL_GW netmask $INSTALL_NETMASK
}
function recover_baremetal_net() {
if [[ -z $INSTALL_NIC ]]; then
exit 1
fi
recover_bridge_net install
}
function setup_network_boot_scripts() {
sudo cp $COMPASS_DIR/deploy/network.sh /usr/sbin/network_setup
sudo chmod +777 /usr/sbin/network_setup
sudo cat << EOF >> /usr/sbin/network_setup
sleep 2
#save_network_info
clear_forward_rejct_rules
EOF
sudo chmod 755 /usr/sbin/network_setup
egrep -R "^/usr/sbin/network_setup" /etc/rc.local
if [[ $? != 0 ]]; then
sudo sed -i '/^exit 0/i\/usr\/sbin\/network_setup' /etc/rc.local
fi
}
function create_nets() {
# create install network
setup_"$TYPE"_net
# create external network
# setup_bridge_external
clear_forward_rejct_rules
setup_network_boot_scripts
}
function recover_nets() {
recover_nat_net mgmt
# recover install network
recover_"$TYPE"_net
# recover external network
recover_bridge_external
clear_forward_rejct_rules
}
|