[Bug 2104373] Re: [Bug] Failed 'netplan set' operation doesn't return non-0 error (Netplan 1.1.1 in Ubuntu 24.04)
Lukas Märdian
2104373 at bugs.launchpad.net
Mon Mar 31 08:33:24 UTC 2025
Good catch and thanks for reporting this issue! It seems to originate
from this change: https://github.com/canonical/netplan/pull/334/files
(core.py).
Would you mind creating a PR on GitHub to fix this, e.g. by adding a "sys.exit(1)" in each of those 3 exception cases, after the "logging.warning"?
https://github.com/canonical/netplan/pulls
** Also affects: netplan.io (Ubuntu)
Importance: Undecided
Status: New
** Also affects: netplan.io (Ubuntu Oracular)
Importance: Undecided
Status: New
** Also affects: netplan.io (Ubuntu Plucky)
Importance: Undecided
Status: New
** Also affects: netplan.io (Ubuntu Jammy)
Importance: Undecided
Status: New
** Also affects: netplan.io (Ubuntu Noble)
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to netplan.io in Ubuntu.
Matching subscriptions: foundations-bugs
https://bugs.launchpad.net/bugs/2104373
Title:
[Bug] Failed 'netplan set' operation doesn't return non-0 error
(Netplan 1.1.1 in Ubuntu 24.04)
Status in Netplan:
New
Status in netplan.io package in Ubuntu:
Triaged
Status in netplan.io source package in Jammy:
New
Status in netplan.io source package in Noble:
New
Status in netplan.io source package in Oracular:
New
Status in netplan.io source package in Plucky:
Triaged
Bug description:
Hello,
Me and my colleagues encountered a bug in Netplan that was introduced
in Ubuntu 24.04.
When `netplan set` is executed, for example to add bridge that
references non-existing interface, the error code (return value of the
cmd $?) is `0` in Ubuntu 24.04. In Ubuntu 22.04 the error code is
proper `1` (non-zero).
Here are generic steps that can be done with any Ubuntu 22.04 and
24.04 VM to reproduce the issue:
Get an Ubuntu 22.04 VM - this is example of proper behavior:
```bash
root at ubuntu-22-machine:~# netplan set --debug --origin-hint 10-test.network network.bridges.br1='{"interfaces":["nonexisting-interface"]}'
Traceback (most recent call last):
File "/usr/sbin/netplan", line 23, in <module>
netplan.main()
File "/usr/share/netplan/netplan/cli/core.py", line 56, in main
self.run_command()
File "/usr/share/netplan/netplan/cli/utils.py", line 243, in run_command
self.func()
File "/usr/share/netplan/netplan/cli/commands/set.py", line 50, in run
self.run_command()
File "/usr/share/netplan/netplan/cli/utils.py", line 243, in run_command
self.func()
File "/usr/share/netplan/netplan/cli/commands/set.py", line 85, in command_set
parser.load_yaml(tmp)
File "/usr/share/netplan/netplan/libnetplan.py", line 119, in load_yaml
_checked_lib_call(lib.netplan_parser_load_yaml_from_fd, self._ptr, input_file.fileno())
File "/usr/share/netplan/netplan/libnetplan.py", line 79, in _checked_lib_call
raise LibNetplanException(err.contents.message.decode('utf-8'))
netplan.libnetplan.LibNetplanException: Error in network definition: br1: interface 'nonexisting-interface' is not defined
root at ubuntu-22-machine:~# echo $?
1
root at ubuntu-22-machine:~# dpkg -l | grep netplan
hi libnetplan0:amd64 0.106.1-7ubuntu0.22.04.4 amd64 YAML network configuration abstraction runtime library
hi netplan.io 0.106.1-7ubuntu0.22.04.4 amd64 YAML network configuration abstraction for various backends
root at ubuntu-22-machine:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.5 LTS
Release: 22.04
Codename: jammy
```
Get an Ubuntu 24.04 VM - this is wrong behavior introduced in this
Ubuntu version. The return value of `netplan set` must be different
than `0` because there is an error and command failed:
```bash
root at ubuntu-24-machine:~# netplan set --debug --origin-hint 10-test.network network.bridges.br1='{"interfaces":["nonexisting-interface"]}'
Command failed: Error in network definition: br1: interface 'nonexisting-interface' is not defined
eroot at ubuntu-24-machine:~# echo $?
0
root at ubuntu-24-machine:~# dpkg -l | grep netplan
hi libnetplan1:amd64 1.1.1-1~ubuntu24.04.1 amd64 Declarative network configuration runtime library
hi netplan-generator 1.1.1-1~ubuntu24.04.1 amd64 Declarative network configuration for various backends at boot
hi netplan.io 1.1.1-1~ubuntu24.04.1 amd64 Declarative network configuration for various backends at runtime
hi python3-netplan 1.1.1-1~ubuntu24.04.1 amd64 Declarative network configuration Python bindings
root at ubuntu-24-machine:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.2 LTS
Release: 24.04
Codename: noble
```
Based on a troubleshooting session with my colleagues we think we may found out what the issue is (please verify - we are not experts on netplan codebase):
- The bug was introduced probably in commit https://github.com/canonical/netplan/commit/d06c73d09f6081419bd423526b3d4516f14f523a where in file `src/error.c` branching in `yaml_error` function has changed.
- In the `else` branch the return code is `NETPLAN_ERROR_CONFIG_GENERIC` which is `0` (see this diff https://github.com/canonical/netplan/commit/d06c73d09f6081419bd423526b3d4516f14f523a#diff-0785f4cf8a2cc06d90d511879d9b43ff9f69858fceb83bc13a5f78bd8b3a9187R162-R177).
Impact scope:
- This wrong behavior breaks manual CLI commands, scripts and tooling that depends on netplan CLI.
- Additionally the error code is also not reflected to netplan-dbus. When you execute the same command as above to add bridge using netplan-dbus - it will not report error even though netplan command fails.
To manage notifications about this bug go to:
https://bugs.launchpad.net/netplan/+bug/2104373/+subscriptions
More information about the foundations-bugs
mailing list