Entender Chef solo si no si
No estoy seguro de entender la ejecución condicional de Chef.
Me gustaría hacer alguna ejecución condicional basada en si existe o no una base de datos en Postgresql
Así que aquí está mi ejemplo
execute "add_db" do
cwd "/tmp"
user "dbuser"
command "createdb -T template_postgis mydb"
not_if 'psql --list|grep mydb'
end
Ejecutando psql --list|grep mydb
devuelve lo que esperarías si la base de datos existe (la línea con la entrada dbname) y nada en absoluto si no lo hace.
Entonces, ¿cómo not_if solo evalúa eso? Verdadero o falso? 1 o 0? No todos los procesos devuelven 0 si tienen éxito?
Anywho any consejo sería muy apreciado!
2 answers
Acabo de encontrarme con este asunto. Mi problema era que el comando not_if se estaba ejecutando como 'root', no como'dbuser'. Si lo cambia a
not_if 'psql --list|grep mydb', :user => 'dbuser'
Entonces puede obtener los resultados que estaba buscando.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-08 13:07:17
Ejecute la prueba por sí mismo, desde la línea de comandos, y eche un vistazo al valor de retorno predeterminado (también conocido como "$?"). Usted debe conseguir algo como esto:
% psql --list|grep mydb
mydb-is-here
% echo $?
0
Si intentas algo que no está allí, deberías obtener algo como esto:
% psql --list|grep mydb-not-here
% echo $?
1
¿Qué chef va a estar mirando es el valor numérico que se rellena en??, es decir, un "0" o un "1". En otras palabras, el ejemplo que muestra para la sintaxis "not_if" es correcto.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-05 23:57:54