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"
- Настройте 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
Примечание: Не обязательно добавлять маршруты, маршрут по умолчанию будет добавлен автоматически.
- Настройте мостовой интерфейс с несколькими сетевыми картами, добавленными к мосту.
- 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 интерфейсов.
- Настройте объединенный интерфейс с конфигурацией "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
- Настройте объединенный интерфейс с "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
- Настройте интерфейс 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
- Все вышеупомянутые примеры показывают, как настроить один хост, нижеследующий пример показывает, как определить ваши сетевые настройки для всех ваших машин.
Предположим, что ваше инвентарное хранилище хостов выглядит следующим образом:
/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
- Если необходимо использовать пакет resolvconf, возможно добавление некоторых DNS конфигураций.
dns-nameserver: [ "8.8.8.8", "8.8.4.4" ]
dns-search: "search.mydomain.tdl"
dns-domain: "mydomain.tdl"
- Вы можете добавить статическую 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
- Эта роль также может дополнительно добавлять сетевые интерфейсы в зоны 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