root / snf-network-dnshook @ 5ec7b145
History | View | Annotate | Download (3.5 kB)
1 | ad5c908a | Dimitris Aragiorgis | #!/bin/bash |
---|---|---|---|
2 | c7006a9f | Dimitris Aragiorgis | |
3 | ad5c908a | Dimitris Aragiorgis | # Configuration Fallbacks. All can(must for some of them) be overwritten by /etc/default/snf-network |
4 | c7006a9f | Dimitris Aragiorgis | TTL=300 |
5 | ad5c908a | Dimitris Aragiorgis | # the bind server IP/FQDN |
6 | c7006a9f | Dimitris Aragiorgis | SERVER="" |
7 | ad5c908a | Dimitris Aragiorgis | # this is the .vm.synnefo.live. |
8 | ad5c908a | Dimitris Aragiorgis | # Leave empty if only reverse dns management is needed. |
9 | ad5c908a | Dimitris Aragiorgis | # TODO: make this zone to be instance specific!!! |
10 | ad5c908a | Dimitris Aragiorgis | FZONE="" |
11 | ad5c908a | Dimitris Aragiorgis | # the file with dns authorization keys |
12 | c7006a9f | Dimitris Aragiorgis | KEYFILE="" |
13 | c7006a9f | Dimitris Aragiorgis | MAC2EUI64="/usr/bin/mac2eui64" |
14 | c7006a9f | Dimitris Aragiorgis | |
15 | ad5c908a | Dimitris Aragiorgis | source /etc/default/snf-network |
16 | 1bdc9427 | Dimitris Aragiorgis | source /usr/lib/snf-network/common.sh |
17 | ad5c908a | Dimitris Aragiorgis | |
18 | 48122640 | Dimitris Aragiorgis | if [ -z "$SERVER" -o -z "$FZONE" -o ! -e "$KEYFILE" ]; then |
19 | ad5c908a | Dimitris Aragiorgis | exit 0 |
20 | c7006a9f | Dimitris Aragiorgis | fi |
21 | c7006a9f | Dimitris Aragiorgis | |
22 | ad5c908a | Dimitris Aragiorgis | update_dns () { |
23 | ad5c908a | Dimitris Aragiorgis | |
24 | ad5c908a | Dimitris Aragiorgis | if [ "x$GANETI_OP_CODE" = "xOP_INSTANCE_CREATE" ]; then |
25 | 48122640 | Dimitris Aragiorgis | update_all add |
26 | ad5c908a | Dimitris Aragiorgis | elif [ "x$GANETI_OP_CODE" = "xOP_INSTANCE_REMOVE" ]; then |
27 | 48122640 | Dimitris Aragiorgis | update_all delete |
28 | ad5c908a | Dimitris Aragiorgis | elif [ "x$GANETI_OP_CODE" = "xOP_INSTANCE_RENAME" ]; then |
29 | 48122640 | Dimitris Aragiorgis | update_all delete |
30 | ad5c908a | Dimitris Aragiorgis | # Let's override a variable and add ourselves |
31 | ad5c908a | Dimitris Aragiorgis | GANETI_INSTANCE_NAME=$GANETI_INSTANCE_NEW_NAME |
32 | 48122640 | Dimitris Aragiorgis | update_all add |
33 | ad5c908a | Dimitris Aragiorgis | elif [ "x$GANETI_OP_CODE" = "xOP_INSTANCE_STARTUP" ]; then |
34 | 48122640 | Dimitris Aragiorgis | update_all add |
35 | ad5c908a | Dimitris Aragiorgis | elif [ "x$GANETI_OP_CODE" = "xOP_INSTANCE_SHUTDOWN" ]; then |
36 | 48122640 | Dimitris Aragiorgis | update_all delete |
37 | ad5c908a | Dimitris Aragiorgis | elif [ "x$GANETI_OP_CODE" = "xOP_INSTANCE_REBOOT" ]; then |
38 | 48122640 | Dimitris Aragiorgis | update_all add |
39 | ad5c908a | Dimitris Aragiorgis | elif [ "x$GANETI_OP_CODE" = "xOP_INSTANCE_SET_PARAMS" ]; then |
40 | 48122640 | Dimitris Aragiorgis | update_all add |
41 | ad5c908a | Dimitris Aragiorgis | fi |
42 | ad5c908a | Dimitris Aragiorgis | |
43 | ad5c908a | Dimitris Aragiorgis | } |
44 | ad5c908a | Dimitris Aragiorgis | |
45 | ad5c908a | Dimitris Aragiorgis | |
46 | ad5c908a | Dimitris Aragiorgis | # Query nameserver for entries related to the specific instance |
47 | ad5c908a | Dimitris Aragiorgis | # An example output is the following: |
48 | ad5c908a | Dimitris Aragiorgis | # www.google.com has address 173.194.113.114 |
49 | ad5c908a | Dimitris Aragiorgis | # www.google.com has address 173.194.113.115 |
50 | ad5c908a | Dimitris Aragiorgis | # www.google.com has address 173.194.113.116 |
51 | ad5c908a | Dimitris Aragiorgis | # www.google.com has address 173.194.113.112 |
52 | ad5c908a | Dimitris Aragiorgis | # www.google.com has address 173.194.113.113 |
53 | ad5c908a | Dimitris Aragiorgis | # www.google.com has IPv6 address 2a00:1450:4001:80b::1012 |
54 | ad5c908a | Dimitris Aragiorgis | query_dns () { |
55 | ad5c908a | Dimitris Aragiorgis | |
56 | ad5c908a | Dimitris Aragiorgis | HOSTQ="host -s -R 3 -W 3" |
57 | ad5c908a | Dimitris Aragiorgis | HOST_IP_ALL=$($HOSTQ $GANETI_INSTANCE_NAME.$FZONE $SERVER | sed -n 's/.*has address //p') |
58 | ad5c908a | Dimitris Aragiorgis | HOST_IP6_ALL=$($HOSTQ $GANETI_INSTANCE_NAME.$FZONE $SERVER | sed -n 's/.*has IPv6 address //p') |
59 | ad5c908a | Dimitris Aragiorgis | |
60 | ad5c908a | Dimitris Aragiorgis | } |
61 | ad5c908a | Dimitris Aragiorgis | |
62 | ad5c908a | Dimitris Aragiorgis | |
63 | ad5c908a | Dimitris Aragiorgis | # Reset all entries related to the specific instance |
64 | ad5c908a | Dimitris Aragiorgis | # This should be invoced only during instance modification |
65 | ad5c908a | Dimitris Aragiorgis | # because we do not know which nics have been modify |
66 | ad5c908a | Dimitris Aragiorgis | reset_dns () { |
67 | ad5c908a | Dimitris Aragiorgis | |
68 | ad5c908a | Dimitris Aragiorgis | if [ "x$GANETI_OP_CODE" = "xOP_INSTANCE_SET_PARAMS" ]; then |
69 | ad5c908a | Dimitris Aragiorgis | query_dns |
70 | ad5c908a | Dimitris Aragiorgis | # This should remove the A, AAAA, CNAME entries |
71 | 48122640 | Dimitris Aragiorgis | send_command "update delete $GANETI_INSTANCE_NAME.$FZONE" |
72 | ad5c908a | Dimitris Aragiorgis | for ip in $HOST_IP_ALL; do |
73 | ad5c908a | Dimitris Aragiorgis | get_rev4_info $ip |
74 | ad5c908a | Dimitris Aragiorgis | # This should remove the IPv4 reverse entry |
75 | 48122640 | Dimitris Aragiorgis | send_command "update delete $RLPART.$RZONE" |
76 | ad5c908a | Dimitris Aragiorgis | done |
77 | ad5c908a | Dimitris Aragiorgis | for ip6 in $HOST_IP6_ALL; do |
78 | ad5c908a | Dimitris Aragiorgis | get_rev6_info $ip6 |
79 | ad5c908a | Dimitris Aragiorgis | # This should remove the IPv6 reverse entry |
80 | 48122640 | Dimitris Aragiorgis | send_command "update delete $R6LPART$R6ZONE." |
81 | ad5c908a | Dimitris Aragiorgis | done |
82 | ad5c908a | Dimitris Aragiorgis | fi |
83 | ad5c908a | Dimitris Aragiorgis | |
84 | ad5c908a | Dimitris Aragiorgis | } |
85 | ad5c908a | Dimitris Aragiorgis | |
86 | ad5c908a | Dimitris Aragiorgis | |
87 | c7006a9f | Dimitris Aragiorgis | # Main starts here |
88 | c7006a9f | Dimitris Aragiorgis | |
89 | 48122640 | Dimitris Aragiorgis | |
90 | ad5c908a | Dimitris Aragiorgis | # Exit if we do not have instance name. |
91 | ad5c908a | Dimitris Aragiorgis | # It should be exported to hooks for instance related opcodes. |
92 | 48122640 | Dimitris Aragiorgis | if [ -z "$GANETI_INSTANCE_NAME" ]; then |
93 | ad5c908a | Dimitris Aragiorgis | exit 0 |
94 | c7006a9f | Dimitris Aragiorgis | fi |
95 | c7006a9f | Dimitris Aragiorgis | |
96 | ad5c908a | Dimitris Aragiorgis | # This runs only for instance modification |
97 | ad5c908a | Dimitris Aragiorgis | reset_dns |
98 | ad5c908a | Dimitris Aragiorgis | |
99 | ad5c908a | Dimitris Aragiorgis | # If GANETI_INSTANCE_NIC_COUNT is not set then nothing happens |
100 | ad5c908a | Dimitris Aragiorgis | FIRST=0 |
101 | ad5c908a | Dimitris Aragiorgis | LAST=$((GANETI_INSTANCE_NIC_COUNT - 1)) |
102 | ad5c908a | Dimitris Aragiorgis | for idx in $(seq $FIRST $LAST); do |
103 | ad5c908a | Dimitris Aragiorgis | ip=GANETI_INSTANCE_NIC${idx}_IP |
104 | ad5c908a | Dimitris Aragiorgis | mac=GANETI_INSTANCE_NIC${idx}_MAC |
105 | ad5c908a | Dimitris Aragiorgis | mode=GANETI_INSTANCE_NIC${idx}_MODE |
106 | ad5c908a | Dimitris Aragiorgis | link=GANETI_INSTANCE_NIC${idx}_LINK |
107 | ad5c908a | Dimitris Aragiorgis | subnet=GANETI_INSTANCE_NIC${idx}_NETWORK_SUBNET |
108 | ad5c908a | Dimitris Aragiorgis | subnet6=GANETI_INSTANCE_NIC${idx}_NETWORK_SUBNET6 |
109 | ad5c908a | Dimitris Aragiorgis | tags=GANETI_INSTANCE_NIC${idx}_NETWORK_TAGS |
110 | ad5c908a | Dimitris Aragiorgis | eval IP=\$$ip |
111 | ad5c908a | Dimitris Aragiorgis | eval MAC=\$$mac |
112 | ad5c908a | Dimitris Aragiorgis | eval MODE=\$$mode |
113 | ad5c908a | Dimitris Aragiorgis | eval LINK=\$$link |
114 | 90f2e36b | Dimitris Aragiorgis | eval NETWORK_SUBNET=\$$subnet |
115 | 90f2e36b | Dimitris Aragiorgis | eval NETWORK_SUBNET6=\$$subnet6 |
116 | 5b3472ad | Dimitris Aragiorgis | eval NETWORK_TAGS=\$$tags |
117 | ad5c908a | Dimitris Aragiorgis | |
118 | 5b3472ad | Dimitris Aragiorgis | for tag in $NETWORK_TAGS; do |
119 | ad5c908a | Dimitris Aragiorgis | case $tag in |
120 | ad5c908a | Dimitris Aragiorgis | $DNS_TAG) |
121 | ad5c908a | Dimitris Aragiorgis | |
122 | 5b3472ad | Dimitris Aragiorgis | get_info |
123 | 5ec7b145 | Dimitris Aragiorgis | $SNF_NETWORK_LOG $0 "update dns for $GANETI_INSTANCE_NAME $IP $EUI64" |
124 | ad5c908a | Dimitris Aragiorgis | update_dns |
125 | ad5c908a | Dimitris Aragiorgis | |
126 | ad5c908a | Dimitris Aragiorgis | ;; |
127 | ad5c908a | Dimitris Aragiorgis | esac |
128 | ad5c908a | Dimitris Aragiorgis | |
129 | ad5c908a | Dimitris Aragiorgis | done |
130 | ad5c908a | Dimitris Aragiorgis | |
131 | ad5c908a | Dimitris Aragiorgis | done |