use crate::infra::cluster::config::{ClusterRole, ClusterSettings};
#[derive(Debug, Clone, Default)]
pub struct ClusterBootstrapService {
settings: ClusterSettings,
}
impl ClusterBootstrapService {
pub fn new(settings: ClusterSettings) -> Self {
Self { settings }
}
pub fn settings(&self) -> &ClusterSettings {
&self.settings
}
pub fn role(&self) -> ClusterRole {
self.settings.role
}
pub fn is_standalone(&self) -> bool {
self.role() == ClusterRole::Standalone
}
pub fn is_master(&self) -> bool {
self.role() == ClusterRole::Master
}
pub fn is_worker(&self) -> bool {
self.role() == ClusterRole::Worker
}
pub fn node_id(&self) -> String {
self.settings
.node_id
.clone()
.filter(|value| !value.trim().is_empty())
.unwrap_or_else(|| match self.role() {
ClusterRole::Standalone => "standalone".to_string(),
ClusterRole::Master => "controller".to_string(),
ClusterRole::Worker => "office".to_string(),
})
}
pub fn node_label(&self) -> String {
self.settings
.node_label
.clone()
.filter(|value| !value.trim().is_empty())
.unwrap_or_else(|| self.node_id())
}
pub fn join_token(&self) -> Option<&str> {
self.settings
.join_token
.as_deref()
.filter(|value| !value.trim().is_empty())
}
pub fn master_url(&self) -> Option<&str> {
self.settings
.master_url
.as_deref()
.filter(|value| !value.trim().is_empty())
}
pub fn advertise_url(&self) -> Option<&str> {
self.settings
.advertise_url
.as_deref()
.filter(|value| !value.trim().is_empty())
}
}