forked from github-starred/komodo
remove attempt at parsing json out of config
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user