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"