diff --git a/aws/sdk/examples/secretsmanager-get-secret-value/Cargo.toml b/aws/sdk/examples/secretsmanager-get-secret-value/Cargo.toml deleted file mode 100644 index 4306c6d7dc31dc3814bfbb49d1c049a82f8d6a5d..0000000000000000000000000000000000000000 --- a/aws/sdk/examples/secretsmanager-get-secret-value/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "secretsmanager-get-secret-value" -version = "0.1.0" -authors = ["AWS Rust SDK Team ", "Doug Schwartz "] -edition = "2018" -description = "Example usage of the SecretManager service" - -[dependencies] -secretsmanager = { package = "aws-sdk-secretsmanager", path = "../../build/aws-sdk/secretsmanager" } -tokio = { version = "1", features = ["full"]} -structopt = { version = "0.3", default-features = false } -tracing-subscriber = { version = "0.2.16", features = ["fmt"] } -aws-types = { path = "../../build/aws-sdk/aws-types" } diff --git a/aws/sdk/examples/secretsmanager-helloworld/Cargo.toml b/aws/sdk/examples/secretsmanager-helloworld/Cargo.toml deleted file mode 100644 index 47a03186a87ca98abe560721363e1f7ca0d6a737..0000000000000000000000000000000000000000 --- a/aws/sdk/examples/secretsmanager-helloworld/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "secretsmanager-helloworld" -version = "0.1.0" -authors = ["AWS Rust SDK Team ", "Nas Taibi "] -edition = "2018" -description = "Example usage of the SecretManager service" - -[dependencies] -secretsmanager = { package = "aws-sdk-secretsmanager", path = "../../build/aws-sdk/secretsmanager" } -aws-hyper = { path = "../../build/aws-sdk/aws-hyper" } -tokio = { version = "1", features = ["full"]} -# optional -tracing-subscriber = { version = "0.2.16", features = ["fmt"] } diff --git a/aws/sdk/examples/secretsmanager-helloworld/src/main.rs b/aws/sdk/examples/secretsmanager-helloworld/src/main.rs deleted file mode 100644 index 0b2a2d70fb376c695e645c099e51d08abc33e28d..0000000000000000000000000000000000000000 --- a/aws/sdk/examples/secretsmanager-helloworld/src/main.rs +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0. - */ -use aws_hyper::conn::Standard; -use secretsmanager::Client; -use secretsmanager::Region; -use secretsmanager::SdkError; -use tracing_subscriber::fmt::format::FmtSpan; -use tracing_subscriber::fmt::SubscriberBuilder; - -#[tokio::main] -async fn main() { - let secret_name = "some-secret-id"; - let secret_value = "testsecret"; - SubscriberBuilder::default() - .with_env_filter("info") - .with_span_events(FmtSpan::CLOSE) - .init(); - let config = secretsmanager::Config::builder() - // region can also be loaded from AWS_DEFAULT_REGION, just remove this line. - .region(Region::new("us-east-1")) - // creds loaded from environment variables, or they can be hard coded. - // Other credential providers not currently supported - .build(); - let conn = Standard::https(); - let client = Client::from_conf_conn(config, conn); - - // attempt to create a secret, - // need to find a better way to handle failure such as ResourceExistsException - let data = match client - .create_secret() - .name(secret_name) - .secret_string(secret_value) - .send() - .await - { - Ok(secret) => secret, - Err(SdkError::ServiceError { err, .. }) => match err.kind { - secretsmanager::error::CreateSecretErrorKind::ResourceExistsError(_) => { - panic!("This secret already exists!") - } - _ => panic!("Secretsmanager Error: {}", err), - }, - Err(other) => panic!("Failed to create secret: {}", other), - }; - println!( - "Created secret {:?} with ARN {:?}", - secret_name, - data.arn.unwrap() - ); - - // try and retrieve the secret value we just created - let retrieved_secret = client - .get_secret_value() - .secret_id(secret_name) - .send() - .await - .expect("unable to retrieve secret"); - - assert_eq!(retrieved_secret.secret_string.unwrap(), secret_value); - println!( - "successfully retrieved secret string that matches the original one we created earlier" - ); -} diff --git a/aws/sdk/examples/secretsmanager-list-secrets/Cargo.toml b/aws/sdk/examples/secretsmanager-list-secrets/Cargo.toml deleted file mode 100644 index 2b73ec6c405d980e556ad17537aaa7fcc0356ffc..0000000000000000000000000000000000000000 --- a/aws/sdk/examples/secretsmanager-list-secrets/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "secretsmanager-list-secrets" -version = "0.1.0" -authors = ["AWS Rust SDK Team ", "Doug Schwartz "] -edition = "2018" -description = "Example usage of the SecretManager service" - -[dependencies] -secretsmanager = { package = "aws-sdk-secretsmanager", path = "../../build/aws-sdk/secretsmanager" } -tokio = { version = "1", features = ["full"]} -structopt = { version = "0.3", default-features = false } -tracing-subscriber = { version = "0.2.16", features = ["fmt"] } -aws-types = { path = "../../build/aws-sdk/aws-types" } diff --git a/aws/sdk/examples/secretsmanager-create-secret/Cargo.toml b/aws/sdk/examples/secretsmanager/Cargo.toml similarity index 84% rename from aws/sdk/examples/secretsmanager-create-secret/Cargo.toml rename to aws/sdk/examples/secretsmanager/Cargo.toml index 177bcce3ffa4c9082d29d08b1845c46eb4395e1c..cb1b2b715f5bd2dc6ed0cd6bf38dd10abff397c4 100644 --- a/aws/sdk/examples/secretsmanager-create-secret/Cargo.toml +++ b/aws/sdk/examples/secretsmanager/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "secretsmanager-create-secret" +name = "secretsmanager-code-examples" version = "0.1.0" authors = ["AWS Rust SDK Team ", "Doug Schwartz "] edition = "2018" @@ -7,7 +7,11 @@ description = "Example usage of the SecretManager service" [dependencies] secretsmanager = { package = "aws-sdk-secretsmanager", path = "../../build/aws-sdk/secretsmanager" } +aws-hyper = { path = "../../build/aws-sdk/aws-hyper" } +aws-types = { path = "../../build/aws-sdk/aws-types" } + tokio = { version = "1", features = ["full"]} + structopt = { version = "0.3", default-features = false } tracing-subscriber = { version = "0.2.16", features = ["fmt"] } -aws-types = { path = "../../build/aws-sdk/aws-types" } + diff --git a/aws/sdk/examples/secretsmanager-create-secret/src/main.rs b/aws/sdk/examples/secretsmanager/src/bin/create-secret.rs similarity index 73% rename from aws/sdk/examples/secretsmanager-create-secret/src/main.rs rename to aws/sdk/examples/secretsmanager/src/bin/create-secret.rs index 7c2ffad3e2795509937e00312717be8c9d505ebf..75ba290eaa12ccda4c141ca0ca8576b314d4d3e2 100644 --- a/aws/sdk/examples/secretsmanager-create-secret/src/main.rs +++ b/aws/sdk/examples/secretsmanager/src/bin/create-secret.rs @@ -24,19 +24,29 @@ struct Opt { /// The value of the secret #[structopt(short, long)] - value: String, + secret_value: String, + /// Whether to display additonal runtime information #[structopt(short, long)] - info: bool, + verbose: bool, } +/// Creates a secret. +/// # Arguments +/// +/// * `-n NAME` - The name of the secret. +/// * `-s SECRET_VALUE` - The secret value. +/// * `[-d DEFAULT-REGION]` - The region in which the client is created. +/// If not supplied, uses the value of the **AWS_DEFAULT_REGION** environment variable. +/// If the environment variable is not set, defaults to **us-west-2**. +/// * `[-v]` - Whether to display additional information. #[tokio::main] async fn main() { let Opt { - info, name, region, - value, + secret_value, + verbose, } = Opt::from_args(); let region = EnvironmentProvider::new() @@ -44,14 +54,14 @@ async fn main() { .or_else(|| region.as_ref().map(|region| Region::new(region.clone()))) .unwrap_or_else(|| Region::new("us-west-2")); - if info { + if verbose { println!( "SecretsManager client version: {}\n", secretsmanager::PKG_VERSION ); println!("Region: {:?}", ®ion); println!("Secret name: {}", name); - println!("Secret value: {}", value); + println!("Secret value: {}", secret_value); SubscriberBuilder::default() .with_env_filter("info") @@ -66,7 +76,7 @@ async fn main() { match client .create_secret() .name(name) - .secret_string(value) + .secret_string(secret_value) .send() .await { diff --git a/aws/sdk/examples/secretsmanager-get-secret-value/src/main.rs b/aws/sdk/examples/secretsmanager/src/bin/get-secret-value.rs similarity index 80% rename from aws/sdk/examples/secretsmanager-get-secret-value/src/main.rs rename to aws/sdk/examples/secretsmanager/src/bin/get-secret-value.rs index e633d92f13a61a7cb1e8bbf5f8c41043130d9cab..ef3607bb5dd167257482e9fc0faba0696d73b045 100644 --- a/aws/sdk/examples/secretsmanager-get-secret-value/src/main.rs +++ b/aws/sdk/examples/secretsmanager/src/bin/get-secret-value.rs @@ -22,11 +22,21 @@ struct Opt { /// The name of the secret #[structopt(short, long)] name: String, + /// Whether to display additonal runtime information #[structopt(short, long)] verbose: bool, } +/// Retrieves the value of a secret. +/// # Arguments +/// +/// * `-n NAME` - The name of the secret. +/// * `-s SECRET_VALUE` - The secret value. +/// * `[-d DEFAULT-REGION]` - The region in which the client is created. +/// If not supplied, uses the value of the **AWS_DEFAULT_REGION** environment variable. +/// If the environment variable is not set, defaults to **us-west-2**. +/// * `[-v]` - Whether to display additional information. #[tokio::main] async fn main() { let Opt { diff --git a/aws/sdk/examples/secretsmanager/src/bin/helloworld.rs b/aws/sdk/examples/secretsmanager/src/bin/helloworld.rs new file mode 100644 index 0000000000000000000000000000000000000000..aeeb2ad632e4fc28e25e31283403b4ef41866b6a --- /dev/null +++ b/aws/sdk/examples/secretsmanager/src/bin/helloworld.rs @@ -0,0 +1,107 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ + +use secretsmanager::{Client, Config, Region, SdkError}; + +use aws_types::region::ProvideRegion; + +use structopt::StructOpt; +use tracing_subscriber::fmt::format::FmtSpan; +use tracing_subscriber::fmt::SubscriberBuilder; + +#[derive(Debug, StructOpt)] +struct Opt { + /// The region. Overrides environment variable AWS_DEFAULT_REGION. + #[structopt(short, long)] + default_region: Option, + + /// Specifies the secret's name + #[structopt(short, long)] + name: String, + + /// Specifies the secret's value + #[structopt(short, long)] + secret_value: String, + + /// Whether to display additional runtime information + #[structopt(short, long)] + verbose: bool, +} + +/// Creates a secret. +/// # Arguments +/// +/// * `-n NAME` - The name of the secret. +/// * `-s SECRET_VALUE` - The secret value. +/// * `[-d DEFAULT-REGION]` - The region in which the client is created. +/// If not supplied, uses the value of the **AWS_DEFAULT_REGION** environment variable. +/// If the environment variable is not set, defaults to **us-west-2**. +/// * `[-v]` - Whether to display additional information. +#[tokio::main] +async fn main() { + let Opt { + default_region, + name, + secret_value, + verbose, + } = Opt::from_args(); + + let region = default_region + .as_ref() + .map(|region| Region::new(region.clone())) + .or_else(|| aws_types::region::default_provider().region()) + .unwrap_or_else(|| Region::new("us-west-2")); + + if verbose { + println!( + "SecretsManager client version: {}", + secretsmanager::PKG_VERSION + ); + println!("Region: {:?}", ®ion); + println!("Secret name: {}", name); + println!("Secret value: {}", secret_value); + + SubscriberBuilder::default() + .with_env_filter("info") + .with_span_events(FmtSpan::CLOSE) + .init(); + } + + let conf = Config::builder().region(region).build(); + let client = Client::from_conf(conf); + + // attempt to create a secret, + // need to find a better way to handle failure such as ResourceExistsException + let data = match client + .create_secret() + .name(&name) + .secret_string(&secret_value) + .send() + .await + { + Ok(secret) => secret, + Err(SdkError::ServiceError { err, .. }) => match err.kind { + secretsmanager::error::CreateSecretErrorKind::ResourceExistsError(_) => { + panic!("This secret already exists!") + } + _ => panic!("Secretsmanager Error: {}", err), + }, + Err(other) => panic!("Failed to create secret: {}", other), + }; + println!("Created secret {:?} with ARN {:?}", name, data.arn.unwrap()); + + // try and retrieve the secret value we just created + let retrieved_secret = client + .get_secret_value() + .secret_id(name) + .send() + .await + .expect("unable to retrieve secret"); + + assert_eq!(retrieved_secret.secret_string.unwrap(), secret_value); + println!( + "successfully retrieved secret string that matches the original one we created earlier" + ); +} diff --git a/aws/sdk/examples/secretsmanager-list-secrets/src/main.rs b/aws/sdk/examples/secretsmanager/src/bin/list-secrets.rs similarity index 100% rename from aws/sdk/examples/secretsmanager-list-secrets/src/main.rs rename to aws/sdk/examples/secretsmanager/src/bin/list-secrets.rs