From 260c44c49b691e2ddaaf117975d115d2d43a943c Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Tue, 24 Oct 2023 14:16:38 +0000 Subject: [PATCH] Use ruamel.yaml for config and secret handling --- cloudbender/stack.py | 11 ++++++++--- requirements.txt | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/cloudbender/stack.py b/cloudbender/stack.py index 58b3f69..804a142 100644 --- a/cloudbender/stack.py +++ b/cloudbender/stack.py @@ -15,6 +15,8 @@ from dateutil.tz import tzutc from botocore.exceptions import ClientError +import ruamel.yaml + from .utils import dict_merge, search_refs, ensure_dir, get_s3_url from .connection import BotoConnection from .jinja import JinjaEnv, read_config_file, render_docs @@ -952,6 +954,10 @@ class Stack(object): def set_config(self, key, value, secret): """Set a config or secret""" + ryaml = ruamel.yaml.YAML() + ryaml.indent(mapping=2) + ryaml.preserve_quotes = True + pulumi_stack = self._get_pulumi_stack(create=True) pulumi_stack.set_config(key, pulumi.automation.ConfigValue(value, secret)) # Pulumi bug https://github.com/pulumi/pulumi/issues/13063 so no: , path=True) @@ -962,7 +968,7 @@ class Stack(object): )._serialize() with open(self.path, "r") as file: - settings = yaml.safe_load(file) + settings = ryaml.load(file) if "pulumi" not in settings: settings["pulumi"] = {} @@ -975,7 +981,6 @@ class Stack(object): if "parameters" not in settings: settings["parameters"] = {} - # hack for bug above, we support one level of nested values for now _val = pulumi_settings["config"]["{}:{}".format(self.parameters["Conglomerate"], key)] if '.' in key: @@ -988,7 +993,7 @@ class Stack(object): settings["parameters"][key] = _val with open(self.path, "w") as file: - yaml.dump(settings, stream=file) + ryaml.dump(settings, stream=file) return diff --git a/requirements.txt b/requirements.txt index e40e2e6..504aa6b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,6 +5,7 @@ click pexpect python-minifier cfn-lint>=0.34 +ruamel-yaml pulumi>=3.80.0 pulumi-aws>6.0.0 pulumi-aws-native