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 | Используется только с мостом - [ageing-time <0-1000000>] время старения MAC-адреса Ethernet в секундах |
| arp_interval | Используется только с bond - интервал ARP | |
| arp_ip_target | Используется только с bond - целевой IP-адрес ARP | |
| autoconnect bool |
| Необходимо ли подключаться при запуске системы. Можно ли автоматически активировать профиль подключения |
| conn_name обязательно | Имя подключения, используемое для вызова подключения. Если не указано, генерируется имя по умолчанию: <тип>[-<имя_интерфейса>][-<номер>] | |
| dhcp_client_id (добавлен в 2.5) | Идентификатор клиента DHCP, отправляемый серверу DHCP. | |
| dns4 | Список до 3 DNS-серверов в формате IPv4, например: Для добавления двух адресов IPv4 DNS-серверов: "192.0.2.53 198.51.100.53" | |
| dns4_search (добавлен в 2.5) | Список DNS-доменных имен. | |
| dns6 | Список до 3 DNS-серверов в формате IPv6, например: Для добавления двух адресов IPv6 DNS-серверов: "2001:4860:4860::8888 2001:4860:4860::8844" | |
| dns6_search (добавлен в 2.5) | Список DNS-доменных имен. | |
| downdelay | Используется только с bond - downdelay | |
| egress | Используется только с VLAN - сопоставление приоритетов выходящего трафика VLAN | |
| flags | Используется только с VLAN - флаги | |
| forwarddelay | Значение по умолчанию: 15 | Используется только с мостом - [forward-delay <2-30>] задержка пересылки STP в секундах |
| gw4 | IPv4 шлюз для этого интерфейса в формате: "192.0.2.1" | |
| gw6 | IPv6 шлюз для этого интерфейса в формате: "2001:db8::1" | |
| hairpin bool |
| Используется только с 'bridge-slave' - режим 'hairpin' для подчиненного интерфейса, который позволяет отправлять пакеты обратно через подчиненный интерфейс, на котором был получен пакет. |
| hellotime | Значение по умолчанию: 2 | Используется только с мостом - [hello-time <1-10>] время приветствия STP в секундах |
| ifname | Значение по умолчанию: "conn_name" | Имя интерфейса, к которому будет привязано подключение. Подключение будет применимо только к этому имени интерфейса. Для подключений, не зависящих от интерфейса, можно использовать специальное значение "*". Аргумент ifname обязателен для всех типов подключений, кроме bond, team, bridge и vlan. |
| ingress | Используется только с VLAN - сопоставление приоритетов входящего трафика VLAN | |
| ip4 | IPv4-адрес для этого интерфейса в формате: "192.0.2.24/24" | |
| ip6 | IPv6-адрес для этого интерфейса в формате: "abbe::cafe" | |
| mac | Используется только с мостом - MAC-адрес моста (примечание: это требует новой функции ядра, первоначально представленной в ядре 3.15 upstream) | |
| master | master <мастер (имя_интерфейса, или UUID подключения или имя_подключения) моста, команды, bond или мастера подключения профиля. | |
| maxage | Значение по умолчанию: 20 | Используется только с мостом - [max-age <6-42>] максимальный возраст сообщения STP в секундах |
| miimon | Значение по умолчанию: 100 | Используется только с bond - miimon |
| mode |
| Тип устройства или сетевого подключения, который вы хотите создать для bond, team или bridge. |
| mtu | Значение по умолчанию: 1500 | MTU подключения, например, 9000. Это нельзя применить при создании интерфейса, а делается после создания интерфейса. Может использоваться при изменении Team, VLAN, Ethernet (в будущих планах реализовать wifi, pppoe, infiniband) |
| path_cost | Значение по умолчанию: 100 | Используется только с 'bridge-slave' - [<1-65535>] - стоимость порта STP для назначения через этот подчиненный интерфейс |
| primary | Используется только с bond и представляет собой имя основного интерфейса (для режима «активный-резервный»), обычно это ‘ifname’ | |
| priority | Значение по умолчанию: 128 | Используется только с 'bridge' - устанавливает приоритет STP |
| slavepriority | Значение по умолчанию: 32 | Используется только с 'bridge-slave' - [<0-63>] - приоритет STP этого подчиненного интерфейса |
| state обязательно |
| Устройство должно существовать или нет, принимая действия, если состояние отличается от указанного. |
| stp bool |
| Используется только с мостом и управляет тем, включён ли протокол Spanning Tree Protocol (STP) для этого моста |
| type |
| Тип устройства или сетевого подключения, которое вы хотите создать или изменить. type generic добавлен в версии 2.5. |
| updelay | Используется только с bond - updelay | |
| vlandev | Используется только с VLAN - родительское устройство, на котором находится этот VLAN, можно использовать ifname | |
| vlanid | Используется только с 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.
Статус
Этот модуль помечен как preview, что означает, что его интерфейс не гарантируется как обратный.
Техническое обслуживание
Этот модуль помечен как community, что означает, что он поддерживается сообществом Ansible. См. Техническое обслуживание и поддержка модуля для получения дополнительной информации.
Список других модулей, поддерживаемых сообществом Ansible, см. здесь.
Автор
- 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.6/modules/nmcli_module.html