Skip to content

Commit 0970dd9

Browse files
author
Rahul Sharma
committed
add support for different nodebalancer types
1 parent bb765c2 commit 0970dd9

File tree

10 files changed

+155
-33
lines changed

10 files changed

+155
-33
lines changed

cloud/annotations/annotations.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ const (
2323

2424
AnnLinodeLoadBalancerPreserve = "service.beta.kubernetes.io/linode-loadbalancer-preserve"
2525
AnnLinodeNodeBalancerID = "service.beta.kubernetes.io/linode-loadbalancer-nodebalancer-id"
26+
AnnLinodeNodeBalancerType = "service.beta.kubernetes.io/linode-loadbalancer-nodebalancer-type"
2627

2728
AnnLinodeHostnameOnlyIngress = "service.beta.kubernetes.io/linode-loadbalancer-hostname-only-ingress"
2829
AnnLinodeLoadBalancerTags = "service.beta.kubernetes.io/linode-loadbalancer-tags"

cloud/linode/cloud.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ var Options struct {
4747
IpHolderSuffix string
4848
LinodeExternalNetwork *net.IPNet
4949
NodeBalancerTags []string
50+
DefaultNBType string
5051
GlobalStopChannel chan<- struct{}
5152
}
5253

cloud/linode/loadbalancers.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,17 +627,29 @@ func (l *loadbalancers) GetLoadBalancerTags(_ context.Context, clusterName strin
627627
return tags
628628
}
629629

630+
// GetLinodeNBType returns the NodeBalancer type for the service.
631+
func (l *loadbalancers) GetLinodeNBType(service *v1.Service) linodego.NodeBalancerPlanType {
632+
typeStr, ok := service.GetAnnotations()[annotations.AnnLinodeNodeBalancerType]
633+
if ok && linodego.NodeBalancerPlanType(typeStr) == linodego.NBTypePremium {
634+
return linodego.NBTypePremium
635+
}
636+
637+
return linodego.NodeBalancerPlanType(Options.DefaultNBType)
638+
}
639+
630640
func (l *loadbalancers) createNodeBalancer(ctx context.Context, clusterName string, service *v1.Service, configs []*linodego.NodeBalancerConfigCreateOptions) (lb *linodego.NodeBalancer, err error) {
631641
connThrottle := getConnectionThrottle(service)
632642

633643
label := l.GetLoadBalancerName(ctx, clusterName, service)
634644
tags := l.GetLoadBalancerTags(ctx, clusterName, service)
645+
nbType := l.GetLinodeNBType(service)
635646
createOpts := linodego.NodeBalancerCreateOptions{
636647
Label: &label,
637648
Region: l.zone,
638649
ClientConnThrottle: &connThrottle,
639650
Configs: configs,
640651
Tags: tags,
652+
Type: nbType,
641653
}
642654

643655
fwid, ok := service.GetAnnotations()[annotations.AnnLinodeCloudFirewallID]

cloud/linode/loadbalancers_test.go

Lines changed: 102 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ import (
1717
"strings"
1818
"testing"
1919

20+
ciliumclient "github.com/cilium/cilium/pkg/k8s/client/clientset/versioned/typed/cilium.io/v2alpha1"
21+
"github.com/linode/linode-cloud-controller-manager/cloud/annotations"
22+
"github.com/linode/linode-cloud-controller-manager/cloud/linode/client"
23+
"github.com/linode/linode-cloud-controller-manager/cloud/linode/firewall"
2024
"github.com/linode/linodego"
2125
v1 "k8s.io/api/core/v1"
2226
"k8s.io/apimachinery/pkg/api/errors"
@@ -25,9 +29,6 @@ import (
2529
"k8s.io/apimachinery/pkg/types"
2630
"k8s.io/client-go/kubernetes"
2731
"k8s.io/client-go/kubernetes/fake"
28-
29-
"github.com/linode/linode-cloud-controller-manager/cloud/annotations"
30-
"github.com/linode/linode-cloud-controller-manager/cloud/linode/firewall"
3132
)
3233

3334
const testCert string = `-----BEGIN CERTIFICATE-----
@@ -3675,3 +3676,101 @@ func Test_LoadbalNodeNameCoercion(t *testing.T) {
36753676
}
36763677
}
36773678
}
3679+
3680+
func Test_loadbalancers_GetLinodeNBType(t *testing.T) {
3681+
type fields struct {
3682+
client client.Client
3683+
zone string
3684+
kubeClient kubernetes.Interface
3685+
ciliumClient ciliumclient.CiliumV2alpha1Interface
3686+
loadBalancerType string
3687+
}
3688+
type args struct {
3689+
service *v1.Service
3690+
}
3691+
tests := []struct {
3692+
name string
3693+
fields fields
3694+
args args
3695+
defaultNB linodego.NodeBalancerPlanType
3696+
want linodego.NodeBalancerPlanType
3697+
}{
3698+
{
3699+
name: "No annotation in service and common as default",
3700+
fields: fields{
3701+
client: nil,
3702+
zone: "",
3703+
kubeClient: nil,
3704+
ciliumClient: nil,
3705+
loadBalancerType: "nodebalancer",
3706+
},
3707+
args: args{
3708+
service: &v1.Service{
3709+
ObjectMeta: metav1.ObjectMeta{
3710+
Name: "test",
3711+
Annotations: map[string]string{},
3712+
},
3713+
},
3714+
},
3715+
defaultNB: linodego.NBTypeCommon,
3716+
want: linodego.NBTypeCommon,
3717+
},
3718+
{
3719+
name: "No annotation in service and premium as default",
3720+
fields: fields{
3721+
client: nil,
3722+
zone: "",
3723+
kubeClient: nil,
3724+
ciliumClient: nil,
3725+
loadBalancerType: "nodebalancer",
3726+
},
3727+
args: args{
3728+
service: &v1.Service{
3729+
ObjectMeta: metav1.ObjectMeta{
3730+
Name: "test",
3731+
Annotations: map[string]string{},
3732+
},
3733+
},
3734+
},
3735+
defaultNB: linodego.NBTypePremium,
3736+
want: linodego.NBTypePremium,
3737+
},
3738+
{
3739+
name: "Nodebalancer type annotation in service",
3740+
fields: fields{
3741+
client: nil,
3742+
zone: "",
3743+
kubeClient: nil,
3744+
ciliumClient: nil,
3745+
loadBalancerType: "nodebalancer",
3746+
},
3747+
args: args{
3748+
service: &v1.Service{
3749+
ObjectMeta: metav1.ObjectMeta{
3750+
Name: "test",
3751+
Annotations: map[string]string{
3752+
annotations.AnnLinodeNodeBalancerType: string(linodego.NBTypePremium),
3753+
},
3754+
},
3755+
},
3756+
},
3757+
defaultNB: linodego.NBTypeCommon,
3758+
want: linodego.NBTypePremium,
3759+
},
3760+
}
3761+
for _, tt := range tests {
3762+
t.Run(tt.name, func(t *testing.T) {
3763+
l := &loadbalancers{
3764+
client: tt.fields.client,
3765+
zone: tt.fields.zone,
3766+
kubeClient: tt.fields.kubeClient,
3767+
ciliumClient: tt.fields.ciliumClient,
3768+
loadBalancerType: tt.fields.loadBalancerType,
3769+
}
3770+
Options.DefaultNBType = string(tt.defaultNB)
3771+
if got := l.GetLinodeNBType(tt.args.service); !reflect.DeepEqual(got, tt.want) {
3772+
t.Errorf("loadbalancers.GetLinodeNBType() = %v, want %v", got, tt.want)
3773+
}
3774+
})
3775+
}
3776+
}

deploy/chart/templates/daemonset.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ spec:
9797
{{- if .Values.allowUnauthorizedMetrics }}
9898
- --authorization-always-allow-paths="/metrics"
9999
{{- end }}
100+
{{- if .Values.defaultNBType }}
101+
- --default-nodebalancer-type={{ .Values.defaultNBType }}
102+
{{- end }}
100103
{{- with .Values.containerSecurityContext }}
101104
securityContext:
102105
{{- toYaml . | nindent 12 }}

deploy/chart/values.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ tolerations:
8383
# Enable Linode token health checker
8484
# tokenHealthChecker: true
8585

86+
# Default NodeBalancer type to create (default is "common")
87+
# defaultNBType: "common"
88+
8689
# This section adds the ability to pass environment variables to adjust CCM defaults
8790
# https://github.com/linode/linode-cloud-controller-manager/blob/master/cloud/linode/loadbalancers.go
8891
# LINODE_HOSTNAME_ONLY_INGRESS type bool is supported

docs/configuration/annotations.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ For implementation details, see:
3232
| `tags` | string | | A comma separated list of tags to be applied to the NodeBalancer instance |
3333
| `firewall-id` | string | | An existing Cloud Firewall ID to be attached to the NodeBalancer instance. See [Firewall Setup](firewall.md) |
3434
| `firewall-acl` | string | | The Firewall rules to be applied to the NodeBalancer. See [Firewall Configuration](#firewall-configuration) |
35+
| `nodebalancer-type` | string | | The type of NodeBalancer to create (options: common, premium) |
3536

3637
### Port Specific Configuration
3738

go.mod

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ require (
1111
github.com/golang/mock v1.6.0
1212
github.com/google/uuid v1.6.0
1313
github.com/hexdigest/gowrap v1.4.2
14-
github.com/linode/linodego v1.47.0
14+
github.com/linode/linodego v1.47.1-0.20250228182220-41a199a7ed93
1515
github.com/prometheus/client_golang v1.21.0
1616
github.com/spf13/pflag v1.0.6
1717
github.com/stretchr/testify v1.10.0
@@ -62,14 +62,14 @@ require (
6262
github.com/go-openapi/strfmt v0.23.0 // indirect
6363
github.com/go-openapi/swag v0.23.0 // indirect
6464
github.com/go-openapi/validate v0.24.0 // indirect
65-
github.com/go-resty/resty/v2 v2.16.3 // indirect
65+
github.com/go-resty/resty/v2 v2.16.5 // indirect
6666
github.com/gogo/protobuf v1.3.2 // indirect
6767
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
6868
github.com/golang/protobuf v1.5.4 // indirect
6969
github.com/google/btree v1.1.3 // indirect
7070
github.com/google/cel-go v0.22.1 // indirect
7171
github.com/google/gnostic-models v0.6.9 // indirect
72-
github.com/google/go-cmp v0.6.0 // indirect
72+
github.com/google/go-cmp v0.7.0 // indirect
7373
github.com/google/go-querystring v1.1.0 // indirect
7474
github.com/google/gofuzz v1.2.0 // indirect
7575
github.com/gopacket/gopacket v1.3.1 // indirect
@@ -136,14 +136,14 @@ require (
136136
go.uber.org/multierr v1.11.0 // indirect
137137
go.uber.org/zap v1.27.0 // indirect
138138
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
139-
golang.org/x/crypto v0.32.0 // indirect
139+
golang.org/x/crypto v0.33.0 // indirect
140140
golang.org/x/mod v0.22.0 // indirect
141-
golang.org/x/net v0.34.0 // indirect
142-
golang.org/x/oauth2 v0.25.0 // indirect
143-
golang.org/x/sync v0.10.0 // indirect
144-
golang.org/x/sys v0.29.0 // indirect
145-
golang.org/x/term v0.28.0 // indirect
146-
golang.org/x/text v0.21.0 // indirect
141+
golang.org/x/net v0.35.0 // indirect
142+
golang.org/x/oauth2 v0.26.0 // indirect
143+
golang.org/x/sync v0.11.0 // indirect
144+
golang.org/x/sys v0.30.0 // indirect
145+
golang.org/x/term v0.29.0 // indirect
146+
golang.org/x/text v0.22.0 // indirect
147147
golang.org/x/time v0.8.0 // indirect
148148
golang.org/x/tools v0.29.0 // indirect
149149
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect

go.sum

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3Bum
107107
github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ=
108108
github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI=
109109
github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow=
110-
github.com/go-resty/resty/v2 v2.16.3 h1:zacNT7lt4b8M/io2Ahj6yPypL7bqx9n1iprfQuodV+E=
111-
github.com/go-resty/resty/v2 v2.16.3/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
110+
github.com/go-resty/resty/v2 v2.16.5 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM=
111+
github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
112112
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
113113
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
114114
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
@@ -135,8 +135,8 @@ github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63Kqpo
135135
github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw=
136136
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
137137
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
138-
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
139-
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
138+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
139+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
140140
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
141141
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
142142
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
@@ -201,8 +201,8 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
201201
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
202202
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
203203
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
204-
github.com/linode/linodego v1.47.0 h1:6MFNCyzWbr8Rhl4r7d5DwZLwxvFIsM4ARH6W0KS/R0U=
205-
github.com/linode/linodego v1.47.0/go.mod h1:vyklQRzZUWhFVBZdYx4dcYJU/gG9yKB9VUcUs6ub0Lk=
204+
github.com/linode/linodego v1.47.1-0.20250228182220-41a199a7ed93 h1:ZhHBbs+z/HISVA3vuP6tpUiqh87ycU5ztSUqB+nJHl0=
205+
github.com/linode/linodego v1.47.1-0.20250228182220-41a199a7ed93/go.mod h1:k/lRz48xUtGaeVYyvF2X2iNxMpt8JJ+DR4I77R8I1Vg=
206206
github.com/mackerelio/go-osstat v0.2.5 h1:+MqTbZUhoIt4m8qzkVoXUJg1EuifwlAJSk4Yl2GXh+o=
207207
github.com/mackerelio/go-osstat v0.2.5/go.mod h1:atxwWF+POUZcdtR1wnsUcQxTytoHG4uhl2AKKzrOajY=
208208
github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
@@ -384,8 +384,8 @@ golang.org/x/crypto v0.0.0-20190422183909-d864b10871cd/go.mod h1:yigFU9vqHzYiE8U
384384
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
385385
golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
386386
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
387-
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
388-
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
387+
golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus=
388+
golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M=
389389
golang.org/x/exp v0.0.0-20241215155358-4a5509556b9e h1:4qufH0hlUYs6AO6XmZC3GqfDPGSXHVXUFR6OND+iJX4=
390390
golang.org/x/exp v0.0.0-20241215155358-4a5509556b9e/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c=
391391
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@@ -399,16 +399,16 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
399399
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
400400
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
401401
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
402-
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
403-
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
404-
golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
405-
golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
402+
golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
403+
golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
404+
golang.org/x/oauth2 v0.26.0 h1:afQXWNNaeC4nvZ0Ed9XvCCzXM6UHJG7iCg0W4fPqSBE=
405+
golang.org/x/oauth2 v0.26.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
406406
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
407407
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
408408
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
409409
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
410-
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
411-
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
410+
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
411+
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
412412
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
413413
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
414414
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -420,15 +420,15 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc
420420
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
421421
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
422422
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
423-
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
424-
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
423+
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
424+
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
425425
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
426-
golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
427-
golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
426+
golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
427+
golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
428428
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
429429
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
430-
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
431-
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
430+
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
431+
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
432432
golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg=
433433
golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
434434
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
"github.com/linode/linode-cloud-controller-manager/cloud/linode"
1313
"github.com/linode/linode-cloud-controller-manager/sentry"
14+
"github.com/linode/linodego"
1415
"github.com/spf13/pflag"
1516
cloudprovider "k8s.io/cloud-provider"
1617
"k8s.io/cloud-provider/app"
@@ -88,6 +89,7 @@ func main() {
8889
command.Flags().StringVar(&linode.Options.LoadBalancerType, "load-balancer-type", "nodebalancer", "configures which type of load-balancing to use for LoadBalancer Services (options: nodebalancer, cilium-bgp)")
8990
command.Flags().StringVar(&linode.Options.BGPNodeSelector, "bgp-node-selector", "", "node selector to use to perform shared IP fail-over with BGP (e.g. cilium-bgp-peering=true")
9091
command.Flags().StringVar(&linode.Options.IpHolderSuffix, "ip-holder-suffix", "", "suffix to append to the ip holder name when using shared IP fail-over with BGP (e.g. ip-holder-suffix=my-cluster-name")
92+
command.Flags().StringVar(&linode.Options.DefaultNBType, "default-nodebalancer-type", string(linodego.NBTypeCommon), "default type of NodeBalancer to create (options: common, premium)")
9193
command.Flags().StringSliceVar(&linode.Options.NodeBalancerTags, "nodebalancer-tags", []string{}, "Linode tags to apply to all NodeBalancers")
9294

9395
// Set static flags

0 commit comments

Comments
 (0)