Skip to content

Commit eb42ba3

Browse files
committed
container/encapsulate: Honor ostree.container-cmd
Builds on ostreedev/ostree-rs@6d3a69c Part of coreos/coreos-assembler#2685
1 parent db79b43 commit eb42ba3

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

lib/src/container/encapsulate.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,11 @@ fn build_oci(
121121
for (k, v) in config.labels.iter().map(|k| k.iter()).flatten() {
122122
labels.insert(k.into(), v.into());
123123
}
124-
if let Some(cmd) = config.cmd.as_ref() {
124+
// Lookup the cmd embedded in commit metadata
125+
let cmd = commit_meta.lookup::<Vec<String>>(ostree::COMMIT_META_CONTAINER_CMD)?;
126+
// But support it being overridden by CLI options
127+
let cmd = config.cmd.as_ref().or_else(|| cmd.as_ref());
128+
if let Some(cmd) = cmd {
125129
ctrcfg.set_cmd(Some(cmd.clone()));
126130
}
127131

lib/tests/it/main.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ fn generate_test_repo(dir: &Utf8Path) -> Result<Utf8PathBuf> {
5454
indoc! {"
5555
cd {dir}
5656
ostree --repo=repo init --mode=archive
57-
ostree --repo=repo commit -b {testref} --bootable --no-bindings --add-metadata-string=version=42.0 --add-metadata-string=buildsys.checksum=41af286dc0b172ed2f1ca934fd2278de4a1192302ffa07087cea2682e7d372e3 --gpg-homedir={gpghome} --gpg-sign={keyid} \
57+
ostree --repo=repo commit -b {testref} --bootable --no-bindings --add-metadata=ostree.container-cmd='[\"/usr/bin/bash\"]' --add-metadata-string=version=42.0 --add-metadata-string=buildsys.checksum=41af286dc0b172ed2f1ca934fd2278de4a1192302ffa07087cea2682e7d372e3 --gpg-homedir={gpghome} --gpg-sign={keyid} \
5858
--add-detached-metadata-string=my-detached-key=my-detached-value --tree=tar=exampleos.tar.zst >/dev/null
5959
ostree --repo=repo show {testref} >/dev/null
6060
"},
@@ -442,6 +442,14 @@ fn skopeo_inspect(imgref: &str) -> Result<String> {
442442
Ok(String::from_utf8(out.stdout)?)
443443
}
444444

445+
fn skopeo_inspect_config(imgref: &str) -> Result<oci_spec::image::ImageConfiguration> {
446+
let out = Command::new("skopeo")
447+
.args(&["inspect", "--config", imgref])
448+
.stdout(std::process::Stdio::piped())
449+
.output()?;
450+
Ok(serde_json::from_slice(&out.stdout)?)
451+
}
452+
445453
#[tokio::test]
446454
async fn test_container_import_export() -> Result<()> {
447455
let fixture = Fixture::new()?;
@@ -462,7 +470,7 @@ async fn test_container_import_export() -> Result<()> {
462470
.map(|(k, v)| (k.to_string(), v.to_string()))
463471
.collect(),
464472
),
465-
cmd: Some(vec!["/bin/bash".to_string()]),
473+
..Default::default()
466474
};
467475
let opts = ostree_ext::container::ExportOpts {
468476
copy_meta_keys: vec!["buildsys.checksum".to_string()],
@@ -486,6 +494,20 @@ async fn test_container_import_export() -> Result<()> {
486494
assert!(inspect.contains(
487495
r#""buildsys.checksum": "41af286dc0b172ed2f1ca934fd2278de4a1192302ffa07087cea2682e7d372e3""#
488496
));
497+
let cfg = skopeo_inspect_config(&srcoci_imgref.to_string())?;
498+
assert_eq!(
499+
cfg.config()
500+
.as_ref()
501+
.unwrap()
502+
.cmd()
503+
.as_ref()
504+
.unwrap()
505+
.get(0)
506+
.as_ref()
507+
.unwrap()
508+
.as_str(),
509+
"/usr/bin/bash"
510+
);
489511

490512
let srcoci_unverified = OstreeImageReference {
491513
sigverify: SignatureSource::ContainerPolicyAllowInsecure,

0 commit comments

Comments
 (0)