avinetworks.network_interface
interfaz_de_red
ADVERTENCIA: Este rol puede ser peligroso de usar. Si pierdes la conectividad de red con tu host objetivo al configurar incorrectamente la red, es posible que no puedas recuperarte sin acceso físico a la máquina.
Este rol permite a los usuarios configurar varios componentes de red en máquinas objetivo. El rol se puede usar para configurar:
- Interfaces Ethernet
- Interfaces de puente
- Interfaces agrupadas
- Interfaces etiquetadas VLAN
- Rutas de red
Requisitos
Este rol requiere Ansible 1.4 o superior, y los requisitos de la plataforma están listados en el archivo de metadatos.
Variables del Rol
Las variables que se pueden pasar a este rol y una breve descripción sobre ellas son las siguientes:
Variable | Requerido | Por defecto | Comentarios |
---|---|---|---|
network_pkgs |
No | [] |
Paquetes típicamente necesarios como selinux, bridge-utils, ifenslave e iproute |
network_ether_interfaces |
No | [] |
Lista de interfaces ethernet que se añadirán al sistema. |
network_bridge_interfaces |
No | [] |
Lista de interfaces de puente que se añadirán al sistema. |
network_bond_interfaces |
No | [] |
Lista de interfaces agrupadas que se añadirán al sistema. |
network_vlan_interfaces |
No | [] |
Lista de interfaces VLAN que se añadirán al sistema. |
network_check_packages |
No | true |
Instalar paquetes listados en network_pkgs. |
network_allow_service_restart |
No | true |
Si las interfaces/redes deben ser reconfiguradas y reiniciadas. |
network_modprobe_persist |
No | true |
Persistencia de carga de módulos. |
network_configured_interfaces_only |
No | false |
Elimina interfaces no configuradas a través de este rol cuando está habilitado. |
network_interface_file_prefix |
No | ifcfg- |
El prefijo para los archivos de configuración de interfaces. |
network_interface_file_postfix |
No | `` | El sufijo para los archivos de configuración de interfaces. |
Nota: Los valores para la lista se detallan en los ejemplos a continuación.
Ejemplos
Las configuraciones de red en Debian (no RedHat) pueden usar opcionalmente la notación CIDR para direcciones IPv4 en lugar de especificar la dirección y la máscara de subred por separado. Se requiere usar la notación CIDR para direcciones IPv6 en Debian.
Ejemplo IPv4 con notación CIDR:
cidr: 192.168.10.18/24
# OPCIONAL: especificar una puerta de enlace para esa red, o auto para red+1
gateway: auto
Ejemplo IPv4 con clásico IPv4:
address: 192.168.10.18
netmask: 255.255.255.0
network: 192.168.10.0
broadcast: 192.168.10.255
gateway: 192.168.10.1
Si deseas usar una dirección MAC diferente para tu interfaz, puedes añadirla fácilmente.
hwaddress: aa:bb:cc:dd:ee:ff
En algunas ocasiones raras, puede ser bueno establecer cualquier opción que desees. Por lo tanto, es posible usar
options:
- "up /execute/my/command"
- "down /execute/my/other/command"
y la versión IPv6
ipv6_options:
- "up /execute/my/command"
- "down /execute/my/other/command"
- Configura eth1 y eth2 en un host con una IP estática y una IP DHCP. También define rutas estáticas y una puerta de enlace.
- hosts: myhost
roles:
- role: network
network_ether_interfaces:
- device: eth1
bootproto: static
cidr: 192.168.10.18/24
gateway: auto
route:
- network: 192.168.200.0
netmask: 255.255.255.0
gateway: 192.168.10.1
- network: 192.168.100.0
netmask: 255.255.255.0
gateway: 192.168.10.1
- device: eth2
bootproto: dhcp
Nota: No es necesario añadir rutas, la ruta predeterminada se añadirá automáticamente.
- Configura una interfaz de puente con múltiples NICs añadidas al puente.
- hosts: myhost
roles:
- role: network
network_bridge_interfaces:
- device: br1
type: bridge
cidr: 192.168.10.10/24
bridge_ports: [eth1, eth2]
# Valores opcionales
bridge_ageing: 300
bridge_bridgeprio: 32768
bridge_fd: 15
bridge_gcint: 4
bridge_hello: 2
bridge_maxage: 20
bridge_maxwait: 0
bridge_pathcost: "eth1 100"
bridge_portprio: "eth1 128"
bridge_stp: "on"
bridge_waitport: "5 eth1 eth2"
Nota: También se pueden añadir rutas para esta interfaz de la misma manera que se añaden rutas para interfaces ethernet.
- Configura una interfaz agrupada con una configuración de esclavo "activo-respaldo".
- hosts: myhost
roles:
- role: network
network_bond_interfaces:
- device: bond0
address: 192.168.10.128
netmask: 255.255.255.0
bond_mode: active-backup
bond_slaves: [eth1, eth2]
# Valores opcionales
bond_miimon: 100
bond_lacp_rate: slow
bond_xmit_hash_policy: layer3+4
- Configura una interfaz agrupada con "802.3ad" como modo de agrupación y dirección IP obtenida mediante DHCP.
- hosts: myhost
roles:
- role: network
network_bond_interfaces:
- device: bond0
bootproto: dhcp
bond_mode: 802.3ad
bond_miimon: 100
bond_slaves: [eth1, eth2]
bond_ad_select: 2
- Configura una interfaz VLAN con la etiqueta VLAN 2 para una interfaz ethernet.
- hosts: myhost
roles:
- role: network
network_ether_interfaces:
- device: eth1
bootproto: static
cidr: 192.168.10.18/24
gateway: auto
network_vlan_interfaces:
- device: eth1.2
bootproto: static
cidr: 192.168.20.18/24
- Todos los ejemplos anteriores muestran cómo configurar un solo host. El siguiente ejemplo muestra cómo definir tus configuraciones de red para todas tus máquinas.
Supón que tu inventario de hosts es el siguiente:
/etc/ansible/hosts
[dc1]
host1
host2
Describe tu configuración de red para cada host en host vars:
host_vars/host1
network_ether_interfaces:
- device: eth1
bootproto: static
address: 192.168.10.18
netmask: 255.255.255.0
gateway: 192.168.10.1
route:
- network: 192.168.200.0
netmask: 255.255.255.0
gateway: 192.168.10.1
network_bond_interfaces:
- device: bond0
bootproto: dhcp
bond_mode: 802.3ad
bond_miimon: 100
bond_slaves: [eth2, eth3]
host_vars/host2
network_ether_interfaces:
- device: eth0
bootproto: static
address: 192.168.10.18
netmask: 255.255.255.0
gateway: 192.168.10.1
- Si se debe usar el paquete resolvconf, es posible añadir algunas configuraciones de DNS.
dns-nameserver: [ "8.8.8.8", "8.8.4.4" ]
dns-search: "search.mydomain.tdl"
dns-domain: "mydomain.tdl"
- Puedes añadir configuración de IP estática IPv6 en interfaces Ethernet, de agrupación o de puente.
ipv6_address: "aaaa:bbbb:cccc:dddd:dead:beef::1/64"
ipv6_gateway: "aaaa:bbbb:cccc:dddd::1"
Crea un playbook que aplique este rol a todos los hosts como se muestra a continuación y ejecuta el playbook. Todos los servidores deberían tener sus interfaces de red configuradas y las rutas actualizadas.
- hosts: all
roles:
- role: network
- Este rol también puede añadir opcionalmente interfaces de red a zonas de firewalld. El módulo firewalld principal (http://docs.ansible.com/ansible/latest/firewalld_module.html) puede realizar la misma función, por lo que si utilizas ambos módulos, tus playbooks pueden no ser idempotentes. Considera este caso, donde solo se utiliza el módulo firewalld:
- El rol network_interface se ejecuta; si no se establece la variable de host
firewalld_zone
, cualquier línea ZONE se eliminará de ifcfg-* - Se ejecuta el módulo
firewalld
; añade una líneaZONE
a ifcfg-* - En la siguiente ejecución del playbook, el rol network_interface se ejecuta y elimina nuevamente la línea ZONE, y así el ciclo se repite.
Para que este rol gestione las zonas de firewalld, el sistema debe estar ejecutando una distribución basada en RHEL, y usar NetworkManager para gestionar las interfaces de red. Si se cumplen esos criterios, el siguiente ejemplo muestra cómo añadir la interfaz eth0 a la zona pública de firewalld:
- device: eth0
bootproto: static
address: 192.168.10.18
netmask: 255.255.255.0
gateway: 192.168.10.1
firewalld_zone: public
Nota: Ansible necesita conectividad de red durante todo el proceso del playbook, puede que necesites tener una interfaz de control que no modifiques utilizando este método mientras cambias direcciones IP, de modo que Ansible tenga una conexión estable para configurar los sistemas objetivo. Todos los cambios de red se realizan dentro de un solo script generado y la conectividad de red solo se pierde por unos segundos.
Dependencias
python-netaddr
Licencia
BSD
Información del Autor
Este proyecto fue creado originalmente por Benno Joy.
Mejoras en Debian por:
- Martin Verges (croit, GmbH)
- Eric Anderson (Avi Networks, Inc.)
Mejoras en RedHat por:
- Eric Anderson (Avi Networks, Inc.)
- Luke Short (Red Hat, Inc.)
- Wei Tie (Cisco Systems, Inc.)
La lista completa de contribuyentes se puede encontrar aquí.
This roles enables users to configure various network components on target machines.
ansible-galaxy install avinetworks.network_interface