68 lines
1.6 KiB
Bash
Executable File
68 lines
1.6 KiB
Bash
Executable File
#! /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() {(
|
|
server=$(cac_getserver_by_servername "$cac_servername")
|
|
print_networking_configuraton "$server"
|
|
)}
|
|
|
|
|
|
print_networking_configuraton() {
|
|
server=$1
|
|
address=$(echo $server | jq -r .ip)
|
|
gateway=$(echo $server | jq -r .gateway)
|
|
nameserver=8.8.8.8
|
|
netmask=$(echo $server | 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 "$@"
|