我不确定我理解Chef条件执行.
我想根据Postgresql中是否存在数据库来进行一些条件执行
所以这是我的榜样
execute "add_db" do
cwd "/tmp"
user "dbuser"
command "createdb -T template_postgis mydb"
not_if 'psql --list|grep mydb'
end
Run Code Online (Sandbox Code Playgroud)
psql --list|grep mydb如果db存在(具有dbname条目的行),则运行返回您期望的内容,如果不存在则返回任何内容.
那么not_if只评估那个?对或错?1还是0?如果成功,所有进程都不会返回0吗?
任何建议将不胜感激!
小智 22
我刚遇到这个问题.我的问题是not_if命令是以'root'运行,而不是'dbuser'.如果你改成它
not_if 'psql --list|grep mydb', :user => 'dbuser'
Run Code Online (Sandbox Code Playgroud)
那么你可能会得到你想要的结果.
http://tickets.opscode.com/browse/CHEF-438
小智 20
从命令行为自己运行测试,并查看默认返回值(又名"$?").你应该得到这样的东西:
% psql --list|grep mydb
mydb-is-here
% echo $?
0
Run Code Online (Sandbox Code Playgroud)
如果你尝试的东西不存在,你应该得到这样的东西:
% psql --list|grep mydb-not-here
% echo $?
1
Run Code Online (Sandbox Code Playgroud)
厨师将要看的是数字值会被塞进$ ?,即"0"或"1".换句话说,您为"not_if"语法显示的示例是正确的.