diff --git a/packages/settings-ntp/Cargo.toml b/packages/settings-ntp/Cargo.toml new file mode 100644 index 00000000000..980a3b9bdaf --- /dev/null +++ b/packages/settings-ntp/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "settings-ntp" +version = "0.1.0" +edition = "2021" +publish = false +build = "../build.rs" + +[lib] +path = "../packages.rs" + +[package.metadata.build-package] +source-groups = [ + "settings-extensions/ntp" +] + +# RPM BuildRequires +[build-dependencies] +glibc = { path = "../glibc" } + +# RPM Requires +[dependencies] diff --git a/packages/settings-ntp/settings-ntp.spec b/packages/settings-ntp/settings-ntp.spec new file mode 100644 index 00000000000..4eec92ef776 --- /dev/null +++ b/packages/settings-ntp/settings-ntp.spec @@ -0,0 +1,39 @@ +%global _cross_first_party 1 +%undefine _debugsource_packages + +%global extension_name ntp + +Name: %{_cross_os}settings-%{extension_name} +Version: 0.0 +Release: 0%{?dist} +Summary: settings-%{extension_name} +License: Apache-2.0 OR MIT +URL: https://github.com/bottlerocket-os/bottlerocket + +BuildRequires: %{_cross_os}glibc-devel + +%description +%{summary}. + +%prep +%setup -T -c +%cargo_prep + +%build +%cargo_build --manifest-path %{_builddir}/sources/Cargo.toml \ + -p settings-extension-%{extension_name} + +%install +install -d %{buildroot}%{_cross_libexecdir} +install -p -m 0755 \ + ${HOME}/.cache/%{__cargo_target}/release/settings-extension-%{extension_name} \ + %{buildroot}%{_cross_libexecdir} + +install -d %{buildroot}%{_cross_libexecdir}/settings +ln -sf \ + ../settings-extension-%{extension_name} \ + %{buildroot}%{_cross_libexecdir}/settings/%{extension_name} + +%files +%{_cross_libexecdir}/settings-extension-%{extension_name} +%{_cross_libexecdir}/settings/%{extension_name} diff --git a/sources/Cargo.lock b/sources/Cargo.lock index fc996d739bc..dd948d80593 100644 --- a/sources/Cargo.lock +++ b/sources/Cargo.lock @@ -1754,6 +1754,19 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "env_logger" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + [[package]] name = "envy" version = "0.4.2" @@ -2176,6 +2189,12 @@ dependencies = [ "tokio", ] +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "hyper" version = "0.14.27" @@ -2322,6 +2341,17 @@ dependencies = [ "serde", ] +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi", + "rustix", + "windows-sys", +] + [[package]] name = "itertools" version = "0.10.5" @@ -2692,6 +2722,7 @@ dependencies = [ "serde", "serde_json", "settings-extension-motd", + "settings-extension-ntp", "toml 0.5.11", ] @@ -3740,6 +3771,18 @@ dependencies = [ "string_impls_for", ] +[[package]] +name = "settings-extension-ntp" +version = "0.1.0" +dependencies = [ + "bottlerocket-settings-sdk", + "env_logger", + "model-derive", + "modeled-types", + "serde", + "serde_json", +] + [[package]] name = "sha1" version = "0.10.6" diff --git a/sources/Cargo.toml b/sources/Cargo.toml index 1ca631f0ccc..2d251ff22aa 100644 --- a/sources/Cargo.toml +++ b/sources/Cargo.toml @@ -103,6 +103,7 @@ members = [ "models", "settings-extensions/motd", + "settings-extensions/ntp", "parse-datetime", diff --git a/sources/models/Cargo.toml b/sources/models/Cargo.toml index 625d8dfb2ed..be4ae0819d3 100644 --- a/sources/models/Cargo.toml +++ b/sources/models/Cargo.toml @@ -19,6 +19,7 @@ toml = "0.5" # settings extensions settings-extension-motd = { path = "../settings-extensions/motd", version = "0.1" } +settings-extension-ntp = { path = "../settings-extensions/ntp", version = "0.1" } [build-dependencies] bottlerocket-variant = { version = "0.1", path = "../bottlerocket-variant" } diff --git a/sources/models/src/aws-dev/mod.rs b/sources/models/src/aws-dev/mod.rs index 142066964f8..993d52075ef 100644 --- a/sources/models/src/aws-dev/mod.rs +++ b/sources/models/src/aws-dev/mod.rs @@ -3,8 +3,8 @@ use std::collections::HashMap; use crate::{ AwsSettings, BootSettings, BootstrapContainer, CloudFormationSettings, DnsSettings, - HostContainer, KernelSettings, MetricsSettings, NetworkSettings, NtpSettings, OciHooks, - PemCertificate, RegistrySettings, UpdatesSettings, + HostContainer, KernelSettings, MetricsSettings, NetworkSettings, OciHooks, PemCertificate, + RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -16,7 +16,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/aws-ecs-1-nvidia/mod.rs b/sources/models/src/aws-ecs-1-nvidia/mod.rs index 52b81d0d9f7..d7729f411c9 100644 --- a/sources/models/src/aws-ecs-1-nvidia/mod.rs +++ b/sources/models/src/aws-ecs-1-nvidia/mod.rs @@ -3,8 +3,8 @@ use std::collections::HashMap; use crate::{ AutoScalingSettings, AwsSettings, BootstrapContainer, CloudFormationSettings, DnsSettings, - ECSSettings, HostContainer, KernelSettings, MetricsSettings, NetworkSettings, NtpSettings, - OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, + ECSSettings, HostContainer, KernelSettings, MetricsSettings, NetworkSettings, OciDefaults, + OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -16,7 +16,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, aws: AwsSettings, diff --git a/sources/models/src/aws-ecs-1/mod.rs b/sources/models/src/aws-ecs-1/mod.rs index 52b81d0d9f7..d7729f411c9 100644 --- a/sources/models/src/aws-ecs-1/mod.rs +++ b/sources/models/src/aws-ecs-1/mod.rs @@ -3,8 +3,8 @@ use std::collections::HashMap; use crate::{ AutoScalingSettings, AwsSettings, BootstrapContainer, CloudFormationSettings, DnsSettings, - ECSSettings, HostContainer, KernelSettings, MetricsSettings, NetworkSettings, NtpSettings, - OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, + ECSSettings, HostContainer, KernelSettings, MetricsSettings, NetworkSettings, OciDefaults, + OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -16,7 +16,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, aws: AwsSettings, diff --git a/sources/models/src/aws-ecs-2-nvidia/mod.rs b/sources/models/src/aws-ecs-2-nvidia/mod.rs index d70819f730e..b9e715a6cea 100644 --- a/sources/models/src/aws-ecs-2-nvidia/mod.rs +++ b/sources/models/src/aws-ecs-2-nvidia/mod.rs @@ -4,7 +4,7 @@ use std::collections::HashMap; use crate::{ AutoScalingSettings, AwsSettings, BootSettings, BootstrapContainer, CloudFormationSettings, DnsSettings, ECSSettings, HostContainer, KernelSettings, MetricsSettings, NetworkSettings, - NtpSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, + OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -16,7 +16,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/aws-ecs-2/mod.rs b/sources/models/src/aws-ecs-2/mod.rs index d70819f730e..b9e715a6cea 100644 --- a/sources/models/src/aws-ecs-2/mod.rs +++ b/sources/models/src/aws-ecs-2/mod.rs @@ -4,7 +4,7 @@ use std::collections::HashMap; use crate::{ AutoScalingSettings, AwsSettings, BootSettings, BootstrapContainer, CloudFormationSettings, DnsSettings, ECSSettings, HostContainer, KernelSettings, MetricsSettings, NetworkSettings, - NtpSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, + OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -16,7 +16,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/aws-k8s-1.24-nvidia/mod.rs b/sources/models/src/aws-k8s-1.24-nvidia/mod.rs index 24d296b1606..93c76aaa070 100644 --- a/sources/models/src/aws-k8s-1.24-nvidia/mod.rs +++ b/sources/models/src/aws-k8s-1.24-nvidia/mod.rs @@ -1,8 +1,7 @@ use crate::{ AutoScalingSettings, AwsSettings, BootSettings, BootstrapContainer, CloudFormationSettings, DnsSettings, HostContainer, KernelSettings, KubernetesSettings, MetricsSettings, - NetworkSettings, NtpSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, - UpdatesSettings, + NetworkSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -18,7 +17,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/aws-k8s-1.24/mod.rs b/sources/models/src/aws-k8s-1.24/mod.rs index 9ca1af826a1..2cda27e8c06 100644 --- a/sources/models/src/aws-k8s-1.24/mod.rs +++ b/sources/models/src/aws-k8s-1.24/mod.rs @@ -1,8 +1,8 @@ use crate::{ AutoScalingSettings, AwsSettings, BootSettings, BootstrapContainer, CloudFormationSettings, ContainerRuntimeSettings, DnsSettings, HostContainer, KernelSettings, KubernetesSettings, - MetricsSettings, NetworkSettings, NtpSettings, OciDefaults, OciHooks, PemCertificate, - RegistrySettings, UpdatesSettings, + MetricsSettings, NetworkSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, + UpdatesSettings, }; use modeled_types::Identifier; @@ -18,7 +18,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/aws-k8s-1.25-nvidia/mod.rs b/sources/models/src/aws-k8s-1.25-nvidia/mod.rs index 24d296b1606..93c76aaa070 100644 --- a/sources/models/src/aws-k8s-1.25-nvidia/mod.rs +++ b/sources/models/src/aws-k8s-1.25-nvidia/mod.rs @@ -1,8 +1,7 @@ use crate::{ AutoScalingSettings, AwsSettings, BootSettings, BootstrapContainer, CloudFormationSettings, DnsSettings, HostContainer, KernelSettings, KubernetesSettings, MetricsSettings, - NetworkSettings, NtpSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, - UpdatesSettings, + NetworkSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -18,7 +17,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/aws-k8s-1.25/mod.rs b/sources/models/src/aws-k8s-1.25/mod.rs index 9ca1af826a1..2cda27e8c06 100644 --- a/sources/models/src/aws-k8s-1.25/mod.rs +++ b/sources/models/src/aws-k8s-1.25/mod.rs @@ -1,8 +1,8 @@ use crate::{ AutoScalingSettings, AwsSettings, BootSettings, BootstrapContainer, CloudFormationSettings, ContainerRuntimeSettings, DnsSettings, HostContainer, KernelSettings, KubernetesSettings, - MetricsSettings, NetworkSettings, NtpSettings, OciDefaults, OciHooks, PemCertificate, - RegistrySettings, UpdatesSettings, + MetricsSettings, NetworkSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, + UpdatesSettings, }; use modeled_types::Identifier; @@ -18,7 +18,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/aws-k8s-1.26-nvidia/mod.rs b/sources/models/src/aws-k8s-1.26-nvidia/mod.rs index 24d296b1606..93c76aaa070 100644 --- a/sources/models/src/aws-k8s-1.26-nvidia/mod.rs +++ b/sources/models/src/aws-k8s-1.26-nvidia/mod.rs @@ -1,8 +1,7 @@ use crate::{ AutoScalingSettings, AwsSettings, BootSettings, BootstrapContainer, CloudFormationSettings, DnsSettings, HostContainer, KernelSettings, KubernetesSettings, MetricsSettings, - NetworkSettings, NtpSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, - UpdatesSettings, + NetworkSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -18,7 +17,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/aws-k8s-1.26/mod.rs b/sources/models/src/aws-k8s-1.26/mod.rs index 9ca1af826a1..2cda27e8c06 100644 --- a/sources/models/src/aws-k8s-1.26/mod.rs +++ b/sources/models/src/aws-k8s-1.26/mod.rs @@ -1,8 +1,8 @@ use crate::{ AutoScalingSettings, AwsSettings, BootSettings, BootstrapContainer, CloudFormationSettings, ContainerRuntimeSettings, DnsSettings, HostContainer, KernelSettings, KubernetesSettings, - MetricsSettings, NetworkSettings, NtpSettings, OciDefaults, OciHooks, PemCertificate, - RegistrySettings, UpdatesSettings, + MetricsSettings, NetworkSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, + UpdatesSettings, }; use modeled_types::Identifier; @@ -18,7 +18,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/aws-k8s-1.28-nvidia/mod.rs b/sources/models/src/aws-k8s-1.28-nvidia/mod.rs index 24d296b1606..93c76aaa070 100644 --- a/sources/models/src/aws-k8s-1.28-nvidia/mod.rs +++ b/sources/models/src/aws-k8s-1.28-nvidia/mod.rs @@ -1,8 +1,7 @@ use crate::{ AutoScalingSettings, AwsSettings, BootSettings, BootstrapContainer, CloudFormationSettings, DnsSettings, HostContainer, KernelSettings, KubernetesSettings, MetricsSettings, - NetworkSettings, NtpSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, - UpdatesSettings, + NetworkSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -18,7 +17,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/aws-k8s-1.28/mod.rs b/sources/models/src/aws-k8s-1.28/mod.rs index 9ca1af826a1..2cda27e8c06 100644 --- a/sources/models/src/aws-k8s-1.28/mod.rs +++ b/sources/models/src/aws-k8s-1.28/mod.rs @@ -1,8 +1,8 @@ use crate::{ AutoScalingSettings, AwsSettings, BootSettings, BootstrapContainer, CloudFormationSettings, ContainerRuntimeSettings, DnsSettings, HostContainer, KernelSettings, KubernetesSettings, - MetricsSettings, NetworkSettings, NtpSettings, OciDefaults, OciHooks, PemCertificate, - RegistrySettings, UpdatesSettings, + MetricsSettings, NetworkSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, + UpdatesSettings, }; use modeled_types::Identifier; @@ -18,7 +18,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/metal-dev/mod.rs b/sources/models/src/metal-dev/mod.rs index fc529306a79..1d5fbbae4e0 100644 --- a/sources/models/src/metal-dev/mod.rs +++ b/sources/models/src/metal-dev/mod.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use crate::{ BootSettings, BootstrapContainer, DnsSettings, HostContainer, KernelSettings, MetricsSettings, - NetworkSettings, NtpSettings, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, + NetworkSettings, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -15,7 +15,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/metal-k8s-1.24/mod.rs b/sources/models/src/metal-k8s-1.24/mod.rs index 03263e9e1f3..f8a58a22cb0 100644 --- a/sources/models/src/metal-k8s-1.24/mod.rs +++ b/sources/models/src/metal-k8s-1.24/mod.rs @@ -4,7 +4,7 @@ use std::collections::HashMap; use crate::{ AwsSettings, BootSettings, BootstrapContainer, ContainerRuntimeSettings, DnsSettings, HostContainer, KernelSettings, KubernetesSettings, MetricsSettings, NetworkSettings, - NtpSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, + OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -17,7 +17,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/metal-k8s-1.28/mod.rs b/sources/models/src/metal-k8s-1.28/mod.rs index 03263e9e1f3..f8a58a22cb0 100644 --- a/sources/models/src/metal-k8s-1.28/mod.rs +++ b/sources/models/src/metal-k8s-1.28/mod.rs @@ -4,7 +4,7 @@ use std::collections::HashMap; use crate::{ AwsSettings, BootSettings, BootstrapContainer, ContainerRuntimeSettings, DnsSettings, HostContainer, KernelSettings, KubernetesSettings, MetricsSettings, NetworkSettings, - NtpSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, + OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -17,7 +17,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/vmware-dev/mod.rs b/sources/models/src/vmware-dev/mod.rs index fc529306a79..1d5fbbae4e0 100644 --- a/sources/models/src/vmware-dev/mod.rs +++ b/sources/models/src/vmware-dev/mod.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use crate::{ BootSettings, BootstrapContainer, DnsSettings, HostContainer, KernelSettings, MetricsSettings, - NetworkSettings, NtpSettings, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, + NetworkSettings, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -15,7 +15,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, boot: BootSettings, diff --git a/sources/models/src/vmware-k8s-1.24/mod.rs b/sources/models/src/vmware-k8s-1.24/mod.rs index 3e14ce00512..309de21f4e6 100644 --- a/sources/models/src/vmware-k8s-1.24/mod.rs +++ b/sources/models/src/vmware-k8s-1.24/mod.rs @@ -4,7 +4,7 @@ use std::collections::HashMap; use crate::{ AwsSettings, BootSettings, BootstrapContainer, ContainerRuntimeSettings, DnsSettings, HostContainer, KernelSettings, KubernetesSettings, MetricsSettings, NetworkSettings, - NtpSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, + OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -17,7 +17,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, aws: AwsSettings, diff --git a/sources/models/src/vmware-k8s-1.28/mod.rs b/sources/models/src/vmware-k8s-1.28/mod.rs index 3e14ce00512..309de21f4e6 100644 --- a/sources/models/src/vmware-k8s-1.28/mod.rs +++ b/sources/models/src/vmware-k8s-1.28/mod.rs @@ -4,7 +4,7 @@ use std::collections::HashMap; use crate::{ AwsSettings, BootSettings, BootstrapContainer, ContainerRuntimeSettings, DnsSettings, HostContainer, KernelSettings, KubernetesSettings, MetricsSettings, NetworkSettings, - NtpSettings, OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, + OciDefaults, OciHooks, PemCertificate, RegistrySettings, UpdatesSettings, }; use modeled_types::Identifier; @@ -17,7 +17,7 @@ struct Settings { updates: UpdatesSettings, host_containers: HashMap, bootstrap_containers: HashMap, - ntp: NtpSettings, + ntp: settings_extension_ntp::NtpSettingsV1, network: NetworkSettings, kernel: KernelSettings, aws: AwsSettings, diff --git a/sources/settings-extensions/ntp/Cargo.toml b/sources/settings-extensions/ntp/Cargo.toml new file mode 100644 index 00000000000..d9307a2f90d --- /dev/null +++ b/sources/settings-extensions/ntp/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "settings-extension-ntp" +version = "0.1.0" +authors = ["Sam Berning "] +license = "Apache-2.0 OR MIT" +edition = "2021" +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.1" +version = "0.1.0-alpha" diff --git a/sources/settings-extensions/ntp/ntp.toml b/sources/settings-extensions/ntp/ntp.toml new file mode 100644 index 00000000000..727dfb274cd --- /dev/null +++ b/sources/settings-extensions/ntp/ntp.toml @@ -0,0 +1,13 @@ +[extension] +supported-versions = [ + "v1" +] +default-version = "v1" + +[v1] +[v1.validation.cross-validates] + +[v1.templating] +helpers = [] + +[v1.generation.requires] diff --git a/sources/settings-extensions/ntp/src/lib.rs b/sources/settings-extensions/ntp/src/lib.rs new file mode 100644 index 00000000000..c541c99d478 --- /dev/null +++ b/sources/settings-extensions/ntp/src/lib.rs @@ -0,0 +1,88 @@ +/// The ntp settings can be used to specify time servers with which to synchronize the instance's +/// clock. +use bottlerocket_settings_sdk::{GenerateResult, LinearlyMigrateable, NoMigration, SettingsModel}; +use model_derive::model; +use modeled_types::Url; +use std::convert::Infallible; + +#[model(impl_default = true)] +pub struct NtpSettingsV1 { + time_servers: Vec, +} + +type Result = std::result::Result; + +impl SettingsModel for NtpSettingsV1 { + /// the `model` macro makes every field of the `NtpSettingsV1` struct an `Option`, so we can use + /// the type as its own `PartialKind`. + type PartialKind = Self; + type ErrorKind = Infallible; + + fn get_version() -> &'static str { + "v1" + } + + fn set(_current_value: Option, _target: Self) -> Result<()> { + // Anything that parses as a list of URLs is ok + Ok(()) + } + + fn generate( + existing_partial: Option, + _dependent_settings: Option, + ) -> Result> { + Ok(GenerateResult::Complete( + existing_partial.unwrap_or_default(), + )) + } + + fn validate(_value: Self, _validated_settings: Option) -> Result<()> { + // Anything that parses as a list of URLs is ok + Ok(()) + } +} + +impl LinearlyMigrateable for NtpSettingsV1 { + type ForwardMigrationTarget = NoMigration; + type BackwardMigrationTarget = NoMigration; + + fn migrate_forward(&self) -> Result { + NoMigration::no_defined_migration() + } + + fn migrate_backward(&self) -> Result { + NoMigration::no_defined_migration() + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_generate_ntp_settings() { + assert_eq!( + NtpSettingsV1::generate(None, None), + Ok(GenerateResult::Complete(NtpSettingsV1 { + time_servers: None + })) + ) + } + + #[test] + fn test_serde_ntp() { + let test_json = r#"{"time-servers":["https://example.net","http://www.example.com"]}"#; + + let ntp: NtpSettingsV1 = serde_json::from_str(test_json).unwrap(); + assert_eq!( + ntp.time_servers.clone().unwrap(), + vec!( + Url::try_from("https://example.net").unwrap(), + Url::try_from("http://www.example.com").unwrap(), + ) + ); + + let results = serde_json::to_string(&ntp).unwrap(); + assert_eq!(results, test_json); + } +} diff --git a/sources/settings-extensions/ntp/src/main.rs b/sources/settings-extensions/ntp/src/main.rs new file mode 100644 index 00000000000..a3b2444f09c --- /dev/null +++ b/sources/settings-extensions/ntp/src/main.rs @@ -0,0 +1,18 @@ +use bottlerocket_settings_sdk::{BottlerocketSetting, LinearMigratorExtensionBuilder}; +use settings_extension_ntp::NtpSettingsV1; +use std::process::ExitCode; + +fn main() -> ExitCode { + env_logger::init(); + + match LinearMigratorExtensionBuilder::with_name("ntp") + .with_models(vec![BottlerocketSetting::::model()]) + .build() + { + Ok(extension) => extension.run(), + Err(e) => { + println!("{}", e); + ExitCode::FAILURE + } + } +}