@@ -44,11 +44,16 @@ const (
44
44
)
45
45
46
46
var (
47
- metadataServiceUrl = url.URL {
47
+ ipv4MetadataServiceUrl = url.URL {
48
48
Scheme : "http" ,
49
49
Host : "169.254.169.254" ,
50
50
Path : "openstack/latest/user_data" ,
51
51
}
52
+ ipv6MetadataServiceUrl = url.URL {
53
+ Scheme : "http" ,
54
+ Host : "[fe80::a9fe:a9fe]" ,
55
+ Path : "openstack/latest/user_data" ,
56
+ }
52
57
)
53
58
54
59
func init () {
@@ -167,13 +172,23 @@ func fetchConfigFromDevice(logger *log.Logger, ctx context.Context, path string)
167
172
}
168
173
169
174
func fetchConfigFromMetadataService (f * resource.Fetcher ) ([]byte , error ) {
170
- res , err := f .FetchToBuffer (metadataServiceUrl , resource.FetchOptions {})
175
+ var res []byte
176
+ var err error
177
+
178
+ // Try IPv4 endpoint
179
+ res , err = f .FetchToBuffer (ipv4MetadataServiceUrl , resource.FetchOptions {})
180
+ if err == resource .ErrNotFound {
181
+ return nil , nil
182
+ } else if err == nil {
183
+ return res , nil
184
+ }
171
185
172
- // the metadata server exists but doesn't contain any actual metadata,
173
- // assume that there is no config specified
186
+ // If IPv4 fails, try IPv6 endpoint
187
+ res , err = f . FetchToBuffer ( ipv6MetadataServiceUrl , resource. FetchOptions {})
174
188
if err == resource .ErrNotFound {
175
189
return nil , nil
176
190
}
177
191
192
+ // If both endpoints fail, it will return the appropriate error
178
193
return res , err
179
194
}
0 commit comments