#! /bin/sh # # usage: with cac ./networking-configuration c838-828 cd # set -euf . ./lib/cac.sh cac_servername=$1 hostname=$2 # This is somewhat required because cloudatcost requires whitelisting # of hosts. If you whitelist your localhost, then leave this empty. # cac_via= # # cac_key= # cac_login= # cac_servername= # hostname= main() { listservers=$(cac_listservers) config=$(echo $listservers \ | jq -r ".[]|select(.servername==\"$cac_servername\")") print_networking_configuraton "$config" } print_networking_configuraton() { config=$1 address=$(echo $config | jq -r .ip) gateway=$(echo $config | jq -r .gateway) nameserver=8.8.8.8 netmask=$(echo $config | jq -r .netmask) prefixLength=$(netmaskToPrefixLengh $netmask) # TODO generate all config and put it into a temp dir, then rsync that # # upload configuration (to /root) # printf '{...}:\n' printf '{\n' printf ' networking.hostName = "%s";\n' $hostname printf ' networking.interfaces.enp2s1.ip4 = [\n' printf ' {\n' printf ' address = "%s";\n' $address printf ' prefixLength = %d;\n' $prefixLength printf ' }\n' printf ' ];\n' printf ' networking.defaultGateway = "%s";\n' $gateway printf ' networking.nameservers = [\n' printf ' "%s"\n' $nameserver printf ' ];\n' printf '}\n' } netmaskToPrefixLengh() { binaryNetmask=$(echo $1 | sed 's/^/obase=2;/;s/\./;/g' | bc | tr -d \\n) binaryPrefix=$(echo $binaryNetmask | sed -n 's/^\(1*\)0*$/\1/p') if ! echo $binaryPrefix | grep -q .; then echo $0: bad netmask: $netmask >&2 exit 4 fi printf %s $binaryPrefix | tr -d 0 | wc -c } main "$@"