Bug 1973973

Summary: nmstate reports irrelevant error message when 'veth' key doesn't include
Product: Red Hat Enterprise Linux 8 Reporter: Mingyu Shi <mshi>
Component: nmstateAssignee: Fernando F. Mancera <ferferna>
Status: CLOSED ERRATA QA Contact: Mingyu Shi <mshi>
Severity: medium Docs Contact:
Priority: medium    
Version: 8.5CC: ferferna, fge, jiji, jishi, network-qe, till
Target Milestone: betaKeywords: Triaged
Target Release: 8.6   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: nmstate-1.1.1-0.1.alpha1.el8 Doc Type: No Doc Update
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2022-05-10 13:34:46 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Mingyu Shi 2021-06-19 16:07:27 UTC
Description of problem:
If you don't include 'veth' key when creating a veth pair with nmstate, nmstate will raise an irrelevant error, which doesn't help.

Version-Release number of selected component (if applicable):
nmstate-1.1.0-0.3.alpha3.el8.noarch
nispor-1.1.0-2.el8.x86_64
NetworkManager-1.32.0-0.5.el8.x86_64

How reproducible:
100%

Steps to Reproduce:
cat << EOF > test.yaml 
interfaces:
- name: veth1
  type: veth
  state: up
EOF
nmstatectl apply test.yaml

Actual results:
Traceback (most recent call last):
  File "/usr/bin/nmstatectl", line 11, in <module>
    load_entry_point('nmstate==1.1.0', 'console_scripts', 'nmstatectl')()
  File "/usr/lib/python3.6/site-packages/nmstatectl/nmstatectl.py", line 73, in main
    return args.func(args)
  File "/usr/lib/python3.6/site-packages/nmstatectl/nmstatectl.py", line 326, in set
    return apply(args)
  File "/usr/lib/python3.6/site-packages/nmstatectl/nmstatectl.py", line 343, in apply
    args.save_to_disk,
  File "/usr/lib/python3.6/site-packages/nmstatectl/nmstatectl.py", line 407, in apply_state
    save_to_disk=save_to_disk,
  File "/usr/lib/python3.6/site-packages/libnmstate/netapplier.py", line 81, in apply
    _apply_ifaces_state(plugins, net_state, verify_change, save_to_disk)
  File "/usr/lib/python3.6/site-packages/libnmstate/netapplier.py", line 114, in _apply_ifaces_state
    plugin.apply_changes(net_state, save_to_disk)
  File "/usr/lib/python3.6/site-packages/libnmstate/nm/plugin.py", line 201, in apply_changes
    NmProfiles(self.context).apply_config(net_state, save_to_disk)
  File "/usr/lib/python3.6/site-packages/libnmstate/nm/profiles.py", line 68, in apply_config
    list(net_state.ifaces.all_ifaces()), key=attrgetter("name")
TypeError: '<' not supported between instances of 'NoneType' and 'str'

Expected results:
(As with nmstate-1.0.2-11.el8_4)
libnmstate.error.NmstateLibnmError: Add profile: 906ba7bb-99d1-485a-bb85-e09dbba5dea8, iface:veth1, type:veth failed with error: nm-connection-error-quark: veth.peer: property is not specified (6)

Additional info:

Comment 2 Fernando F. Mancera 2021-08-09 11:31:53 UTC
Upstream PR: https://github.com/nmstate/nmstate/pull/1692

Comment 6 Gris Ge 2021-09-22 07:57:25 UTC
Tested using nmstate-1.1 branch. Proper exception found:

libnmstate.error.NmstateValueError: Veth interface veth1 does not exists,peer name is required for creating it

Comment 7 Mingyu Shi 2021-10-11 10:33:29 UTC
Verified with versions:
nmstate-1.1.1-0.1.alpha1.el8.noarch
nispor-1.1.1-1.el8.x86_64
NetworkManager-1.34.0-0.2.el8.x86_64

[18:28:58@hpe-dl380pgen8-02-vm-9 ~]0# cat << EOF > test.yaml 
> interfaces:
> - name: veth1
>   type: veth
>   state: up
> EOF
[18:32:26@hpe-dl380pgen8-02-vm-9 ~]0# nmstatectl apply test.yaml
/tmp/nmstatelog/2021-10-11-18:32:27-472153069.log
Traceback (most recent call last):
  File "/usr/bin/nmstatectl", line 11, in <module>
    load_entry_point('nmstate==1.1.1', 'console_scripts', 'nmstatectl')()
  File "/usr/lib/python3.6/site-packages/nmstatectl/nmstatectl.py", line 74, in main
    return args.func(args)
  File "/usr/lib/python3.6/site-packages/nmstatectl/nmstatectl.py", line 355, in apply
    args.save_to_disk,
  File "/usr/lib/python3.6/site-packages/nmstatectl/nmstatectl.py", line 419, in apply_state
    save_to_disk=save_to_disk,
  File "/usr/lib/python3.6/site-packages/libnmstate/netapplier.py", line 87, in apply
    desired_state, ignored_ifnames, current_state, save_to_disk
  File "/usr/lib/python3.6/site-packages/libnmstate/net_state.py", line 51, in __init__
    gen_conf_mode,
  File "/usr/lib/python3.6/site-packages/libnmstate/ifaces/ifaces.py", line 165, in __init__
    self._pre_edit_validation_and_cleanup()
  File "/usr/lib/python3.6/site-packages/libnmstate/ifaces/ifaces.py", line 286, in _pre_edit_validation_and_cleanup
    self._validate_veth_peers()
  File "/usr/lib/python3.6/site-packages/libnmstate/ifaces/ifaces.py", line 454, in _validate_veth_peers
    f"Veth interface {iface.name} does not exists,"
libnmstate.error.NmstateValueError: Veth interface veth1 does not exists,peer name is required for creating it

Comment 9 errata-xmlrpc 2022-05-10 13:34:46 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (nmstate bug fix and enhancement update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHEA-2022:1772