summaryrefslogtreecommitdiff
path: root/upstart/cloud-init-container.conf
blob: 497e75c8db8ea7bd9a6193b16598bab2999ecece (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# in a lxc container, events for network interfaces do not
# get created or may be missed.  This helps cloud-init-nonet along
# by emitting those events if they have not been emitted.

start on container
stop on static-network-up
task

emits net-device-added

console output

script
   # if we are inside a container, then we may have to emit the ifup
   # events for 'auto' network devices.
   set -f

   # from /etc/network/if-up.d/upstart
   MARK_DEV_PREFIX="/run/network/ifup."
   MARK_STATIC_NETWORK_EMITTED="/run/network/static-network-up-emitted"
   # if the all static network interfaces are already up, nothing to do
   [ -f "$MARK_STATIC_NETWORK_EMITTED" ] && exit 0

   # get list of all 'auto' interfaces. if there are none, nothing to do.
   auto_list=$(ifquery --list --allow auto 2>/dev/null) || :
   [ -z "$auto_list" ] && exit 0
   set -- ${auto_list}
   [ "$*" = "lo" ] && exit 0

   # we only want to emit for interfaces that do not exist, so filter
   # out anything that does not exist.
   for iface in "$@"; do
      [ "$iface" = "lo" ] && continue
      # skip interfaces that are already up
      [ -f "${MARK_DEV_PREFIX}${iface}" ] && continue

      if [ -d /sys/net ]; then
         # if /sys is mounted, and there is no /sys/net/iface, then no device
         [ -e "/sys/net/$iface" ] && continue
      else
         # sys wasn't mounted, so just check via 'ifconfig'
         ifconfig "$iface" >/dev/null 2>&1 || continue
      fi 
      initctl emit --no-wait net-device-added "INTERFACE=$iface" &&
         emitted="$emitted $iface" ||
         echo "warn: ${UPSTART_JOB} failed to emit net-device-added INTERFACE=$iface"
   done

   [ -z "${emitted# }" ] ||
      echo "${UPSTART_JOB}: emitted ifup for ${emitted# }"
end script