12.04 está fora de suporte. Não há uma ótima resposta para o cloud-init nessa versão.
Nas versões mais recentes do cloud-init, o cloud-init grava /run/cloud-init/result.json
com conteúdo como:
{
"v1": {
"datasource": "DataSourceNoCloud [seed=/var/lib/cloud/seed/nocloud-net][dsmode=net]",
"errors": []
}
}
Se houver erros, ele terá um valor não vazio na lista errors
.
Além disso, como execuções do cloud-init, ele mantém /run/cloud-init/status.json
.
Em 17.2, há um subcomando que pode ajudar. cloud-init status --wait
permitirá que seus scripts personalizados sejam bloqueados até que o cloud-init seja concluído. Se cloud-init tiver erros, o status sairá diferente de zero. (Obrigado a Chad Smith por essa sugestão).
$ cat > /usr/local/bin/after-cloud-init <<"EOF"
#!/bin/bash
# Block until cloud-init completes
exec >/run/after-cloud-init.txt 2>&1
msg() { read up idle < /proc/uptime; echo "$up:" "$@"; }
msg starting
if ! cloud-init status --wait ; then
msg "Cloud-init failed with $?"
exit 1
fi
msg done. put your stuff here.
exit 1
EOF
$ chmod 755 /usr/local/bin/after-cloud-init
$ crontab -e
@reboot /usr/local/bin/after-cloud-init
$ sudo reboot