web-dev-qa-db-fra.com

Comment exécuter cloud-init manuellement?

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?

27
Fluffy

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.

31
Rico

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
3
Andrew

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.]

2
Guss
rm -f /var/log/cloud-init.log \
&& rm -Rf /var/lib/cloud/* \
&& cloud-init -d init \
&& cloud-init -d modules --mode final
1
Sergey Safarov