-
Notifications
You must be signed in to change notification settings - Fork 519
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
vmware-variants: migrate host-container versions to latest versions
We haven't been migrating host-container versions for vmware-variants. This migration migrates all previous host-container versions to the latest host-container version on upgrade. It is unclear what version of the host-containers we should downgrade to since it could be any of the older host-container versions. We can just stay on the latest host-container version since there are no breaking changes.
- Loading branch information
Showing
5 changed files
with
136 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
13 changes: 13 additions & 0 deletions
13
sources/api/migration/migrations/v1.6.0/vmware-host-containers/Cargo.toml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
[package] | ||
name = "vmware-host-containers" | ||
version = "0.1.0" | ||
authors = ["Erikson Tung <[email protected]>"] | ||
license = "Apache-2.0 OR MIT" | ||
edition = "2021" | ||
publish = false | ||
# Don't rebuild crate just because of changes to README. | ||
exclude = ["README.md"] | ||
|
||
[dependencies] | ||
serde_json = "1" | ||
migration-helpers = { path = "../../../migration-helpers", version = "0.1.0"} |
111 changes: 111 additions & 0 deletions
111
sources/api/migration/migrations/v1.6.0/vmware-host-containers/src/main.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
#![deny(rust_2018_idioms)] | ||
|
||
use migration_helpers::{migrate, Migration, MigrationData, Result}; | ||
use std::process; | ||
|
||
const ADMIN_CONTAINER_SOURCE_SETTING_NAME: &str = "settings.host-containers.admin.source"; | ||
const ADMIN_CONTAINER_IMAGE_REPOSITORY: &str = "public.ecr.aws/bottlerocket/bottlerocket-admin"; | ||
const PREVIOUS_ADMIN_CONTAINER_VERSIONS: &[&str] = &["v0.7.0", "v0.7.1", "v0.7.2"]; | ||
const TARGET_ADMIN_CONTAINER_VERSION: &str = "v0.7.3"; | ||
|
||
const CONTROL_CONTAINER_SOURCE_SETTING_NAME: &str = "settings.host-containers.control.source"; | ||
const CONTROL_CONTAINER_IMAGE_REPOSITORY: &str = "public.ecr.aws/bottlerocket/bottlerocket-control"; | ||
const PREVIOUS_CONTROL_CONTAINER_VERSIONS: &[&str] = &["v0.5.0", "v0.5.1", "v0.5.2", "v0.5.3"]; | ||
const TARGET_CONTROL_CONTAINER_VERSION: &str = "v0.5.4"; | ||
|
||
pub struct VmwareHostContainerVersions; | ||
|
||
impl Migration for VmwareHostContainerVersions { | ||
fn forward(&mut self, mut input: MigrationData) -> Result<MigrationData> { | ||
// For admin container | ||
if let Some(data) = input.data.get_mut(ADMIN_CONTAINER_SOURCE_SETTING_NAME) { | ||
match data { | ||
serde_json::Value::String(source) => { | ||
for ver in PREVIOUS_ADMIN_CONTAINER_VERSIONS { | ||
let prev_source = format!("{}:{}", ADMIN_CONTAINER_IMAGE_REPOSITORY, ver); | ||
if *source == prev_source { | ||
*source = format!( | ||
"{}:{}", | ||
ADMIN_CONTAINER_IMAGE_REPOSITORY, TARGET_ADMIN_CONTAINER_VERSION | ||
); | ||
println!( | ||
"Changed value of '{}' from '{}' to '{}' on upgrade", | ||
ADMIN_CONTAINER_SOURCE_SETTING_NAME, prev_source, source | ||
); | ||
break; | ||
} | ||
} | ||
} | ||
_ => { | ||
println!( | ||
"'{}' is set to non-string value '{}'", | ||
ADMIN_CONTAINER_SOURCE_SETTING_NAME, data | ||
); | ||
} | ||
} | ||
} else { | ||
println!( | ||
"Found no '{}' to change on upgrade", | ||
ADMIN_CONTAINER_SOURCE_SETTING_NAME | ||
); | ||
} | ||
|
||
// For control container | ||
if let Some(data) = input.data.get_mut(CONTROL_CONTAINER_SOURCE_SETTING_NAME) { | ||
match data { | ||
serde_json::Value::String(source) => { | ||
for ver in PREVIOUS_CONTROL_CONTAINER_VERSIONS { | ||
let prev_source = format!("{}:{}", CONTROL_CONTAINER_IMAGE_REPOSITORY, ver); | ||
if *source == prev_source { | ||
*source = format!( | ||
"{}:{}", | ||
CONTROL_CONTAINER_IMAGE_REPOSITORY, | ||
TARGET_CONTROL_CONTAINER_VERSION | ||
); | ||
println!( | ||
"Changed value of '{}' from '{}' to '{}' on upgrade", | ||
CONTROL_CONTAINER_SOURCE_SETTING_NAME, prev_source, source | ||
); | ||
break; | ||
} | ||
} | ||
} | ||
_ => { | ||
println!( | ||
"'{}' is set to non-string value '{}'", | ||
CONTROL_CONTAINER_SOURCE_SETTING_NAME, data | ||
); | ||
} | ||
} | ||
} else { | ||
println!( | ||
"Found no '{}' to change on upgrade", | ||
CONTROL_CONTAINER_SOURCE_SETTING_NAME | ||
); | ||
} | ||
|
||
Ok(input) | ||
} | ||
|
||
fn backward(&mut self, input: MigrationData) -> Result<MigrationData> { | ||
// It's unclear what version of the host-containers we should downgrade to since it could | ||
// be any of the older host-container versions. | ||
// We can just stay on the latest host-container version since there are no breaking changes. | ||
println!("Vmware host-container versions migration has no work to do on downgrade"); | ||
Ok(input) | ||
} | ||
} | ||
|
||
fn run() -> Result<()> { | ||
migrate(VmwareHostContainerVersions) | ||
} | ||
|
||
// 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); | ||
} | ||
} |