added SSH key injection for rescue mode
This commit is contained in:
@@ -9,7 +9,7 @@ pub enum Request {
|
||||
GetServer(HetznerClient, i64),
|
||||
RebootServer(HetznerClient, i64),
|
||||
ResetServer(HetznerClient, i64),
|
||||
EnableRescueMode(HetznerClient, i64),
|
||||
EnableRescueMode(HetznerClient, i64, Vec<i64>),
|
||||
DisableRescueMode(HetznerClient, i64),
|
||||
}
|
||||
|
||||
@@ -55,8 +55,8 @@ pub fn run_worker(
|
||||
let result = rt.block_on(client.reset_server(server_id)).map_err(|e| e.to_string());
|
||||
Response::ResetServer(result)
|
||||
}
|
||||
Request::EnableRescueMode(client, server_id) => {
|
||||
let result = rt.block_on(client.enable_rescue_mode_for_server(server_id)).map_err(|e| e.to_string());
|
||||
Request::EnableRescueMode(client, server_id, ssh_keys) => {
|
||||
let result = rt.block_on(client.enable_rescue_mode_for_server(server_id, ssh_keys)).map_err(|e| e.to_string());
|
||||
Response::EnableRescueMode(result)
|
||||
}
|
||||
Request::DisableRescueMode(client, server_id) => {
|
||||
|
@@ -94,11 +94,11 @@ impl HetznerClient {
|
||||
servers_api::reset_server(&self.configuration, params).await?;
|
||||
Ok(())
|
||||
}
|
||||
pub async fn enable_rescue_mode_for_server(&self, server_id: i64) -> Result<String, Box<dyn std::error::Error>> {
|
||||
pub async fn enable_rescue_mode_for_server(&self, server_id: i64, ssh_keys: Vec<i64>) -> Result<String, Box<dyn std::error::Error>> {
|
||||
let params = EnableRescueModeForServerParams {
|
||||
id: server_id,
|
||||
enable_rescue_mode_for_server_request: Some(EnableRescueModeForServerRequest {
|
||||
ssh_keys: None,
|
||||
ssh_keys: if ssh_keys.is_empty() { None } else { Some(ssh_keys) },
|
||||
r#type: Some(hcloud::models::enable_rescue_mode_for_server_request::Type::Linux64),
|
||||
}),
|
||||
};
|
||||
|
@@ -2,6 +2,7 @@ use crate::async_handler::Response;
|
||||
use crate::async_handler::Request;
|
||||
use crate::hetzner_api::{HetznerClient, WrappedServer};
|
||||
use rhai::{Engine, EvalAltResult};
|
||||
use std::env;
|
||||
use std::sync::{mpsc::{Receiver, Sender}, Arc, Mutex};
|
||||
use prettytable::{Table, Row, Cell};
|
||||
|
||||
@@ -110,7 +111,30 @@ pub fn register_hetzner_api(
|
||||
.register_fn("enable_rescue_mode", {
|
||||
let bridge = api_bridge.clone();
|
||||
move |client: &mut HetznerClient, server_id: i64| {
|
||||
bridge.call(Request::EnableRescueMode(client.clone(), server_id), |response| {
|
||||
bridge.call(Request::EnableRescueMode(client.clone(), server_id, Vec::new()), |response| {
|
||||
match response {
|
||||
Response::EnableRescueMode(result) => result.map_err(|e| e.into()),
|
||||
_ => Err("Unexpected response".into()),
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
.register_fn("enable_rescue_mode", {
|
||||
let bridge = api_bridge.clone();
|
||||
move |client: &mut HetznerClient, server_id: i64, ssh_key: i64| {
|
||||
bridge.call(Request::EnableRescueMode(client.clone(), server_id, vec![ssh_key]), |response| {
|
||||
match response {
|
||||
Response::EnableRescueMode(result) => result.map_err(|e| e.into()),
|
||||
_ => Err("Unexpected response".into()),
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
.register_fn("enable_rescue_mode", {
|
||||
let bridge = api_bridge.clone();
|
||||
move |client: &mut HetznerClient, server_id: i64, ssh_keys: rhai::Array| {
|
||||
let keys: Vec<i64> = ssh_keys.into_iter().map(|k| k.as_int().unwrap_or(0)).collect();
|
||||
bridge.call(Request::EnableRescueMode(client.clone(), server_id, keys), |response| {
|
||||
match response {
|
||||
Response::EnableRescueMode(result) => result.map_err(|e| e.into()),
|
||||
_ => Err("Unexpected response".into()),
|
||||
@@ -169,4 +193,8 @@ pub fn register_hetzner_api(
|
||||
|
||||
Ok(table.to_string())
|
||||
});
|
||||
|
||||
engine.register_fn("get_env", |key: &str| -> String {
|
||||
env::var(key).unwrap_or("".to_string())
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user