remove attempt at parsing json out of config

This commit is contained in:
mbecker20
2024-08-10 14:27:58 -07:00
parent c7717fbfdf
commit e1b9367ee3
7 changed files with 12 additions and 167 deletions

View File

@@ -16,7 +16,7 @@ use crate::{
interpolate_variables_secrets_into_environment, periphery_client,
stack::{
execute::execute_compose, get_stack_and_server,
json::get_config_jsons, services::extract_services_into_res,
services::extract_services_into_res,
},
update::update_update,
},
@@ -91,11 +91,7 @@ impl Resolve<DeployStack, (User, Update)> for State {
update.logs.extend(logs);
let update_info = async {
let (latest_services, json, json_errors) = if !file_contents
.is_empty()
{
let (jsons, json_errors) =
get_config_jsons(&file_contents).await;
let latest_services = if !file_contents.is_empty() {
let mut services = Vec::new();
for contents in &file_contents {
if let Err(e) = extract_services_into_res(
@@ -109,10 +105,10 @@ impl Resolve<DeployStack, (User, Update)> for State {
);
}
}
(services, jsons, json_errors)
services
} else {
// maybe better to do something else here for services.
(stack.info.latest_services.clone(), Vec::new(), Vec::new())
stack.info.latest_services.clone()
};
let project_name = stack.project_name(true);
@@ -120,16 +116,12 @@ impl Resolve<DeployStack, (User, Update)> for State {
let (
deployed_services,
deployed_contents,
deployed_json,
deployed_json_errors,
deployed_hash,
deployed_message,
) = if deployed {
(
Some(latest_services.clone()),
Some(file_contents.clone()),
Some(json.clone()),
Some(json_errors.clone()),
commit_hash.clone(),
commit_message.clone(),
)
@@ -137,8 +129,6 @@ impl Resolve<DeployStack, (User, Update)> for State {
(
stack.info.deployed_services,
stack.info.deployed_contents,
stack.info.deployed_json,
stack.info.deployed_json_errors,
stack.info.deployed_hash,
stack.info.deployed_message,
)
@@ -151,11 +141,7 @@ impl Resolve<DeployStack, (User, Update)> for State {
deployed_contents,
deployed_hash,
deployed_message,
deployed_json,
deployed_json_errors,
latest_services,
latest_json: json,
latest_json_errors: json_errors,
remote_contents: stack
.config
.file_contents

View File

@@ -6,7 +6,7 @@ use monitor_client::{
config::core::CoreConfig,
monitor_timestamp,
permission::PermissionLevel,
stack::{ComposeContents, PartialStackConfig, Stack, StackInfo},
stack::{PartialStackConfig, Stack, StackInfo},
update::Update,
user::User,
NoData, Operation,
@@ -25,7 +25,7 @@ use crate::{
config::core_config,
helpers::{
stack::{
json::get_config_jsons, remote::get_remote_compose_contents,
remote::get_remote_compose_contents,
services::extract_services_into_res,
},
update::{add_update, make_update},
@@ -176,7 +176,11 @@ impl Resolve<RenameStack, User> for State {
}
impl Resolve<RefreshStackCache, User> for State {
#[instrument(name = "RefreshStackCache", level = "debug", skip(self, user))]
#[instrument(
name = "RefreshStackCache",
level = "debug",
skip(self, user)
)]
async fn resolve(
&self,
RefreshStackCache { stack }: RefreshStackCache,
@@ -202,8 +206,6 @@ impl Resolve<RefreshStackCache, User> for State {
let (
latest_services,
latest_json,
latest_json_errors,
remote_contents,
remote_errors,
latest_hash,
@@ -237,13 +239,8 @@ impl Resolve<RefreshStackCache, User> for State {
}
}
let (jsons, json_errors) =
get_config_jsons(&remote_contents).await;
(
services,
jsons,
json_errors,
Some(remote_contents),
Some(remote_errors),
latest_hash,
@@ -263,19 +260,7 @@ impl Resolve<RefreshStackCache, User> for State {
);
services.extend(stack.info.latest_services);
};
let (json, json_errors) =
get_config_jsons(&[ComposeContents {
path: stack
.config
.file_paths
.first()
.map(String::as_str)
.unwrap_or("compose.yaml")
.to_string(),
contents: stack.config.file_contents,
}])
.await;
(services, json, json_errors, None, None, None, None)
(services, None, None, None, None)
};
let info = StackInfo {
@@ -285,11 +270,7 @@ impl Resolve<RefreshStackCache, User> for State {
deployed_contents: stack.info.deployed_contents,
deployed_hash: stack.info.deployed_hash,
deployed_message: stack.info.deployed_message,
deployed_json: stack.info.deployed_json,
deployed_json_errors: stack.info.deployed_json_errors,
latest_services,
latest_json,
latest_json_errors,
remote_contents,
remote_errors,
latest_hash,

View File

@@ -1,80 +0,0 @@
use anyhow::Context;
use formatting::format_serror;
use monitor_client::entities::stack::ComposeContents;
use run_command::async_run_command;
use tokio::fs;
use crate::{config::core_config, helpers::random_string};
// Returns (Jsons, Errors)
pub async fn get_config_jsons(
contents: &[ComposeContents],
) -> (Vec<ComposeContents>, Vec<ComposeContents>) {
let mut oks = Vec::new();
let mut errs = Vec::new();
for contents in contents {
match get_config_json(&contents.contents).await {
(Some(json), _) => oks.push(ComposeContents {
path: contents.path.to_string(),
contents: json,
}),
(_, Some(err)) => errs.push(ComposeContents {
path: contents.path.to_string(),
contents: err,
}),
_ => unreachable!(),
}
}
(oks, errs)
}
pub async fn get_config_json(
compose_contents: &str,
) -> (Option<String>, Option<String>) {
match get_config_json_inner(compose_contents).await {
Ok(res) => (Some(res), None),
Err(e) => (
None,
Some(format_serror(
&e.context("failed to get config json").into(),
)),
),
}
}
async fn get_config_json_inner(
compose_contents: &str,
) -> anyhow::Result<String> {
// create a new folder to prevent collisions
let dir = core_config().repo_directory.join(random_string(10));
fs::create_dir_all(&dir)
.await
.context("failed to create compose file directory")?;
let file = dir.join("compose.yaml");
fs::write(&file, compose_contents).await.with_context(|| {
format!("failed to write compose contents to file file: {file:?}")
})?;
let res = async_run_command(&format!(
"cd {} && docker-compose config --format json",
dir.display()
))
.await;
// Don't fail the function call here, just log on this maintenance related information.
fs::remove_dir_all(&dir)
.await
.with_context(|| {
format!("failed to clean up compose directory: {dir:?}")
})
.inspect_err(|e| error!("{e:#}"))
.ok();
if res.success() {
Ok(res.stdout)
} else {
Err(anyhow::Error::msg(res.stderr))
}
}

View File

@@ -22,7 +22,6 @@ use crate::{
use super::query::get_server_with_status;
pub mod execute;
pub mod json;
pub mod remote;
pub mod services;