mirror of
https://github.com/opnsense/src.git
synced 2026-06-08 08:12:27 -04:00
Add naive support for openstack network config. if no config driver have been found, try to detect that we are running a VM on openstack via the smbios information, use the first iface available and temporary activate dhcp on it, to be able to fetch the necessary informations for cloudinit. While here make the rc script execute after devmatch, some ethernet device might be attached via devmatch and may be needed for cloudinit. Tested on OVHCloud Public Cloud. MFC after: 3 weeks Sponsored by: OVHCloud
96 lines
1.9 KiB
Bash
Executable file
96 lines
1.9 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
|
|
# PROVIDE: nuageinit
|
|
# REQUIRE: mountcritlocal zfs devmatch
|
|
# BEFORE: NETWORKING
|
|
# KEYWORD: firstboot
|
|
|
|
. /etc/rc.subr
|
|
|
|
name="nuageinit"
|
|
desc="Limited Cloud Init configuration"
|
|
start_cmd="nuageinit_start"
|
|
stop_cmd=":"
|
|
rcvar="nuageinit_enable"
|
|
|
|
fetch_openstack()
|
|
{
|
|
cd /media/nuageinit/openstack/latest
|
|
for file in meta_data.json network_data.json user_data; do
|
|
fetch http://169.254.169.254/openstack/latest/$file || :
|
|
done
|
|
if [ -f user_data ]; then
|
|
chmod 755 user_data
|
|
fi
|
|
cd -
|
|
}
|
|
|
|
nuageinit_start()
|
|
{
|
|
local citype
|
|
# detect cloud init provider
|
|
# according to the specification, the config drive
|
|
# is 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 [ -n "$drive" ]; then
|
|
mkdir -p /media/nuageinit
|
|
fs=$(fstyp $drive 2> /dev/null)
|
|
mount -t $fs $drive /media/nuageinit
|
|
else
|
|
product=$(kenv smbios.system.product)
|
|
case "$product" in
|
|
OpenStack*)
|
|
mkdir -p /media/nuageinit/openstack/latest
|
|
ifaces=$(ifconfig -l ether)
|
|
set -- $ifaces
|
|
dhclient -p /tmp/ephemeraldhcp.pid $1
|
|
fetch_openstack
|
|
pkill -F /tmp/ephemeraldhcp.pid
|
|
citype=config-2
|
|
;;
|
|
*)
|
|
# try to detect networked based instance
|
|
err 1 "Impossible to find a cloud init provider"
|
|
;;
|
|
esac
|
|
fi
|
|
# 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
|
|
rmdir /media/nuageinit
|
|
else
|
|
rm -rf /media/nuageinit
|
|
fi
|
|
}
|
|
|
|
load_rc_config $name
|
|
run_rc_command "$1"
|