in core/src/services/etcd/backend.rs [142:189]
fn build(self) -> Result<impl Access> {
let endpoints = self
.config
.endpoints
.clone()
.unwrap_or_else(|| DEFAULT_ETCD_ENDPOINTS.to_string());
let endpoints: Vec<String> = endpoints.split(',').map(|s| s.to_string()).collect();
let mut options = ConnectOptions::new();
if self.config.ca_path.is_some()
&& self.config.cert_path.is_some()
&& self.config.key_path.is_some()
{
let ca = self.load_pem(self.config.ca_path.clone().unwrap().as_str())?;
let key = self.load_pem(self.config.key_path.clone().unwrap().as_str())?;
let cert = self.load_pem(self.config.cert_path.clone().unwrap().as_str())?;
let tls_options = TlsOptions::default()
.ca_certificate(Certificate::from_pem(ca))
.identity(Identity::from_pem(cert, key));
options = options.with_tls(tls_options);
}
if let Some(username) = self.config.username.clone() {
options = options.with_user(
username,
self.config.password.clone().unwrap_or("".to_string()),
);
}
let root = normalize_root(
self.config
.root
.clone()
.unwrap_or_else(|| "/".to_string())
.as_str(),
);
let client = OnceCell::new();
Ok(EtcdBackend::new(Adapter {
endpoints,
client,
options,
})
.with_normalized_root(root))
}