Compare commits

..

1 Commits

Author SHA1 Message Date
cuddle-please
8469a6ed9b chore(release): 0.2.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2024-11-19 01:23:55 +00:00
7 changed files with 7 additions and 146 deletions

View File

@ -6,10 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
## [0.2.0] - 2024-11-20 ## [0.2.0] - 2024-11-19
### Added ### Added
- add support for raw reading of variables
- add replicas - add replicas
- set interval down to a minute - set interval down to a minute
- with native roots - with native roots

View File

@ -1,24 +1,7 @@
use std::collections::{BTreeMap, HashMap}; use std::collections::HashMap;
use serde_yaml::Value;
use crate::Component; use crate::Component;
use super::cuddle_vars::CuddleVariables;
#[derive(Clone, PartialEq, Eq, Debug)]
pub enum RawClusterVariable {
Map(RawClusterVariables),
List(RawClusterVariableList),
String(String),
Bool(bool),
}
#[derive(Clone, PartialEq, Eq, Debug, Default)]
pub struct RawClusterVariables(BTreeMap<String, RawClusterVariable>);
#[derive(Clone, PartialEq, Eq, Debug, Default)]
pub struct RawClusterVariableList(Vec<RawClusterVariable>);
#[derive(PartialEq, Eq, Debug, Clone)] #[derive(PartialEq, Eq, Debug, Clone)]
pub enum ClusterVariable { pub enum ClusterVariable {
String(String), String(String),
@ -35,9 +18,6 @@ pub struct ClusterVariables {
name: String, name: String,
namespace: String, namespace: String,
replicas: u64, replicas: u64,
raw: RawClusterVariables,
// raw: CuddleVariables,
} }
#[derive(Default)] #[derive(Default)]
@ -62,6 +42,8 @@ impl Component for ClusterVars {
..Default::default() ..Default::default()
}; };
// TODO: actually extract values
if let Some(mapping) = value.as_mapping() { if let Some(mapping) = value.as_mapping() {
if let Some(env) = mapping.get("env") { if let Some(env) = mapping.get("env") {
if let Some(env_entries) = env.as_mapping() { if let Some(env_entries) = env.as_mapping() {
@ -81,11 +63,6 @@ impl Component for ClusterVars {
} }
} }
} }
// vars.raw = match value.clone().try_into() {
// Ok(o) => o,
// Err(e) => panic!("{}", e),
// };
vars.raw = value.into();
vars.name = environment.into(); vars.name = environment.into();
vars.namespace = environment.into(); vars.namespace = environment.into();
@ -101,10 +78,6 @@ impl minijinja::value::Object for ClusterVariables {
"name" => minijinja::Value::from_safe_string(self.name.clone()), "name" => minijinja::Value::from_safe_string(self.name.clone()),
"namespace" => minijinja::Value::from_safe_string(self.namespace.clone()), "namespace" => minijinja::Value::from_safe_string(self.namespace.clone()),
"replicas" => minijinja::Value::from_safe_string(self.replicas.to_string()), "replicas" => minijinja::Value::from_safe_string(self.replicas.to_string()),
"raw" => {
tracing::info!("returning raw: {:?}", self.raw);
minijinja::Value::from_object(self.raw.clone())
}
_ => return None, _ => return None,
}; };
@ -130,95 +103,3 @@ impl minijinja::value::Object for ClusterEnv {
) )
} }
} }
impl From<&Value> for RawClusterVariables {
fn from(value: &Value) -> Self {
match value {
Value::Mapping(mapping) => RawClusterVariables(
mapping
.into_iter()
.map(|(k, v)| {
(
k.as_str()
.expect("keys to always be valid strings")
.to_string(),
v.into(),
)
})
.collect(),
),
Value::Null => RawClusterVariables::default(),
_ => todo!(),
}
}
}
impl From<&Value> for RawClusterVariable {
fn from(value: &Value) -> Self {
match value {
Value::Null => Self::Map(RawClusterVariables::default()),
Value::Bool(b) => Self::Bool(*b),
Value::Number(number) => Self::String(number.to_string()),
Value::String(s) => Self::String(s.into()),
Value::Sequence(vec) => Self::List(RawClusterVariableList(
vec.iter().map(|i| i.into()).collect(),
)),
Value::Mapping(mapping) => Self::Map(RawClusterVariables(
mapping
.into_iter()
.map(|(k, v)| {
(
k.as_str()
.expect("keys to always be valid strings")
.to_string(),
v.into(),
)
})
.collect(),
)),
Value::Tagged(_tagged_value) => todo!(),
}
}
}
impl minijinja::value::Object for RawClusterVariables {
fn get_value(self: &std::sync::Arc<Self>, key: &minijinja::Value) -> Option<minijinja::Value> {
self.0.get(key.as_str()?).map(|o| match o {
RawClusterVariable::Map(raw_cluster_variables) => {
minijinja::Value::from_object(raw_cluster_variables.clone())
}
RawClusterVariable::List(list) => minijinja::Value::from_object(list.clone()),
RawClusterVariable::String(s) => minijinja::Value::from_safe_string(s.clone()),
RawClusterVariable::Bool(b) => minijinja::Value::from_safe_string(b.to_string()),
})
}
fn enumerate(self: &std::sync::Arc<Self>) -> minijinja::value::Enumerator {
minijinja::value::Enumerator::Values(
self.0
.keys()
.map(|key| minijinja::Value::from_safe_string(key.clone()))
.collect::<Vec<_>>(),
)
}
}
impl minijinja::value::Object for RawClusterVariableList {
fn enumerate(self: &std::sync::Arc<Self>) -> minijinja::value::Enumerator {
minijinja::value::Enumerator::Values(
self.0
.iter()
.map(|i| match i {
RawClusterVariable::Map(raw_cluster_variables) => {
minijinja::Value::from_object(raw_cluster_variables.clone())
}
RawClusterVariable::List(list) => minijinja::Value::from_object(list.clone()),
RawClusterVariable::String(s) => minijinja::Value::from_safe_string(s.clone()),
RawClusterVariable::Bool(b) => {
minijinja::Value::from_safe_string(b.to_string())
}
})
.collect(),
)
}
}

