Comment utiliser not_if dans une recette chef

Je suis nouveau sur le chef, donc je suis un peu confus dans la façon dont le conditionnel not_if fonctionne à l'intérieur d'une exécution de ressources. Je comprends qu'il dit le chef, de ne pas exécuter une commande si la commande retourne 0 ou vrai; cependant, dans mon code, il est apparemment toujours en cours d'exécution de la commande.

Le code suivant est censé créer un utilisateur (et son mot de passe) et une base de données; toutefois, si l'utilisateur et la base de données existe déjà, il ne faut pas faire n'importe quoi. L'utilisateur, base de données et le mot de passe sont définis dans les attributs. Voici le code que j'ai:

execute "create-user" do

        code = <<-EOH
        psql -U postgres -c "select * from pg_user where usename='#{node[:user]}'" | grep -c #{node[:user]}
        EOH
        user "postgres"
        command "createuser -s #{node[:user]}"
        not_if code
end


execute "set-user-password" do
    user "postgres"
    command  "psql -U postgres -d template1 -c \"ALTER USER #{node[:user]} WITH PASSWORD '#{node[:password]}';\""
end


execute "create-database" do
    exists = <<-EOH
    psql -U postgres -c "select * from pg_database WHERE datname='#{node[:database]}'" | grep -c #{node[:database]}}
    EOH
    user "postgres"
    command "createdb #{node[:database]}"
   not_if exists

end

Chef me donne l'erreur suivante:

Erreur lors de l'exécution de l'action run sur la ressource 'exécuter[créer de l'utilisateur]'

...

[2013-01-25T12:24:51-08:00] FATAL: Mixlib::ShellOut::ShellCommandFailed: execute[créer de l'utilisateur] (postgresql::initialize ligne 16) a une erreur: Mixlib::ShellOut::ShellCommandFailed: le processus Prévu à la sortie avec [0], mais il a reçu '1'

STDERR: createuser: création d'un nouveau rôle a échoué: ERREUR: le rôle "utilisateur" existe déjà

Il me semble que cela devrait fonctionner;cependant, elle est encore à l'exécution de l'exécuter. Ai-je raté quelque chose?

Merci

Vous devez accepter les réponses qui permettent de résoudre votre problème, sinon vous risquez de ne pas recevoir beaucoup d'aide dans le futur.
C'est bon @Matthieu Ratzloff

OriginalL'auteur svs | 2013-01-25