nuageinit: implement bootcmd support
Add support for the 'bootcmd' cloud-config directive, which allows running commands very early in the boot process, before the hostname is set and before the network is configured. - nuageinit: bootcmd() function follows the same pattern as runcmd(), writing commands to /var/cache/nuageinit/bootcmds instead of runcmds. It is the first entry in the pre_network_calls table. - rc.d/nuageinit: execute /var/cache/nuageinit/bootcmds immediately after /usr/libexec/nuageinit completes, before unmounting the config drive. This ensures bootcmd runs before NETWORKING per cloud-init spec.
This commit is contained in:
@@ -524,6 +524,23 @@ local function disable_root(obj)
|
||||
end
|
||||
end
|
||||
|
||||
local function bootcmd(obj)
|
||||
if obj.bootcmd == nil then return end
|
||||
local f = nil
|
||||
for _, c in ipairs(obj.bootcmd) do
|
||||
if f == nil then
|
||||
nuage.mkdir_p(root .. "/var/cache/nuageinit")
|
||||
f = assert(io.open(root .. "/var/cache/nuageinit/bootcmds", "w"))
|
||||
f:write("#!/bin/sh\n")
|
||||
end
|
||||
f:write(c .. "\n")
|
||||
end
|
||||
if f ~= nil then
|
||||
f:close()
|
||||
nuage.chmod(root .. "/var/cache/nuageinit/bootcmds", "0755")
|
||||
end
|
||||
end
|
||||
|
||||
local function runcmd(obj)
|
||||
if obj.runcmd == nil then return end
|
||||
local f = nil
|
||||
@@ -794,6 +811,7 @@ if line == nil then
|
||||
-- YAML user-data
|
||||
elseif line == "#cloud-config" then
|
||||
local pre_network_calls = {
|
||||
bootcmd,
|
||||
sethostname,
|
||||
settimezone,
|
||||
groups,
|
||||
|
||||
@@ -362,6 +362,9 @@ does not automatically install them.
|
||||
Ensure the relevant command is listed in your
|
||||
.Nm packages
|
||||
section.
|
||||
.It Ic bootcmd
|
||||
An array of commands to be run early in the boot process,
|
||||
before the hostname is set and before the network is configured.
|
||||
.It Ic chpasswd
|
||||
Change the passwords for users, it accepts the following keys:
|
||||
.Bl -tag -width "expire"
|
||||
@@ -424,6 +427,8 @@ Here is an example of a YAML configuration for
|
||||
.Nm :
|
||||
.Bd -literal
|
||||
#cloud-config
|
||||
bootcmd:
|
||||
- kldload if_bridge
|
||||
fqdn: myhost.mynetwork.tld
|
||||
users:
|
||||
- default
|
||||
|
||||
@@ -89,6 +89,10 @@ nuageinit_start()
|
||||
/usr/libexec/nuageinit /media/nuageinit $citype 2>&1 | tee -a /var/log/nuageinit.log
|
||||
;;
|
||||
esac
|
||||
if [ -x /var/cache/nuageinit/bootcmds ]; then
|
||||
echo "Executing 'bootcmd'" | tee -a /var/log/nuageinit.log
|
||||
/var/cache/nuageinit/bootcmds 2>&1 | tee -a /var/log/nuageinit.log
|
||||
fi
|
||||
if [ -n "$drive" ]; then
|
||||
umount /media/nuageinit
|
||||
rmdir /media/nuageinit
|
||||
|
||||
Reference in New Issue
Block a user