Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 48 additions & 29 deletions vagrant/scripts/create_bridge.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ function check_eth {
}

function display_usage {
echo
echo "create a bridge network using a provided interface"
echo "usage:"
echo ""
Expand All @@ -33,11 +34,14 @@ function display_usage {
echo "options:"
echo "bridge_name - our vagrant boxes use br1 as a bridge name."
echo "iface_name - name of the interface we want to use under the bridge."
echo "bridge mode - static or dhcp"
echo "bridge_cidr - subnet each we will issue data IPs for each provisioned VM."
echo "gateway - IP address inside the provided <bridge_cidr>"
echo ""
echo "example:"
echo "./create_bridge.sh br1 ens1f0np0 10.10.230.2/24 10.10.230.1"
echo "For Static IP configuration: ./create_bridge.sh br1 ens1f0np0 static 10.10.230.2/24 10.10.230.1"
echo "For DHCP configuration: ./create_bridge.sh br1 ens1f0np0 dhcp"
echo
}

# check whether user had supplied -h or --help . If yes display usage
Expand All @@ -46,19 +50,25 @@ if [[ ( $@ == "--help") || $@ == "-h" ]]; then
exit 0
fi

# if less than five arguments supplied, display usage
if [ $# -le 3 ]; then
# if less than three arguments supplied, display usage
if [ $# -le 2 ]; then
display_usage
exit 1
fi

install_dependencies


export BRIDGE_NAME=${1}
export BRIDGE_INTERFACE=${2}
export BRIDGE_ADDRESS_CIDR=${3}
export BRIDGE_GATEWAY=${4}
export BRIDGE_MODE=${3}
export BRIDGE_ADDRESS_CIDR=${4}
export BRIDGE_GATEWAY=${5}

if [[ $BRIDGE_MODE != "static" && $BRIDGE_MODE != "dhcp" ]] ;then
printf "\nWrong value for bridge mode, valid values are static or dhcp\n"
display_usage
exit 1
fi

install_dependencies

if check_eth $BRIDGE_INTERFACE; then
echo "The provided link for the bridge is Online!"
Expand All @@ -67,26 +77,30 @@ else
exit 1
fi

# n - ip format validation, m - subnet format validation
n='([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
m='([0-9]|[12][0-9]|3[012])'

# validate cidr with n & m
if [[ $BRIDGE_ADDRESS_CIDR =~ ^$n(\.$n){3}/$m$ ]]; then
printf '"%s" is a valid CIDR\n' "$BRIDGE_ADDRESS_CIDR"
else
printf 'ERROR: "%s" is not valid CIDR..exiting\n' "$BRIDGE_ADDRESS_CIDR"
exit 1
fi
# n - ip format validation, m - subnet format validation
if [[ $BRIDGE_MODE == "static" ]] ; then
n='([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
m='([0-9]|[12][0-9]|3[012])'
# CIDR value validation
if [[ $BRIDGE_ADDRESS_CIDR =~ ^$n(\.$n){3}/$m$ ]]; then
printf '"%s" is a valid CIDR\n' "$BRIDGE_ADDRESS_CIDR"
else
printf 'ERROR: "%s" is not valid CIDR..exiting\n' "$BRIDGE_ADDRESS_CIDR"
exit 1
fi

# ip format validation
if [[ $BRIDGE_GATEWAY =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
printf '"%s" is a valid IP\n' "$BRIDGE_GATEWAY"
else
printf 'ERROR: "%s" is not valid gateway address\n' "$BRIDGE_GATEWAY"
exit 1
# ip format validation
if [[ $BRIDGE_GATEWAY =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
printf '"%s" is a valid IP\n' "$BRIDGE_GATEWAY"
else
printf 'ERROR: "%s" is not valid gateway address\n' "$BRIDGE_GATEWAY"
exit 1
fi
fi


set +e
nmcli con show "$BRIDGE_NAME" &>/dev/null
RESULT=$?
Expand All @@ -100,13 +114,18 @@ echo "creating bridge $BRIDGE_NAME"
# start creating the bridge
sudo systemctl stop libvirtd
sudo nmcli con add type bridge ifname $BRIDGE_NAME autoconnect yes con-name $BRIDGE_NAME stp off
sudo nmcli con modify $BRIDGE_NAME ipv4.addresses $BRIDGE_ADDRESS_CIDR ipv4.method manual
sudo nmcli con modify $BRIDGE_NAME ipv4.gateway $BRIDGE_GATEWAY
sudo nmcli con modify $BRIDGE_NAME ipv4.dns $BRIDGE_GATEWAY
if [[ $BRIDGE_MODE == "static" ]] ; then
sudo nmcli con modify $BRIDGE_NAME ipv4.addresses $BRIDGE_ADDRESS_CIDR ipv4.method manual
sudo nmcli con modify $BRIDGE_NAME ipv4.gateway $BRIDGE_GATEWAY
sudo nmcli con modify $BRIDGE_NAME ipv4.dns $BRIDGE_GATEWAY
else
#sudo nmcli con modify $BRIDGE_NAME ipv4.addresses $BRIDGE_ADDRESS_CIDR ipv4.method auto
sudo nmcli con modify $BRIDGE_NAME ipv4.method auto
fi
sudo nmcli con add type bridge-slave autoconnect yes con-name "$BRIDGE_INTERFACE" ifname "$BRIDGE_INTERFACE" master $BRIDGE_NAME
sudo systemctl restart NetworkManager
sudo systemctl restart libvirtd
echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-ipforward.conf
sudo sysctl -p /etc/sysctl.d/99-ipforward.conf
sudo nmcli con up $BRIDGE_NAME
sudo nmcli con modify $BRIDGE_NAME connection.autoconnect-slaves 1
sudo nmcli con up $BRIDGE_NAME
sudo systemctl restart NetworkManager
sudo systemctl restart libvirtd