[Bug 1942930] Re: Unset a subtree crashes

Launchpad Bug Tracker 1942930 at bugs.launchpad.net
Tue Oct 5 13:47:35 UTC 2021


This bug was fixed in the package netplan.io - 0.103-0ubuntu7

---------------
netplan.io (0.103-0ubuntu7) impish; urgency=medium

  * Add d/p/0006-netplan-set-make-it-possible-to-unset-a-whole-devtyp.patch:
    Fix unset of a devtype subtree, e.g. "netplan set network.ethernets=null".
    (LP: #1942930)

 -- Lukas Märdian <slyon at ubuntu.com>  Tue, 05 Oct 2021 09:41:31 +0200

** Changed in: netplan.io (Ubuntu Impish)
       Status: New => Fix Released

-- 
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/1942930

Title:
  Unset a subtree crashes

Status in netplan:
  In Progress
Status in netplan.io package in Ubuntu:
  Fix Released
Status in netplan.io source package in Focal:
  New
Status in netplan.io source package in Hirsute:
  New
Status in netplan.io source package in Impish:
  Fix Released

Bug description:
  [Impact]

  The netplan CLI would crash when trying to set an entire device type
  subtree to null, e.g. `netplan set devices.ethernets=null`, and the
  configuration would remain unaffected. This is obviously undesirable, as
  the only workaround is to explictly loop through all the definitions.

  The fix comes in two parts:

  * add some internal APIs to libnetplan to be able to list all defintions
    of a given type, with some care taken in the consuming Python bindings
    if the symbols aren't present.

  * use this new API to, when encountering this special case, expand the
    devtype subtree into all its definitions, letting the normal subtree
    nullification feature taking it up from there.

  [Test Plan]

  Boot a VM image with at least one ethernet device.
  Write the following config to /etc/netplan/00-ethernets.yaml

  network:
    version: 2
    ethernets:
      all-en:
        dhcp4: true
        match:
          name: en*
      all-eth:
        dhcp4: true
        match:
          name: eth*

  Check that it has been taken into account using this command

  netplan get

  Unset the definitions we added:

  netplan set network.ethernets=null

  This command should silently succeed.
  Finally, check that there are no ethernet device configured by running

  netplan get

  [Where problems could occur]

  This is backported from a branch with considerable changes in the API
  and ABI handling of libnetplan, so some ABI breakage might slip through
  unnoticed, even though steps have been taken to prevent it.

  The most risk of regression is in the `netplan set` command, as it is
  where the existing code actually changes behaviour. This could be
  particularly bad as this could overwrite existing configuration files
  with erroneous configuration, leading to non-functional networking.

  Also, the DBus endpoints for netplan directly uses the `netplan set`
  command, so its users could be impacted as well.

  [Original report]

  While working on the snapd netplan integration I ran into the following peculiar issue.
  I want to unset a subtree of configuration, e.g. I have:
  # netplan get
  network:
    version: 2
    ethernets:
      all-en:
        dhcp4: true
        match:
          name: en*
      all-eth:
        dhcp4: true
        match:
          name: eth*

  and want to remove all ethernet configuration. AIUI this can be done
  via setting the subtree to "null" (or did I misunderstood this)? If I
  try that I get:

  # netplan set network.ethernets=null
  Traceback (most recent call last):
    File "/usr/sbin/netplan", line 23, in <module>
      netplan.main()
    File "/usr/share/netplan/netplan/cli/core.py", line 50, in main
      self.run_command()
    File "/usr/share/netplan/netplan/cli/utils.py", line 264, in run_command
      self.func()
    File "/usr/share/netplan/netplan/cli/commands/set.py", line 52, in run
      self.run_command()
    File "/usr/share/netplan/netplan/cli/utils.py", line 264, in run_command
      self.func()
    File "/usr/share/netplan/netplan/cli/commands/set.py", line 95, in command_set
      hints = self.split_tree_by_hint(set_tree)
    File "/usr/share/netplan/netplan/cli/commands/set.py", line 61, in split_tree_by_hint
      for netdef in network.get(devtype, []):
  TypeError: 'NoneType' object is not iterable

  Do you have any hints how I can delete an entire subtree via the
  commandline (well, via dbus but it's a direct mapping so cmdline is
  fine).

  This is Ubuntu Core 20 with netplan 0.102-0ubuntu1~20.04.2 but I can also reproduce this on my 21.04 system with:
  $ sudo netplan get
  network:
    bridges:
      br54:
        dhcp4: true
        dhcp6: true
    renderer: NetworkManager
    version: 2
  $ sudo netplan set network.bridges=null
  Traceback (most recent call last):
    File "/usr/sbin/netplan", line 23, in <module>
      netplan.main()
    File "/usr/share/netplan/netplan/cli/core.py", line 50, in main
      self.run_command()
    File "/usr/share/netplan/netplan/cli/utils.py", line 264, in run_command
      self.func()
    File "/usr/share/netplan/netplan/cli/commands/set.py", line 52, in run
      self.run_command()
    File "/usr/share/netplan/netplan/cli/utils.py", line 264, in run_command
      self.func()
    File "/usr/share/netplan/netplan/cli/commands/set.py", line 95, in command_set
      hints = self.split_tree_by_hint(set_tree)
    File "/usr/share/netplan/netplan/cli/commands/set.py", line 61, in split_tree_by_hint
      for netdef in network.get(devtype, []):
  TypeError: 'NoneType' object is not iterable

To manage notifications about this bug go to:
https://bugs.launchpad.net/netplan/+bug/1942930/+subscriptions




More information about the foundations-bugs mailing list