Chef - Chef-Shell

Escribir libros de cocina Chef siempre es difícil. Lo hace aún más difícil debido al largo ciclo de retroalimentación de subirlos al servidor Chef, aprovisionar una máquina virtual errante, verificar cómo fallaron allí, enjuagar y repetir. Sería más fácil si pudiéramos probar algunas piezas o recetas antes de hacer todo este trabajo pesado a la vez.

Chef viene con Chef-Shell, que es esencialmente una sesión Ruby interactiva con Chef. En Chef-Shell, podemos crear:

  • Attributes
  • Escribir recetas
  • Inicialización de ejecuciones de Chef

Se utiliza para evaluar partes de recetas sobre la marcha, antes de cargarlas en el servidor Chef y ejecutar libros de cocina completos en el nodo.

Ejecutando Shell

Step 1 - Ejecute Chef-Shell en modo independiente.

mma@laptop:~/chef-repo $ chef-shell 
loading configuration: none (standalone chef-shell session) 
Session type: standalone 
Loading...[2017-01-12T20:48:01+01:00] INFO: Run List is [] 
[2017-01-12T20:48:01+01:00] INFO: Run List expands to [] 
done. 
This is chef-shell, the Chef Shell. 
Chef Version: 11.0.0 
http://www.opscode.com/chef 
http://wiki.opscode.com/display/chef/Home 
run `help' for help, `exit' or ^D to quit. 
Ohai2u mma@laptop!  
chef >

Step 2 - Cambiar al modo de atributo en Chef-Shell

  • chef > attributes_mode

Step 3 - Configuración de valor de atributo.

  • chef:attributes > set[:title] = "Chef Cookbook"

    • "Libro de cocina del chef"

  • chef:attributes > quit

    • :attributes

  • chef >

Step 4 - Cambiar al modo de receta.

  • chef > recipe_mode

Step 5 - Crea un recurso de archivo.

chef:recipe > file "/tmp/book.txt" do 
chef:recipe > content node.title 
chef:recipe ?> end  

=> <file[/tmp/book.txt] @name: "/tmp/book.txt" @noop: nil @ 
before: nil @params: {} @provider: Chef::Provider::File @allowed_ 
actions: [:nothing, :create, :delete, :touch, :create_if_missing] 
@action: "create" @updated: false @updated_by_last_action: false 
@supports: {} @ignore_failure: false @retries: 0 @retry_delay: 
2 @source_line: "(irb#1):1:in `irb_binding'" @elapsed_time: 0 @ 
resource_name: :file @path: "/tmp/book.txt" @backup: 5 @diff: nil 
@cookbook_name: nil @recipe_name: nil @content: "Chef Cookbook">   

chef:recipe >

Step 6 - Comience a ejecutar Chef para crear el archivo con el contenido dado.

  • chef:recipe > run_chef

[2017-01-12T21:07:49+01:00] INFO: Processing file[/tmp/book.txt] 
action create ((irb#1) line 1) 
--- /var/folders/1r/_35fx24d0y5g08qs131c33nw0000gn/T/cheftempfile20121212- 
11348-dwp1zs 2012-12-12 21:07:49.000000000 
+0100 
+++ /var/folders/1r/_35fx24d0y5g08qs131c33nw0000gn/T/chefdiff20121212- 
11348-hdzcp1 2012-12-12 21:07:49.000000000 +0100 
@@ -0,0 +1 @@ 
+Chef Cookbook 
\ No newline at end of file 
[2017-01-12T21:07:49+01:00] INFO: entered create 
[2017-01-12T21:07:49+01:00] INFO: file[/tmp/book.txt] created file 
/tmp/book.txt

Cómo funciona

  • Chef-Shell comienza con una sesión de Interactive Ruby (IRB) mejorada con algunas características específicas.

  • Ofrece modos como atributos_mode y modo_interactivo.

  • Ayuda a escribir comandos, que están escritos dentro de una receta o libro de cocina.

  • Lo ejecuta todo en modo interactivo.

Podemos ejecutar Chef-Shell en tres modos diferentes: Standalone mode, Client modey Solo mode.

  • Standalone mode- Es el modo predeterminado. No se cargan libros de cocina y la lista de ejecución está vacía.

  • Client mode - Aquí, el chef-shell actúa como chef-cliente.

  • Solo mode - Aquí, el chef-shell actúa como un cliente solo de chef.