/etc/maas/preseeds/enlist_userdata is in maas-region-controller-min 1.5+bzr2252-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | #cloud-config
{{if http_proxy}}
apt_proxy: {{http_proxy}}
{{elif server_host}}
apt_proxy: http://{{server_host}}:8000/
{{endif}}
misc_bucket:
- &maas_enlist |
#### IPMI setup ######
# If IPMI network settings have been configured statically, you can
# make them DHCP. If 'true', the IPMI network source will be changed
# to DHCP.
IPMI_CHANGE_STATIC_TO_DHCP="false"
# In certain hardware, the parameters for the ipmi_si kernel module
# might need to be specified. If you wish to send parameters, uncomment
# the following line.
#IPMI_SI_PARAMS="type=kcs ports=0xca2"
TEMP_D=$(mktemp -d "${TMPDIR:-/tmp}/${0##*/}.XXXXXX")
IPMI_CONFIG_D="${TEMP_D}/ipmi.d"
BIN_D="${TEMP_D}/bin"
OUT_D="${TEMP_D}/out"
PATH="$BIN_D:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
mkdir -p "$BIN_D" "$OUT_D" "$IPMI_CONFIG_D"
load_modules() {
modprobe ipmi_msghandler
modprobe ipmi_devintf
modprobe ipmi_si ${IPMI_SI_PARAMS}
udevadm settle
}
add_bin() {
cat > "${BIN_D}/$1"
chmod "${2:-755}" "${BIN_D}/$1"
}
add_ipmi_config() {
cat > "${IPMI_CONFIG_D}/$1"
chmod "${2:-644}" "${IPMI_CONFIG_D}/$1"
}
# Example config: enable BMC remote access (on some systems.)
#add_ipmi_config "02-global-config.ipmi" <<"END_IPMI_CONFIG"
#Section Lan_Channel
# Volatile_Access_Mode Always_Available
# Volatile_Enable_User_Level_Auth Yes
# Volatile_Channel_Privilege_Limit Administrator
# Non_Volatile_Access_Mode Always_Available
# Non_Volatile_Enable_User_Level_Auth Yes
# Non_Volatile_Channel_Privilege_Limit Administrator
#EndSection
#END_IPMI_CONFIG
add_bin "maas-ipmi-autodetect-tool" <<"END_MAAS_IPMI_AUTODETECT_TOOL"
{{for line in maas_ipmi_autodetect_tool_py.splitlines()}}
{{line}}
{{endfor}}
END_MAAS_IPMI_AUTODETECT_TOOL
add_bin "maas-ipmi-autodetect" <<"END_MAAS_IPMI_AUTODETECT"
{{for line in maas_ipmi_autodetect_py.splitlines()}}
{{line}}
{{endfor}}
END_MAAS_IPMI_AUTODETECT
add_bin "maas-moonshot-autodetect" <<"END_MAAS_MOONSHOT_AUTODETECT"
{{for line in maas_moonshot_autodetect_py.splitlines()}}
{{line}}
{{endfor}}
END_MAAS_MOONSHOT_AUTODETECT
add_bin "maas-enlist" <<"END_MAAS_ENLIST"
{{for line in maas_enlist_sh.splitlines()}}
{{line}}
{{endfor}}
END_MAAS_ENLIST
# we could obtain the interface that booted from the kernel cmdline
# thanks to 'IPAPPEND' (http://www.syslinux.org/wiki/index.php/SYSLINUX)
url="{{server_url}}"
host=""
ip=$(ifconfig eth0 | awk '$1 == "inet" { sub("addr:","",$2); print $2; }') &&
[ -n "${ip}" ] && host=$(dig +short -x $ip) && host=${host%.}
# load ipmi modules
load_modules
pargs=""
if $IPMI_CHANGE_STATIC_TO_DHCP; then
pargs="--dhcp-if-static"
fi
power_type=$(maas-ipmi-autodetect-tool)
case "$power_type" in
ipmi)
power_params=$(maas-ipmi-autodetect --configdir "$IPMI_CONFIG_D" ${pargs} --commission-creds) &&
[ -n "${power_params}" ] && power_params=${power_params%.}
;;
moonshot)
power_params=$(maas-moonshot-autodetect --commission-creds) &&
[ -n "${power_params}" ] && power_params=${power_params%.}
;;
esac
# Try maas-enlist without power parameters on failure for older versions of
# maas-enlist without power parameter support
maas-enlist --serverurl "$url" ${host:+--hostname "${host}"} ${power_params:+--power-params "${power_params}" --power-type "${power_type}"}>/tmp/enlist.out ||\
maas-enlist --serverurl "$url" ${host:+--hostname "${host}"} >/tmp/enlist.out
if [ $? -eq 0 ]; then
msg="successfully enlisted to '$url'"
[ -n "$host" ] && msg="$msg with hostname '$host'" ||
msg="$msg without hostname"
echo
echo "=== $(date -R): $msg"
cat /tmp/enlist.out
echo =============================================
sleep 10
else
user="ubuntu"
pass="ubuntu"
echo "$user:$pass" | chpasswd
bfile="/tmp/block-poweroff"
{ echo "#!/bin/sh"; echo "touch $bfile"; } > /etc/profile.d/A01-block.sh
chmod 755 /etc/profile.d/A01-block.sh
echo
echo =============================================
echo "failed to enlist system maas server '$host'"
echo "sleeping 60 seconds then poweroff"
echo
echo "login with '$user:$pass' to debug and disable poweroff"
echo
cat /tmp/enlist.out
echo =============================================
sleep 60
[ -e $bfile ] && exit 0
fi
- &write_poweroff_job |
cat >/etc/init/maas-poweroff.conf <<EOF
description "poweroff when maas task is done"
start on stopped cloud-final
console output
task
script
[ ! -e /tmp/block-poweroff ] || exit 0
poweroff
end script
EOF
# reload required due to lack of inotify in overlayfs (LP: #882147)
initctl reload-configuration
packages: [ freeipmi-tools, openipmi, ipmitool ]
output: {all: '| tee -a /var/log/cloud-init-output.log'}
runcmd:
- [ sh, -c, *maas_enlist ]
- [ sh, -c, *write_poweroff_job ]
|