diff options
Diffstat (limited to 'libexec/rc')
| -rw-r--r-- | libexec/rc/rc.d/Makefile | 6 | ||||
| -rwxr-xr-x | libexec/rc/rc.d/nuageinit | 67 |
2 files changed, 73 insertions, 0 deletions
diff --git a/libexec/rc/rc.d/Makefile b/libexec/rc/rc.d/Makefile index 4f4bcabd449c..320408d5d62c 100644 --- a/libexec/rc/rc.d/Makefile +++ b/libexec/rc/rc.d/Makefile @@ -313,6 +313,12 @@ SMRCD= sendmail SMRCDPACKAGE= sendmail .endif +.if ${MK_NUAGEINIT} != "no" +CONFGROUPS+= NIUAGEINIT +NIUAGEINIT= nuageinit +NIUAGEINITPACKAGE= nuageinit +.endif + .if ${MK_UNBOUND} != "no" CONFGROUPS+= UNBOUND UNBOUND+= local_unbound diff --git a/libexec/rc/rc.d/nuageinit b/libexec/rc/rc.d/nuageinit new file mode 100755 index 000000000000..977b44e465fe --- /dev/null +++ b/libexec/rc/rc.d/nuageinit @@ -0,0 +1,67 @@ +#!/bin/sh +# + +# PROVIDE: nuageinit +# REQUIRE: mountcritlocal +# BEFORE: NETWORKING +# KEYWORD: firstboot + +. /etc/rc.subr + +name="nuageinit" +desc="Limited Cloud Init configuration" +start_cmd="nuageinit_start" +stop_cmd=":" +rcvar="nuageinit_enable" + +nuageinit_start() +{ + local citype + # detect cloud init provider + # according to the specification of the config drive + # it either formatted in vfat or iso9660 and labeled + # config-2 + for f in iso9660 msdosfs; do + drive="/dev/$f/[cC][oO][nN][fF][iI][gG]-2" + if [ -e $drive ]; then + citype=config-2 + break + fi + drive="/dev/$f/[cC][iI][dD][aA][tT][aA]" + if [ -e $drive ]; then + citype=nocloud + break + fi + unset drive + done + if [ -z "$drive" ]; then + # try to detect networked based instance + err 1 "Impossible to find a cloud init provider" + fi + mkdir -p /media/nuageinit + fs=$(fstyp $drive) + mount -t $fs $drive /media/nuageinit + # according to the specification, the content is either + # in the openstack or ec2 directory + case "$citype" in + config-2) + for d in openstack ec2; do + dir=/media/nuageinit/$d/latest + if [ -d $dir ]; then + /usr/libexec/nuageinit $dir $citype + break + fi + done + ;; + nocloud) + /usr/libexec/nuageinit /media/nuageinit $citype + ;; + esac + if [ -n "$drive" ]; then + umount /media/nuageinit + fi + rmdir /media/nuageinit +} + +load_rc_config $name +run_rc_command "$1" |
