@@ -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,25 @@ 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 == nil {
181
+ return res , nil
182
+ } else if err == resource .ErrNotFound {
183
+ return nil , nil
184
+ }
171
185
172
- // the metadata server exists but doesn't contain any actual metadata,
173
- // assume that there is no config specified
174
- if err == resource .ErrNotFound {
186
+ // If IPv4 fails, try IPv6 endpoint
187
+ res , err = f .FetchToBuffer (ipv6MetadataServiceUrl , resource.FetchOptions {})
188
+ if err == nil {
189
+ return res , nil
190
+ } else if err == resource .ErrNotFound {
175
191
return nil , nil
176
192
}
177
193
194
+ // If both endpoints fail, it will return the appropriate error
178
195
return res , err
179
196
}
0 commit comments