Skip to content

Instantly share code, notes, and snippets.

@alknopfler
Last active September 28, 2023 08:59
Show Gist options
  • Select an option

  • Save alknopfler/395d1c7aa74adb6eb6f88495d3020b16 to your computer and use it in GitHub Desktop.

Select an option

Save alknopfler/395d1c7aa74adb6eb6f88495d3020b16 to your computer and use it in GitHub Desktop.

Revisions

  1. alknopfler revised this gist Sep 28, 2023. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions netDatajson-configurator.sh
    Original file line number Diff line number Diff line change
    @@ -67,11 +67,13 @@ if [ $(nmcli con show --active | tail -n +2 | awk '{print $4}') == ${IFNAME} ];
    echo "Network interface ${IFNAME} already exists!"
    echo "Configuring network interface ${IFNAME}..."
    nmcli con mod ${IFNAME} ipv4.addresses ${IP_ADDRESS}/${NETMASKCIDR} ipv4.gateway ${GATEWAY} ipv4.dns ${DNS} ipv4.method manual
    nmcli con mod ${IFNAME} ipv4.dns ${DNS}
    nmcli con up ${IFNAME}
    else
    echo "Network interface ${IFNAME} does not exist!"
    echo "Configuring network interface ${IFNAME}..."
    nmcli con add type ethernet con-name ${IFNAME} ifname ${IFNAME} ip4 ${IP_ADDRESS}/${NETMASKCIDR} gw4 ${GATEWAY} ipv4.dns ${DNS} ipv4.method manual
    nmcli con mod ${IFNAME} ipv4.dns ${DNS}
    nmcli con up ${IFNAME}
    fi

  2. alknopfler created this gist Sep 28, 2023.
    80 changes: 80 additions & 0 deletions netDatajson-configurator.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,80 @@
    #!/bin/bash

    ## Verify number of args expected: 1
    if [ $# -ne 1 ]; then
    echo "Usage: $0 <network_data.json>"
    exit 1
    fi

    NETWORK_DATA_FILE=$1

    ## Function to convert netmask to CIDR notation
    IPprefix_by_netmask () {
    c=0 x=0$( printf '%o' ${1//./ } )
    while [ $x -gt 0 ]; do
    let c+=$((x%2)) 'x>>=1'
    done
    echo $c ;
    }

    ## Verify if file Network Data exists
    if [ ! -f $NETWORK_DATA_FILE ]; then
    echo "File $1 not found!"
    exit 1
    fi

    ## Verify if jq is installed
    if ! command -v jq &> /dev/null
    then
    echo "jq could not be found!"
    exit 1
    fi

    ## Verify if file Network Data is a json file
    if ! jq -e . >/dev/null 2>&1 <<<$(cat $NETWORK_DATA_FILE); then
    echo "File $1 is not a json file!"
    exit 1
    fi

    ## Verify if file Network Data is a valid json file
    if ! jq empty $NETWORK_DATA_FILE >/dev/null 2>&1; then
    echo "File $1 is not a valid json file!"
    exit 1
    fi

    ## Extract network data info from json file
    MAC_ADDRESS=$(jq -r '.links[0].ethernet_mac_address' $NETWORK_DATA_FILE)
    IFNAME=$(jq -r '.networks[0].id' $NETWORK_DATA_FILE)
    IP_ADDRESS=$(jq -r '.networks[0].ip_address' $NETWORK_DATA_FILE)
    NETMASK=$(jq -r '.networks[0].netmask' $NETWORK_DATA_FILE)
    NETMASKCIDR=$(IPprefix_by_netmask $NETMASK)
    GATEWAY=$(jq -r '.networks[0].routes[0].gateway' $NETWORK_DATA_FILE)
    DNS=$(jq -r '.services[0].address' $NETWORK_DATA_FILE)

    echo "MAC_ADDRESS: $MAC_ADDRESS"
    echo "IFNAME: $IFNAME"
    echo "IP_ADDRESS: $IP_ADDRESS"
    echo "NETMASK: $NETMASK"
    echo "NETMASKCIDR: $NETMASKCIDR"
    echo "GATEWAY: $GATEWAY"
    echo "DNS: $DNS"


    ## main function

    # Configure network interface using nmcli distinguing if exists previously or not
    if [ $(nmcli con show --active | tail -n +2 | awk '{print $4}') == ${IFNAME} ]; then
    echo "Network interface ${IFNAME} already exists!"
    echo "Configuring network interface ${IFNAME}..."
    nmcli con mod ${IFNAME} ipv4.addresses ${IP_ADDRESS}/${NETMASKCIDR} ipv4.gateway ${GATEWAY} ipv4.dns ${DNS} ipv4.method manual
    nmcli con up ${IFNAME}
    else
    echo "Network interface ${IFNAME} does not exist!"
    echo "Configuring network interface ${IFNAME}..."
    nmcli con add type ethernet con-name ${IFNAME} ifname ${IFNAME} ip4 ${IP_ADDRESS}/${NETMASKCIDR} gw4 ${GATEWAY} ipv4.dns ${DNS} ipv4.method manual
    nmcli con up ${IFNAME}
    fi

    echo "Finalized network configuration!"
    exit 0