Skip to content

Commit

Permalink
settings: create aws settings extension
Browse files Browse the repository at this point in the history
Signed-off-by: Sam Berning <[email protected]>
  • Loading branch information
sam-berning committed Feb 9, 2024
1 parent 12393ac commit ef9b4af
Show file tree
Hide file tree
Showing 6 changed files with 147 additions and 0 deletions.
12 changes: 12 additions & 0 deletions sources/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions sources/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ members = [

"models",

"settings-extensions/aws",
"settings-extensions/container-registry",
"settings-extensions/kernel",
"settings-extensions/motd",
Expand Down
19 changes: 19 additions & 0 deletions sources/settings-extensions/aws/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[package]
name = "settings-extension-aws"
version = "0.1.0"
authors = ["Sam Berning <[email protected]>"]
edition = "2021"
license = "Apache-2.0 OR MIT"
publish = false

[dependencies]
env_logger = "0.10"
modeled-types = { path = "../../models/modeled-types", version = "0.1" }
model-derive = { path = "../../models/model-derive", version = "0.1" }
serde = { version = "1", features = ["derive"] }
serde_json = "1"

[dependencies.bottlerocket-settings-sdk]
git = "https://github.com/bottlerocket-os/bottlerocket-settings-sdk"
tag = "bottlerocket-settings-sdk-v0.1.0-alpha.2"
version = "0.1.0-alpha"
13 changes: 13 additions & 0 deletions sources/settings-extensions/aws/aws.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[extension]
supported-versions = [
"v1"
]
default-version = "v1"

[v1]
[v1.validation.cross-validates]

[v1.templating]
helpers = []

[v1.generation.requires]
84 changes: 84 additions & 0 deletions sources/settings-extensions/aws/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
/// The aws settings can be used to configure settings related to AWS
use bottlerocket_settings_sdk::{GenerateResult, SettingsModel};
use model_derive::model;
use modeled_types::{SingleLineString, ValidBase64};
use std::convert::Infallible;

// Platform-specific settings
#[model(impl_default = true)]
pub struct AwsSettingsV1 {
region: SingleLineString,
config: ValidBase64,
credentials: ValidBase64,
profile: SingleLineString,
}

type Result<T> = std::result::Result<T, Infallible>;

impl SettingsModel for AwsSettingsV1 {
type PartialKind = Self;
type ErrorKind = Infallible;

fn get_version() -> &'static str {
"v1"
}

fn set(_current_value: Option<Self>, _target: Self) -> Result<()> {
// allow anything that parses as AwsSettingsV1
Ok(())
}

fn generate(
existing_partial: Option<Self::PartialKind>,
_dependent_settings: Option<serde_json::Value>,
) -> Result<GenerateResult<Self::PartialKind, Self>> {
Ok(GenerateResult::Complete(
existing_partial.unwrap_or_default(),
))
}

fn validate(_value: Self, _validated_settings: Option<serde_json::Value>) -> Result<()> {
Ok(())
}
}

#[cfg(test)]
mod test {
use super::*;

#[test]
fn test_generate_aws() {
let generated = AwsSettingsV1::generate(None, None).unwrap();
assert_eq!(
generated,
GenerateResult::Complete(AwsSettingsV1 {
region: None,
config: None,
credentials: None,
profile: None,
})
)
}

#[test]
fn test_serde_aws() {
let test_json = r#"{
"region": "us-east-1",
"config": "Zm9vCg==",
"credentials": "Zm9vCg==",
"profile": "foo"
}"#;

let aws: AwsSettingsV1 = serde_json::from_str(test_json).unwrap();

assert_eq!(
aws,
AwsSettingsV1 {
region: Some(SingleLineString::try_from("us-east-1").unwrap()),
config: Some(ValidBase64::try_from("Zm9vCg==").unwrap()),
credentials: Some(ValidBase64::try_from("Zm9vCg==").unwrap()),
profile: Some(SingleLineString::try_from("foo").unwrap()),
}
);
}
}
18 changes: 18 additions & 0 deletions sources/settings-extensions/aws/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
use bottlerocket_settings_sdk::{BottlerocketSetting, NullMigratorExtensionBuilder};
use settings_extension_aws::AwsSettingsV1;
use std::process::ExitCode;

fn main() -> ExitCode {
env_logger::init();

match NullMigratorExtensionBuilder::with_name("aws")
.with_models(vec![BottlerocketSetting::<AwsSettingsV1>::model()])
.build()
{
Ok(extension) => extension.run(),
Err(e) => {
println!("{}", e);
ExitCode::FAILURE
}
}
}

0 comments on commit ef9b4af

Please sign in to comment.