Pierre Hubert
e2598d7509
Some checks reported errors
continuous-integration/drone/push Build was killed
Add base operator logic Reviewed-on: #1
65 lines
2.0 KiB
Rust
65 lines
2.0 KiB
Rust
use k8s_openapi::api::core::v1::Secret;
|
|
use k8s_openapi::apimachinery::pkg::apis::meta::v1::ObjectMeta;
|
|
use kube::api::PostParams;
|
|
use kube::Api;
|
|
use std::collections::BTreeMap;
|
|
|
|
#[derive(thiserror::Error, Debug)]
|
|
enum SecretError {
|
|
#[error("Secret has no data!")]
|
|
MissingData,
|
|
#[error("The key '{0}' is not present in the secret!")]
|
|
MissingKey(String),
|
|
}
|
|
|
|
/// Attempt to read a value contained in a secret. Returns an error in case
|
|
/// of failure
|
|
pub fn read_secret_str(s: &Secret, key: &str) -> anyhow::Result<String> {
|
|
let data = s.data.as_ref().ok_or(SecretError::MissingData)?;
|
|
|
|
let value = data
|
|
.get(key)
|
|
.ok_or(SecretError::MissingKey(key.to_string()))?;
|
|
|
|
Ok(String::from_utf8(value.0.clone())?)
|
|
}
|
|
|
|
/// Create a secret consisting only of string key / value pairs
|
|
pub async fn create_secret(
|
|
secrets: &Api<Secret>,
|
|
name: &str,
|
|
values: BTreeMap<String, String>,
|
|
) -> anyhow::Result<Secret> {
|
|
Ok(secrets
|
|
.create(
|
|
&PostParams::default(),
|
|
&Secret {
|
|
data: None,
|
|
immutable: None,
|
|
metadata: ObjectMeta {
|
|
annotations: None,
|
|
creation_timestamp: None,
|
|
deletion_grace_period_seconds: None,
|
|
deletion_timestamp: None,
|
|
finalizers: None,
|
|
generate_name: None,
|
|
generation: None,
|
|
labels: Some(BTreeMap::from([(
|
|
"created-by".to_string(),
|
|
"miniok8sbuckets".to_string(),
|
|
)])),
|
|
managed_fields: None,
|
|
name: Some(name.to_string()),
|
|
namespace: None,
|
|
owner_references: None,
|
|
resource_version: None,
|
|
self_link: None,
|
|
uid: None,
|
|
},
|
|
string_data: Some(values),
|
|
type_: None,
|
|
},
|
|
)
|
|
.await?)
|
|
}
|