From 2a6f28e53699c29bb01d3ee2633f4d605a0986ee Mon Sep 17 00:00:00 2001 From: Piyush Jena Date: Wed, 7 Aug 2024 19:42:49 +0000 Subject: [PATCH] Add support for bootstrap commands --- Twoliter.lock | 16 +-- Twoliter.toml | 9 +- sources/Cargo.lock | 101 +++++++++++++----- sources/Cargo.toml | 12 ++- sources/api/schnauzer/src/helpers.rs | 81 +++++++++++++- sources/api/schnauzer/src/v1.rs | 1 + .../api/schnauzer/src/v2/import/helpers.rs | 1 + sources/deny.toml | 1 + .../Cargo.toml | 13 +++ .../src/main.rs | 16 +++ .../Cargo.toml | 13 +++ .../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 +++ 21 files changed, 256 insertions(+), 46 deletions(-) create mode 100644 sources/settings-migrations/v1.21.0/bootstrap-commands-config-file-v0-1-0/Cargo.toml create mode 100644 sources/settings-migrations/v1.21.0/bootstrap-commands-config-file-v0-1-0/src/main.rs create mode 100644 sources/settings-migrations/v1.21.0/bootstrap-commands-services-cfg-v0-1-0/Cargo.toml create mode 100644 sources/settings-migrations/v1.21.0/bootstrap-commands-services-cfg-v0-1-0/src/main.rs diff --git a/Twoliter.lock b/Twoliter.lock index 4c6da5fe833..233a32287e5 100644 --- a/Twoliter.lock +++ b/Twoliter.lock @@ -1,17 +1,17 @@ schema-version = 1 release-version = "1.21.0" -digest = "xrDJu9xcRcdcb2lrWOH9P9gXHfe83eO68IRJRFxlZsg=" +digest = "NtLf5ryexu2rf0DqhQmPQ0eES/2hKNnXPmgkdLDHnP4=" [sdk] name = "bottlerocket-sdk" -version = "0.43.0" +version = "0.42.0" vendor = "bottlerocket" -source = "public.ecr.aws/bottlerocket/bottlerocket-sdk:v0.43.0" -digest = "1zKyWC/pXdpzKfNj1Xp1YvEWdyltI7EhAeiNwlikBz8=" +source = "public.ecr.aws/bottlerocket/bottlerocket-sdk:v0.42.0" +digest = "myHHKE41h9qfeyR6V6HB0BfiLPwj3QEFLUFy4TXcR10=" [[kit]] name = "bottlerocket-core-kit" -version = "2.3.1" -vendor = "bottlerocket" -source = "public.ecr.aws/bottlerocket/bottlerocket-core-kit:v2.3.1" -digest = "JEn010SJp41iPAl9xFRWQC57QTyhk7xo+SgpFxPSPLo=" +version = "2.3.0" +vendor = "piyush" +source = "533267423195.dkr.ecr.us-west-2.amazonaws.com/bottlerocket-core-kit:v2.3.0" +digest = "911F/d/BajejnG1MwEhyKYashWPxSTeFCsp2xYX8zY4=" diff --git a/Twoliter.toml b/Twoliter.toml index c419edde7e5..309227674cf 100644 --- a/Twoliter.toml +++ b/Twoliter.toml @@ -4,12 +4,15 @@ release-version = "1.21.0" [vendor.bottlerocket] registry = "public.ecr.aws/bottlerocket" +[vendor.piyush] +registry = "533267423195.dkr.ecr.us-west-2.amazonaws.com" + [sdk] name = "bottlerocket-sdk" -version = "0.43.0" +version = "0.42.0" vendor = "bottlerocket" [[kit]] name = "bottlerocket-core-kit" -version = "2.3.1" -vendor = "bottlerocket" +version = "2.3.0" +vendor = "piyush" diff --git a/sources/Cargo.lock b/sources/Cargo.lock index 78b2273eb30..f5c58470329 100644 --- a/sources/Cargo.lock +++ b/sources/Cargo.lock @@ -321,10 +321,24 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bootstrap-commands-config-file-v0-1-0" +version = "0.1.0" +dependencies = [ + "migration-helpers", +] + +[[package]] +name = "bootstrap-commands-services-cfg-v0-1-0" +version = "0.1.0" +dependencies = [ + "migration-helpers", +] + [[package]] name = "bottlerocket-defaults-helper" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-defaults-helper-v0.1.0#9cb0286b59cd4fcb5df9dd441aee8521ea5698e6" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-defaults-helper-v0.1.0#6dd7ff02905549c1cf81e7720edb3880e677ca8e" dependencies = [ "snafu", "toml", @@ -334,7 +348,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "darling 0.20.8", "quote", @@ -344,9 +358,10 @@ dependencies = [ [[package]] name = "bottlerocket-modeled-types" version = "0.2.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "base64", + "bottlerocket-model-derive", "bottlerocket-scalar", "bottlerocket-scalar-derive", "bottlerocket-string-impls-for", @@ -377,7 +392,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "serde", "serde_plain", @@ -386,7 +401,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-scalar", "darling 0.20.8", @@ -400,7 +415,7 @@ dependencies = [ [[package]] name = "bottlerocket-settings-derive" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-plugin-v0.1.0#9cb0286b59cd4fcb5df9dd441aee8521ea5698e6" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-plugin-v0.1.0#6dd7ff02905549c1cf81e7720edb3880e677ca8e" dependencies = [ "darling 0.20.8", "proc-macro2", @@ -411,7 +426,7 @@ dependencies = [ [[package]] name = "bottlerocket-settings-models" version = "0.2.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -423,6 +438,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", @@ -435,6 +451,7 @@ dependencies = [ "settings-extension-motd", "settings-extension-network", "settings-extension-ntp", + "settings-extension-nvidia-container-runtime", "settings-extension-oci-defaults", "settings-extension-oci-hooks", "settings-extension-pki", @@ -445,7 +462,7 @@ dependencies = [ [[package]] name = "bottlerocket-settings-plugin" version = "0.1.0" -source = "git+https://github.com/bottlerocket-os/bottlerocket-settings-sdk?tag=bottlerocket-settings-plugin-v0.1.0#9cb0286b59cd4fcb5df9dd441aee8521ea5698e6" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-plugin-v0.1.0#6dd7ff02905549c1cf81e7720edb3880e677ca8e" dependencies = [ "abi_stable", "bottlerocket-settings-derive", @@ -457,7 +474,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "argh", "bottlerocket-template-helper", @@ -470,7 +487,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "serde", ] @@ -478,7 +495,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "darling 0.20.8", "proc-macro2", @@ -2120,7 +2137,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2133,7 +2150,20 @@ 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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" +dependencies = [ + "bottlerocket-model-derive", + "bottlerocket-modeled-types", + "bottlerocket-settings-sdk", + "env_logger", + "serde", + "serde_json", +] + +[[package]] +name = "settings-extension-bootstrap-commands" +version = "0.1.0" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2146,7 +2176,7 @@ dependencies = [ [[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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2159,7 +2189,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2172,7 +2202,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2185,7 +2215,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2198,7 +2228,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2211,7 +2241,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2224,7 +2254,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2237,7 +2267,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2250,7 +2280,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2263,7 +2293,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-settings-sdk", "bottlerocket-string-impls-for", @@ -2275,7 +2305,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2288,7 +2318,20 @@ 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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" +dependencies = [ + "bottlerocket-model-derive", + "bottlerocket-modeled-types", + "bottlerocket-settings-sdk", + "env_logger", + "serde", + "serde_json", +] + +[[package]] +name = "settings-extension-nvidia-container-runtime" +version = "0.1.0" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2301,7 +2344,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2315,7 +2358,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2328,7 +2371,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", @@ -2341,7 +2384,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.2.0#848b3153922c5202e4f38c428b7572a9ee313f3f" +source = "git+https://github.com/piyush-jena/bottlerocket-settings-sdk?tag=bottlerocket-settings-models-v0.2.0#7c65f1955a18576cffe5e798e6564f2c1de0107f" dependencies = [ "bottlerocket-model-derive", "bottlerocket-modeled-types", diff --git a/sources/Cargo.toml b/sources/Cargo.toml index b15d2edc9d7..3b31f8d6730 100644 --- a/sources/Cargo.toml +++ b/sources/Cargo.toml @@ -35,6 +35,8 @@ members = [ "settings-defaults/vmware-k8s-1.30", # (all previous migrations archived; add new ones after this line) + "settings-migrations/v1.21.0/bootstrap-commands-config-file-v0-1-0", + "settings-migrations/v1.21.0/bootstrap-commands-services-cfg-v0-1-0", "settings-migrations/v1.21.0/pluto-remove-generators-v0-1-0", "settings-migrations/v1.21.0/pod-infra-container-image-affected-services", "settings-migrations/v1.21.0/pod-infra-container-image-remove-settings-generator", @@ -55,27 +57,27 @@ members = [ ] [workspace.dependencies.bottlerocket-defaults-helper] -git = "https://github.com/bottlerocket-os/bottlerocket-settings-sdk" +git = "https://github.com/piyush-jena/bottlerocket-settings-sdk" tag = "bottlerocket-defaults-helper-v0.1.0" version = "0.1.0" [workspace.dependencies.bottlerocket-modeled-types] -git = "https://github.com/bottlerocket-os/bottlerocket-settings-sdk" +git = "https://github.com/piyush-jena/bottlerocket-settings-sdk" tag = "bottlerocket-settings-models-v0.2.0" version = "0.2.0" [workspace.dependencies.bottlerocket-settings-models] -git = "https://github.com/bottlerocket-os/bottlerocket-settings-sdk" +git = "https://github.com/piyush-jena/bottlerocket-settings-sdk" tag = "bottlerocket-settings-models-v0.2.0" version = "0.2.0" [workspace.dependencies.bottlerocket-settings-plugin] -git = "https://github.com/bottlerocket-os/bottlerocket-settings-sdk" +git = "https://github.com/piyush-jena/bottlerocket-settings-sdk" tag = "bottlerocket-settings-plugin-v0.1.0" version = "0.1.0" [workspace.dependencies.settings-extension-oci-defaults] -git = "https://github.com/bottlerocket-os/bottlerocket-settings-sdk" +git = "https://github.com/piyush-jena/bottlerocket-settings-sdk" tag = "bottlerocket-settings-models-v0.2.0" version = "0.1.0" diff --git a/sources/api/schnauzer/src/helpers.rs b/sources/api/schnauzer/src/helpers.rs index 3b50e9d0705..f243b91489f 100644 --- a/sources/api/schnauzer/src/helpers.rs +++ b/sources/api/schnauzer/src/helpers.rs @@ -955,7 +955,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, })? ) @@ -972,6 +972,85 @@ pub fn join_array( Ok(()) } +/// `join_nested_array` is used to join a nested array of scalar strings into a +/// nested array of quoted, delimited strings. The delimiter must be specified. +/// +/// # Example +/// +/// Consider an array of values: `[[ "a", "b", "c" ], [ "d", "e" ]]` stored in a +/// setting such as `settings.somewhere.foo-list`. In our template we can write: +/// `{{ join_nested_array settings.somewhere.foo-list }}` +/// +/// This will render `["a", "b", "c"], ["d", "e"]`. +pub fn join_nested_array( + helper: &Helper<'_, '_>, + _: &Handlebars, + _: &Context, + renderctx: &mut RenderContext<'_, '_>, + out: &mut dyn Output, +) -> Result<(), RenderError> { + trace!("Starting join_nested_array helper"); + let template_name = template_name(renderctx); + check_param_count(helper, template_name, 1)?; + + let nested_array_param = get_param(helper, 0)?; + let nested_array = + nested_array_param + .as_array() + .with_context(|| error::JoinStringsWrongTypeSnafu { + expected_type: "array", + value: nested_array_param.to_owned(), + template: template_name, + })?; + + let mut result = String::new(); + + for (i, array) in nested_array.iter().enumerate() { + if i > 0 { + result.push_str(", "); + } + + result.push('['); + + for (j, value) in array + .as_array() + .with_context(|| error::JoinStringsWrongTypeSnafu { + expected_type: "array", + value: array.to_owned(), + template: template_name, + })? + .iter() + .enumerate() + { + if j > 0 { + result.push_str(", "); + } + + result.push_str( + format!( + "\"{}\"", + value.as_str().context(error::JoinStringsWrongTypeSnafu { + expected_type: "string", + value: value.to_owned(), + template: template_name, + })? + ) + .as_str(), + ); + } + + result.push(']'); + } + + // 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..79184ef12d6 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("join_nested_array", Box::new(helpers::join_nested_array)); 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..9e03f186099 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), + "join_nested_array" => helper!(handlebars_helpers::join_nested_array), "join_map" => helper!(handlebars_helpers::join_map), "if_not_null" => Box::new(handlebars_helpers::IfNotNullHelper), "goarch" => helper!(handlebars_helpers::goarch), diff --git a/sources/deny.toml b/sources/deny.toml index 76113e3d0b9..aaca52d7bd3 100644 --- a/sources/deny.toml +++ b/sources/deny.toml @@ -83,4 +83,5 @@ allow-git = [ # We will allow it as an exception until the following is resolved: # https://github.com/bottlerocket-os/bottlerocket-settings-sdk/issues/18 "https://github.com/bottlerocket-os/bottlerocket-settings-sdk", + "https://github.com/piyush-jena/bottlerocket-settings-sdk", ] diff --git a/sources/settings-migrations/v1.21.0/bootstrap-commands-config-file-v0-1-0/Cargo.toml b/sources/settings-migrations/v1.21.0/bootstrap-commands-config-file-v0-1-0/Cargo.toml new file mode 100644 index 00000000000..1aa481fa247 --- /dev/null +++ b/sources/settings-migrations/v1.21.0/bootstrap-commands-config-file-v0-1-0/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "bootstrap-commands-config-file-v0-1-0" +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 = { path = "../../../api/migration/migration-helpers", version = "0.1.0" } diff --git a/sources/settings-migrations/v1.21.0/bootstrap-commands-config-file-v0-1-0/src/main.rs b/sources/settings-migrations/v1.21.0/bootstrap-commands-config-file-v0-1-0/src/main.rs new file mode 100644 index 00000000000..9c429a49e66 --- /dev/null +++ b/sources/settings-migrations/v1.21.0/bootstrap-commands-config-file-v0-1-0/src/main.rs @@ -0,0 +1,16 @@ +use migration_helpers::common_migrations::AddPrefixesMigration; +use migration_helpers::{migrate, Result}; +use std::process; + +fn run() -> Result<()> { + migrate(AddPrefixesMigration(vec![ + "configuration-files.bootstrap-commands-toml", + ])) +} + +fn main() { + if let Err(e) = run() { + eprintln!("{}", e); + process::exit(1); + } +} diff --git a/sources/settings-migrations/v1.21.0/bootstrap-commands-services-cfg-v0-1-0/Cargo.toml b/sources/settings-migrations/v1.21.0/bootstrap-commands-services-cfg-v0-1-0/Cargo.toml new file mode 100644 index 00000000000..5fc63fec22b --- /dev/null +++ b/sources/settings-migrations/v1.21.0/bootstrap-commands-services-cfg-v0-1-0/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "bootstrap-commands-services-cfg-v0-1-0" +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 = { path = "../../../api/migration/migration-helpers", version = "0.1.0" } diff --git a/sources/settings-migrations/v1.21.0/bootstrap-commands-services-cfg-v0-1-0/src/main.rs b/sources/settings-migrations/v1.21.0/bootstrap-commands-services-cfg-v0-1-0/src/main.rs new file mode 100644 index 00000000000..14d85796360 --- /dev/null +++ b/sources/settings-migrations/v1.21.0/bootstrap-commands-services-cfg-v0-1-0/src/main.rs @@ -0,0 +1,18 @@ +use migration_helpers::common_migrations::{ListReplacement, ReplaceListsMigration}; +use migration_helpers::{migrate, Result}; +use std::process; + +fn run() -> Result<()> { + migrate(ReplaceListsMigration(vec![ListReplacement { + setting: "services.bootstrap-commands.configuration-files", + old_vals: &[], + new_vals: &["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]