NXOS¶
Notes on configuration replacement¶
Config files aren’t aren’t normal config files but special “checkpoint” files.
That’s because on NXOS the only way to replace a config without reboot is to rollback to a checkpoint (which could be a file).
These files explicitly list a lot of normally implicit config lines, some of them starting with !#
.
The !#
part isn’t necessary for the rollback to work, but leaving these lines out can cause erratic behavior.
See the “Known gotchas” section below.
Prerequisites¶
Your device must be running NXOS 6.1. The features nxapi
server scp-server
must be enabled.
On the device and any checkpoint file you push, you must have the lines:
feature scp-server
feature nxapi
Getting a base checkpoint file¶
An example of a checkpoint file can be seen in test/unit/nxos/new_good.conf
.
You can get a checkpoint file representing your device’s current config by running the _get_checkpoint_file()
function in the napalm.nxos
driver:
device.open()
checkpoint = device._get_checkpoint_file()
print(checkpoint)
device.close()
Known gotchas¶
Leaving out a
shutdown
orno shutdown
line will cause the switch to toggle the up/down state of an interface, depending on it’s current state.!#switchport trunk allowed vlan 1-4094
is required even if the switchport is inswitchport mode access
. However if!#switchport trunk allowed vlan 1-4094
is included withno switchport
, the configuration replacement will fail.Vlans are listed vertically. For example
vlan 1, 10, 20, 30
will fail. To succeed, you need:vlan 1 vlan 10 vlan 20 vlan 30
Diffs¶
Diffs for config replacement are a list of commands that would be needed to take the device from it’s current state
to the desired config state. See test/unit/nxos/new_good.diff
as an example.
Notes on configuration merging¶
Merges are currently implemented by simply applying the the merge config line by line. This doesn’t use the checkpoint/rollback functionality. As a result, merges are not atomic.
Diffs¶
Diffs for merges are simply the lines in the merge candidate config. Netutils is used for creating the merge diff between the candidate and running configurations. One caveat of using netutils diff of configurations is that the diff is performed offline and not online in the device.
Example assuming that the device config contains:
interface loopback0
ip address 10.1.4.4/32
ip router ospf 100 area 0.0.0.1
Then what you will get with the diff:
candidate_cfg = """
interface loopback0
ip address 10.1.4.5/32
ip router ospf 100 area 0.0.0.1
"""
nxos1.load_merge_candidate(config=candidate_cfg)
print(nxos1.compare_config())
interface loopback0
ip address 10.1.4.5/32