blob: 46b8c023cc712b9aec070890050f54706e922632 (
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
|
#!/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
}
function setup_bridge_net()
{
net_name=$1
nic=$2
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
}
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 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 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
}
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
python $COMPASS_DIR/deploy/setup_vnic.py
}
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
}
function setup_virtual_net() {
setup_nat_net install $INSTALL_GW $INSTALL_MASK
}
function setup_baremetal_net() {
if [[ -z $INSTALL_NIC ]]; then
exit 1
fi
setup_bridge_net install $INSTALL_NIC
}
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() {
setup_nat_net mgmt $MGMT_GW $MGMT_MASK $MGMT_IP_START $MGMT_IP_END
# create install network
setup_"$TYPE"_net
# create external network
setup_bridge_external
clear_forward_rejct_rules
setup_network_boot_scripts
}
|