Execute, chef : oui mais par qui ?
Un billet en forme de petite note pour moi-même, relatif à mes découvertes de la soirée.
J’ai besoin d’exécuter des commandes avec Chef. Pour cela, il y a la ressource Execute :
execute "ma commande"
Mais la documentation prévient bien :
By their nature, Execute resources are not idempotent, as they are completely up to the user’s imagination. Use the not_if or only_if meta parameters to guard the resource for idempotence.
OK, allons-y :
execute "ma commande" do not_if "ma condition shell"
Si la commande doit être exécutée avec un user particulier :
execute "ma commande" do user "tom" not_if "ma condition shell"
Mais la condition, elle, sera exécutée dans un contexte root (puisqu’il vaut mieux lancer chef-solo ou chef-client en root si l’on veut que la plupart des ressources fonctionnent). En général la condition serait à exécuter avec le même user. D’où :
execute "ma commande" do user "tom" not_if "ma condition shell", :user => "tom"
Je trouve pas ça très joli. A réfléchir.
PS: si on veut se convaincre que ça se passe bien comme je dis :
execute "whoami > /tmp/whoami.execute" do user "tom" only_if "whoami > /tmp/whoami.only_if"