use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
pub use crate::cluster::{InternalScaleRequest, ScaleAssignment};
#[derive(Debug, Serialize, ToSchema)]
pub struct InternalScaleResponse {
pub success: bool,
pub service: String,
pub replicas: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reroute_to_os: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct InternalAddPeerRequest {
pub wg_public_key: String,
pub overlay_ip: String,
pub endpoint: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub service: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub service_subnet: Option<String>,
}
#[derive(Debug, Serialize, ToSchema)]
pub struct InternalAddPeerResponse {
pub success: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum SecretsRaftOp {
RegisterNode {
identity: crate::storage::NodeIdentity,
},
RevokeNode {
node_id: String,
},
RotateDek {
new_wraps: crate::storage::WrappedDek,
},
PutSecret {
secret: crate::storage::ReplicatedSecret,
},
DeleteSecret {
storage_key: String,
},
RevokeToken {
token_hash: String,
#[schema(value_type = String, format = "date-time")]
expires_at: chrono::DateTime<chrono::Utc>,
},
ImportTrustBundle {
bundle: crate::api::cluster::TrustBundle,
},
RemoveTrustBundle {
cluster_domain: String,
},
SetJwtAlgorithm {
algorithm: crate::api::cluster::JwtAlgorithm,
},
WipeJoinSecret,
}