diff --git a/crates/cuddle-clusters/src/catalog/cuddle_vars.rs b/crates/cuddle-clusters/src/catalog/cuddle_vars.rs index 9cf3206..73d89bf 100644 --- a/crates/cuddle-clusters/src/catalog/cuddle_vars.rs +++ b/crates/cuddle-clusters/src/catalog/cuddle_vars.rs @@ -146,8 +146,14 @@ impl minijinja::value::Object for CuddleVariables { if let Some(val) = self.0.get(key) { match val { - CuddleVariable::Object(_) => todo!(), - CuddleVariable::Array(_) => todo!(), + CuddleVariable::Object(object) => { + let obj = object.deref().clone(); + + return Some(minijinja::Value::from_object(obj)); + } + CuddleVariable::Array(arr) => { + return Some(minijinja::Value::from_object(MiniJinjaList(arr.clone()))) + } CuddleVariable::String(str) => { return Some(minijinja::Value::from_safe_string(str.to_owned())) } @@ -158,3 +164,29 @@ impl minijinja::value::Object for CuddleVariables { None } } + +#[derive(Debug)] +pub struct MiniJinjaList(Vec); + +impl minijinja::value::Object for MiniJinjaList { + fn enumerate(self: &std::sync::Arc) -> minijinja::value::Enumerator { + minijinja::value::Enumerator::Values( + self.0 + .iter() + .map(|i| match i { + CuddleVariable::Object(object) => { + let obj = object.deref().clone(); + + minijinja::Value::from_object(obj) + } + CuddleVariable::Array(arr) => { + minijinja::Value::from_object(MiniJinjaList(arr.clone())) + } + CuddleVariable::String(str) => { + minijinja::Value::from_safe_string(str.to_owned()) + } + }) + .collect(), + ) + } +} diff --git a/crates/cuddle-clusters/tests/with_cuddle_vars/cuddle.yaml b/crates/cuddle-clusters/tests/with_cuddle_vars/cuddle.yaml index 7a13f5b..7155a85 100644 --- a/crates/cuddle-clusters/tests/with_cuddle_vars/cuddle.yaml +++ b/crates/cuddle-clusters/tests/with_cuddle_vars/cuddle.yaml @@ -1,5 +1,11 @@ vars: service: service + some: + nested: + item: something + array: + - item: item + cuddle/clusters: dev: diff --git a/crates/cuddle-clusters/tests/with_cuddle_vars/expected/dev/some.yaml b/crates/cuddle-clusters/tests/with_cuddle_vars/expected/dev/some.yaml index e9a1947..b783d22 100644 --- a/crates/cuddle-clusters/tests/with_cuddle_vars/expected/dev/some.yaml +++ b/crates/cuddle-clusters/tests/with_cuddle_vars/expected/dev/some.yaml @@ -1,2 +1,4 @@ service: service - +something: something +items: + - item diff --git a/crates/cuddle-clusters/tests/with_cuddle_vars/templates/clusters/some.yaml.jinja2 b/crates/cuddle-clusters/tests/with_cuddle_vars/templates/clusters/some.yaml.jinja2 index 0f33df2..ff97c36 100644 --- a/crates/cuddle-clusters/tests/with_cuddle_vars/templates/clusters/some.yaml.jinja2 +++ b/crates/cuddle-clusters/tests/with_cuddle_vars/templates/clusters/some.yaml.jinja2 @@ -1,3 +1,7 @@ service: {{ vars.cuddle_vars.service }} - +something: {{ vars.cuddle_vars.some.nested.item }} +items: + {%- for val in vars.cuddle_vars.array %} + - {{val.item}} + {%- endfor %}