feat: add agent module with Nginx service commands and routes
- Introduced a new agent module with commands for managing Nginx configurations. - Implemented `NginxService` for handling reload, validation, and configuration writing. - Added routes for status, validation, and configuration writing using Axum. - Created necessary command files: `reload.rs`, `run.rs`, `validate.rs`, `write_config.rs`. - Updated `Cargo.toml` and `Cargo.lock` to include new dependencies. - Added `.gitignore` for the agent module. - Updated `justfile` to include OpenAPI generation for the agent.
This commit is contained in:
47
apps/agent/src/commands/validate.rs
Normal file
47
apps/agent/src/commands/validate.rs
Normal file
@@ -0,0 +1,47 @@
|
||||
use crate::commands::{run::run_cmd, write_config::INTERNAL_CONFIG_FOLDER_NAME};
|
||||
use std::path::PathBuf;
|
||||
|
||||
pub struct ValidateCommand {
|
||||
nginx_config_dir: PathBuf,
|
||||
}
|
||||
|
||||
impl ValidateCommand {
|
||||
pub fn new(nginx_config_dir: PathBuf) -> Self {
|
||||
Self { nginx_config_dir }
|
||||
}
|
||||
|
||||
pub fn nginx_config_dir(&self) -> PathBuf {
|
||||
self.nginx_config_dir.clone()
|
||||
}
|
||||
|
||||
pub async fn validate_all(
|
||||
&self,
|
||||
) -> Result<(i32, String), Box<dyn std::error::Error + Send + Sync>> {
|
||||
run_cmd("nginx", &["-t"], 10).await
|
||||
}
|
||||
|
||||
pub async fn validate(
|
||||
&self,
|
||||
config_name: &str,
|
||||
timestamp: u64,
|
||||
) -> Result<(i32, String), Box<dyn std::error::Error + Send + Sync>> {
|
||||
let filename = crate::commands::run::to_file_name(config_name, timestamp)?;
|
||||
// fragments are written into the YANPM subdirectory
|
||||
let full_path = self
|
||||
.nginx_config_dir
|
||||
.join(INTERNAL_CONFIG_FOLDER_NAME)
|
||||
.join(&filename);
|
||||
|
||||
// ensure the fragment file exists
|
||||
if tokio::fs::metadata(&full_path).await.is_err() {
|
||||
return Err(format!("Config file not found: {}", full_path.display()).into());
|
||||
}
|
||||
|
||||
run_cmd(
|
||||
"nginx",
|
||||
&["-t", "-c", full_path.to_str().ok_or("invalid config path")?],
|
||||
10,
|
||||
)
|
||||
.await
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user