├───.chef
├───chef-essentials-repo
│ └───.chef
├───cookbooks
│ ├───**apache**
│ │ ├───attributes
│ │ ├───recipes
│ │ ├───spec
│ │ │ └───unit
│ │ │ └───recipes
│ │ ├───templates
│ │ │ └───default
│ │ └───test
│ │ └───recipes
│ ├───**haproxy**
│ │ ├───.delivery
│ │ │ └───build_cookbook
│ │ │ ├───data_bags
│ │ │ │ └───keys
│ │ │ ├───recipes
│ │ │ ├───secrets
│ │ │ └───test
│ │ │ └───fixtures
│ │ │ └───cookbooks
│ │ │ └───test
│ │ │ └───recipes
│ │ ├───recipes
│ │ ├───spec
│ │ │ └───unit
│ │ │ └───recipes
│ │ ├───templates
│ │ │ └───default
│ │ └───test
│ │ └───recipes
│ └───**workstation**
│ ├───list
│ │ ├───attributes
│ │ ├───files
│ │ │ └───default
│ │ ├───libraries
│ │ ├───providers
│ │ ├───recipes
│ │ ├───resources
│ │ └───templates
│ │ └───default
│ ├───recipes
│ ├───spec
│ │ └───unit
│ │ └───recipes
│ ├───templates
│ └───test
│ └───recipes
├───cookbooks.orig
│ └───starter
│ ├───attributes
│ ├───files
│ │ └───default
│ ├───recipes
│ └───templates
│ └───default
└───roles
- Generar Recetario:
$ chef generate cookbook cookbooks/apache
- Generar Receta:
$ chef generate recipe cookbooks/apache server
- Incluir Receta en receta por defecto:
$ include_recipe 'workstation::setup'
- Generar Template:
$ chef generate template cookbooks/apache index.html
Imagen Versionado - Modificar metadata.rb
- Modificar (si es necesario README.md)
<%=
<h2>ipaddress: <%= node['ipaddress'] %></h2>
- .kitchen.yml para configuraciones.
1. $ kitchen list
2. $ kitchen create
3. $ kitchen converge
= $ kitchen verify
(hace un create y un converge pero solo la primera vez)
4. $ kitchen destroy
=$ kitchen test
(hace los tres pasos y elimina el contenedor docker si pasa los tests)
- En local:
$ sudo chef-client --local-mode -r "recipe[workstation]"
- En Remoto ($ knife) (uso normal) :
$ knife bootstrap chef@<ip> --sudo -y -N node3 -r "recipe[haproxy]"
$ knife bootstrap chef@<ip> --sudo -y -N node1 -r "role[web]"
$ knife ssh "*:*" -x chef -P <password> "sudo chef-client"
$ knife ssh "role:web" -x chef -P <password> "sudo chef-client"
$ knife search node "*:*" [-a atributo]
- Crear cuenta
- Descargar claves y poner en directorio raíz cookbooks
- Prepara receta para subir (directorio cookbook/receta) :
$ berk install
- Se sube la receta:
$ berk upload
$ knife cookbook list
$ knife node list
$ knife node show node1
Facilitando las cosas con roles :
Nota:
Se pueden descargar recetas desde el supermarket:
$ knife cookbook site download chef-client
Hay que generar .berkfile y metadata.
(se pueden definir dependencias de paquetes en este fichero).
$chef generate attribute cookbooks/apache default
- Añadir variables en el fichero:
- default['apache']['port'] = 8080
- Acceso a las variables:
<%= node['apache']['port'] %>
- Se crea el archivo en la carpeta roles.
- Se crea un rol.
- Se sube al servidor:
$ knife role from file web.rb loadbalancer.rb
- Se asigna el rol:
$ knife node run_list set node1 "role[web]"
- Listamos a ver si está subido:
$ knife role list
$ knife role show <nombre>
- <Si se inicia la maquina por 1ª vez> Se hace bootstrap:
$ knife bootstrap chef@<ip> --sudo -y -N node3 -r "role[loadbalancer]"
$ knife bootstrap chef@54.157.100.252 --sudo -y -N node4 -r "role[web]" -E acceptance --bootstrap-version 12.5.1
- Se aplica el rol <web..> a todos los nodos que lo tienen asignados con:
$ knife ssh "role:web" -x chef -P Cod3Can! "sudo chef-client"
Nota!
pandora
snort
literate program
molly-guard
ohai
sudo lokkit -s http
pastebinit -i ../../stats -b sprunge.us
ohai
Comprobar que esta bien un empaquetado: tar tzf chef-client-8.1.2.tar.gz
- Se crea la carpeta environments y el archivo en la carpeta environments.
- Se crea un entorno.
- Se sube al servidor:
$ knife environment from file production.rb
- Se asigna el entorno:
$ knife environment set node1 production
- Listamos a ver si está subido:
$ knife environmentlist
$ knife environment show <nombre>
- Se aplica el rol <web..> a todos los nodos que lo tienen asignados con:
$ knife ssh "*:*" -x chef -P Cod3Can! "sudo chef-client"
- modificar en el balanceador que balancee solo en el rol web y en el entorno de producción (default.rb de haproxy)
- Crear un nuevo cookbook
- Integrarlo en otro recetario
<array>.each_with_index do |web,n|
<%= web['cloud']['public_ipv4'] %>
end
name 'web'
description 'Web Server'
run_list 'recipe[chef-client]','recipe[apache]'
default_attributes({
"apache" => {
"port" => 8181
}
})
Lo normal es tener un entorno de producción y otro de pruebas. En el entorno de producción iria la versión anterior a la actual.
name "production"
description "For Prods!"
cookbook "apache", "= 0.1.0"
override_attributes({
"pci" => {
"in_scope" => true
}
})