svs*_*svs 7 ruby postgresql chef-infra
我是厨师的新手所以我对条件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 Code Online (Sandbox Code Playgroud)
厨师给我以下错误:
run在资源'execute [create-user]'上执行操作时出错
...
[2013-01-25T12:24:51-08:00]致命:Mixlib :: ShellOut :: ShellCommandFailed:执行[create-user](postgresql :: initialize第16行)出错:Mixlib :: ShellOut :: ShellCommandFailed :预期进程以[0]退出,但收到'1'
STDERR:createuser:新角色的创建失败:ERROR:角色"user"已存在
对我来说似乎它应该工作;但是,它仍然运行执行.我错过了什么吗?
谢谢
您正在检查是否存在:
node[:user]
Run Code Online (Sandbox Code Playgroud)
如果不存在,则创建:
node[:postgresql][:user]
Run Code Online (Sandbox Code Playgroud)
除非它们恰好相等,否则您将继续尝试重复创建节点[:postgresql][:user]。
| 归档时间: |
|
| 查看次数: |
14237 次 |
| 最近记录: |