Netplan generates the wrong YAML value when setting activation-mode=off

Bug #1975678 reported by Isaac True
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
netplan.io (Ubuntu)
Triaged
Low
Unassigned
Focal
Triaged
Low
Unassigned
Impish
Triaged
Low
Unassigned
Jammy
Triaged
Low
Unassigned
Kinetic
Triaged
Low
Unassigned

Bug Description

When setting activation-mode=off on Ubuntu 20.04/Ubuntu Core 20, netplan generates the incorrect value in the YAML file (activation-mode: false), causing it to fail due to incorrect syntax.

$ sudo netplan set ethernets.eth0.activation-mode=off
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 247, in run_command
    self.func()
  File "/usr/share/netplan/netplan/cli/commands/set.py", line 55, in run
    self.run_command()
  File "/usr/share/netplan/netplan/cli/utils.py", line 247, in run_command
    self.func()
  File "/usr/share/netplan/netplan/cli/commands/set.py", line 126, in command_set
    self.write_file(subtree, hint + '.yaml', self.root_dir)
  File "/usr/share/netplan/netplan/cli/commands/set.py", line 193, in write_file
    libnetplan.netplan_parse(tmpp)
  File "/usr/share/netplan/netplan/libnetplan.py", line 64, in netplan_parse
    raise Exception(err.contents.message.decode('utf-8'))
Exception: /tmp/netplan-set_o73ewgp4/etc/netplan/50-cloud-init.yaml:4:24: Error in network definition: Value of 'activation-mode' needs to be 'manual' or 'off'
      activation-mode: false
                       ^

Tags: fr-2415
Isaac True (itrue)
description: updated
Lukas Märdian (slyon)
Changed in netplan.io (Ubuntu Kinetic):
status: New → Triaged
importance: Undecided → Medium
Changed in netplan.io (Ubuntu Focal):
status: New → Triaged
importance: Undecided → Medium
tags: added: rls-ff-incoming rls-kk-incoming
Revision history for this message
Lukas Märdian (slyon) wrote (last edit ):

This seems to be due to the (old) Python YAML parser being in conflict with libnetplan's actual C YAML parser.

Apparently pyyaml interprets "off" as a boolean ('False') by default in yaml.safe_load(value) (`set_tree = self.parse_key(key, yaml.safe_load(value))`), while it is supposed to be an actual string ("off") for activation-mode.

Looks like it was broken ever since netplan set was introduced (v0.101) and just recently got fixed via https://github.com/canonical/netplan/pull/254 (https://github.com/canonical/netplan/commit/bdb4f9846c8f40275c09a28bed04d8436cbbeffc to be specific)

Revision history for this message
Lukas Märdian (slyon) wrote :

A quick workaround seems to be quoting the parameters like this:

netplan set "ethernets.eth0.activation-mode='off'"

Changed in netplan.io (Ubuntu Kinetic):
importance: Medium → Low
Changed in netplan.io (Ubuntu Focal):
importance: Medium → Low
tags: added: fr-2415
tags: removed: rls-ff-incoming rls-kk-incoming
Changed in netplan.io (Ubuntu Impish):
importance: Undecided → Low
Changed in netplan.io (Ubuntu Jammy):
importance: Undecided → Low
Changed in netplan.io (Ubuntu Impish):
status: New → Triaged
Changed in netplan.io (Ubuntu Jammy):
status: New → Triaged
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.