@@ -101,13 +101,19 @@ impl OpenstackConfigDrive {
101
101
}
102
102
103
103
/// 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
+
105
107
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
+ } ;
108
113
let bufrd = BufReader :: new ( file) ;
109
114
Self :: parse_metadata_ec2 ( bufrd)
110
115
. with_context ( || format ! ( "failed to parse file '{filename:?}'" ) )
116
+ . map ( Some )
111
117
}
112
118
113
119
/// The metadata is stored as key:value pair in openstack/latest/meta_data.json file
@@ -144,17 +150,20 @@ impl OpenstackConfigDrive {
144
150
impl MetadataProvider for OpenstackConfigDrive {
145
151
fn attributes ( & self ) -> Result < HashMap < String , String > > {
146
152
let mut out = HashMap :: with_capacity ( 6 ) ;
147
- let metadata_ec2: MetadataEc2JSON = self . read_metadata_ec2 ( ) ?;
148
153
let metadata_openstack: MetadataOpenstackJSON = self . read_metadata_openstack ( ) ?;
149
154
if let Some ( hostname) = metadata_openstack. hostname {
150
155
out. insert ( "OPENSTACK_HOSTNAME" . to_string ( ) , hostname) ;
151
156
}
152
- if let Some ( instance_id) = metadata_ec2. instance_id {
153
- out. insert ( "OPENSTACK_INSTANCE_ID" . to_string ( ) , instance_id) ;
154
- }
155
157
if let Some ( uuid) = metadata_openstack. uuid {
156
158
out. insert ( "OPENSTACK_INSTANCE_UUID" . to_string ( ) , uuid) ;
157
159
}
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
+ }
158
167
if let Some ( instance_type) = metadata_ec2. instance_type {
159
168
out. insert ( "OPENSTACK_INSTANCE_TYPE" . to_string ( ) , instance_type) ;
160
169
}
0 commit comments