mirror of
https://codeberg.org/spire/dispenser.git
synced 2026-06-03 18:14:06 +02:00
readme
This commit is contained in:
parent
da0f12fb91
commit
b1a1131ac6
2 changed files with 36 additions and 12 deletions
19
README.md
Normal file
19
README.md
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
# Dispenser
|
||||||
|
|
||||||
|
Automatically spawn and destroy a tf2 server on a schedule
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
- Copy `config.sample.toml` to `config.toml` and edit accordingly
|
||||||
|
- Start `dispenser config.toml` as a system service
|
||||||
|
|
||||||
|
When the configured start schedule is reached it will create a new cloud server, update the dyndns (optional)
|
||||||
|
and install a tf2 server.
|
||||||
|
This server is then destroyed when the stop schedule is reached.
|
||||||
|
|
||||||
|
As a failsafe against unexpected costs or destroying the wrong server, this program will not spawn any server
|
||||||
|
if it already detects a running one and it will only destroy a server that was created by the program.
|
||||||
|
|
||||||
|
This does mean that if the program is (re-)started while a server is already active, the program will not
|
||||||
|
start and destroy any server because it can't be sure it should control the running server.
|
||||||
|
You'll need to manually destroy the existing server in that case.
|
||||||
19
src/main.rs
19
src/main.rs
|
|
@ -135,17 +135,19 @@ async fn main() -> Result<(), Error> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn stop_job(_cloud: Arc<dyn Cloud>, config: &Config, server_id: Arc<Mutex<Option<String>>>) -> Job {
|
fn stop_job(cloud: Arc<dyn Cloud>, config: &Config, server_id: Arc<Mutex<Option<String>>>) -> Job {
|
||||||
Job::new(&config.schedule.stop, move |_uuid, _l| {
|
Job::new(&config.schedule.stop, move |_uuid, _l| {
|
||||||
let server_id = server_id.clone();
|
let server_id = server_id.clone();
|
||||||
|
let cloud = cloud.clone();
|
||||||
spawn(async move {
|
spawn(async move {
|
||||||
println!("Stopping server");
|
|
||||||
if let Some(id) = server_id.lock().unwrap().take() {
|
if let Some(id) = server_id.lock().unwrap().take() {
|
||||||
println!("Would have killed {}", id);
|
println!("Stopping server {}", id);
|
||||||
// match cloud.kill(&id).await {
|
match cloud.kill(&id).await {
|
||||||
// Ok(_) => {}
|
Ok(_) => {}
|
||||||
// Err(e) => eprintln!("{:#}", e),
|
Err(e) => eprintln!("{:#}", e),
|
||||||
// };
|
};
|
||||||
|
} else {
|
||||||
|
println!("No server to stop")
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
@ -161,11 +163,14 @@ fn start_job(cloud: Arc<dyn Cloud>, config: Config, server_id: Arc<Mutex<Option<
|
||||||
let server_id = server_id.clone();
|
let server_id = server_id.clone();
|
||||||
spawn(async move {
|
spawn(async move {
|
||||||
let cloud = cloud.as_ref();
|
let cloud = cloud.as_ref();
|
||||||
|
let already_started = { server_id.lock().unwrap().is_some() };
|
||||||
|
if !already_started {
|
||||||
println!("Starting server");
|
println!("Starting server");
|
||||||
match start(cloud, &config).await {
|
match start(cloud, &config).await {
|
||||||
Ok(id) => *server_id.lock().unwrap() = Some(id),
|
Ok(id) => *server_id.lock().unwrap() = Some(id),
|
||||||
Err(e) => eprintln!("{:#}", e),
|
Err(e) => eprintln!("{:#}", e),
|
||||||
};
|
};
|
||||||
|
}
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.unwrap()
|
.unwrap()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue