From 10627951f3c779e23e6182ce794769302015259f Mon Sep 17 00:00:00 2001 From: Piyush Jena Date: Wed, 4 Sep 2024 09:44:37 +0000 Subject: [PATCH 1/2] schnauzer: add toml_encode helper --- sources/api/schnauzer/src/helpers.rs | 55 ++++++++++++++++++- sources/api/schnauzer/src/v1.rs | 1 + .../api/schnauzer/src/v2/import/helpers.rs | 1 + 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/sources/api/schnauzer/src/helpers.rs b/sources/api/schnauzer/src/helpers.rs index 45029aef319..7defe32fa06 100644 --- a/sources/api/schnauzer/src/helpers.rs +++ b/sources/api/schnauzer/src/helpers.rs @@ -236,6 +236,18 @@ mod error { source: std::io::Error, }, + #[snafu(display( + "Unable to encode input '{}' from template '{}' as toml: {}", + value, + source, + template + ))] + TomlEncode { + value: serde_json::Value, + source: serde_json::Error, + template: String, + }, + #[snafu(display("Unknown architecture '{}' given to goarch helper", given))] UnknownArch { given: String }, @@ -958,7 +970,7 @@ pub fn join_array( "\"{}\"", value.as_str().context(error::JoinStringsWrongTypeSnafu { expected_type: "string", - value: array.to_owned(), + value: value.to_owned(), template: template_name, })? ) @@ -975,6 +987,47 @@ pub fn join_array( Ok(()) } +/// `toml_encode` accepts arbitrary input and encodes it as a toml string +/// +/// # Example +/// +/// Consider an array of values: `[ "a", "b", "c" ]` stored in a setting such as +/// `settings.somewhere.foo-list`. In our template we can write: +/// `{{ toml_encode settings.somewhere.foo-list }}` +/// +/// This will render `["a", "b", "c"]`. +pub fn toml_encode( + helper: &Helper<'_, '_>, + _: &Handlebars, + _: &Context, + renderctx: &mut RenderContext<'_, '_>, + out: &mut dyn Output, +) -> Result<(), RenderError> { + trace!("Starting toml_encode helper"); + let template_name = template_name(renderctx); + check_param_count(helper, template_name, 1)?; + + // get the string + let encode_param = get_param(helper, 0)?; + let toml_value: toml::Value = + serde_json::from_value(encode_param.to_owned()).with_context(|_| { + error::TomlEncodeSnafu { + value: encode_param.to_owned(), + template: template_name, + } + })?; + + let result = toml_value.to_string(); + + // write it to the template + out.write(&result) + .with_context(|_| error::TemplateWriteSnafu { + template: template_name.to_owned(), + })?; + + Ok(()) +} + /// kube_reserve_memory and kube_reserve_cpu are taken from EKS' calculations. /// https://github.com/awslabs/amazon-eks-ami/blob/db28da15d2b696bc08ac3aacc9675694f4a69933/files/bootstrap.sh diff --git a/sources/api/schnauzer/src/v1.rs b/sources/api/schnauzer/src/v1.rs index 93d7d65fe84..de5ec17bacc 100644 --- a/sources/api/schnauzer/src/v1.rs +++ b/sources/api/schnauzer/src/v1.rs @@ -125,6 +125,7 @@ pub fn build_template_registry() -> Result> { template_registry.register_helper("host", Box::new(helpers::host)); template_registry.register_helper("goarch", Box::new(helpers::goarch)); template_registry.register_helper("join_array", Box::new(helpers::join_array)); + template_registry.register_helper("toml_encode", Box::new(helpers::toml_encode)); template_registry.register_helper("kube_reserve_cpu", Box::new(helpers::kube_reserve_cpu)); template_registry.register_helper( "kube_reserve_memory", diff --git a/sources/api/schnauzer/src/v2/import/helpers.rs b/sources/api/schnauzer/src/v2/import/helpers.rs index 6c4f9a827b7..9b4ccf4c50b 100644 --- a/sources/api/schnauzer/src/v2/import/helpers.rs +++ b/sources/api/schnauzer/src/v2/import/helpers.rs @@ -69,6 +69,7 @@ fn all_helpers() -> HashMap helper!(handlebars_helpers::base64_decode), "default" => helper!(handlebars_helpers::default), "join_array" => helper!(handlebars_helpers::join_array), + "toml_encode" => helper!(handlebars_helpers::toml_encode), "join_map" => helper!(handlebars_helpers::join_map), "if_not_null" => Box::new(handlebars_helpers::IfNotNullHelper), "goarch" => helper!(handlebars_helpers::goarch), From 57683f4eca5397291f549718ff91edcff439ac77 Mon Sep 17 00:00:00 2001 From: Piyush Jena Date: Wed, 4 Sep 2024 09:46:03 +0000 Subject: [PATCH 2/2] migrations: add migrations for bootstrap-commands --- Release.toml | 2 + sources/Cargo.lock | 89 ++++++++++++------- sources/Cargo.toml | 12 +-- .../bootstrap-commands-metadata/Cargo.toml | 13 +++ .../bootstrap-commands-metadata/src/main.rs | 22 +++++ .../bootstrap-commands-settings/Cargo.toml | 13 +++ .../bootstrap-commands-settings/src/main.rs | 18 ++++ sources/settings-plugins/aws-dev/src/lib.rs | 1 + sources/settings-plugins/aws-ecs-1/src/lib.rs | 1 + sources/settings-plugins/aws-ecs-2/src/lib.rs | 1 + sources/settings-plugins/aws-k8s/src/lib.rs | 1 + sources/settings-plugins/metal-dev/src/lib.rs | 1 + sources/settings-plugins/metal-k8s/src/lib.rs | 1 + .../settings-plugins/vmware-dev/src/lib.rs | 1 + .../settings-plugins/vmware-k8s/src/lib.rs | 1 + sources/shared-defaults/defaults.toml | 12 +++ 16 files changed, 154 insertions(+), 35 deletions(-) create mode 100644 sources/settings-migrations/v1.22.0/bootstrap-commands-metadata/Cargo.toml create mode 100644 sources/settings-migrations/v1.22.0/bootstrap-commands-metadata/src/main.rs create mode 100644 sources/settings-migrations/v1.22.0/bootstrap-commands-settings/Cargo.toml create mode 100644 sources/settings-migrations/v1.22.0/bootstrap-commands-settings/src/main.rs diff --git a/Release.toml b/Release.toml index 0618691614b..bcc5a446320 100644 --- a/Release.toml +++ b/Release.toml @@ -341,4 +341,6 @@ version = "1.22.0" "migrate_v1.22.0_public-admin-container-v0-11-11.lz4", "migrate_v1.22.0_aws-control-container-v0-7-15.lz4", "migrate_v1.22.0_public-control-container-v0-7-15.lz4", + "migrate_v1.22.0_bootstrap-commands-settings.lz4", + "migrate_v1.22.0_bootstrap-commands-metadata.lz4", ] diff --git a/sources/Cargo.lock b/sources/Cargo.lock index 2612ba4c78d..509e19c6880 100644 --- a/sources/Cargo.lock +++ b/sources/Cargo.lock @@ -355,6 +355,20 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bootstrap-commands-metadata" +version = "0.1.0" +dependencies = [ + "migration-helpers", +] + +[[package]] +name = "bootstrap-commands-settings" +version = "0.1.0" +dependencies = [ + "migration-helpers", +] + [[package]] name = "bottlerocket-defaults-helper" version = "0.1.0" @@ -368,7 +382,7 @@ dependencies = [ [[package]] name = "bottlerocket-model-derive" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "darling 0.20.8", "quote", @@ -377,8 +391,8 @@ dependencies = [ [[package]] name = "bottlerocket-modeled-types" -version = "0.3.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +version = "0.4.0" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "base64 0.22.1", "bottlerocket-model-derive", @@ -412,7 +426,7 @@ dependencies = [ [[package]] name = "bottlerocket-scalar" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "serde", "serde_plain", @@ -421,7 +435,7 @@ dependencies = [ [[package]] name = "bottlerocket-scalar-derive" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-scalar", "darling 0.20.8", @@ -445,8 +459,8 @@ dependencies = [ [[package]] name = "bottlerocket-settings-models" -version = "0.3.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +version = "0.4.0" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -458,6 +472,7 @@ dependencies = [ "serde_json", "settings-extension-autoscaling", "settings-extension-aws", + "settings-extension-bootstrap-commands", "settings-extension-bootstrap-containers", "settings-extension-cloudformation", "settings-extension-container-registry", @@ -494,7 +509,7 @@ dependencies = [ [[package]] name = "bottlerocket-settings-sdk" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "argh", "bottlerocket-template-helper", @@ -507,7 +522,7 @@ dependencies = [ [[package]] name = "bottlerocket-string-impls-for" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "serde", ] @@ -515,7 +530,7 @@ dependencies = [ [[package]] name = "bottlerocket-template-helper" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "darling 0.20.8", "proc-macro2", @@ -2184,7 +2199,7 @@ dependencies = [ [[package]] name = "settings-extension-autoscaling" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2197,7 +2212,7 @@ dependencies = [ [[package]] name = "settings-extension-aws" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2207,10 +2222,24 @@ dependencies = [ "serde_json", ] +[[package]] +name = "settings-extension-bootstrap-commands" +version = "0.1.0" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" +dependencies = [ + "bottlerocket-model-derive", + "bottlerocket-modeled-types", + "bottlerocket-settings-sdk", + "env_logger", + "serde", + "serde_json", + "snafu", +] + [[package]] name = "settings-extension-bootstrap-containers" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2223,7 +2252,7 @@ dependencies = [ [[package]] name = "settings-extension-cloudformation" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2236,7 +2265,7 @@ dependencies = [ [[package]] name = "settings-extension-container-registry" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2249,7 +2278,7 @@ dependencies = [ [[package]] name = "settings-extension-container-runtime" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2262,7 +2291,7 @@ dependencies = [ [[package]] name = "settings-extension-dns" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2275,7 +2304,7 @@ dependencies = [ [[package]] name = "settings-extension-ecs" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2288,7 +2317,7 @@ dependencies = [ [[package]] name = "settings-extension-host-containers" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2301,7 +2330,7 @@ dependencies = [ [[package]] name = "settings-extension-kernel" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2314,7 +2343,7 @@ dependencies = [ [[package]] name = "settings-extension-kubernetes" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2328,7 +2357,7 @@ dependencies = [ [[package]] name = "settings-extension-metrics" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2341,7 +2370,7 @@ dependencies = [ [[package]] name = "settings-extension-motd" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-settings-sdk", "bottlerocket-string-impls-for", @@ -2353,7 +2382,7 @@ dependencies = [ [[package]] name = "settings-extension-network" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2366,7 +2395,7 @@ dependencies = [ [[package]] name = "settings-extension-ntp" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2379,7 +2408,7 @@ dependencies = [ [[package]] name = "settings-extension-nvidia-container-runtime" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2392,7 +2421,7 @@ dependencies = [ [[package]] name = "settings-extension-oci-defaults" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2406,7 +2435,7 @@ dependencies = [ [[package]] name = "settings-extension-oci-hooks" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2419,7 +2448,7 @@ dependencies = [ [[package]] name = "settings-extension-pki" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2432,7 +2461,7 @@ dependencies = [ [[package]] name = "settings-extension-updates" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.3.0#cebbd4cdd4cf86b24b52554b9db7bdc21aa4e67e" +source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.4.0#28f3c66b979bc48d32120b4e82d2c81b5841d7aa" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", diff --git a/sources/Cargo.toml b/sources/Cargo.toml index 497ddfb87e8..a21b54d95f8 100644 --- a/sources/Cargo.toml +++ b/sources/Cargo.toml @@ -49,6 +49,8 @@ members = [ "settings-migrations/v1.22.0/public-admin-container-v0-11-11", "settings-migrations/v1.22.0/aws-control-container-v0-7-15", "settings-migrations/v1.22.0/public-control-container-v0-7-15", + "settings-migrations/v1.22.0/bootstrap-commands-settings", + "settings-migrations/v1.22.0/bootstrap-commands-metadata", "settings-plugins/aws-dev", "settings-plugins/aws-ecs-1", @@ -122,13 +124,13 @@ version = "0.1.0" [workspace.dependencies.bottlerocket-modeled-types] git = "https://github.com/bottlerocket-os/bottlerocket-settings-sdk" -tag = "bottlerocket-settings-models-v0.3.0" -version = "0.3.0" +tag = "bottlerocket-settings-models-v0.4.0" +version = "0.4.0" [workspace.dependencies.bottlerocket-settings-models] git = "https://github.com/bottlerocket-os/bottlerocket-settings-sdk" -tag = "bottlerocket-settings-models-v0.3.0" -version = "0.3.0" +tag = "bottlerocket-settings-models-v0.4.0" +version = "0.4.0" [workspace.dependencies.bottlerocket-settings-plugin] git = "https://github.com/bottlerocket-os/bottlerocket-settings-sdk" @@ -137,7 +139,7 @@ version = "0.1.0" [workspace.dependencies.settings-extension-oci-defaults] git = "https://github.com/bottlerocket-os/bottlerocket-settings-sdk" -tag = "bottlerocket-settings-models-v0.3.0" +tag = "bottlerocket-settings-models-v0.4.0" version = "0.1.0" [profile.release] diff --git a/sources/settings-migrations/v1.22.0/bootstrap-commands-metadata/Cargo.toml b/sources/settings-migrations/v1.22.0/bootstrap-commands-metadata/Cargo.toml new file mode 100644 index 00000000000..73db02b9e16 --- /dev/null +++ b/sources/settings-migrations/v1.22.0/bootstrap-commands-metadata/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "bootstrap-commands-metadata" +version = "0.1.0" +edition = "2021" +authors = ["Piyush Jena "] +license = "Apache-2.0 OR MIT" +publish = false +exclude = ["README.md"] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +migration-helpers.workspace = true diff --git a/sources/settings-migrations/v1.22.0/bootstrap-commands-metadata/src/main.rs b/sources/settings-migrations/v1.22.0/bootstrap-commands-metadata/src/main.rs new file mode 100644 index 00000000000..3eca5a73497 --- /dev/null +++ b/sources/settings-migrations/v1.22.0/bootstrap-commands-metadata/src/main.rs @@ -0,0 +1,22 @@ +use migration_helpers::common_migrations::{AddMetadataMigration, SettingMetadata}; +use migration_helpers::migrate; +use migration_helpers::Result; +use std::process; + +/// We added a new setting for configuring container runtime (containerd) settings only for NVIDIA k8s variants. +fn run() -> Result<()> { + migrate(AddMetadataMigration(&[SettingMetadata { + metadata: &["affected-services"], + setting: "settings.bootstrap-commands", + }])) +} + +// Returning a Result from main makes it print a Debug representation of the error, but with Snafu +// we have nice Display representations of the error, so we wrap "main" (run) and print any error. +// https://github.com/shepmaster/snafu/issues/110 +fn main() { + if let Err(e) = run() { + eprintln!("{}", e); + process::exit(1); + } +} diff --git a/sources/settings-migrations/v1.22.0/bootstrap-commands-settings/Cargo.toml b/sources/settings-migrations/v1.22.0/bootstrap-commands-settings/Cargo.toml new file mode 100644 index 00000000000..8de6b6ae11c --- /dev/null +++ b/sources/settings-migrations/v1.22.0/bootstrap-commands-settings/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "bootstrap-commands-settings" +version = "0.1.0" +edition = "2021" +authors = ["Piyush Jena "] +license = "Apache-2.0 OR MIT" +publish = false +exclude = ["README.md"] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +migration-helpers.workspace = true diff --git a/sources/settings-migrations/v1.22.0/bootstrap-commands-settings/src/main.rs b/sources/settings-migrations/v1.22.0/bootstrap-commands-settings/src/main.rs new file mode 100644 index 00000000000..ed70f196e28 --- /dev/null +++ b/sources/settings-migrations/v1.22.0/bootstrap-commands-settings/src/main.rs @@ -0,0 +1,18 @@ +use migration_helpers::common_migrations::AddPrefixesMigration; +use migration_helpers::{migrate, Result}; +use std::process; + +fn run() -> Result<()> { + migrate(AddPrefixesMigration(vec![ + "settings.bootstrap-commands", + "services.bootstrap-commands", + "configuration-files.bootstrap-commands-toml", + ])) +} + +fn main() { + if let Err(e) = run() { + eprintln!("{}", e); + process::exit(1); + } +} diff --git a/sources/settings-plugins/aws-dev/src/lib.rs b/sources/settings-plugins/aws-dev/src/lib.rs index 921f298b2b9..9b75ebb111e 100644 --- a/sources/settings-plugins/aws-dev/src/lib.rs +++ b/sources/settings-plugins/aws-dev/src/lib.rs @@ -7,6 +7,7 @@ struct AwsDevSettings { motd: bottlerocket_settings_models::MotdV1, updates: bottlerocket_settings_models::UpdatesSettingsV1, host_containers: bottlerocket_settings_models::HostContainersSettingsV1, + bootstrap_commands: bottlerocket_settings_models::BootstrapCommandsSettingsV1, bootstrap_containers: bottlerocket_settings_models::BootstrapContainersSettingsV1, ntp: bottlerocket_settings_models::NtpSettingsV1, network: bottlerocket_settings_models::NetworkSettingsV1, diff --git a/sources/settings-plugins/aws-ecs-1/src/lib.rs b/sources/settings-plugins/aws-ecs-1/src/lib.rs index b85d2b47aba..3b91072fa5c 100644 --- a/sources/settings-plugins/aws-ecs-1/src/lib.rs +++ b/sources/settings-plugins/aws-ecs-1/src/lib.rs @@ -7,6 +7,7 @@ struct AwsEcs1Settings { motd: bottlerocket_settings_models::MotdV1, updates: bottlerocket_settings_models::UpdatesSettingsV1, host_containers: bottlerocket_settings_models::HostContainersSettingsV1, + bootstrap_commands: bottlerocket_settings_models::BootstrapCommandsSettingsV1, bootstrap_containers: bottlerocket_settings_models::BootstrapContainersSettingsV1, ntp: bottlerocket_settings_models::NtpSettingsV1, network: bottlerocket_settings_models::NetworkSettingsV1, diff --git a/sources/settings-plugins/aws-ecs-2/src/lib.rs b/sources/settings-plugins/aws-ecs-2/src/lib.rs index 56d072f84f1..5f9279e47e1 100644 --- a/sources/settings-plugins/aws-ecs-2/src/lib.rs +++ b/sources/settings-plugins/aws-ecs-2/src/lib.rs @@ -7,6 +7,7 @@ struct AwsEcs2Settings { motd: bottlerocket_settings_models::MotdV1, updates: bottlerocket_settings_models::UpdatesSettingsV1, host_containers: bottlerocket_settings_models::HostContainersSettingsV1, + bootstrap_commands: bottlerocket_settings_models::BootstrapCommandsSettingsV1, bootstrap_containers: bottlerocket_settings_models::BootstrapContainersSettingsV1, ntp: bottlerocket_settings_models::NtpSettingsV1, network: bottlerocket_settings_models::NetworkSettingsV1, diff --git a/sources/settings-plugins/aws-k8s/src/lib.rs b/sources/settings-plugins/aws-k8s/src/lib.rs index 5bd2b2fbf37..e93905720fc 100644 --- a/sources/settings-plugins/aws-k8s/src/lib.rs +++ b/sources/settings-plugins/aws-k8s/src/lib.rs @@ -8,6 +8,7 @@ struct AwsK8sSettings { kubernetes: bottlerocket_settings_models::KubernetesSettingsV1, updates: bottlerocket_settings_models::UpdatesSettingsV1, host_containers: bottlerocket_settings_models::HostContainersSettingsV1, + bootstrap_commands: bottlerocket_settings_models::BootstrapCommandsSettingsV1, bootstrap_containers: bottlerocket_settings_models::BootstrapContainersSettingsV1, ntp: bottlerocket_settings_models::NtpSettingsV1, network: bottlerocket_settings_models::NetworkSettingsV1, diff --git a/sources/settings-plugins/metal-dev/src/lib.rs b/sources/settings-plugins/metal-dev/src/lib.rs index d71c0cd6454..5fea4080401 100644 --- a/sources/settings-plugins/metal-dev/src/lib.rs +++ b/sources/settings-plugins/metal-dev/src/lib.rs @@ -7,6 +7,7 @@ struct MetalDevSettings { motd: bottlerocket_settings_models::MotdV1, updates: bottlerocket_settings_models::UpdatesSettingsV1, host_containers: bottlerocket_settings_models::HostContainersSettingsV1, + bootstrap_commands: bottlerocket_settings_models::BootstrapCommandsSettingsV1, bootstrap_containers: bottlerocket_settings_models::BootstrapContainersSettingsV1, ntp: bottlerocket_settings_models::NtpSettingsV1, network: bottlerocket_settings_models::NetworkSettingsV1, diff --git a/sources/settings-plugins/metal-k8s/src/lib.rs b/sources/settings-plugins/metal-k8s/src/lib.rs index 3952fe17086..f0d41bedf49 100644 --- a/sources/settings-plugins/metal-k8s/src/lib.rs +++ b/sources/settings-plugins/metal-k8s/src/lib.rs @@ -8,6 +8,7 @@ struct MetalK8sSettings { kubernetes: bottlerocket_settings_models::KubernetesSettingsV1, updates: bottlerocket_settings_models::UpdatesSettingsV1, host_containers: bottlerocket_settings_models::HostContainersSettingsV1, + bootstrap_commands: bottlerocket_settings_models::BootstrapCommandsSettingsV1, bootstrap_containers: bottlerocket_settings_models::BootstrapContainersSettingsV1, ntp: bottlerocket_settings_models::NtpSettingsV1, network: bottlerocket_settings_models::NetworkSettingsV1, diff --git a/sources/settings-plugins/vmware-dev/src/lib.rs b/sources/settings-plugins/vmware-dev/src/lib.rs index 03258430e91..2cb3184b8a7 100644 --- a/sources/settings-plugins/vmware-dev/src/lib.rs +++ b/sources/settings-plugins/vmware-dev/src/lib.rs @@ -7,6 +7,7 @@ struct VmwareDevSettings { motd: bottlerocket_settings_models::MotdV1, updates: bottlerocket_settings_models::UpdatesSettingsV1, host_containers: bottlerocket_settings_models::HostContainersSettingsV1, + bootstrap_commands: bottlerocket_settings_models::BootstrapCommandsSettingsV1, bootstrap_containers: bottlerocket_settings_models::BootstrapContainersSettingsV1, ntp: bottlerocket_settings_models::NtpSettingsV1, network: bottlerocket_settings_models::NetworkSettingsV1, diff --git a/sources/settings-plugins/vmware-k8s/src/lib.rs b/sources/settings-plugins/vmware-k8s/src/lib.rs index 0b8ee40823e..da631521126 100644 --- a/sources/settings-plugins/vmware-k8s/src/lib.rs +++ b/sources/settings-plugins/vmware-k8s/src/lib.rs @@ -8,6 +8,7 @@ struct VmwareK8sSettings { kubernetes: bottlerocket_settings_models::KubernetesSettingsV1, updates: bottlerocket_settings_models::UpdatesSettingsV1, host_containers: bottlerocket_settings_models::HostContainersSettingsV1, + bootstrap_commands: bottlerocket_settings_models::BootstrapCommandsSettingsV1, bootstrap_containers: bottlerocket_settings_models::BootstrapContainersSettingsV1, ntp: bottlerocket_settings_models::NtpSettingsV1, network: bottlerocket_settings_models::NetworkSettingsV1, diff --git a/sources/shared-defaults/defaults.toml b/sources/shared-defaults/defaults.toml index 0cafd012c23..d88b97da5ef 100644 --- a/sources/shared-defaults/defaults.toml +++ b/sources/shared-defaults/defaults.toml @@ -167,6 +167,18 @@ affected-services = ["lockdown"] path = "/etc/corndog.toml" template-path = "/usr/share/templates/corndog-toml" +# Bootstrap Commands +[services.bootstrap-commands] +configuration-files = ["bootstrap-commands-toml"] +restart-commands = [] + +[metadata.settings.bootstrap-commands] +affected-services = ["bootstrap-commands"] + +[configuration-files.bootstrap-commands-toml] +path = "/etc/bootstrap-commands/bootstrap-commands.toml" +template-path = "/usr/share/templates/bootstrap-commands-toml" + # Bootstrap Containers [services.bootstrap-containers]