我是厨师的新手所以我对条件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 …Run Code Online (Sandbox Code Playgroud)