summaryrefslogtreecommitdiffstats
path: root/networking-configuration
diff options
context:
space:
mode:
authortv <tv@shackspace.de>2015-03-19 22:55:22 +0100
committertv <tv@shackspace.de>2015-05-19 23:10:57 +0200
commit29ab86a21f64f19b43454fa840552bdb610ae2c2 (patch)
tree6e7fcaa69ebd1117379de61aa54ed6b278e9d334 /networking-configuration
parentae80d9d648fa5e3375b4ee903c644c46c16860ba (diff)
networking-configuration: initial commit
Diffstat (limited to 'networking-configuration')
-rwxr-xr-xnetworking-configuration96
1 files changed, 96 insertions, 0 deletions
diff --git a/networking-configuration b/networking-configuration
new file mode 100755
index 000000000..74a789059
--- /dev/null
+++ b/networking-configuration
@@ -0,0 +1,96 @@
+#! /bin/sh
+#
+# usage: with cac ./generate-networking-configuration c838-828 cd
+#
+set -euf
+
+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)
+
+ listserversstatus=$(echo $listservers | jq -r .status)
+ case $listserversstatus in
+ ok) : ;;
+ *)
+ echo $0: bad listservers status: $listserversstatus >&2
+ exit 1
+ esac
+
+ config=$(echo $listservers \
+ | jq -r ".data|map(select(.servername == \"$cac_servername\"))[]")
+
+ serverstatus=$(echo $config | jq -r .status)
+ case $serverstatus in
+ 'Powered On') : ;;
+ *)
+ echo $0: bad server status: $serverstatus >&2
+ exit 2
+ esac
+
+ print_networking_configuraton "$config"
+}
+
+
+cac_listservers() {
+ if test -z "${cac_via-}"; then
+ curl -fsS \
+ "https://panel.cloudatcost.com/api/v1/listservers.php?key=$cac_key\&login=$cac_login"
+ else
+ ssh -q $cac_via -t curl -fsS \
+ "https://panel.cloudatcost.com/api/v1/listservers.php?key=$cac_key\\&login=$cac_login"
+ fi
+}
+
+
+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 "$@"