Este contenido no está disponible en el idioma seleccionado.
Chapter 40. Introduction to Nmstate
Nmstate is a declarative network manager API. The nmstate
package provides the libnmstate
Python library and a command-line utility, nmstatectl
, to manage NetworkManager on RHEL. When you use Nmstate, you describe the expected networking state by using YAML or JSON-formatted instructions.
Nmstate has many benefits. For example, it:
- Provides a stable and extensible interface to manage RHEL network capabilities
- Supports atomic and transactional operations at the host and cluster level
- Supports partial editing of most properties and preserves existing settings that are not specified in the instructions
- Provides plug-in support to enable administrators to use their own plug-ins
40.1. Using the libnmstate library in a Python application
The libnmstate
Python library enables developers to use Nmstate in their own application
To use the library, import it in your source code:
import libnmstate
Note that you must install the nmstate
and python3-libnmstate
packages to use this library.
Example 40.1. Querying the network state by using the libnmstate library
The following Python code imports the libnmstate
library and displays the available network interfaces and their state:
import json import libnmstate from libnmstate.schema import Interface net_state = libnmstate.show() for iface_state in net_state[Interface.KEY]: print(iface_state[Interface.NAME] + ": " + iface_state[Interface.STATE])
40.2. Updating the current network configuration by using nmstatectl
You can use the nmstatectl
utility to store the current network configuration of one or all interfaces in a file. You can then use this file to:
- Modify the configuration and apply it to the same system.
- Copy the file to a different host and configure the host with the same or modified settings.
For example, you can export the settings of the enp1s0
interface to a file, modify the configuration, and apply the settings to the host.
Prerequisites
-
The
nmstate
package is installed.
Procedure
Export the settings of the
enp1s0
interface to the~/network-config.yml
file:# nmstatectl show enp1s0 > ~/network-config.yml
This command stores the configuration of
enp1s0
in YAML format. To store the output in JSON format, pass the--json
option to the command.If you do not specify an interface name,
nmstatectl
exports the configuration of all interfaces.-
Modify the
~/network-config.yml
file using a text editor to update the configuration. Apply the settings from the
~/network-config.yml
file:# nmstatectl apply ~/network-config.yml
If you exported the settings in JSON format, pass the
--json
option to the command.
40.3. Network states for the network
RHEL system role
The network
RHEL system role supports state configurations in playbooks to configure the devices. For this, use the network_state
variable followed by the state configurations.
Benefits of using the network_state
variable in a playbook:
- Using the declarative method with the state configurations, you can configure interfaces, and the NetworkManager creates a profile for these interfaces in the background.
-
With the
network_state
variable, you can specify the options that you require to change, and all the other options will remain the same as they are. However, with thenetwork_connections
variable, you must specify all settings to change the network connection profile.
For example, to create an Ethernet connection with dynamic IP address settings, use the following vars
block in your playbook:
Playbook with state configurations | Regular playbook |
vars: network_state: interfaces: - name: enp7s0 type: ethernet state: up ipv4: enabled: true auto-dns: true auto-gateway: true auto-routes: true dhcp: true ipv6: enabled: true auto-dns: true auto-gateway: true auto-routes: true autoconf: true dhcp: true |
vars: network_connections: - name: enp7s0 interface_name: enp7s0 type: ethernet autoconnect: yes ip: dhcp4: yes auto6: yes state: up |
For example, to only change the connection status of dynamic IP address settings that you created as above, use the following vars
block in your playbook:
Playbook with state configurations | Regular playbook |
vars: network_state: interfaces: - name: enp7s0 type: ethernet state: down |
vars: network_connections: - name: enp7s0 interface_name: enp7s0 type: ethernet autoconnect: yes ip: dhcp4: yes auto6: yes state: down |
Additional resources
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
file -
/usr/share/doc/rhel-system-roles/network/
directory