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 fetchejemplo: "-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