Chef bash execute not_if algún command devuelve 1

Necesito mvn clean package código en el mvn clean package git repo & do mvn clean package solo si el código en el directory repo contiene una twig incorrecta. ¿Cómo puedo hacer esto con (o sin) not_if en la receta del chef?

 bash "checkout_and_compile_if_wrong_version" do user "develop" group "develop" cwd "/var/www/" environment 'HOME' => "/home/develop" code <<-EOH cd /var/www/code_repo/ git checkout #{node['last_version']} git pull mvn clean package EOH not_if { ...condition... } end 

Tal vez pueda usar una condición como check (en code_repo dir):

 [ "$(git branch |grep "*" |awk '{print $2}')" == #{node['last_version']} ] && echo 1 

Thx por adelantado.

Chef tiene un recurso de git , claramente mejor adaptado a su caso de uso.

Haría algo como esto (código no probado):

 execute "clean package" do cwd "/var/www/code_repo/" command "mvn clean package" user "develop" group "develop" action :nothing end git "/var/www/code_repo/" do repository "you_repo_url" revision node['last_version'] user "develop" group "develop" action :sync notifies :run,"execute[clean package]", :immediately end 

Esto se sincronizará si se realiza una nueva confirmación o si el node['last_version'] cambia y ejecuta mvn clean solo cuando hay un cambio. El ENV env HOME se establece mediante el recurso git, por lo que no es necesario proporcionarlo.


Editar por comentario:

Citando la documentation de guardia not_if o only_if antes que nada:

Una cadena se ejecuta como un command de shell. Si el command devuelve 0, se aplica la guardia. Si el command devuelve cualquier otro valor, entonces el atributo guard no se aplica

código de receta:

 bash "whatever" do command "test" only_if %Q{git branch | awk '/^[*] / { exit $2=="#{node['last_version']}"}'}, :cwd => "/var/www/code_repo" end 

Parte complicada: el bash funcionaría solo si la versión no es igual al node['last_version'] (printing de guardia 0 por la testing de igualdad dentro de awk)

Simplifiqué la parte grep / awk / test en un único script awk trabajando en línea comenzando con * (la expresión regular dentro de / / ) y luego diciéndole a awk que salga con el resultado de la comparación entre el segundo campo (la twig git real) y la versión del atributo chef El %Q{ code and "quote test indide" } es una forma ruby ​​para permitir el uso de comillas sin tener que escaping de ellas.

Si la comparación es verdadera, no haga nada, si es falsa, ejecute el script bash.

Recomiendo tratar de usar los resources del chef siempre que sea posible y tratar de replace el código del script bash con los resources del chef tanto como sea posible. (Es más fácil de mantener y mantener idempotente a time)