#secret #env #kubernetes #docker #follow #env-var

config-secret

遵循 Docker/Kubernetes 密钥配置约定的配置包源

1 个不稳定版本

0.1.0 2023年6月21日

配置 中排名 558

MIT 许可证

13KB
139

config-secret

Rust CI codecov Crates.io Docs.rs

config-secret 是一个额外的配置包源,遵循 Docker/Kubernetes conventions。

它允许通过指定为环境变量的文件注入配置的一部分。 查看示例

安装

[dependencies]
config = "0.13"
config-secret = "0.1.0"

用法

use config::Config;
use config_secret::EnvironmentSecretFile;

let source = EnvironmentSecretFile::with_prefix("APP").separator("_");
let config = Config::builder().add_source(source).build().unwrap();
let settings = config.try_deserialize::<Settings>().unwrap();

// settings...

示例

定义

让我们介绍我们的类型和我们的 config 初始化器

use config::{Config, ConfigError};
use config_secret::EnvironmentSecretFile;
use serde::Deserialize;

#[derive(Deserialize, Clone, Debug)]
pub struct Settings {
    pub server: ServerSettings,
    pub redis: RedisSettings,
}

#[derive(Deserialize, Clone, Debug)]
pub struct ServerSettings {
    pub host: String,
    pub port: u16,
}

#[derive(Deserialize, Clone, Debug)]
pub struct RedisSettings {
    pub nodes: Vec<String>,
    pub username: Option<String>,
    pub password: Option<String>,
}

pub fn get_settings() -> Result<Settings, ConfigError> {
    let config = Config::builder()
        .add_source(
            config::Environment::with_prefix("APP")
                .separator("_")
                .list_separator(",")
                .with_list_parse_key("redis.nodes")
                .try_parsing(true),
        )
        .add_source(
            EnvironmentSecretFile::with_prefix("APP")
                .separator("_")
        )
        .build()?;

    config.try_deserialize::<Settings>()
}

完整配置

我们可以添加一个环境变量来设置一个密钥,该密钥配置整个配置

APP_FILE=/run/secrets/my_secret.json
{
    "server": {
        "host": "0.0.0.0",
        "port": 5000
    },
    "redis": {
        "nodes": [
            "redis://10.0.0.1:6379",
            "redis://10.0.0.2:6379",
            "redis://10.0.0.3:6379"
        ]
    }
}
let settings = get_settings().unwrap();
assert!(settings.server.host == "0.0.0.0");

部分配置

我们可以添加环境变量,只设置配置的子部分

APP_SERVER_HOST=127.0.0.1
APP_SERVER_PORT=5000

APP_REDIS_FILE=/run/secrets/redis.yaml
nodes:
    - redis://10.0.0.1:6379
    - redis://10.0.0.2:6379
    - redis://10.0.0.3:6379
username: redis
password: superpassword
let settings = get_settings().unwrap();
assert!(settings.server.host == "127.0.0.1");
assert!(settings.redis.username == "redis");

许可证

MIT

依赖关系

~1.2–1.6MB
~31K SLoC