summaryrefslogtreecommitdiff
path: root/cloudinit
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit')
-rw-r--r--cloudinit/net/netplan.py3
-rw-r--r--cloudinit/safeyaml.py7
-rw-r--r--cloudinit/util.py17
3 files changed, 19 insertions, 8 deletions
diff --git a/cloudinit/net/netplan.py b/cloudinit/net/netplan.py
index 21517fda..e54a34e5 100644
--- a/cloudinit/net/netplan.py
+++ b/cloudinit/net/netplan.py
@@ -361,7 +361,8 @@ class Renderer(renderer.Renderer):
if section:
dump = util.yaml_dumps({name: section},
explicit_start=False,
- explicit_end=False)
+ explicit_end=False,
+ noalias=True)
txt = util.indent(dump, ' ' * 4)
return [txt]
return []
diff --git a/cloudinit/safeyaml.py b/cloudinit/safeyaml.py
index 7bcf9dd3..3bd5e03d 100644
--- a/cloudinit/safeyaml.py
+++ b/cloudinit/safeyaml.py
@@ -17,6 +17,13 @@ _CustomSafeLoader.add_constructor(
_CustomSafeLoader.construct_python_unicode)
+class NoAliasSafeDumper(yaml.dumper.SafeDumper):
+ """A class which avoids constructing anchors/aliases on yaml dump"""
+
+ def ignore_aliases(self, data):
+ return True
+
+
def load(blob):
return(yaml.load(blob, Loader=_CustomSafeLoader))
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):