jbbarth's

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"
end

Si la commande doit être exécutée avec un user particulier :

execute "ma commande" do
  user "tom"
  not_if "ma condition shell"
end

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"
end

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"
end
Tags: chef, ruby, tech
Hierarchy: previous, next

Comments

There are 0 comments on this post. Post yours →

Post a comment

Required fields in bold.