in enclave_build/src/lib.rs [151:199]
fn generate_identity_info(&self) -> Result<EifIdentityInfo, Docker2EifError> {
let docker_info = self
.docker
.inspect_image()
.map_err(|e| Docker2EifError::MetadataError(format!("Docker inspect error: {e:?}")))?;
let uri_split: Vec<&str> = self.docker_image.split(':').collect();
if uri_split.is_empty() {
return Err(Docker2EifError::MetadataError(
"Wrong image name specified".to_string(),
));
}
// Image hash is used by default in case image version is not provided.
// It's taken from JSON generated by `docker inspect` and a bit fragile.
// May be later we should change it to fetching this data
// from a specific struct and not JSON
let img_hash = docker_info
.get("Id")
.and_then(|val| val.as_str())
.and_then(|str| str.strip_prefix("sha256:"))
.ok_or_else(|| {
Docker2EifError::MetadataError(
"Image info must contain string Id field".to_string(),
)
})?;
let img_name = self
.img_name
.clone()
.unwrap_or_else(|| uri_split[0].to_string());
let img_version = self
.img_version
.clone()
.unwrap_or_else(|| img_hash.to_string());
let mut custom_info = json!(null);
if let Some(ref path) = self.metadata_path {
custom_info = parse_custom_metadata(path).map_err(Docker2EifError::MetadataError)?
}
Ok(EifIdentityInfo {
img_name,
img_version,
build_info: self.build_info.clone(),
docker_info,
custom_info,
})
}