View File

@ -34,13 +34,12 @@ impl TryFrom<serde_yaml::Value> for CuddleVariable {
serde_yaml::Value::String(s) => Ok(Self::String(s)), serde_yaml::Value::String(s) => Ok(Self::String(s)),
serde_yaml::Value::Number(num) => Ok(Self::String(num.to_string())), serde_yaml::Value::Number(num) => Ok(Self::String(num.to_string())),
serde_yaml::Value::Bool(bool) => Ok(Self::String(bool.to_string())), serde_yaml::Value::Bool(bool) => Ok(Self::String(bool.to_string())),
serde_yaml::Value::Null => Ok(Self::Object(Box::default())),
_ => Err(anyhow::anyhow!("cannot handle type of serde value")), _ => Err(anyhow::anyhow!("cannot handle type of serde value")),
} }
} }
} }
#[derive(PartialEq, Eq, Debug, Clone, Default)] #[derive(PartialEq, Eq, Debug, Clone)]
pub struct CuddleVariables(pub HashMap<String, CuddleVariable>); pub struct CuddleVariables(pub HashMap<String, CuddleVariable>);
impl TryFrom<serde_yaml::Mapping> for CuddleVariables { impl TryFrom<serde_yaml::Mapping> for CuddleVariables {
@ -69,7 +68,7 @@ impl TryFrom<serde_yaml::Value> for CuddleVariables {
fn try_from(value: serde_yaml::Value) -> Result<Self, Self::Error> { fn try_from(value: serde_yaml::Value) -> Result<Self, Self::Error> {
match value { match value {
serde_yaml::Value::Null => Ok(Self::default()), serde_yaml::Value::Null => anyhow::bail!("cannot handle null"),
serde_yaml::Value::Bool(_) => anyhow::bail!("cannot handle bool"), serde_yaml::Value::Bool(_) => anyhow::bail!("cannot handle bool"),
serde_yaml::Value::Number(_) => anyhow::bail!("cannot handle number"), serde_yaml::Value::Number(_) => anyhow::bail!("cannot handle number"),
serde_yaml::Value::String(_) => anyhow::bail!("cannot handle string"), serde_yaml::Value::String(_) => anyhow::bail!("cannot handle string"),

View File

@ -3,14 +3,10 @@ vars:
cuddle/clusters: cuddle/clusters:
dev: dev:
replicas: 1 replicas: 1
list:
- listItem: listValue
env: env:
vault: true
something.something: something something.something: something
something: something:
something: "something" # ignored
vault: true vault: true
prod: prod:
env: env:

View File

@ -3,7 +3,3 @@ namespace: dev
replicas: 1 replicas: 1
items: items:
- something.something - something.something
listValue
something: something

View File

@ -2,4 +2,3 @@ name: prod
namespace: prod namespace: prod
replicas: 3 replicas: 3
items: items:

View File

@ -6,12 +6,3 @@ items:
- {{val}} - {{val}}
{%- endfor %} {%- endfor %}
{%- if vars.cluster_vars.raw.list -%}
{%- for val in vars.cluster_vars.raw.list %}
{{ val.listItem }}
{%- endfor -%}
{%- endif %}
{% if vars.cluster_vars.raw.env.something %}
something: {{ vars.cluster_vars.raw.env.something.something }}
{% endif %}