1a42d6f76SBaptiste Daroussin#!/bin/sh 2a42d6f76SBaptiste Daroussin# 3a42d6f76SBaptiste Daroussin 4a42d6f76SBaptiste Daroussin# PROVIDE: nuageinit 52775b9b0SBaptiste Daroussin# REQUIRE: mountcritlocal zfs devmatch 6a42d6f76SBaptiste Daroussin# BEFORE: NETWORKING 7a42d6f76SBaptiste Daroussin# KEYWORD: firstboot 8a42d6f76SBaptiste Daroussin 9a42d6f76SBaptiste Daroussin. /etc/rc.subr 10a42d6f76SBaptiste Daroussin 11a42d6f76SBaptiste Daroussinname="nuageinit" 12a42d6f76SBaptiste Daroussindesc="Limited Cloud Init configuration" 13a42d6f76SBaptiste Daroussinstart_cmd="nuageinit_start" 14a42d6f76SBaptiste Daroussinstop_cmd=":" 15a42d6f76SBaptiste Daroussinrcvar="nuageinit_enable" 16a42d6f76SBaptiste Daroussin 172775b9b0SBaptiste Daroussinfetch_openstack() 182775b9b0SBaptiste Daroussin{ 192775b9b0SBaptiste Daroussin cd /media/nuageinit/openstack/latest 202775b9b0SBaptiste Daroussin for file in meta_data.json network_data.json user_data; do 212775b9b0SBaptiste Daroussin fetch http://169.254.169.254/openstack/latest/$file || : 222775b9b0SBaptiste Daroussin done 232775b9b0SBaptiste Daroussin if [ -f user_data ]; then 242775b9b0SBaptiste Daroussin chmod 755 user_data 252775b9b0SBaptiste Daroussin fi 262775b9b0SBaptiste Daroussin cd - 272775b9b0SBaptiste Daroussin} 282775b9b0SBaptiste Daroussin 29a42d6f76SBaptiste Daroussinnuageinit_start() 30a42d6f76SBaptiste Daroussin{ 31a42d6f76SBaptiste Daroussin local citype 32a42d6f76SBaptiste Daroussin # detect cloud init provider 33d71e2c03SJose Luis Duran # according to the specification, the config drive 34d71e2c03SJose Luis Duran # is either formatted in vfat or iso9660 and labeled 35a42d6f76SBaptiste Daroussin # config-2 36a42d6f76SBaptiste Daroussin for f in iso9660 msdosfs; do 379eae9233SBaptiste Daroussin drive="/dev/$f/[cC][oO][nN][fF][iI][gG]-2" 38a42d6f76SBaptiste Daroussin if [ -e $drive ]; then 39a42d6f76SBaptiste Daroussin citype=config-2 40a42d6f76SBaptiste Daroussin break 41a42d6f76SBaptiste Daroussin fi 429eae9233SBaptiste Daroussin drive="/dev/$f/[cC][iI][dD][aA][tT][aA]" 43a42d6f76SBaptiste Daroussin if [ -e $drive ]; then 44a42d6f76SBaptiste Daroussin citype=nocloud 45a42d6f76SBaptiste Daroussin break 46a42d6f76SBaptiste Daroussin fi 47a42d6f76SBaptiste Daroussin unset drive 48a42d6f76SBaptiste Daroussin done 492775b9b0SBaptiste Daroussin if [ -n "$drive" ]; then 50a42d6f76SBaptiste Daroussin mkdir -p /media/nuageinit 51d71e2c03SJose Luis Duran fs=$(fstyp $drive 2> /dev/null) 52a42d6f76SBaptiste Daroussin mount -t $fs $drive /media/nuageinit 532775b9b0SBaptiste Daroussin else 542775b9b0SBaptiste Daroussin product=$(kenv smbios.system.product) 552775b9b0SBaptiste Daroussin case "$product" in 562775b9b0SBaptiste Daroussin OpenStack*) 572775b9b0SBaptiste Daroussin mkdir -p /media/nuageinit/openstack/latest 582775b9b0SBaptiste Daroussin ifaces=$(ifconfig -l ether) 592775b9b0SBaptiste Daroussin set -- $ifaces 602775b9b0SBaptiste Daroussin dhclient -p /tmp/ephemeraldhcp.pid $1 612775b9b0SBaptiste Daroussin fetch_openstack 622775b9b0SBaptiste Daroussin pkill -F /tmp/ephemeraldhcp.pid 632775b9b0SBaptiste Daroussin citype=config-2 642775b9b0SBaptiste Daroussin ;; 652775b9b0SBaptiste Daroussin *) 662775b9b0SBaptiste Daroussin # try to detect networked based instance 672775b9b0SBaptiste Daroussin err 1 "Impossible to find a cloud init provider" 682775b9b0SBaptiste Daroussin ;; 692775b9b0SBaptiste Daroussin esac 702775b9b0SBaptiste Daroussin fi 71a42d6f76SBaptiste Daroussin # according to the specification, the content is either 72a42d6f76SBaptiste Daroussin # in the openstack or ec2 directory 73a42d6f76SBaptiste Daroussin case "$citype" in 74a42d6f76SBaptiste Daroussin config-2) 75a42d6f76SBaptiste Daroussin for d in openstack ec2; do 76a42d6f76SBaptiste Daroussin dir=/media/nuageinit/$d/latest 77a42d6f76SBaptiste Daroussin if [ -d $dir ]; then 78*9a62e1d9SBaptiste Daroussin /usr/libexec/nuageinit $dir $citype 2>&1 | tee -a /var/log/nuageinit.log 79a42d6f76SBaptiste Daroussin break 80a42d6f76SBaptiste Daroussin fi 81a42d6f76SBaptiste Daroussin done 82a42d6f76SBaptiste Daroussin ;; 83a42d6f76SBaptiste Daroussin nocloud) 84*9a62e1d9SBaptiste Daroussin /usr/libexec/nuageinit /media/nuageinit $citype 2>&1 | tee -a /var/log/nuageinit.log 85a42d6f76SBaptiste Daroussin ;; 86a42d6f76SBaptiste Daroussin esac 87a42d6f76SBaptiste Daroussin if [ -n "$drive" ]; then 88a42d6f76SBaptiste Daroussin umount /media/nuageinit 89a42d6f76SBaptiste Daroussin rmdir /media/nuageinit 902775b9b0SBaptiste Daroussin else 912775b9b0SBaptiste Daroussin rm -rf /media/nuageinit 922775b9b0SBaptiste Daroussin fi 93a42d6f76SBaptiste Daroussin} 94a42d6f76SBaptiste Daroussin 95a42d6f76SBaptiste Daroussinload_rc_config $name 96a42d6f76SBaptiste Daroussinrun_rc_command "$1" 97