Skip to content

Commit 6b4e8db

Browse files
author
Sachin Tiptur
committed
fix order of IPs
Signed-off-by: Sachin Tiptur <sachin@kubermatic.com>
1 parent 81b1b3a commit 6b4e8db

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

cloud-controller-manager/do/cloud.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ const (
6262

6363
var version string
6464

65+
var ipFamilyOpts = []string{"", "ipv4", "ipv6", "ipv4,ipv6", "ipv6,ipv4"}
66+
var ipFamilies string
67+
6568
type tokenSource struct {
6669
AccessToken string
6770
}
@@ -159,6 +162,13 @@ func newCloud() (cloudprovider.Interface, error) {
159162
addr = fmt.Sprintf("%s:%s", addrHost, addrPort)
160163
}
161164

165+
// var ipFamilies string
166+
ipf, set := os.LookupEnv(doIPAddrFamiliesEnv)
167+
ipFamilies = ipf
168+
if set && !containsString(ipFamilyOpts, ipFamilies) {
169+
return nil, fmt.Errorf("invalid value set for environment variable %q", doIPAddrFamiliesEnv)
170+
}
171+
162172
return &cloud{
163173
client: doClient,
164174
instances: newInstances(resources, region),
@@ -281,3 +291,12 @@ func (c *cloud) ScrubDNS(nameservers, searches []string) (nsOut, srchOut []strin
281291
func (c *cloud) HasClusterID() bool {
282292
return false
283293
}
294+
295+
func containsString(vals []string, val string) bool {
296+
for _, v := range vals {
297+
if v == val {
298+
return true
299+
}
300+
}
301+
return false
302+
}

cloud-controller-manager/do/common.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"context"
2121
"errors"
2222
"fmt"
23-
"os"
2423
"strings"
2524

2625
"github.com/digitalocean/godo"
@@ -130,9 +129,21 @@ func allLoadBalancerList(ctx context.Context, client *godo.Client) ([]godo.LoadB
130129
func nodeAddresses(droplet *godo.Droplet) ([]v1.NodeAddress, error) {
131130
var addresses []v1.NodeAddress
132131
addresses = append(addresses, v1.NodeAddress{Type: v1.NodeHostName, Address: droplet.Name})
133-
ipFamilies := os.Getenv(doIPAddrFamiliesEnv)
134132

135-
if strings.Contains(ipFamilies, "ipv4") || ipFamilies == "" {
133+
for _, i := range strings.Split(ipFamilies, ",") {
134+
addr, err := discoverAddress(droplet, i)
135+
if err != nil {
136+
return nil, fmt.Errorf("could not get addresses for %s : %v", i, err)
137+
}
138+
addresses = append(addresses, addr...)
139+
}
140+
141+
return addresses, nil
142+
}
143+
144+
func discoverAddress(droplet *godo.Droplet, family string) ([]v1.NodeAddress, error) {
145+
var addresses []v1.NodeAddress
146+
if family == "ipv4" || family == "" {
136147
privateIP, err := droplet.PrivateIPv4()
137148
if err != nil || privateIP == "" {
138149
return nil, fmt.Errorf("could not get private ip: %v", err)
@@ -144,13 +155,15 @@ func nodeAddresses(droplet *godo.Droplet) ([]v1.NodeAddress, error) {
144155
return nil, fmt.Errorf("could not get public ip: %v", err)
145156
}
146157
addresses = append(addresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: publicIP})
158+
return addresses, nil
147159
}
148-
if strings.Contains(ipFamilies, "ipv6") {
160+
if family == "ipv6" {
149161
publicIPv6, err := droplet.PublicIPv6()
150162
if err != nil || publicIPv6 == "" {
151163
return nil, fmt.Errorf("could not get public ipv6: %v", err)
152164
}
153165
addresses = append(addresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: publicIPv6})
166+
return addresses, nil
154167
}
155168

156169
return addresses, nil

0 commit comments

Comments
 (0)