Skip to content

Commit f1a9378

Browse files
committed
openstack provider: ignore ec2 metadata if not present
Signed-off-by: Riccardo Piccoli <rpiccoli@redhat.com>
1 parent e88b2be commit f1a9378

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

docs/release-notes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Major changes:
1111
Minor changes:
1212

1313
- ProxmoxVE: Fixed instance boot without config drive
14+
- OpenStack: do not fail if ec2 metadata is not found
1415

1516
Packaging changes:
1617

src/providers/openstack/configdrive.rs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,19 @@ impl OpenstackConfigDrive {
101101
}
102102

103103
/// The metadata is stored as key:value pair in ec2/latest/meta-data.json file
104-
fn read_metadata_ec2(&self) -> Result<MetadataEc2JSON> {
104+
fn read_metadata_ec2(&self) -> Result<Option<MetadataEc2JSON>> {
105+
use std::io::ErrorKind::NotFound;
106+
105107
let filename = self.metadata_dir("ec2").join("meta-data.json");
106-
let file =
107-
File::open(&filename).with_context(|| format!("failed to open file '{filename:?}'"))?;
108+
let file = match File::open(&filename) {
109+
Ok(file) => file,
110+
Err(e) if e.kind() == NotFound => return Ok(None),
111+
Err(e) => return Err(e).with_context(|| format!("failed to open file '{filename:?}'")),
112+
};
108113
let bufrd = BufReader::new(file);
109114
Self::parse_metadata_ec2(bufrd)
110115
.with_context(|| format!("failed to parse file '{filename:?}'"))
116+
.map(Some)
111117
}
112118

113119
/// The metadata is stored as key:value pair in openstack/latest/meta_data.json file
@@ -144,17 +150,20 @@ impl OpenstackConfigDrive {
144150
impl MetadataProvider for OpenstackConfigDrive {
145151
fn attributes(&self) -> Result<HashMap<String, String>> {
146152
let mut out = HashMap::with_capacity(6);
147-
let metadata_ec2: MetadataEc2JSON = self.read_metadata_ec2()?;
148153
let metadata_openstack: MetadataOpenstackJSON = self.read_metadata_openstack()?;
149154
if let Some(hostname) = metadata_openstack.hostname {
150155
out.insert("OPENSTACK_HOSTNAME".to_string(), hostname);
151156
}
152-
if let Some(instance_id) = metadata_ec2.instance_id {
153-
out.insert("OPENSTACK_INSTANCE_ID".to_string(), instance_id);
154-
}
155157
if let Some(uuid) = metadata_openstack.uuid {
156158
out.insert("OPENSTACK_INSTANCE_UUID".to_string(), uuid);
157159
}
160+
161+
let Some(metadata_ec2) = self.read_metadata_ec2()? else {
162+
return Ok(out);
163+
};
164+
if let Some(instance_id) = metadata_ec2.instance_id {
165+
out.insert("OPENSTACK_INSTANCE_ID".to_string(), instance_id);
166+
}
158167
if let Some(instance_type) = metadata_ec2.instance_type {
159168
out.insert("OPENSTACK_INSTANCE_TYPE".to_string(), instance_type);
160169
}

0 commit comments

Comments
 (0)