add core side interpolation to update

This commit is contained in:
mbecker20
2024-05-18 15:58:23 -07:00
parent 2f371af288
commit a0f5ae8c7f
4 changed files with 65 additions and 15 deletions
Generated
+2 -2
View File
@@ -3515,9 +3515,9 @@ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
[[package]]
name = "svi"
version = "1.0.0"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6136b927b6a7bd321e3ebfd1380d396a6952d4f5c14dcd0893724110d79a5c3b"
checksum = "ecfc625e6292e18db65d1a122cb1ea014dd909622ab0154f068a3990413ff017"
dependencies = [
"thiserror",
]
+1 -1
View File
@@ -31,7 +31,7 @@ mongo_indexed = "0.3.0"
resolver_api = "1.1.0"
parse_csl = "0.1.0"
mungos = "0.5.6"
svi = "1.0.0"
svi = "1.0.1"
# ASYNC
tokio = { version = "1.37.0", features = ["full"] }
+30 -6
View File
@@ -184,17 +184,19 @@ impl Resolve<RunBuild, User> for State {
.cloned();
// Interpolate variables / secrets into build args
let mut replacers = HashSet::new();
let mut global_replacers = HashSet::new();
let mut secret_replacers = HashSet::new();
for arg in &mut build.config.build_args {
// first pass - global variables - don't need replacers.
let (res, _) = svi::interpolate_variables(
// first pass - global variables
let (res, more_replacers) = svi::interpolate_variables(
&arg.value,
&variables,
svi::Interpolator::DoubleBrackets,
false,
)
.context("failed to interpolate global variables")?;
// second pass - core secrets - need replacers.
global_replacers.extend(more_replacers);
// second pass - core secrets
let (res, more_replacers) = svi::interpolate_variables(
&res,
&core_config.secrets,
@@ -202,16 +204,38 @@ impl Resolve<RunBuild, User> for State {
false,
)
.context("failed to interpolate core secrets")?;
replacers.extend(more_replacers);
secret_replacers.extend(more_replacers);
arg.value = res;
}
// Show which variables were interpolated
if !global_replacers.is_empty() {
update.push_simple_log(
"interpolate global variables",
global_replacers
.into_iter()
.map(|(value, variable)| format!("<span class=\"text-muted-foreground\">{variable} =></span> {value}"))
.collect::<Vec<_>>()
.join("\n"),
);
}
if !secret_replacers.is_empty() {
update.push_simple_log(
"interpolate core secrets",
secret_replacers
.iter()
.map(|(_, variable)| format!("<span class=\"text-muted-foreground\">replaced:</span> {variable}"))
.collect::<Vec<_>>()
.join("\n"),
);
}
let res = tokio::select! {
res = periphery
.request(api::build::Build {
build: build.clone(),
docker_token,
replacers: replacers.into_iter().collect(),
replacers: secret_replacers.into_iter().collect(),
}) => res.context("failed at call to periphery to build"),
_ = cancel.cancelled() => {
info!("build cancelled during build, cleaning up builder");
+32 -6
View File
@@ -103,17 +103,19 @@ impl Resolve<Deploy, User> for State {
let core_config = core_config();
// Interpolate variables into environment
let mut replacers = HashSet::new();
let mut global_replacers = HashSet::new();
let mut secret_replacers = HashSet::new();
for env in &mut deployment.config.environment {
// first pass - global variables - don't need replacers.
let (res, _) = svi::interpolate_variables(
// first pass - global variables
let (res, more_replacers) = svi::interpolate_variables(
&env.value,
&variables,
svi::Interpolator::DoubleBrackets,
false,
)
.context("failed to interpolate global variables")?;
// second pass - core secrets - need replacers.
global_replacers.extend(more_replacers);
// second pass - core secrets
let (res, more_replacers) = svi::interpolate_variables(
&res,
&core_config.secrets,
@@ -121,7 +123,9 @@ impl Resolve<Deploy, User> for State {
false,
)
.context("failed to interpolate core secrets")?;
replacers.extend(more_replacers);
secret_replacers.extend(more_replacers);
// set env value with the result
env.value = res;
}
@@ -130,6 +134,28 @@ impl Resolve<Deploy, User> for State {
update.in_progress();
update.version = version;
// Show which variables were interpolated
if !global_replacers.is_empty() {
update.push_simple_log(
"interpolate global variables",
global_replacers
.into_iter()
.map(|(value, variable)| format!("<span class=\"text-muted-foreground\">{variable} =></span> {value}"))
.collect::<Vec<_>>()
.join("\n"),
);
}
if !secret_replacers.is_empty() {
update.push_simple_log(
"interpolate core secrets",
secret_replacers
.iter()
.map(|(_, variable)| format!("<span class=\"text-muted-foreground\">replaced:</span> {variable}"))
.collect::<Vec<_>>()
.join("\n"),
);
}
update.id = add_update(update.clone()).await?;
let docker_token = core_config
@@ -143,7 +169,7 @@ impl Resolve<Deploy, User> for State {
stop_signal,
stop_time,
docker_token,
replacers: replacers.into_iter().collect(),
replacers: secret_replacers.into_iter().collect(),
})
.await
{