Some refactoring
parent
b63870b53b
commit
2d15685b7d
|
@ -1,4 +1,4 @@
|
||||||
FROM alpine
|
FROM alpine:3.12
|
||||||
RUN apk add --no-cache curl iproute2 iputils jq
|
RUN apk add --no-cache curl iproute2 iputils jq
|
||||||
ADD bridget.sh /bin/bridget.sh
|
ADD bridget.sh /bin/bridget.sh
|
||||||
CMD . /bin/bridget.sh
|
CMD /bin/bridget.sh
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
CNI_CONFIG="${CNI_CONFIG:-/etc/cni/net.d/10-bridget.conf}"
|
CNI_CONFIG="${CNI_CONFIG:-/etc/cni/net.d/10-bridget.conf}"
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
|
|
||||||
Available variables:
|
Available variables:
|
||||||
- BRIDGE (example: cbr0)
|
- BRIDGE (example: cbr0)
|
||||||
|
@ -48,16 +48,16 @@ debug() {
|
||||||
}
|
}
|
||||||
|
|
||||||
next_ip() {
|
next_ip() {
|
||||||
local IP_HEX=$(printf '%.2X%.2X%.2X%.2X\n' `echo $1 | sed -e 's/\./ /g'`)
|
local IP_HEX=$(printf '%.2X%.2X%.2X%.2X\n' $(echo $1 | sed -e 's/\./ /g'))
|
||||||
local NEXT_IP_HEX=$(printf %.8X `echo $(( 0x$IP_HEX + 1 ))`)
|
local NEXT_IP_HEX=$(printf %.8X $(echo $((0x$IP_HEX + 1))))
|
||||||
local NEXT_IP=$(printf '%d.%d.%d.%d\n' `echo $NEXT_IP_HEX | sed -r 's/(..)/0x\1 /g'`)
|
local NEXT_IP=$(printf '%d.%d.%d.%d\n' $(echo $NEXT_IP_HEX | sed -r 's/(..)/0x\1 /g'))
|
||||||
echo $NEXT_IP
|
echo $NEXT_IP
|
||||||
}
|
}
|
||||||
|
|
||||||
prev_ip() {
|
prev_ip() {
|
||||||
local IP_HEX=$(printf '%.2X%.2X%.2X%.2X\n' `echo $1 | sed -e 's/\./ /g'`)
|
local IP_HEX=$(printf '%.2X%.2X%.2X%.2X\n' $(echo $1 | sed -e 's/\./ /g'))
|
||||||
local PREV_IP_HEX=$(printf %.8X `echo $(( 0x$IP_HEX - 1 ))`)
|
local PREV_IP_HEX=$(printf %.8X $(echo $((0x$IP_HEX - 1))))
|
||||||
local PREV_IP=$(printf '%d.%d.%d.%d\n' `echo $PREV_IP_HEX | sed -r 's/(..)/0x\1 /g'`)
|
local PREV_IP=$(printf '%d.%d.%d.%d\n' $(echo $PREV_IP_HEX | sed -r 's/(..)/0x\1 /g'))
|
||||||
echo $PREV_IP
|
echo $PREV_IP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ log "Starting bridge configuration"
|
||||||
[ -z "$NODE_NAME" ] && error "NODE_NAME variable is not defined"
|
[ -z "$NODE_NAME" ] && error "NODE_NAME variable is not defined"
|
||||||
|
|
||||||
# Check if bridge interface exist
|
# Check if bridge interface exist
|
||||||
if ! ip link show "$BRIDGE" 1>/dev/null 2> /dev/null; then
|
if ! ip link show "$BRIDGE" 1>/dev/null 2>/dev/null; then
|
||||||
|
|
||||||
log "Adding new bridge $BRIDGE"
|
log "Adding new bridge $BRIDGE"
|
||||||
ip link add dev "$BRIDGE" type bridge
|
ip link add dev "$BRIDGE" type bridge
|
||||||
|
@ -92,8 +92,6 @@ fi
|
||||||
log "Setting bridge $BRIDGE up"
|
log "Setting bridge $BRIDGE up"
|
||||||
ip link set "$BRIDGE" up
|
ip link set "$BRIDGE" up
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------------
|
||||||
# Configure vlan
|
# Configure vlan
|
||||||
# ------------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------------
|
||||||
|
@ -105,7 +103,7 @@ if ([ ! -z "$VLAN" ] || [ ! -z "$IFACE" ]) && [ "${CHECK_SLAVES:-1}" = 1 ]; then
|
||||||
|
|
||||||
if [ ! -z "$VLAN" ]; then
|
if [ ! -z "$VLAN" ]; then
|
||||||
# check if vlan interface exist
|
# check if vlan interface exist
|
||||||
if ip link show "$IFACE.$VLAN" 1> /dev/null 2> /dev/null; then
|
if ip link show "$IFACE.$VLAN" 1>/dev/null 2>/dev/null; then
|
||||||
log "VLAN interface $IFACE.$VLAN already exist"
|
log "VLAN interface $IFACE.$VLAN already exist"
|
||||||
else
|
else
|
||||||
log "Adding new VLAN interface $IFACE.$VLAN"
|
log "Adding new VLAN interface $IFACE.$VLAN"
|
||||||
|
@ -130,18 +128,18 @@ if ([ ! -z "$VLAN" ] || [ ! -z "$IFACE" ]) && [ "${CHECK_SLAVES:-1}" = 1 ]; then
|
||||||
SLAVEIF="$IFACE"
|
SLAVEIF="$IFACE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! ip link show "$SLAVEIF" 1> /dev/null 2> /dev/null; then
|
if ! ip link show "$SLAVEIF" 1>/dev/null 2>/dev/null; then
|
||||||
error "$SLAVEIF does not exist"
|
error "$SLAVEIF does not exist"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# check if slave interface contains right master
|
# check if slave interface contains right master
|
||||||
MASTERIF="$(ip -o link show "$SLAVEIF" | grep -o -m1 'master [^ ]\+' | cut -d' ' -f2 )"
|
MASTERIF="$(ip -o link show "$SLAVEIF" | grep -o -m1 'master [^ ]\+' | cut -d' ' -f2)"
|
||||||
|
|
||||||
case "$MASTERIF" in
|
case "$MASTERIF" in
|
||||||
"$BRIDGE" ) log "$SLAVEIF already member of $BRIDGE" ;;
|
"$BRIDGE") log "$SLAVEIF already member of $BRIDGE" ;;
|
||||||
"" ) log "Adding $SLAVEIF as member to $BRIDGE"
|
"" ) log "Adding $SLAVEIF as member to $BRIDGE"
|
||||||
ip link set "$SLAVEIF" master "$BRIDGE" ;;
|
ip link set "$SLAVEIF" master "$BRIDGE" ;;
|
||||||
* ) error "interface $SLAVEIF have another master" ;;
|
* ) error "interface $SLAVEIF have another master" ;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -154,20 +152,22 @@ log "Starting retriving parameters"
|
||||||
POD_NETWORK="${POD_NETWORK:-10.244.0.0/16}"
|
POD_NETWORK="${POD_NETWORK:-10.244.0.0/16}"
|
||||||
NODE_NETWORK="$(getnodecidr "${NODE_NAME}")"
|
NODE_NETWORK="$(getnodecidr "${NODE_NAME}")"
|
||||||
if [ -z "$NODE_NETWORK" ] || [ "$NODE_NETWORK" = "null" ]; then
|
if [ -z "$NODE_NETWORK" ] || [ "$NODE_NETWORK" = "null" ]; then
|
||||||
error "Failed to get node cidr"
|
error "Failed to get node cidr"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
export "POD_$(ipcalc -p "$POD_NETWORK")" # POD_PREFIX
|
export "POD_$(ipcalc -b "$POD_NETWORK")" # POD_BROADCAST
|
||||||
export "POD_$(ipcalc -n "$POD_NETWORK")" # POD_NETWORK
|
export "POD_$(ipcalc -p "$POD_NETWORK")" # POD_PREFIX
|
||||||
export "NODE_$(ipcalc -p "$NODE_NETWORK")" # NODE_PREFIX
|
export "POD_$(ipcalc -n "$POD_NETWORK")" # POD_NETWORK
|
||||||
export "NODE_$(ipcalc -b "$NODE_NETWORK")" # NODE_BROADCAST
|
export "NODE_$(ipcalc -p "$NODE_NETWORK")" # NODE_PREFIX
|
||||||
export "NODE_$(ipcalc -n "$NODE_NETWORK")" # NODE_NETWORK
|
export "NODE_$(ipcalc -b "$NODE_NETWORK")" # NODE_BROADCAST
|
||||||
|
export "NODE_$(ipcalc -n "$NODE_NETWORK")" # NODE_NETWORK
|
||||||
export "NODE_IP=$(next_ip "$NODE_NETWORK")" # NODE_IP
|
export "NODE_IP=$(next_ip "$NODE_NETWORK")" # NODE_IP
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
|
|
||||||
|
debug "POD_BROADCAST=$POD_BROADCAST"
|
||||||
debug "POD_PREFIX=$POD_PREFIX"
|
debug "POD_PREFIX=$POD_PREFIX"
|
||||||
debug "POD_NETWORK=$POD_NETWORK"
|
debug "POD_NETWORK=$POD_NETWORK"
|
||||||
debug "NODE_PREFIX=$NODE_PREFIX"
|
debug "NODE_PREFIX=$NODE_PREFIX"
|
||||||
|
@ -182,7 +182,7 @@ debug "NODE_IP=$NODE_IP"
|
||||||
log "Configuring $NODE_IP/$POD_PREFIX on $BRIDGE"
|
log "Configuring $NODE_IP/$POD_PREFIX on $BRIDGE"
|
||||||
ip -o addr show "$BRIDGE" | grep -o 'inet [^ ]\+' | while read _ IP; do
|
ip -o addr show "$BRIDGE" | grep -o 'inet [^ ]\+' | while read _ IP; do
|
||||||
# Remove bridge addresses from the same subnet, don't touch other addresses
|
# Remove bridge addresses from the same subnet, don't touch other addresses
|
||||||
if [ $(ipcalc -b "$IP") = $(ipcalc -b "$POD_NETWORK/$POD_PREFIX") -a "$IP" != "$NODE_IP/$POD_PREFIX" ]; then
|
if [ $(ipcalc -b "$IP") = "$POD_BROADCAST" ] && [ "$IP" != "$NODE_IP/$POD_PREFIX" ]; then
|
||||||
ip addr del "$IP" dev "$BRIDGE"
|
ip addr del "$IP" dev "$BRIDGE"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -210,7 +210,7 @@ debug "LAST_IP=$LAST_IP"
|
||||||
|
|
||||||
log "Writing $CNI_CONFIG"
|
log "Writing $CNI_CONFIG"
|
||||||
|
|
||||||
cat > $CNI_CONFIG <<EOT
|
cat >$CNI_CONFIG <<EOT
|
||||||
{
|
{
|
||||||
"name": "bridget",
|
"name": "bridget",
|
||||||
"cniVersion": "0.2.0",
|
"cniVersion": "0.2.0",
|
||||||
|
|
|
@ -65,7 +65,7 @@ spec:
|
||||||
hostPID: true
|
hostPID: true
|
||||||
containers:
|
containers:
|
||||||
- name: bridget
|
- name: bridget
|
||||||
image: kvaps/bridget:v1.0.1
|
image: docker.io/kvaps/bridget:v1.1.0
|
||||||
env:
|
env:
|
||||||
- name: BRIDGE
|
- name: BRIDGE
|
||||||
value: "cbr0"
|
value: "cbr0"
|
||||||
|
|
Loading…
Reference in New Issue