J'écris un modèle CloudFormation et j'essaie de déboguer le script de données utilisateur que je fournis dans le modèle. Comment puis-je exécuter le cloud-init
manuellement et lui faire effectuer les mêmes actions que lors du démarrage d'une nouvelle instance?
Vous pouvez simplement l'exécuter comme ceci:
/usr/bin/cloud-init -d init
Ceci exécute la configuration de cloud init avec les modules initiaux. (L'option -d est pour le débogage) Si vous voulez exécuter tous les modules, vous devez exécuter:
/usr/bin/cloud-init -d modules
Gardez à l'esprit que la deuxième fois que vous l'exécutez, il ne fait pas grand chose puisqu'il a déjà été exécuté au moment du démarrage. Pour forcer l'exécution après le démarrage, vous pouvez exécuter à partir de la ligne de commande:
( cd /var/lib/cloud/ && Sudo rm -rf * )
Dans les anciennes versions, l'équivalent de cloud-init init
est:
/usr/bin/cloud-init start
Vous pouvez également trouver cette question utile bien qu’elle s’applique aux anciennes versions de cloud-init: Comment puis-je faire en sorte que les scripts de démarrage de cloud-init soient exécutés à chaque démarrage de mon instance EC2?
La documentation pour cloud init here ne vous donne que des exemples. Mais cela n'explique pas les options de ligne de commande ni chacun des modules, vous devez donc jouer avec différentes valeurs dans la configuration pour obtenir les résultats souhaités. Bien sûr, vous pouvez également consulter le code.
Sur la plupart des distributions Linux (y compris CentOS et Ubuntu), vous pouvez redémarrer le service cloud-init en utilisant systemctl:
systemctl restart cloud-init
Et puis vérifiez la sortie du journal pour voir les résultats:
journalctl -f -u cloud-init
Merci à @Rico, et si vous voulez exécuter un seul module, que ce soit pour les tests ou parce que votre distribution n’active pas un module par défaut (hi Precise!), Vous pouvez
/usr/bin/cloud-init -d single -n <module-name>
Par exemple, lorsque ma distribution n’exécute pas write_files
par défaut (comme beaucoup d’anciennes distributions), je l’utilise en haut de runcmd:
runcmd:
- /usr/bin/cloud-init -d single -n write-files
[Je sais que ce n'est pas vraiment une réponse au PO, mais lorsque j'ai cherché à résoudre mon problème, cette question a été l'un des meilleurs résultats. Je pense donc que d'autres personnes pourraient trouver cela utile.]
rm -f /var/log/cloud-init.log \
&& rm -Rf /var/lib/cloud/* \
&& cloud-init -d init \
&& cloud-init -d modules --mode final