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.