我不确定我理解Chef条件执行。
我想根据Postgresql中是否存在数据库来进行一些条件执行
所以这是我的例子
execute "add_db" do
cwd "/tmp"
user "dbuser"
command "createdb -T template_postgis mydb"
not_if 'psql --list|grep mydb'
end
运行psql --list|grep mydb
会返回数据库存在时所期望的内容(带有dbname条目的行),如果不存在则返回任何内容。
那么not_if只评估那个?对或错? 1还是0?如果成功,所有进程都不会返回0吗?
任何建议都会非常感谢!
答案 0 :(得分:21)
我刚遇到这个问题。我的问题是not_if命令是以'root'运行,而不是'dbuser'。如果将其更改为
not_if 'psql --list|grep mydb', :user => 'dbuser'
那么你可能会得到你想要的结果。
答案 1 :(得分:19)
从命令行为自己运行测试,并查看默认返回值(a.k.a.,“$?”)。你应该得到这样的东西:
% psql --list|grep mydb
mydb-is-here
% echo $?
0
如果你尝试不存在的东西,你应该得到这样的东西:
% psql --list|grep mydb-not-here
% echo $?
1
将要看的主厨是将数字填入$ ?,即“0”或“1”。换句话说,您为“not_if”语法显示的示例是正确的。