Skip to content

Commit 91f89b5

Browse files
committed
Add single-stack IPv6 support
1 parent 1117566 commit 91f89b5

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

docs/release-notes.md

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ nav_order: 9
1111
### Features
1212

1313
- Support partitioning disk with mounted partitions
14+
- Support IPv6 for single-stack OpenStack
1415

1516
### Changes
1617

internal/providers/openstack/openstack.go

+22-5
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,16 @@ const (
4444
)
4545

4646
var (
47-
metadataServiceUrl = url.URL{
47+
ipv4MetadataServiceUrl = url.URL{
4848
Scheme: "http",
4949
Host: "169.254.169.254",
5050
Path: "openstack/latest/user_data",
5151
}
52+
ipv6MetadataServiceUrl = url.URL{
53+
Scheme: "http",
54+
Host: "[fe80::a9fe:a9fe]",
55+
Path: "openstack/latest/user_data",
56+
}
5257
)
5358

5459
func init() {
@@ -167,13 +172,25 @@ func fetchConfigFromDevice(logger *log.Logger, ctx context.Context, path string)
167172
}
168173

169174
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+
}
171185

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 {
175191
return nil, nil
176192
}
177193

194+
// If both endpoints fail, it will return the appropriate error
178195
return res, err
179196
}

0 commit comments

Comments
 (0)