criecm.iocage
iocage
Instalación/configuración de host y jaulas en FreeBSD (esto no funcionará tal cual en FreeNAS, se aceptan parches ;)
Usa el módulo iocage
de ansible de
https://github.com/fractalcells/ansible-iocage
(integrado en la biblioteca del rol)
Agrega los hosts creados en el inventario (add_host
) con una variable iocage_host
rellenada con inventory_hostname
del host y un grupo iojails
.
Variables del rol
(en defaults/main.yml)
iocage_zpool (zroot)
: Pool ZFS para iocageiocage_fetch_args ({})
: argumentos que se pasarán aiocage fetch
ejemplo: "-s ftp.local -d pub/FreeBSD/releases"jail_list ([])
lista de diccionarios de jaulas que se crearán en el host, consulta abajomyjail ('')
si se define, ejecutará solo esta jaula dejail_list
(ninguna si no se encuentra)myjails([])
igual que myjail, pero para más de uno :)iocage_components (none)
- lista si se define, solo se instalarán estos componentesiocage_enable_ssh (True)
Habilitar ssh en nuevas jaulasiocage_release (uname -r)
La versión que necesitasjail_init_role ()
Rol a importar para inicializar una nueva jaulaiocage_use_pkg (True)
Instalará iocage desde paquetes o desde git si es False
Variables por jaula
(en vars/jail.yml)
name
(sin valor predeterminado, obligatorio): identificador humano, único en el hosthostname
(''): UUID generado si está vacíoip4
(''): direcciones IPv4, mismo formato que iocage: [ifaceN|]192.0.2.1[/24][,[ifaceN|]192.0.2.1[/24][,…]]- si se antepone 'iface|', la IP se añadirá a la interfaz al iniciar la jaula
- si no se da máscara, la IP será /32
ip6
(''): IPv6 … igual que arriba. (pero la máscara predeterminada es /128, no /32 ;-P )resolver
('auto'): contenido de resolv.conf para la jaula, con ';' en lugar de saltos de línea (iocage copiará el del host al iniciar la jaula si está vacío)properties
({}): Diccionario para todas las propiedades de la jaula de iocage disponiblesauthkeys (/root/.ssh/authorized_keys)
Archivo a copiar como /root/.ssh/authorized_keys en la jaula
Lógica de resolver=auto
resolver
se llenará automáticamente según las variables search_domains
y resolvers
(aquí las tenemos en group_vars/all.yml
). Esto seleccionará el/los dominio(s) de búsqueda y
resolutores dependiendo de las direcciones IP de la jaula.
# si la IP está en 'network', se agrega 'domain'
search_domains:
- { network: '192.0.2.0/24', domain: 'our.example.net' }
- { network: '198.51.100.0/24', domain: 'ryd.example.org' }
- { network: '2001:0DB8:fe43::/32', domain: 'ipv6.example.org' }
- { network: '0.0.0.0/0', domain: 'example.com' }
# si la IP está en 'network', 'ip' se agrega a resolvers
resolvers:
- { network: '192.0.2.0/24', ip: 192.0.2.1 }
- { network: '198.51.100.0/24', ip: 192.0.2.1 }
- { network: '2001:0DB8:fe43::/56', ip: 2001:0DB8::1 }
- { network: '0.0.0.0/0', ip: 8.8.8.8 }
- { network: '::/0', ip: 2620:0:ccc::2 }
Ejemplos de playbooks:
Un host de jaula con dos jaulas:
- hosts: realmachine
roles:
- criecm.iocage
vars:
jail_list:
- { name: myfirstjail, hostname: myfirstjail.example.org, ip4_addr: 'bge0|198.51.100.0' }
- { name: mysecjail, hostname: mysecjail.example.org, ip4_addr: 'bge0|198.51.100.8' }
Un fragmento de playbook para crear/registrar la jaula antes de trabajar en ella
- hosts: realmachine
roles:
- criecm.iocage
vars:
# aquí jail_list puede estar en inventory/host_vars/realmachine.yml
myjail: myfirstjail
- hosts: myfirstjail
roles:
- criecm.apache
[…]
Módulo ansible-iocage
actualizar desde la fuente:
git subtree pull -P roles/criecm.iocage/library/src/iocage https://github.com/criecm/ansible-iocage.git master
ansible-galaxy install criecm.iocage