summaryrefslogtreecommitdiff
path: root/cloudinit/util.py
diff options
context:
space:
mode:
authorRyan Harper <ryan.harper@canonical.com>2019-02-07 22:38:41 +0000
committerServer Team CI Bot <josh.powers+server-team-bot@canonical.com>2019-02-07 22:38:41 +0000
commitcf30836645473c62599e838ab48b2d31677fa584 (patch)
tree1d161bc740fdc28f4366520acc265dd57d47debf /cloudinit/util.py
parente9bf4f23209fecab15ff63427655e95bfa0934a7 (diff)
downloadvyos-cloud-init-cf30836645473c62599e838ab48b2d31677fa584.tar.gz
vyos-cloud-init-cf30836645473c62599e838ab48b2d31677fa584.zip
netplan: Don't render yaml aliases when dumping netplan
Cloud-init rendered netplan with duplicate aliases if a network config included "global" nameserver/search values. Netplan uses can read yaml files which do use aliaes but cloud-init did not render a single yaml dictionary, instead it combined yaml sections into a single document which sometimes resulted in duplicate aliases being present. This branch introduces a yaml SafeDumper class which can set the 'ignore_aliases' attribute. This is not enabled by default but callers to util.yaml_dumps can pass a boolean to toggle this. The netplan render uses noalias=True and the resulting yaml output does not contain any aliases. LP: #1815051
Diffstat (limited to 'cloudinit/util.py')
-rw-r--r--cloudinit/util.py17
1 files changed, 10 insertions, 7 deletions
diff --git a/cloudinit/util.py b/cloudinit/util.py
index a8a232b6..2be528a0 100644
--- a/cloudinit/util.py
+++ b/cloudinit/util.py
@@ -1596,14 +1596,17 @@ def json_dumps(data):
separators=(',', ': '), default=json_serialize_default)
-def yaml_dumps(obj, explicit_start=True, explicit_end=True):
+def yaml_dumps(obj, explicit_start=True, explicit_end=True, noalias=False):
"""Return data in nicely formatted yaml."""
- return yaml.safe_dump(obj,
- line_break="\n",
- indent=4,
- explicit_start=explicit_start,
- explicit_end=explicit_end,
- default_flow_style=False)
+
+ return yaml.dump(obj,
+ line_break="\n",
+ indent=4,
+ explicit_start=explicit_start,
+ explicit_end=explicit_end,
+ default_flow_style=False,
+ Dumper=(safeyaml.NoAliasSafeDumper
+ if noalias else yaml.dumper.Dumper))
def ensure_dir(path, mode=None):