me gustaría mostrarles mi caso de uso y, a continuación, hablar de posibles soluciones:

Problema:
tengo 2 recetas, «a» y «b».. «» instala algún programa en mi sistema de archivos (digamos en «/usr/local/bin/stuff.sh» y la receta de «b» necesita ejecutar esto y hacer algo con la salida.

así que la receta de «a» se ve algo como:

execute "echo 'echo stuff' > /usr/local/bin/stuff.sh" 

(el script solo echo(es) de las «cosas» a stdout)

y la receta de «b» se ve algo como:

include_recipe "a"
var=`/usr/local/bin/stuff.sh` 

(nota: los acentos graves, var debe contener stuff)

y ahora tengo que hacer algo con él, por ejemplo crear un usuario con este nombre de usuario. así, en la secuencia de comandos «b» agrego

user "#{node[:var]}"

Como sucede, esto no funciona.. al parecer el chef se ejecuta todo lo que no es un recurso, y sólo a continuación, ejecuta los recursos, así que, tan pronto como se ejecute la secuencia de comandos chef se queja de que no se puede compilar, ya que primero intenta ejecutar el «var=…» de la línea en receta «b» y no porque el «ejecutar …» en la receta no se ha ejecutado aún y así, el «stuff.sh» script no existe todavía.
Huelga decir que esto es muy molesto, ya que se rompe el «Chef se ejecuta todo en orden, de arriba a abajo» que me prometió cuando lo empecé a usar.
Sin embargo, yo no soy muy exigente, así que empecé a buscar alternativas de solución a este problema, así que:

Problema B: yo he encontrado a través de la idea de «ruby_block». al parecer, este es un recurso, por lo que será evaluado junto con el resto de los recursos. Me dijo que estaba bien, entonces me gustaría crear la secuencia de comandos, obtener el output en un «ruby_block» y, a continuación, pasar a «el usuario». así que la receta de «b» ahora se ve algo como:

include_recipe "a"

ruby_block "a_block" do
  block do
    node.default[:var] = `/usr/local/bin/stuff.sh`
  end
end

user "#{node[:var]}"

Sin embargo, como resulta de la variable (var) no se pasó de «ruby_block» a «el usuario» y se queda vacío. No importa lo que los malabares que he tratado de hacer con ella me falló (o tal vez yo no encontrar la correcta malabares método)

A la chef/ruby maestros en torno a: ¿Cómo puedo resolver el Problema? ¿Cómo resolver el Problema de B?

OriginalEl autor ShinySpiderdude | 2013-07-17

1 Comentario

  1. 6

    Que ya se han resuelto Un problema con el Rubí bloque.

    Ahora usted tiene que resolver el problema de B con un enfoque similar:

    ruby_block "create user" do
      block do
        user = Chef::Resource::User.new(node[:var], run_context)
        user.shell '/bin/bash' # Set parameters using this syntax
        user.run_action :create
        user.run_action :manage # Run multiple actions (if needed) by declaring them sequentially
      end
    end

    También se podría resolver Un problema al crear el archivo durante la fase de compilación:

    execute "echo 'echo stuff' > /usr/local/bin/stuff.sh" do
      action :nothing
    end.run_action(:run)

    Si después de este curso de acción, asegúrese de que:

    • /usr/local/bin existir durante el Chef de la fase de compilación;
    • :
      • stuff.sh es ejecutable; O
      • Ejecutar a través de una shell (por ejemplo: var=`sh /usr/local/bin/stuff.sh`

    OriginalEl autor cassianoleal

Dejar respuesta

Please enter your comment!
Please enter your name here