我是厨师的新手,所以我对条件 not_if 在执行资源中的工作方式有点困惑。我知道如果命令返回 0 或 true,它会告诉厨师不要执行命令;但是,在我的代码中,它显然仍在运行该命令。
以下代码应该创建一个用户(及其密码)和一个数据库;但是,如果用户和数据库已经存在,它不应该做任何事情。用户、数据库和密码在属性中定义。以下是我的代码:
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
厨师给我以下错误:
run
对资源“执行 [创建用户]”执行操作时出错
...
[2013-01-25T12:24:51-08:00] 致命:Mixlib::ShellOut::ShellCommandFailed:execute[create-user](postgresql::initialize line 16)有一个错误:Mixlib::ShellOut::ShellCommandFailed : 预期进程以 [0] 退出,但收到 '1'
STDERR:createuser:创建新角色失败:错误:角色“用户”已经存在
对我来说,它似乎应该工作;但是,它仍在运行执行。我错过了什么吗?
谢谢