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!

 26
Author: rjohnston, 2011-12-06

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.

Http://tickets.opscode.com/browse/CHEF-438

 21
Author: Darrin Holst,
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.

 19
Author: Brad Knowles,
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