community.general.nmcli – Управление сетью
Примечание
Этот плагин входит в коллекцию community.general (версия 2.0.1).
Для его установки используйте: ansible-galaxy collection install community.general.
Для использования в книге задач укажите: community.general.nmcli.
Обзор
- Управление сетевыми устройствами. Создание, изменение и управление различными типами подключений и устройств, например, ethernet, teams, bonds, vlans и т. д.
- На системах типа CentOS 8 и Fedora >=29 требования могут быть выполнены путем установки следующих пакетов: NetworkManager.
- На системах типа CentOS 7 и Fedora <=28 требования могут быть выполнены путем установки следующих пакетов: NetworkManager-tui.
- На системах типа Ubuntu и Debian требования могут быть выполнены путем установки следующих пакетов: network-manager
- На системах openSUSE требования могут быть выполнены путем установки следующих пакетов: NetworkManager.
Требования
Ниже перечислены требования к хосту, на котором выполняется этот модуль.
- nmcli
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| ageingtime целое число | По умолчанию: 300 | Используется только с мостом - [ageing-time <0-1000000>] время старения MAC-адреса Ethernet в секундах. |
| arp_interval целое число | Используется только с bond - интервал ARP. | |
| arp_ip_target строка | Используется только с bond - целевой IP-адрес ARP. | |
| autoconnect булево |
| Устанавливает, следует ли устанавливать соединение при загрузке. Указывает, может ли профиль соединения быть автоматически активирован. |
| conn_name строка / обязательно | Имя соединения. Шаблон <тип>[-<имя_интерфейса>][-<номер>]. | |
| dhcp_client_id строка | Идентификатор DHCP-клиента, отправленный DHCP-серверу. | |
| dns4 список / элементы=строка | Список до 3 DNS-серверов. Формат IPv4. Например, чтобы добавить два IPv4 адреса DNS-сервера, используйте 192.0.2.53 198.51.100.53. | |
| dns4_search список / элементы=строка | Список доменных имён поиска DNS. | |
| dns6 список / элементы=строка | Список до 3 DNS-серверов. Формат IPv6. Например, чтобы добавить два IPv6 адреса DNS-сервера, используйте 2001:4860:4860::8888 2001:4860:4860::8844. | |
| dns6_search список / элементы=строка | Список доменных имён поиска DNS. | |
| downdelay целое число | Используется только с bond - downdelay. | |
| egress строка | Используется только с VLAN - отображение приоритета выхода VLAN. | |
| flags строка | Используется только с VLAN - флаги. | |
| forwarddelay целое число | По умолчанию: 15 | Используется только с мостом - [forward-delay <2-30>] задержка пересылки STP в секундах. |
| gw4 строка | IPv4 шлюз для этого интерфейса. Используйте формат 192.0.2.1.Этот параметр является взаимоисключающим с параметром never_default4. | |
| gw6 строка | IPv6 шлюз для этого интерфейса. Используйте формат 2001:db8::1. | |
| hairpin булево |
| Используется только с 'bridge-slave' - 'режим hairpin' для подчиненного, что позволяет отправлять пакеты обратно через подчиненный, на котором был получен пакет. |
| hellotime целое число | По умолчанию: 2 | Используется только с мостом - [hello-time <1-10>] время приветствия STP в секундах. |
| ifname строка | Интерфейс для привязки соединения. Соединение будет применимо только к этому имени интерфейса. Можно использовать специальное значение '*', для подключений, не зависящих от интерфейса.Аргумент ifname обязателен для всех типов подключений, кроме bond, team, bridge и vlan. Этот параметр по умолчанию равен conn_name, если не задан. | |
| ingress строка | Используется только с VLAN - отображение приоритета входа VLAN. | |
| ip4 строка | IPv4 адрес для этого интерфейса. Используйте формат 192.0.2.24/24. | |
| ip6 строка | IPv6 адрес для этого интерфейса. Используйте формат abbe::cafe. | |
| ip_tunnel_dev строка | Используется с IPIP/SIT - родительский интерфейс этого туннеля IPIP/SIT, можно использовать ifname. | |
| ip_tunnel_local строка | Используется с IPIP/SIT - локальный IP-адрес IPIP/SIT. | |
| ip_tunnel_remote строка | Используется с IPIP/SIT - целевой IP-адрес IPIP/SIT. | |
| mac строка | Используется только с мостом - MAC-адрес моста. Обратите внимание, что это требует новой функции ядра, первоначально представленной в ядре 3.15. | |
| master строка | Главный интерфейс (имя интерфейса или UUID соединения или имя соединения) для моста, команды, bond. | |
| maxage целое число | По умолчанию: 20 | Используется только с мостом - [max-age <6-42>] максимальный срок действия сообщения STP в секундах. |
| miimon целое число | Используется только с bond - miimon. Этот параметр по умолчанию равен 100 при отсутствии значения. | |
| mode строка |
| Тип устройства или сетевого соединения, который вы хотите создать для bond, team или bridge. |
| mtu целое число | MTU соединения, например, 9000. Это нельзя применить при создании интерфейса и выполняется после создания интерфейса. Можно использовать при модификации Team, VLAN, Ethernet (будущие планы по реализации wifi, pppoe, infiniband) Этот параметр по умолчанию равен 1500 при отсутствии значения. | |
| never_default4 булево добавлено в 2.0.0 community.general |
| Установить как маршрут по умолчанию. Этот параметр взаимоисключающий с параметром gw4. |
| path_cost целое число | По умолчанию: 100 | Используется только с 'bridge-slave' - [<1-65535>] - стоимость порта STP для пунктов назначения через этот подчиненный. |
| primary строка | Используется только с bond и представляет собой имя первичного интерфейса (для режима "active-backup"), обычно это 'ifname'. | |
| priority целое число | По умолчанию: 128 | Используется только с 'bridge' - устанавливает приоритет STP. |
| route_metric4 целое число добавлено в 2.0.0 community.general | Установить уровень метрики ipv4 маршрутов, настроенных на интерфейсе. | |
| routes4 список / элементы=строка добавлено в 2.0.0 community.general | Список ipv4 маршрутов. Используйте формат '192.0.3.0/24 192.0.2.1' | |
| slavepriority целое число | По умолчанию: 32 | Используется только с 'bridge-slave' - [<0-63>] - приоритет STP этого подчиненного. |
| state строка / обязательно |
| Указывает, должно ли устройство существовать или нет, выполняя действие, если состояние отличается от указанного. |
| stp булево |
| Используется только с мостом и управляет включением протокола Spanning Tree (STP) для этого моста. |
| type строка |
| Тип устройства или сетевого соединения, которое вы хотите создать или изменить. Тип generic добавлен в Ansible 2.5.Тип infiniband добавлен в community.general 2.0.0. |
| updelay целое число | Используется только с bond - updelay. | |
| vlandev строка | Используется только с VLAN - родительское устройство VLAN, можно использовать ifname. | |
| vlanid целое число | Используется только с VLAN - ID VLAN в диапазоне <0-4095>. | |
| vxlan_id целое число | Используется только с VXLAN - идентификатор VXLAN. | |
| vxlan_local строка | Используется только с VXLAN - локальный IP-адрес VXLAN. | |
| vxlan_remote строка | Используется только с VXLAN - целевой IP-адрес VXLAN. | |
| zone строка добавлено в 2.0.0 community.general | Уровень доверия соединения. При обновлении этого свойства на активном соединении, изменение вступает в силу немедленно. |
Примеры
# These examples are using the following inventory:
#
# ## Directory layout:
#
# |_/inventory/cloud-hosts
# | /group_vars/openstack-stage.yml
# | /host_vars/controller-01.openstack.host.com
# | /host_vars/controller-02.openstack.host.com
# |_/playbook/library/nmcli.py
# | /playbook-add.yml
# | /playbook-del.yml
# ```
#
# ## inventory examples
# ### groups_vars
# ```yml
# ---
# #devops_os_define_network
# storage_gw: "192.0.2.254"
# external_gw: "198.51.100.254"
# tenant_gw: "203.0.113.254"
#
# #Team vars
# nmcli_team:
# - conn_name: tenant
# ip4: '{{ tenant_ip }}'
# gw4: '{{ tenant_gw }}'
# - conn_name: external
# ip4: '{{ external_ip }}'
# gw4: '{{ external_gw }}'
# - conn_name: storage
# ip4: '{{ storage_ip }}'
# gw4: '{{ storage_gw }}'
# nmcli_team_slave:
# - conn_name: em1
# ifname: em1
# master: tenant
# - conn_name: em2
# ifname: em2
# master: tenant
# - conn_name: p2p1
# ifname: p2p1
# master: storage
# - conn_name: p2p2
# ifname: p2p2
# master: external
#
# #bond vars
# nmcli_bond:
# - conn_name: tenant
# ip4: '{{ tenant_ip }}'
# gw4: ''
# mode: balance-rr
# - conn_name: external
# ip4: '{{ external_ip }}'
# gw4: ''
# mode: balance-rr
# - conn_name: storage
# ip4: '{{ storage_ip }}'
# gw4: '{{ storage_gw }}'
# mode: balance-rr
# nmcli_bond_slave:
# - conn_name: em1
# ifname: em1
# master: tenant
# - conn_name: em2
# ifname: em2
# master: tenant
# - conn_name: p2p1
# ifname: p2p1
# master: storage
# - conn_name: p2p2
# ifname: p2p2
# master: external
#
# #ethernet vars
# nmcli_ethernet:
# - conn_name: em1
# ifname: em1
# ip4: '{{ tenant_ip }}'
# gw4: '{{ tenant_gw }}'
# - conn_name: em2
# ifname: em2
# ip4: '{{ tenant_ip1 }}'
# gw4: '{{ tenant_gw }}'
# - conn_name: p2p1
# ifname: p2p1
# ip4: '{{ storage_ip }}'
# gw4: '{{ storage_gw }}'
# - conn_name: p2p2
# ifname: p2p2
# ip4: '{{ external_ip }}'
# gw4: '{{ external_gw }}'
# ```
#
# ### host_vars
# ```yml
# ---
# storage_ip: "192.0.2.91/23"
# external_ip: "198.51.100.23/21"
# tenant_ip: "203.0.113.77/23"
# ```
## playbook-add.yml example
---
- hosts: openstack-stage
remote_user: root
tasks:
- name: Install needed network manager libs
ansible.builtin.package:
name:
- NetworkManager-libnm
- nm-connection-editor
- libsemanage-python
- policycoreutils-python
state: present
##### Working with all cloud nodes - Teaming
- name: Try nmcli add team - conn_name only & ip4 gw4
community.general.nmcli:
type: team
conn_name: '{{ item.conn_name }}'
ip4: '{{ item.ip4 }}'
gw4: '{{ item.gw4 }}'
state: present
with_items:
- '{{ nmcli_team }}'
- name: Try nmcli add teams-slave
community.general.nmcli:
type: team-slave
conn_name: '{{ item.conn_name }}'
ifname: '{{ item.ifname }}'
master: '{{ item.master }}'
state: present
with_items:
- '{{ nmcli_team_slave }}'
###### Working with all cloud nodes - Bonding
- name: Try nmcli add bond - conn_name only & ip4 gw4 mode
community.general.nmcli:
type: bond
conn_name: '{{ item.conn_name }}'
ip4: '{{ item.ip4 }}'
gw4: '{{ item.gw4 }}'
mode: '{{ item.mode }}'
state: present
with_items:
- '{{ nmcli_bond }}'
- name: Try nmcli add bond-slave
community.general.nmcli:
type: bond-slave
conn_name: '{{ item.conn_name }}'
ifname: '{{ item.ifname }}'
master: '{{ item.master }}'
state: present
with_items:
- '{{ nmcli_bond_slave }}'
##### Working with all cloud nodes - Ethernet
- name: Try nmcli add Ethernet - conn_name only & ip4 gw4
community.general.nmcli:
type: ethernet
conn_name: '{{ item.conn_name }}'
ip4: '{{ item.ip4 }}'
gw4: '{{ item.gw4 }}'
state: present
with_items:
- '{{ nmcli_ethernet }}'
## playbook-del.yml example
- hosts: openstack-stage
remote_user: root
tasks:
- name: Try nmcli del team - multiple
community.general.nmcli:
conn_name: '{{ item.conn_name }}'
state: absent
with_items:
- conn_name: em1
- conn_name: em2
- conn_name: p1p1
- conn_name: p1p2
- conn_name: p2p1
- conn_name: p2p2
- conn_name: tenant
- conn_name: storage
- conn_name: external
- conn_name: team-em1
- conn_name: team-em2
- conn_name: team-p1p1
- conn_name: team-p1p2
- conn_name: team-p2p1
- conn_name: team-p2p2
- name: Add an Ethernet connection with static IP configuration
community.general.nmcli:
conn_name: my-eth1
ifname: eth1
type: ethernet
ip4: 192.0.2.100/24
gw4: 192.0.2.1
state: present
- name: Add an Team connection with static IP configuration
community.general.nmcli:
conn_name: my-team1
ifname: my-team1
type: team
ip4: 192.0.2.100/24
gw4: 192.0.2.1
state: present
autoconnect: yes
- name: Optionally, at the same time specify IPv6 addresses for the device
community.general.nmcli:
conn_name: my-eth1
ifname: eth1
type: ethernet
ip4: 192.0.2.100/24
gw4: 192.0.2.1
ip6: 2001:db8::cafe
gw6: 2001:db8::1
state: present
- name: Add two IPv4 DNS server addresses
community.general.nmcli:
conn_name: my-eth1
type: ethernet
dns4:
- 192.0.2.53
- 198.51.100.53
state: present
- name: Make a profile usable for all compatible Ethernet interfaces
community.general.nmcli:
ctype: ethernet
name: my-eth1
ifname: '*'
state: present
- name: Change the property of a setting e.g. MTU
community.general.nmcli:
conn_name: my-eth1
mtu: 9000
type: ethernet
state: present
- name: Add VxLan
community.general.nmcli:
type: vxlan
conn_name: vxlan_test1
vxlan_id: 16
vxlan_local: 192.168.1.2
vxlan_remote: 192.168.1.5
- name: Add ipip
community.general.nmcli:
type: ipip
conn_name: ipip_test1
ip_tunnel_dev: eth0
ip_tunnel_local: 192.168.1.2
ip_tunnel_remote: 192.168.1.5
- name: Add sit
community.general.nmcli:
type: sit
conn_name: sit_test1
ip_tunnel_dev: eth0
ip_tunnel_local: 192.168.1.2
ip_tunnel_remote: 192.168.1.5
- name: Add zone
community.general.nmcli:
type: ethernet
conn_name: my-eth1
zone: external
state: present
# nmcli exits with status 0 if it succeeds and exits with a status greater
# than zero when there is a failure. The following list of status codes may be
# returned:
#
# - 0 Success - indicates the operation succeeded
# - 1 Unknown or unspecified error
# - 2 Invalid user input, wrong nmcli invocation
# - 3 Timeout expired (see --wait option)
# - 4 Connection activation failed
# - 5 Connection deactivation failed
# - 6 Disconnecting device failed
# - 7 Connection deletion failed
# - 8 NetworkManager is not running
# - 9 nmcli and NetworkManager versions mismatch
# - 10 Connection, device, or access point does not exist.
Авторы
- Chris Long (@alcamie101)
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/community/general/nmcli_module.html