pub fn parameter_store_parameter_name(vault_prefix: &str, secret_name: &str) -> String {
format!("{vault_prefix}-{secret_name}")
}
pub fn secret_manager_secret_id(vault_prefix: &str, secret_name: &str) -> String {
format!("{vault_prefix}-{secret_name}")
}
pub fn key_vault_secret_name(secret_name: &str) -> String {
secret_name.replace('_', "-")
}
pub fn azure_deployer_vault_name(resource_prefix: &str, suffix: &str) -> String {
let prefix: String = format!("{resource_prefix}-deployer-secrets")
.chars()
.filter(|character| character.is_ascii_alphanumeric() || *character == '-')
.take(17)
.collect::<String>()
.trim_matches('-')
.to_ascii_lowercase();
format!("{prefix}-{suffix}")
}
pub fn kubernetes_secret_name(vault_prefix: &str, secret_name: &str) -> String {
let clean = format!("{vault_prefix}-{secret_name}")
.chars()
.filter(|c| c.is_alphanumeric() || *c == '-' || *c == '_')
.collect::<String>()
.to_lowercase()
.replace('_', "-");
clean.chars().take(253).collect()
}
pub const KUBERNETES_SECRET_VALUE_KEY: &str = "value";
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn azure_deployer_vault_names_fit_and_vary_between_installations() {
for prefix in ["a", "a-very-long-stack-resource-prefix"] {
let first = azure_deployer_vault_name(prefix, "a1b2c3");
assert!((3..=24).contains(&first.len()));
assert!(first
.chars()
.all(|c| c.is_ascii_lowercase() || c.is_ascii_digit() || c == '-'));
assert_ne!(first, azure_deployer_vault_name(prefix, "d4e5f6"));
}
}
#[test]
fn kubernetes_names_are_dns_safe() {
assert_eq!(
kubernetes_secret_name("Acme-Monitoring-secrets", "API_KEY"),
"acme-monitoring-secrets-api-key"
);
assert_eq!(kubernetes_secret_name("p", &"x".repeat(400)).len(), 253);
}
#[test]
fn key_vault_names_use_hyphens() {
assert_eq!(key_vault_secret_name("API_KEY"), "API-KEY");
}
}