Skip to main content

mz_secrets_loader/
lib.rs

1// Copyright Materialize, Inc. and contributors. All rights reserved.
2//
3// Use of this software is governed by the Business Source License
4// included in the LICENSE file.
5//
6// As of the Change Date specified in that file, in accordance with
7// the Business Source License, use of this software will be governed
8// by the Apache License, Version 2.0.
9
10use std::sync::Arc;
11
12use mz_aws_secrets_controller::AwsSecretsClient;
13use mz_orchestrator_kubernetes::secrets::KubernetesSecretsReader;
14use mz_orchestrator_process::secrets::ProcessSecretsReader;
15use mz_secrets::SecretsReader;
16use mz_secrets_cli::{SecretsControllerKind, SecretsReaderCliArgs};
17
18/// Loads the secrets reader specified by the command-line arguments.
19pub async fn load(args: SecretsReaderCliArgs) -> Result<Arc<dyn SecretsReader>, anyhow::Error> {
20    match args.secrets_reader {
21        SecretsControllerKind::LocalFile => {
22            let dir = args.secrets_reader_local_file_dir.expect("clap enforced");
23            Ok(Arc::new(ProcessSecretsReader::new(dir)))
24        }
25        SecretsControllerKind::Kubernetes => {
26            let context = args
27                .secrets_reader_kubernetes_context
28                .expect("clap enforced");
29            Ok(Arc::new(
30                KubernetesSecretsReader::new(context, args.secrets_reader_name_prefix).await?,
31            ))
32        }
33        SecretsControllerKind::AwsSecretsManager => {
34            let prefix = args.secrets_reader_aws_prefix.expect("clap enforced");
35            Ok(Arc::new(AwsSecretsClient::new(&prefix).await))
36        }
37    }
38}