nmcli - Управление сетью
Новая версия 2.0.
Описание
- Управление сетевыми устройствами. Создание, модификация и управление различными типами соединений и устройств, например, Ethernet, team, bond, VLAN и т. д.
- В системах типа CentOS и Fedora необходимо установить зависимости как «yum/dnf install -y python-gobject NetworkManager-glib»
- В системах типа Ubuntu и Debian необходимо установить зависимости как «apt-get install -y libnm-glib-dev»
Требования
Ниже перечислены требования к хосту, на котором выполняется данный модуль.
- nmcli
- dbus
- NetworkManager-glib
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| ageingtime | Значение по умолчанию: 300 | Используется только с bridge - [ageing-time <0-1000000>] время старения MAC-адреса Ethernet в секундах |
| arp_interval | Значение по умолчанию: None | Используется только с bond - интервал ARP |
| arp_ip_target | Значение по умолчанию: None | Используется только с bond - целевой IP-адрес ARP |
| autoconnect |
| Устанавливать ли соединение при загрузке. Можно ли автоматически активировать профиль подключения |
| conn_name обязательно | Имя подключения. Если не указано, генерируется имя по умолчанию: <тип>[-<имя_интерфейса>][-<номер>] | |
| dhcp_client_id (добавлен в 2.5) | Значение по умолчанию: None | Идентификатор клиента DHCP, отправляемый серверу DHCP. |
| dns4 | Значение по умолчанию: None | Список до 3 DNS-серверов в формате IPv4. Например, для добавления двух адресов IPv4 DNS-серверов: "192.0.2.53 198.51.100.53" |
| dns4_search (добавлен в 2.5) | Значение по умолчанию: None | Список доменных имён поиска DNS. |
| dns6 | Список до 3 DNS-серверов в формате IPv6. Например, для добавления двух адресов IPv6 DNS-серверов: "2001:4860:4860::8888 2001:4860:4860::8844" | |
| dns6_search (добавлен в 2.5) | Значение по умолчанию: None | Список доменных имён поиска DNS. |
| downdelay | Значение по умолчанию: None | Используется только с bond - downdelay |
| egress | Значение по умолчанию: None | Используется только с VLAN - отображение приоритета исходящего трафика VLAN |
| flags | Значение по умолчанию: None | Используется только с VLAN - флаги |
| forwarddelay | Значение по умолчанию: 15 | Используется только с bridge - [forward-delay <2-30>] задержка пересылки STP в секундах |
| gw4 | Шлюз IPv4 для этого интерфейса в формате "192.0.2.1" | |
| gw6 | Значение по умолчанию: None | Шлюз IPv6 для этого интерфейса в формате "2001:db8::1" |
| hairpin | Значение по умолчанию: да | Используется только с 'bridge-slave' - режим 'hairpin' для подчиненного интерфейса, позволяющий отправлять пакеты обратно через подчиненный интерфейс, на котором был получен пакет. |
| hellotime | Значение по умолчанию: 2 | Используется только с bridge - [hello-time <1-10>] время приветствия STP в секундах |
| ifname | Значение по умолчанию: conn_name | Имя интерфейса. Интерфейс для привязки подключения. Подключение будет применимо только к этому имени интерфейса. Для интерфейсно-независимых подключений можно использовать специальное значение "*". Аргумент ifname обязателен для всех типов подключений, кроме bond, team, bridge и vlan. |
| ingress | Значение по умолчанию: None | Используется только с VLAN - отображение приоритета входящего трафика VLAN |
| ip4 | Значение по умолчанию: None | IPv4-адрес для этого интерфейса в формате "192.0.2.24/24" |
| ip6 | Значение по умолчанию: None | IPv6-адрес для этого интерфейса в формате "abbe::cafe" |
| mac | Значение по умолчанию: None | Используется только с bridge - MAC-адрес моста (требуется недавняя функция ядра, первоначально представленная в ядре 3.15) |
| master | Значение по умолчанию: None | master <master (имя_интерфейса, или UUID подключения или имя_подключения) моста, team, bond master профиль подключения. |
| maxage | Значение по умолчанию: 20 | Используется только с bridge - [max-age <6-42>] максимальное время жизни сообщения STP в секундах |
| miimon | Значение по умолчанию: 100 | Используется только с bond - miimon |
| mode |
balence-rr | Тип устройства или сетевого подключения, которое необходимо создать для bond, team или bridge. |
| mtu | Значение по умолчанию: 1500 | MTU подключения, например, 9000. Нельзя применить при создании интерфейса, применяется после создания интерфейса. Можно использовать при модификации Team, VLAN, Ethernet (будущие планы по реализации wifi, pppoe, infiniband) |
| path_cost | Значение по умолчанию: 100 | Используется только с 'bridge-slave' - [<1-65535>] - стоимость порта STP для маршрутов через этот подчиненный интерфейс |
| primary | Значение по умолчанию: None | Используется только с bond и представляет собой имя первичного интерфейса (для режима "active-backup"), обычно это 'ifname' |
| priority | Значение по умолчанию: 128 | Используется только с 'bridge' - устанавливает приоритет STP |
| slavepriority | Значение по умолчанию: 32 | Используется только с 'bridge-slave' - [<0-63>] - приоритет STP этого подчиненного интерфейса |
| state обязательно |
| Указывает, должно ли устройство существовать или нет, выполняя действия, если состояние отличается от указанного. |
| stp |
None | Используется только с bridge и управляет включением протокола Spanning Tree Protocol (STP) для данного моста |
| type |
| Тип устройства или сетевого подключения, которое необходимо создать или изменить. тип generic добавлен в версии 2.5. |
| updelay | Значение по умолчанию: None | Используется только с bond - updelay |
| vlandev | Значение по умолчанию: None | Используется только с VLAN - родительское устройство, на котором находится эта VLAN, можно использовать ifname |
| vlanid | Значение по умолчанию: None | Используется только с VLAN - идентификатор VLAN в диапазоне <0-4095> |
Примеры
# 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
yum:
name: '{{ item }}'
state: installed
with_items:
- NetworkManager-glib
- libnm-qt-devel.x86_64
- nm-connection-editor.x86_64
- libsemanage-python
- policycoreutils-python
##### Working with all cloud nodes - Teaming
- name: try nmcli add team - conn_name only & ip4 gw4
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
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
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
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: nmcli add Ethernet - conn_name only & ip4 gw4
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
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
# To add an Ethernet connection with static IP configuration, issue a command as follows
- nmcli:
conn_name: my-eth1
ifname: eth1
type: ethernet
ip4: 192.0.2.100/24
gw4: 192.0.2.1
state: present
# To add an Team connection with static IP configuration, issue a command as follows
- 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
# Optionally, at the same time specify IPv6 addresses for the device as follows:
- 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
# To add two IPv4 DNS server addresses:
- nmcli:
conn_name: my-eth1
type: ethernet
dns4:
- 192.0.2.53
- 198.51.100.53
state: present
# To make a profile usable for all compatible Ethernet interfaces, issue a command as follows
- nmcli:
ctype: ethernet
name: my-eth1
ifname: '*'
state: present
# To change the property of a setting e.g. MTU, issue a command as follows:
- nmcli:
conn_name: my-eth1
mtu: 9000
type: ethernet
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–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.5/modules/nmcli_module.html