Skip to content

Commit ebf930c

Browse files
committed
openstack provider: ignore ec2 metadata if not present
Signed-off-by: Riccardo Piccoli <[email protected]>
1 parent de95d78 commit ebf930c

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

docs/release-notes.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ Major changes:
1010

1111
Minor changes:
1212

13+
- Openstack: do not fail if ec2 metadata is not found
14+
1315
Packaging changes:
1416

1517
## Afterburn 5.7.0

src/providers/openstack/configdrive.rs

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -101,20 +101,27 @@ 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(anyhow::Error::new(e).context(format!("failed to open file '{filename:?}'"))),
112+
};
108113
let bufrd = BufReader::new(file);
109-
Self::parse_metadata_ec2(bufrd)
110-
.with_context(|| format!("failed to parse file '{filename:?}'"))
114+
match Self::parse_metadata_ec2(bufrd)
115+
.with_context(|| format!("failed to parse file '{filename:?}'")) {
116+
Ok(metadata) => Ok(Some(metadata)),
117+
Err(e) => Err(e),
118+
}
111119
}
112120

113121
/// The metadata is stored as key:value pair in openstack/latest/meta_data.json file
114122
fn read_metadata_openstack(&self) -> Result<MetadataOpenstackJSON> {
115123
let filename = self.metadata_dir("openstack").join("meta_data.json");
116-
let file =
117-
File::open(&filename).with_context(|| format!("failed to open file '{filename:?}'"))?;
124+
let file = File::open(&filename).with_context(|| format!("failed to open file '{filename:?}'"))?;
118125
let bufrd = BufReader::new(file);
119126
Self::parse_metadata_openstack(bufrd)
120127
.with_context(|| format!("failed to parse file '{filename:?}'"))
@@ -144,17 +151,22 @@ impl OpenstackConfigDrive {
144151
impl MetadataProvider for OpenstackConfigDrive {
145152
fn attributes(&self) -> Result<HashMap<String, String>> {
146153
let mut out = HashMap::with_capacity(6);
147-
let metadata_ec2: MetadataEc2JSON = self.read_metadata_ec2()?;
148154
let metadata_openstack: MetadataOpenstackJSON = self.read_metadata_openstack()?;
149155
if let Some(hostname) = metadata_openstack.hostname {
150156
out.insert("OPENSTACK_HOSTNAME".to_string(), hostname);
151157
}
152-
if let Some(instance_id) = metadata_ec2.instance_id {
153-
out.insert("OPENSTACK_INSTANCE_ID".to_string(), instance_id);
154-
}
155158
if let Some(uuid) = metadata_openstack.uuid {
156159
out.insert("OPENSTACK_INSTANCE_UUID".to_string(), uuid);
157160
}
161+
162+
let metadata_ec2 = match self.read_metadata_ec2() {
163+
Ok(Some(metadata)) => metadata,
164+
Ok(None) => return Ok(out),
165+
Err(e) => return Err(e),
166+
};
167+
if let Some(instance_id) = metadata_ec2.instance_id {
168+
out.insert("OPENSTACK_INSTANCE_ID".to_string(), instance_id);
169+
}
158170
if let Some(instance_type) = metadata_ec2.instance_type {
159171
out.insert("OPENSTACK_INSTANCE_TYPE".to_string(), instance_type);
160172
}

0 commit comments

Comments
 (0)