software que pricing learn hace definicion caracteristicas automate chef

que - Entendiendo Chef only_if not_if



learn chef (2)

No estoy seguro de entender la ejecución condicional del Chef.

Me gustaría realizar una ejecución condicional en función de 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 devuelva lo que esperaría si existiera la db (la línea con la entrada dbname) y nada en absoluto si no es así.

Entonces, ¿cómo not_if solo evalúa eso? ¿Verdadero o falso? 1 o 0? ¿No todos los procesos devuelven 0 si tienen éxito?

Cualquier consejo sería muy apreciado!


Ejecute la prueba usted mismo, desde la línea de comando, y observe el valor de retorno predeterminado (también conocido como "$?"). Deberías 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

Lo que el chef examinará es el valor numérico que se acumularía en $ ?, es decir, un "0" o un "1". En otras palabras, su ejemplo que muestra para la sintaxis "not_if" es correcto.


Me acabo de encontrar con este problema. Mi problema fue que el comando not_if se estaba ejecutando como ''root'', no ''dbuser''. Si lo cambias a

not_if ''psql --list|grep mydb'', :user => ''dbuser''

entonces puede obtener los resultados que estaba buscando.

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