Statistics
| Branch: | Tag: | Revision:

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