- Python code examples
New feature since 2.2.40
Nmstate python module introduced logger libnmstate
which allow you to do
specific tune on logging of nmstate only.
import logging
import libnmstate
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("libnmstate")
logger.setLevel(logging.DEBUG)
print(libnmstate.show())
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceState
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'eth1',
Interface.STATE: InterfaceState.ABSENT
}
]
})
Define an ethernet interface with two static IPv4 addresses and two static IPv6 addresses.
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceIPv4
from libnmstate.schema import InterfaceIPv6
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'eth1',
Interface.STATE: InterfaceState.UP
Interface.IPV4: {
InterfaceIPv4.ENABLED: True,
InterfaceIPv4.ADDRESS: [
{
InterfaceIPv4.ADDRESS_IP: '192.168.0.1',
InterfaceIPv4.ADDRESS_PREFIX_LENGTH: 24,
},
{
InterfaceIPv4.ADDRESS_IP: '192.168.1.1',
InterfaceIPv4.ADDRESS_PREFIX_LENGTH: 24,
},
],
InterfaceIPv4.DHCP: False,
},
Interface.IPV6: {
InterfaceIPV6.ENABLED: True,
InterfaceIPv6.ADDRESS: [
{
InterfaceIPv6.ADDRESS_IP: '2001:db8:1::1',
InterfaceIPv6.ADDRESS_PREFIX_LENGTH: 64,
},
{
InterfaceIPv6.ADDRESS_IP: '2001:db8:2::1',
InterfaceIPv6.ADDRESS_PREFIX_LENGTH: 64,
},
],
InterfaceIPV6.DHCP: False,
InterfaceIPV6.AUTOCONF: False,
},
}
]
})
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceIPv4
from libnmstate.schema import InterfaceIPv6
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'eth1',
Interface.STATE: InterfaceState.UP
Interface.IPV4: {
InterfaceIPv4.ENABLED: True,
InterfaceIPv4.DHCP: True,
},
Interface.IPV6: {
InterfaceIPV6.ENABLED: True,
InterfaceIPV6.DHCP: True,
InterfaceIPV6.AUTOCONF: True,
},
}
]
})
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceIPv4
from libnmstate.schema import InterfaceIPv6
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'eth1',
Interface.STATE: InterfaceState.UP
Interface.IPV4: {
InterfaceIPv4.ENABLED: True,
InterfaceIPv4.DHCP: True,
InterfaceIPv4.AUTO_DNS: False
},
Interface.IPV6: {
InterfaceIPV6.ENABLED: True,
InterfaceIPV6.DHCP: True,
InterfaceIPV6.AUTOCONF: True,
InterfaceIPv6.AUTO_DNS: False
},
}
]
})
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceIPv4
from libnmstate.schema import InterfaceIPv6
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'eth1',
Interface.STATE: InterfaceState.UP
Interface.IPV4: {
InterfaceIPv4.ENABLED: True,
InterfaceIPv4.DHCP: True,
InterfaceIPv4.AUTO_GATEWAY: False
},
Interface.IPV6: {
InterfaceIPV6.ENABLED: True,
InterfaceIPV6.DHCP: True,
InterfaceIPV6.AUTOCONF: True,
InterfaceIPv6.AUTO_GATEWAY: False
},
}
]
})
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceIPv4
from libnmstate.schema import InterfaceIPv6
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'eth1',
Interface.STATE: InterfaceState.UP
Interface.IPV4: {
InterfaceIPv4.ENABLED: True,
InterfaceIPv4.DHCP: True,
InterfaceIPv4.AUTO_ROUTES: False
},
Interface.IPV6: {
InterfaceIPV6.ENABLED: True,
InterfaceIPV6.DHCP: True,
InterfaceIPV6.AUTOCONF: True,
InterfaceIPv6.AUTO_ROUTES: False
},
}
]
})
import libnmstate
from libnmstate.schema import Interface
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'eth1',
Interface.STATE: InterfaceState.UP
Interface.MTU: 1460
}
]
})
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import DNS
libnmstate.apply(
{
Interface.KEY: []
DNS.KEY: {
DNS.CONFIG: {
DNS.SEARCH: [
'example.org'
],
DNS.SERVER: [
'192.0.2.251'
]
}
}
})
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import Route
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'eth1'
}
]
Route.KEY: {
Route.CONFIG: [
{
Route.DESTINATION: "198.51.100.0/24",
Route.NEXT_HOP_INTERFACE: "eth1",
Route.NEXT_HOP_ADDRESS: "192.0.2.1",
}
]
}
})
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import Route
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'eth1'
}
]
Route.KEY: {
Route.CONFIG: [
{
Route.STATE: Route.STATE_ABSENT,
Route.DESTINATION: "0.0.0.0/0",
}
]
Route.CONFIG: [
{
Route.DESTINATION: "0.0.0.0/0",
Route.NEXT_HOP_INTERFACE: "eth1",
Route.NEXT_HOP_ADDRESS: "192.0.2.1",
}
]
}
})
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import Route
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'eth1'
}
]
Route.KEY: {
Route.CONFIG: [
{
Route.STATE: Route.STATE_ABSENT,
Route.NEXT_HOP_INTERFACE: "eth1",
}
]
}
})
Create bond with two interfaces.
import libnmstate
from libnmstate.schema import Bond
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceState
from libnmstate.schema import InterfaceType
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'eth1',
Interface.STATE: InterfaceState.UP,
},
{
Interface.NAME: 'eth2',
Interface.STATE: InterfaceState.UP,
},
{
Interface.NAME: 'bond99',
Interface.TYPE: InterfaceType.BOND
Interface.STATE: InterfaceState.UP,
}
]
})
Add an interface to existing bond.
import libnmstate
from libnmstate.schema import Bond
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceState
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'eth3',
Interface.STATE: InterfaceState.UP,
},
{
Interface.NAME: 'bond99',
Interface.TYPE: InterfaceType.BOND
Interface.STATE: InterfaceState.UP,
Bond.CONFIG_SUBTREE: {
Bond.PORT: ['eth1', 'eth2', 'eth3']
}
}
]
})
Delete bond.
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceState
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'bond99',
Interface.STATE: InterfaceState.ABSENT,
}
]
})
Create VLAN for VLAN ID 101 of interface 'eth1'.
import libnmstate
from libnmstate.schema import VLAN
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceState
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'eth1',
Interface.STATE: InterfaceState.UP,
},
{
Interface.NAME: 'eth1.101',
Interface.TYPE: InterfaceType.VLAN,
Interface.STATE: InterfaceState.UP,
VLAN.CONFIG_SUBTREE: {
VLAN.ID: 101,
VLAN.BASE_IFACE: 'eth1'
}
}
]
})
TBD
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceState
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'eth1.101',
Interface.STATE: InterfaceState.ABSENT
}
]
})
Create a linux bridge with two interfaces.
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceType
from libnmstate.schema import InterfaceState
from libnmstate.schema import LinuxBridge
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'br0',
Interface.STATE: InterfaceState.UP,
Interface.TYPE: LinuxBridge.TYPE,
LinuxBridge.CONFIG_SUBTREE: {
LinuxBridge.PORT_SUBTREE: [
{
LinuxBridge.PORT_NAME: 'eth1'
},
{
LinuxBridge.PORT_NAME: 'eth2'
}
]
}
}
]
})
Add eth3
to existing linux bridge.
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import LinuxBridge
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'br0',
LinuxBridge.CONFIG_SUBTREE: {
LinuxBridge.PORT_SUBTREE: [
{
LinuxBridge.PORT_NAME: 'eth1'
},
{
LinuxBridge.PORT_NAME: 'eth2'
},
{
LinuxBridge.PORT_NAME: 'eth3'
}
]
}
}
]
})
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceState
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'br0',
Interface.STATE: InterfaceState.ABSENT
}
]
})
Create Open vSwitch bridge with two interfaces and one internal interface.
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceType
from libnmstate.schema import InterfaceState
from libnmstate.schema import OVSBridge
from libnmstate.schema import OVSBridgePortType
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'ovs0-br0',
Interface.STATE: InterfaceState.UP,
Interface.TYPE: OVSBridge.TYPE,
OVSBridge.CONFIG_SUBTREE: {
OVSBridge.PORT_SUBTREE: [
{
OVSBridge.PORT_NAME: 'eth1',
},
{
OVSBridge.PORT_NAME: 'ovs0',
}
]
}
},
]
})
import libnmstate
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceState
libnmstate.apply(
{
Interface.KEY: [
{
Interface.NAME: 'ovs0-br0',
Interface.STATE: InterfaceState.ABSENT
}
]
})