This commit is contained in:
Maurice
2025-08-16 20:30:01 +02:00
parent 30c813bcf2
commit 6e236f64df
3 changed files with 21 additions and 2 deletions

View File

@@ -58,6 +58,7 @@ protocol = "tcp" # Protocol, optional
[[volumes]] [[volumes]]
source = "<VOLUME NAME>" # Volume name or path on host source = "<VOLUME NAME>" # Volume name or path on host
target = "<PATH>" # Volume location/target inside container target = "<PATH>" # Volume location/target inside container
create = true # Optional, set to true if volume is NOT a path but named volume and you want to create it
# Or you can make more advanced volumes with mounts # Or you can make more advanced volumes with mounts
[[mounts]] [[mounts]]

View File

@@ -39,10 +39,13 @@ pub fn generate_openrc(config: &ServiceConfig) -> String {
// start_pre() // start_pre()
script.push_str("start_pre() {\n"); script.push_str("start_pre() {\n");
let mut start_pre_commands = Vec::new(); let mut start_pre_commands = Vec::new();
start_pre_commands.push(format!("podman rm {} --ignore;", config.service.name));
for network in networks.iter() { for network in networks.iter() {
start_pre_commands.push(format!("podman network create {} --ignore;", network)); start_pre_commands.push(format!("podman network create {} --ignore;", network));
} }
start_pre_commands.push(format!("podman rm {} --ignore;", config.service.name)); for volume in config.volumes.iter().filter(|v| v.create.is_some_and(|c|c)) {
start_pre_commands.push(format!("podman volume create {} --ignore;", volume.source));
}
script.push_str(&start_pre_commands.iter().map(|c|wrap(c)).collect::<Vec<String>>().join("\n")); script.push_str(&start_pre_commands.iter().map(|c|wrap(c)).collect::<Vec<String>>().join("\n"));
script.push_str("\n}\n\n"); script.push_str("\n}\n\n");
// } // }
@@ -167,6 +170,20 @@ pub fn generate_openrc(config: &ServiceConfig) -> String {
"podman stop {} --ignore", "podman stop {} --ignore",
config.service.name config.service.name
))); )));
script.push_str("\n}\n\n");
// }
// cleanup()
script.push_str("cleanup() {\n");
let mut cleanup_commands = Vec::new();
cleanup_commands.push(format!("podman rm {} --ignore --force;", config.service.name));
for network in networks.iter() {
cleanup_commands.push(format!("podman network rm {} --force;", network));
}
for volume in config.volumes.iter().filter(|v| v.create.is_some_and(|c|c)) {
cleanup_commands.push(format!("podman volume rm {} --force;", volume.source));
}
script.push_str(&cleanup_commands.iter().map(|c|wrap(c)).collect::<Vec<String>>().join("\n"));
script.push_str("\n}\n"); script.push_str("\n}\n");
// } // }

View File

@@ -70,7 +70,8 @@ pub struct PortMapping {
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
pub struct VolumeMapping { pub struct VolumeMapping {
pub source: String, pub source: String,
pub target: String pub target: String,
pub create: Option<bool>
} }
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]