network_interface

сетевой интерфейс

ПРЕДУПРЕЖДЕНИЕ: Эта роль может быть опасна в использовании. Если вы потеряете сетевое соединение с целевым хостом из-за неправильной настройки сети, вы можете не суметь восстановить доступ без физического доступа к машине.

Эта роль позволяет пользователям настраивать различные сетевые компоненты на целевых машинах. Роль можно использовать для настройки:

  • Ethernet интерфейсов
  • Мостовых интерфейсов
  • Совмещенных интерфейсов
  • Интерфейсов с VLAN тегами
  • Сетевых маршрутов

Требования

Эта роль требует Ansible версии 1.4 или выше, а требования к платформе перечислены в файле метаданных.

Переменные роли

Переменные, которые могут быть переданы этой роли, и их краткое описание приведены ниже:

Переменная Обязательная По умолчанию Комментарии
network_pkgs Нет [] Типичные нужные пакеты, такие как selinux, bridge-utils, ifenslave и iproute
network_ether_interfaces Нет [] Список ethernet интерфейсов для добавления в систему.
network_bridge_interfaces Нет [] Список мостовых интерфейсов для добавления в систему.
network_bond_interfaces Нет [] Список совместимых интерфейсов для добавления в систему.
network_vlan_interfaces Нет [] Список интерфейсов VLAN для добавления в систему.
network_check_packages Нет true Установить пакеты, перечисленные в network_pkgs.
network_allow_service_restart Нет true Нужно ли переопределять и перезапускать интерфейсы/сетевую настройку.
network_modprobe_persist Нет true Постоянная загрузка модуля.
network_configured_interfaces_only Нет false Полностью удаляет интерфейсы, не настроенные через эту роль, при включении.
network_interface_file_prefix Нет ifcfg- Префикс для файлов конфигурации интерфейсов.
network_interface_file_postfix Нет `` Постфикс для файлов конфигурации интерфейсов.

Примечание: Значения для списка указаны в примерах ниже.

Примеры

Настройки сети Debian (не RedHat) могут дополнительно использовать нотацию CIDR для IPv4 адресов вместо указания адреса и маски подсети отдельно. Обязательно использование нотации CIDR для IPv6 адресов на Debian.

Пример IPv4 с нотацией CIDR:

      cidr: 192.168.10.18/24
      # ОПЦИОНАЛЬНО: укажите шлюз для этой сети, или auto для сети+1
      gateway: auto

Пример IPv4 с классическим 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

Если вы хотите использовать другой MAC-адрес для вашего интерфейса, вы можете просто добавить его.

      hwaddress: aa:bb:cc:dd:ee:ff

В некоторых редких случаях может быть полезно установить любую опцию, которая вам нравится. Поэтому возможно использовать

      options:
          - "up /execute/my/command"
          - "down /execute/my/other/command"

и версию IPv6

      ipv6_options:
          - "up /execute/my/command"
          - "down /execute/my/other/command"
  1. Настройте eth1 и eth2 на хосте с статическим IP и dhcp IP. Также определите статические маршруты и шлюз.
- 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

Примечание: Не обязательно добавлять маршруты, маршрут по умолчанию будет добавлен автоматически.

  1. Настройте мостовой интерфейс с несколькими сетевыми картами, добавленными к мосту.
- hosts: myhost
  roles:
    - role: network
      network_bridge_interfaces:
       -  device: br1
          type: bridge
          cidr: 192.168.10.10/24
          bridge_ports: [eth1, eth2]

          # Дополнительные значения
          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"

Примечание: Маршруты также могут быть добавлены для этого интерфейса таким же образом, как маршруты добавляются для ethernet интерфейсов.

  1. Настройте объединенный интерфейс с конфигурацией "active-backup" для слоев.
- 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]

          # Дополнительные значения
          bond_miimon: 100
          bond_lacp_rate: slow
          bond_xmit_hash_policy: layer3+4
  1. Настройте объединенный интерфейс с "802.3ad" в качестве режима объединения и IP адресом, получаемым через 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. Настройте интерфейс VLAN с тегом VLAN 2 для 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. Все вышеупомянутые примеры показывают, как настроить один хост, нижеследующий пример показывает, как определить ваши сетевые настройки для всех ваших машин.

Предположим, что ваше инвентарное хранилище хостов выглядит следующим образом:

/etc/ansible/hosts

[dc1]
host1
host2

Опишите вашу сетевую конфигурацию для каждого хоста в переменных хоста:

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. Если необходимо использовать пакет resolvconf, возможно добавление некоторых DNS конфигураций.
dns-nameserver: [ "8.8.8.8", "8.8.4.4" ]
dns-search: "search.mydomain.tdl"
dns-domain: "mydomain.tdl"
  1. Вы можете добавить статическую IP конфигурацию IPv6 на Ethernet, Bond или Bridge интерфейсы.
ipv6_address: "aaaa:bbbb:cccc:dddd:dead:beef::1/64"
ipv6_gateway: "aaaa:bbbb:cccc:dddd::1"

Создайте плейбук, который применяет эту роль ко всем хостам, как показано ниже, и выполните плейбук. Все серверы должны иметь настроенные сетевые интерфейсы и обновленные маршруты.

- hosts: all
  roles:
    - role: network
  1. Эта роль также может дополнительно добавлять сетевые интерфейсы в зоны firewalld. Основной модуль firewalld (http://docs.ansible.com/ansible/latest/firewalld_module.html) может выполнять ту же функцию, поэтому, если вы используете оба модуля, ваши плейбуки могут не быть идемпотентными. Рассмотрите этот случай, когда используется только модуль firewalld:
  • роль network_interface запускается; если переменная firewalld_zone не установлена, любая строка ZONE будет удалена из ifcfg-*
  • запускается модуль firewalld; добавляет строку ZONE в ifcfg-*
  • При следующем запуске плейбука роль network_interface запускается и снова удаляет строку ZONE, и цикл повторяется.

Для того чтобы эта роль управляла зонами firewalld, система должна использовать дистрибутив на базе RHEL и использовать NetworkManager для управления сетевыми интерфейсами. Если эти критерии выполнены, следующий пример показывает, как добавить интерфейс eth0 в публичную зону firewalld:

       - device: eth0
         bootproto: static
         address: 192.168.10.18
         netmask: 255.255.255.0
         gateway: 192.168.10.1
         firewalld_zone: public

Примечание: Ansible требует сетевого подключения на протяжении всего процесса плейбука, вам может понадобиться контролирующий интерфейс, который вы не модифицируете с помощью этого метода, меняя IP-адреса, чтобы Ansible имел стабильное соединение для настройки целевых систем. Все изменения сети выполняются в одном сгенерированном скрипте, и подключение к сети теряется только на несколько секунд.

Зависимости

python-netaddr

Лицензия

BSD

Информация об авторе

Этот проект был изначально создан Benno Joy.

Обновления Debian от:

  • Martin Verges (croit, GmbH)
  • Eric Anderson (Avi Networks, Inc.)

Обновления RedHat от:

  • Eric Anderson (Avi Networks, Inc.)
  • Luke Short (Red Hat, Inc.)
  • Wei Tie, (Cisco Systems, Inc.)

Полный список участников можно найти здесь.

О проекте

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

Установить
ansible-galaxy install avinetworks/ansible-role-network_interface
Лицензия
Unknown
Загрузки
7248
Владелец