Skip to content

Commit 6aa9dc1

Browse files
author
Sachin Tiptur
committed
Fixed review comments
Signed-off-by: Sachin Tiptur <[email protected]>
1 parent d066d36 commit 6aa9dc1

File tree

4 files changed

+46
-32
lines changed

4 files changed

+46
-32
lines changed

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ package-hosted directory like this:
6262

6363
```bash
6464
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
65-
REGION=fra1 DO_ACCESS_TOKEN=your_access_token DO_IP_ADDR_FAMILIES=ipv4 go run main.go \
65+
REGION=fra1 DO_ACCESS_TOKEN=your_access_token go run main.go \
6666
--kubeconfig <path to your kubeconfig file> \
6767
--leader-elect=false --v=5 --cloud-provider=digitalocean
6868
```
@@ -79,10 +79,10 @@ You might also need to provide your DigitalOcean access token in
7979
the cloud controller to start, but in that case, you will not be able to
8080
validate integration with DigitalOcean API.
8181

82-
The `DO_IP_ADDR_FAMILIES` is used to configure the required IP familes and the
83-
order in which address should be populated in nodes status. The accepted values
84-
are one of the `{"", "ipv4", "ipv6", "ipv4,ipv6", "ipv6,ipv4"}`.IPv4 is the
85-
default, if not set or empty.
82+
The `DO_IP_ADDR_FAMILIES` is used to configure the required IP families and the
83+
order in which the addresses should be populated in nodes status. The accepted values
84+
are one of the `"ipv4", "ipv6"` or a comma-separated list of multiple IP address
85+
families. IPv4 is the default, if not set or empty.
8686

8787
Please note that if you use a Kubernetes cluster created on DigitalOcean, there
8888
will be a cloud controller manager running in the cluster already, so your local

cloud-controller-manager/do/cloud.go

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

6363
var version string
6464

65-
var ipFamilyOpts = []string{"", "ipv4", "ipv6", "ipv4,ipv6", "ipv6,ipv4"}
66-
var ipFamilies string
67-
6865
type tokenSource struct {
6966
AccessToken string
7067
}
@@ -162,10 +159,8 @@ func newCloud() (cloudprovider.Interface, error) {
162159
addr = fmt.Sprintf("%s:%s", addrHost, addrPort)
163160
}
164161

165-
// var ipFamilies string
166162
ipf, set := os.LookupEnv(doIPAddrFamiliesEnv)
167-
ipFamilies = ipf
168-
if set && !containsString(ipFamilyOpts, ipFamilies) {
163+
if set && !validateAndSetIPFamilies(ipf) {
169164
return nil, fmt.Errorf("invalid value set for environment variable %q", doIPAddrFamiliesEnv)
170165
}
171166

@@ -292,11 +287,17 @@ func (c *cloud) HasClusterID() bool {
292287
return false
293288
}
294289

295-
func containsString(vals []string, val string) bool {
296-
for _, v := range vals {
297-
if v == val {
298-
return true
290+
func validateAndSetIPFamilies(ipf string) bool {
291+
for _, v := range strings.Split(ipf, ",") {
292+
ipf := strings.TrimSpace(v)
293+
switch ipf {
294+
case "ipv4":
295+
ipFamilies = append(ipFamilies, ipv4Family)
296+
case "ipv6":
297+
ipFamilies = append(ipFamilies, ipv6Family)
298+
default:
299+
return false
299300
}
300301
}
301-
return false
302+
return true
302303
}

cloud-controller-manager/do/common.go

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,20 @@ import (
2020
"context"
2121
"errors"
2222
"fmt"
23-
"strings"
2423

2524
"github.com/digitalocean/godo"
2625
v1 "k8s.io/api/core/v1"
2726
)
2827

28+
type IPFamily string
29+
30+
var ipFamilies []IPFamily
31+
32+
const (
33+
ipv4Family IPFamily = "ipv4"
34+
ipv6Family IPFamily = "ipv6"
35+
)
36+
2937
// apiResultsPerPage is the maximum page size that DigitalOcean's api supports.
3038
const apiResultsPerPage = 200
3139

@@ -130,20 +138,31 @@ func nodeAddresses(droplet *godo.Droplet) ([]v1.NodeAddress, error) {
130138
var addresses []v1.NodeAddress
131139
addresses = append(addresses, v1.NodeAddress{Type: v1.NodeHostName, Address: droplet.Name})
132140

133-
for _, i := range strings.Split(ipFamilies, ",") {
134-
addr, err := discoverAddress(droplet, i)
141+
// default case when DO_IP_ADDR_FAMILIES is not set
142+
if ipFamilies == nil {
143+
addr, err := discoverAddress(droplet, ipv4Family)
135144
if err != nil {
136-
return nil, fmt.Errorf("could not get addresses for %s : %v", i, err)
145+
return nil, fmt.Errorf("could not get addresses for %s : %v", ipv4Family, err)
137146
}
138147
addresses = append(addresses, addr...)
148+
} else {
149+
for _, i := range ipFamilies {
150+
addr, err := discoverAddress(droplet, i)
151+
if err != nil {
152+
return nil, fmt.Errorf("could not get addresses for %s : %v", i, err)
153+
}
154+
addresses = append(addresses, addr...)
155+
}
139156
}
140157

141158
return addresses, nil
142159
}
143160

144-
func discoverAddress(droplet *godo.Droplet, family string) ([]v1.NodeAddress, error) {
161+
func discoverAddress(droplet *godo.Droplet, family IPFamily) ([]v1.NodeAddress, error) {
145162
var addresses []v1.NodeAddress
146-
if family == "ipv4" || family == "" {
163+
164+
switch family {
165+
case ipv4Family:
147166
privateIP, err := droplet.PrivateIPv4()
148167
if err != nil || privateIP == "" {
149168
return nil, fmt.Errorf("could not get private ip: %v", err)
@@ -156,15 +175,13 @@ func discoverAddress(droplet *godo.Droplet, family string) ([]v1.NodeAddress, er
156175
}
157176
addresses = append(addresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: publicIP})
158177
return addresses, nil
159-
}
160-
if family == "ipv6" {
178+
case ipv6Family:
161179
publicIPv6, err := droplet.PublicIPv6()
162180
if err != nil || publicIPv6 == "" {
163181
return nil, fmt.Errorf("could not get public ipv6: %v", err)
164182
}
165183
addresses = append(addresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: publicIPv6})
166184
return addresses, nil
167185
}
168-
169186
return addresses, nil
170187
}

cloud-controller-manager/do/droplets_test.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -199,11 +199,11 @@ func TestNodeAddresses(t *testing.T) {
199199
Address: "99.99.99.99",
200200
},
201201
{
202-
Type: "public",
202+
Type: v1.NodeExternalIP,
203203
Address: "2a01::10",
204204
},
205205
}
206-
206+
ipFamilies = []IPFamily{ipv4Family, ipv6Family}
207207
addresses, err := instances.NodeAddresses(context.TODO(), "test-droplet")
208208

209209
if !reflect.DeepEqual(addresses, expectedAddresses) {
@@ -238,12 +238,8 @@ func TestNodeAddressesByProviderID(t *testing.T) {
238238
Type: v1.NodeExternalIP,
239239
Address: "99.99.99.99",
240240
},
241-
{
242-
Type: "public",
243-
Address: "2a01::10",
244-
},
245241
}
246-
242+
ipFamilies = []IPFamily{ipv4Family}
247243
addresses, err := instances.NodeAddressesByProviderID(context.TODO(), "digitalocean://123")
248244

249245
if !reflect.DeepEqual(addresses, expectedAddresses) {

0 commit comments

Comments
 (0)