Estructura del repositorio
La organización interna del proyecto ruby_rbenv se distribuye de la siguiente manera:
ruby_rbenv/
├── attributes/
│ └── default.rb
├── Berksfile
├── CHANGELOG.md
├── chefignore
├── CONTRIBUTING.md
├── Gemfile
├── LICENSE
├── metadata.rb
├── README.md
├── recipes/
│ ├── default.rb
│ ├── global.rb
│ ├── install.rb
│ ├── plugin.rb
│ └── ruby.rb
├── resources/
│ ├── install.rb
│ └── plugin.rb
└── spec/
├── default_spec.rb
└── spec_helper.rb
Componentes principales
- attributes/: Contiene los archivos de atributos predeterminados que establecen los valores inciiales de configuración del cookbook.
- recipes/: Alberga las recetas de Chef que ejecutan las distintas fases de despliegue y configuración.
- resources/: Define recursos personalizados de Chef para gestionar instalaciones de Ruby y extensiones de rbenv.
- spec/: Incluye las pruebas con ChefSpec para validar el comportamiento del cookbook.
Receta de entrada: default.rb
El punto de partida del cookbook se encuentra en recipes/default.rb. A continuación se muestra una versión refactorizada de su lógica:
# recipes/default.rb
# Ejecutar la instalación base del gestor de versiones
run_context.include_recipe('ruby_rbenv::install')
# Definir la versión global de Ruby
run_context.include_recipe('ruby_rbenv::global')
# Iterar sobre las versiones de Ruby solicitadas
node['ruby_rbenv']['rubies'].each_pair do |ver, opts|
rbenv_ruby ver do
opts.each { |k, v| send(k, v) }
end
end
# Desplegar los complementos configurados
node['ruby_rbenv']['plugins'].each do |ext|
rbenv_plugin ext['identifier'] do
repository ext['source_url']
reference ext['branch']
end
end
Descripción de operaciones
- Despliegue de rbenv: Se invoca la receta
installpara preparar el entorno del gestor de versiones. - Versión global: La receta
globalasigna qué interpretador de Ruby será el predeterminado en el sistema. - Versiones específicas: Se recorrre el hash de versiones declarado en los atributos y se instala cada una con sus opciones.
- Extensiones: Se itera sobre la lista de complementos, clonando cada repositorio desde la URL y referencia Git indicadas.
Atributos por defecto: default.rb
La configuración base del cookbook reside en attributes/default.rb. A continuación se presenta una variante renombrada:
# attributes/default.rb
default['ruby_rbenv']['user'] = 'root'
default['ruby_rbenv']['group'] = 'root'
default['ruby_rbenv']['root_path'] = '/usr/local/rbenv'
default['ruby_rbenv']['rubies'] = { '3.1.2' => {} }
default['ruby_rbenv']['global'] = '3.1.2'
default['ruby_rbenv']['plugins'] = [
{
'identifier' => 'ruby-build',
'source_url' => 'https://github.com/rbenv/ruby-build.git',
'branch' => 'master'
}
]
Parámetros relevantes
- Usuario y grupo: Determinan bajo qué identidad se ejecutan las instalaciones.
- Ruta raíz: Indica el directorio donde reside la instalación de rbenv.
- Versiones de Ruby: Especifica qué interpretadores instalar junto con sus opciones.
- Versión global: Establece el interpretador que estará disponible por defecto en el PATH.
- Complementos: Lista las extensiones adicionales con su identificador, repositorio Git y rama de referencia.