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"
  1. 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.

  1. 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.

  1. 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
  1. 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
  1. 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
  1. 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
  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"
  1. 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
  1. 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ínea ZONE 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í.

Acerca del proyecto

This roles enables users to configure various network components on target machines.

Instalar
ansible-galaxy install avinetworks.network_interface
Licencia
Unknown
Descargas
7.3k
Propietario