Skip to content

Commit 8ceecf2

Browse files
authored
Refactor config (#915)
* Refactore apiEndpoints in config * Move config in own package * Import everywhere with alias
1 parent 2fc5f43 commit 8ceecf2

18 files changed

+113
-95
lines changed

pkg/ccm/instances.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,6 @@ type Instances struct {
5252
region string
5353
}
5454

55-
type InstancesOpts struct {
56-
API string `yaml:"api"`
57-
}
58-
5955
func NewInstance(client stackit.NodeClient, projectID, region string) (*Instances, error) {
6056
return &Instances{
6157
iaasClient: client,

pkg/ccm/loadbalancer.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"strings"
88
"time"
99

10+
stackitconfig "github.com/stackitcloud/cloud-provider-stackit/pkg/stackit/config"
1011
"github.com/stackitcloud/stackit-sdk-go/services/loadbalancer"
1112
corev1 "k8s.io/api/core/v1"
1213
"k8s.io/client-go/tools/record"
@@ -41,20 +42,14 @@ type LoadBalancer struct {
4142
client stackit.LoadbalancerClient
4243
recorder record.EventRecorder // set in CloudControllerManager.Initialize
4344
projectID string
44-
opts LoadBalancerOpts
45+
opts stackitconfig.LoadBalancerOpts
4546
// metricsRemoteWrite setting this enables remote writing of metrics and nil means it is disabled
4647
metricsRemoteWrite *MetricsRemoteWrite
4748
}
4849

49-
type LoadBalancerOpts struct {
50-
API string `yaml:"api"`
51-
NetworkID string `yaml:"networkId"`
52-
ExtraLabels map[string]string `yaml:"extraLabels"`
53-
}
54-
5550
var _ cloudprovider.LoadBalancer = (*LoadBalancer)(nil)
5651

57-
func NewLoadBalancer(client stackit.LoadbalancerClient, projectID string, opts LoadBalancerOpts, metricsRemoteWrite *MetricsRemoteWrite) (*LoadBalancer, error) { //nolint:lll // looks weird when shortened
52+
func NewLoadBalancer(client stackit.LoadbalancerClient, projectID string, opts stackitconfig.LoadBalancerOpts, metricsRemoteWrite *MetricsRemoteWrite) (*LoadBalancer, error) { //nolint:lll // looks weird when shortened
5853
// LoadBalancer.recorder is set in CloudControllerManager.Initialize
5954
return &LoadBalancer{
6055
client: client,

pkg/ccm/loadbalancer_spec.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"strings"
99
"time"
1010

11+
stackitconfig "github.com/stackitcloud/cloud-provider-stackit/pkg/stackit/config"
1112
"github.com/stackitcloud/stackit-sdk-go/services/loadbalancer"
1213
corev1 "k8s.io/api/core/v1"
1314

@@ -241,7 +242,7 @@ func getPlanID(service *corev1.Service) (planID *string, msgs []string, err erro
241242
func lbSpecFromService( //nolint:funlen,gocyclo // It is long but not complex.
242243
service *corev1.Service,
243244
nodes []*corev1.Node,
244-
opts LoadBalancerOpts,
245+
opts stackitconfig.LoadBalancerOpts,
245246
observability *loadbalancer.LoadbalancerOptionObservability,
246247
) (*loadbalancer.CreateLoadBalancerPayload, []Event, error) {
247248
lb := &loadbalancer.CreateLoadBalancerPayload{

pkg/ccm/loadbalancer_spec_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
. "github.com/onsi/gomega"
88
. "github.com/onsi/gomega/gstruct"
99
"github.com/onsi/gomega/types"
10+
stackitconfig "github.com/stackitcloud/cloud-provider-stackit/pkg/stackit/config"
1011

1112
"github.com/stackitcloud/stackit-sdk-go/services/loadbalancer"
1213
corev1 "k8s.io/api/core/v1"
@@ -24,7 +25,7 @@ var _ = Describe("lbSpecFromService", func() {
2425
httpAlt corev1.ServicePort
2526
https corev1.ServicePort
2627
dns corev1.ServicePort
27-
lbOpts LoadBalancerOpts
28+
lbOpts stackitconfig.LoadBalancerOpts
2829
)
2930
BeforeEach(func() {
3031
http = corev1.ServicePort{
@@ -47,7 +48,7 @@ var _ = Describe("lbSpecFromService", func() {
4748
Port: 53,
4849
Protocol: corev1.ProtocolUDP,
4950
}
50-
lbOpts = LoadBalancerOpts{NetworkID: "my-network"}
51+
lbOpts = stackitconfig.LoadBalancerOpts{NetworkID: "my-network"}
5152
})
5253

5354
Context("internal load balancer", func() {

pkg/ccm/loadbalancer_test.go

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

88
. "github.com/onsi/ginkgo/v2"
99
. "github.com/onsi/gomega"
10+
stackitconfig "github.com/stackitcloud/cloud-provider-stackit/pkg/stackit/config"
1011
"github.com/stackitcloud/stackit-sdk-go/services/loadbalancer"
1112
"go.uber.org/mock/gomock"
1213
corev1 "k8s.io/api/core/v1"
@@ -30,13 +31,13 @@ var _ = Describe("LoadBalancer", func() {
3031
loadBalancer *LoadBalancer
3132
clusterName string
3233
projectID string
33-
lbOpts LoadBalancerOpts
34+
lbOpts stackitconfig.LoadBalancerOpts
3435
)
3536

3637
BeforeEach(func() {
3738
clusterName = "my-cluster"
3839
projectID = "my-project"
39-
lbOpts = LoadBalancerOpts{NetworkID: "my-network"}
40+
lbOpts = stackitconfig.LoadBalancerOpts{NetworkID: "my-network"}
4041

4142
ctrl := gomock.NewController(GinkgoT())
4243
mockClient = stackit.NewMockLoadbalancerClient(ctrl)

pkg/ccm/stackit.go

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"io"
77
"os"
88

9+
stackitconfig "github.com/stackitcloud/cloud-provider-stackit/pkg/stackit/config"
910
sdkconfig "github.com/stackitcloud/stackit-sdk-go/core/config"
1011
"github.com/stackitcloud/stackit-sdk-go/services/iaas"
1112
"github.com/stackitcloud/stackit-sdk-go/services/loadbalancer"
@@ -19,7 +20,6 @@ import (
1920

2021
"github.com/stackitcloud/cloud-provider-stackit/pkg/metrics"
2122
"github.com/stackitcloud/cloud-provider-stackit/pkg/stackit"
22-
"github.com/stackitcloud/cloud-provider-stackit/pkg/stackit/metadata"
2323
)
2424

2525
const (
@@ -42,13 +42,6 @@ type CloudControllerManager struct {
4242
instances *Instances
4343
}
4444

45-
type Config struct {
46-
Global stackit.GlobalOpts `yaml:"global"`
47-
Metadata metadata.Opts `yaml:"metadata"`
48-
LoadBalancer LoadBalancerOpts `yaml:"loadBalancer"`
49-
Instances InstancesOpts `yaml:"instances"`
50-
}
51-
5245
func init() {
5346
cloudprovider.RegisterCloudProvider(ProviderName, func(config io.Reader) (cloudprovider.Interface, error) {
5447
cfg, err := GetConfig(config)
@@ -79,8 +72,8 @@ func init() {
7972
})
8073
}
8174

82-
func GetConfig(reader io.Reader) (Config, error) {
83-
var cfg Config
75+
func GetConfig(reader io.Reader) (stackitconfig.CCMConfig, error) {
76+
var cfg stackitconfig.CCMConfig
8477

8578
content, err := io.ReadAll(reader)
8679
if err != nil {
@@ -124,21 +117,21 @@ func BuildObservability() (*MetricsRemoteWrite, error) {
124117
return nil, fmt.Errorf("missing from env: %q", missingKeys)
125118
}
126119

127-
// NewCloudControllerManager creates a new instance of the stackit struct from a config struct
128-
func NewCloudControllerManager(cfg *Config, obs *MetricsRemoteWrite) (*CloudControllerManager, error) {
120+
// NewCloudControllerManager creates a new instance of the stackit struct from a stackitconfig struct
121+
func NewCloudControllerManager(cfg *stackitconfig.CCMConfig, obs *MetricsRemoteWrite) (*CloudControllerManager, error) {
129122
lbOpts := []sdkconfig.ConfigurationOption{
130123
sdkconfig.WithHTTPClient(metrics.NewInstrumentedHTTPClient()),
131124
}
132125

133-
if cfg.LoadBalancer.API != "" {
134-
lbOpts = append(lbOpts, sdkconfig.WithEndpoint(cfg.LoadBalancer.API))
126+
if cfg.Global.APIEndpoints.LoadBalancerAPI != "" {
127+
lbOpts = append(lbOpts, sdkconfig.WithEndpoint(cfg.Global.APIEndpoints.LoadBalancerAPI))
135128
}
136129

137130
// The token is only provided by the 'gardener-extension-provider-stackit' in case of emergency access.
138131
// In those cases, the [cfg.LoadBalancerAPI.URL] will also be different (direct API URL instead of the API Gateway)
139132
lbEmergencyAPIToken := os.Getenv(stackitLoadBalancerEmergencyAPIToken)
140133
if lbEmergencyAPIToken != "" {
141-
klog.Warningf("Using emergency token for loadbalancer api on host: %s", cfg.LoadBalancer.API)
134+
klog.Warningf("Using emergency token for loadbalancer api on host: %s", cfg.Global.APIEndpoints.LoadBalancerAPI)
142135
lbOpts = append(lbOpts, sdkconfig.WithToken(lbEmergencyAPIToken))
143136
}
144137

@@ -155,8 +148,8 @@ func NewCloudControllerManager(cfg *Config, obs *MetricsRemoteWrite) (*CloudCont
155148
sdkconfig.WithHTTPClient(metrics.NewInstrumentedHTTPClient()),
156149
}
157150

158-
if cfg.Instances.API != "" {
159-
iaasOpts = append(iaasOpts, sdkconfig.WithEndpoint(cfg.Instances.API))
151+
if cfg.Global.APIEndpoints.IaasAPI != "" {
152+
iaasOpts = append(iaasOpts, sdkconfig.WithEndpoint(cfg.Global.APIEndpoints.IaasAPI))
160153
}
161154

162155
iaasInnerClient, err := iaas.NewAPIClient(iaasOpts...)

pkg/ccm/stackit_test.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
. "github.com/onsi/ginkgo/v2"
88
. "github.com/onsi/gomega"
9+
stackitconfig "github.com/stackitcloud/cloud-provider-stackit/pkg/stackit/config"
910
)
1011

1112
var _ = Describe("GetConfig", func() {
@@ -14,19 +15,20 @@ var _ = Describe("GetConfig", func() {
1415
global:
1516
projectId: "test-project"
1617
region: "eu01"
18+
apiEndpoints:
19+
loadBalancerApi: "https://load-balancer.api.eu01.stackit.cloud"
1720
metadata:
1821
searchOrder: "metadataService,configDrive"
1922
loadBalancer:
20-
api: "https://load-balancer.api.eu01.stackit.cloud"
2123
networkId: "test-network"
2224
`
2325

2426
config, err := GetConfig(strings.NewReader(validYAML))
2527
Expect(err).NotTo(HaveOccurred())
2628
Expect(config.Global.ProjectID).To(Equal("test-project"))
2729
Expect(config.Global.Region).To(Equal("eu01"))
30+
Expect(config.Global.APIEndpoints.LoadBalancerAPI).To(Equal("https://load-balancer.api.eu01.stackit.cloud"))
2831
Expect(config.Metadata.SearchOrder).To(Equal("metadataService,configDrive"))
29-
Expect(config.LoadBalancer.API).To(Equal("https://load-balancer.api.eu01.stackit.cloud"))
3032
Expect(config.LoadBalancer.NetworkID).To(Equal("test-network"))
3133
})
3234

@@ -43,8 +45,8 @@ loadBalancer:
4345
Expect(err).NotTo(HaveOccurred())
4446
Expect(config.Global.ProjectID).To(Equal("my-project"))
4547
Expect(config.Global.Region).To(Equal("eu01"))
48+
Expect(config.Global.APIEndpoints.LoadBalancerAPI).To(BeEmpty())
4649
Expect(config.LoadBalancer.NetworkID).To(Equal("my-network"))
47-
Expect(config.LoadBalancer.API).To(BeEmpty())
4850
})
4951

5052
It("should handle configuration with extra labels", func() {
@@ -82,7 +84,7 @@ global:
8284

8385
config, err := GetConfig(strings.NewReader(emptyYAML))
8486
Expect(err).NotTo(HaveOccurred())
85-
Expect(config).To(Equal(Config{}))
87+
Expect(config).To(Equal(stackitconfig.CCMConfig{}))
8688
})
8789

8890
It("should return error for invalid YAML structure", func() {
@@ -133,6 +135,6 @@ loadBalancer:
133135

134136
config, err := GetConfig(emptyReader)
135137
Expect(err).NotTo(HaveOccurred())
136-
Expect(config).To(Equal(Config{}))
138+
Expect(config).To(Equal(stackitconfig.CCMConfig{}))
137139
})
138140
})

pkg/csi/blockstorage/driver.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55

66
"github.com/container-storage-interface/spec/lib/go/csi"
77
"github.com/stackitcloud/cloud-provider-stackit/pkg/stackit"
8+
stackitconfig "github.com/stackitcloud/cloud-provider-stackit/pkg/stackit/config"
89
corev1 "k8s.io/client-go/listers/core/v1"
910
"k8s.io/klog/v2"
1011

@@ -138,7 +139,7 @@ func (d *Driver) SetupControllerService(instance stackit.IaasClient) {
138139
d.cs = NewControllerServer(d, instance)
139140
}
140141

141-
func (d *Driver) SetupNodeService(mountProvider mount.IMount, metadataProvider metadata.IMetadata, opts stackit.BlockStorageOpts) {
142+
func (d *Driver) SetupNodeService(mountProvider mount.IMount, metadataProvider metadata.IMetadata, opts stackitconfig.BlockStorageOpts) {
142143
klog.Info("Providing node service")
143144
d.ns = NewNodeServer(d, mountProvider, metadataProvider, opts)
144145
}

pkg/csi/blockstorage/nodeserver.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/container-storage-interface/spec/lib/go/csi"
2727
"github.com/kubernetes-csi/csi-lib-utils/protosanitizer"
2828
"github.com/stackitcloud/cloud-provider-stackit/pkg/csi/util"
29+
stackitconfig "github.com/stackitcloud/cloud-provider-stackit/pkg/stackit/config"
2930
"google.golang.org/grpc/codes"
3031
"google.golang.org/grpc/status"
3132
"k8s.io/klog/v2"
@@ -35,15 +36,14 @@ import (
3536
sharedcsi "github.com/stackitcloud/cloud-provider-stackit/pkg/csi"
3637
"github.com/stackitcloud/cloud-provider-stackit/pkg/csi/util/blockdevice"
3738
"github.com/stackitcloud/cloud-provider-stackit/pkg/csi/util/mount"
38-
"github.com/stackitcloud/cloud-provider-stackit/pkg/stackit"
3939
"github.com/stackitcloud/cloud-provider-stackit/pkg/stackit/metadata"
4040
)
4141

4242
type nodeServer struct {
4343
Driver *Driver
4444
Mount mount.IMount
4545
Metadata metadata.IMetadata
46-
Opts stackit.BlockStorageOpts
46+
Opts stackitconfig.BlockStorageOpts
4747
csi.UnimplementedNodeServer
4848
}
4949

pkg/csi/blockstorage/nodeserver_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"github.com/container-storage-interface/spec/lib/go/csi"
77
. "github.com/onsi/ginkgo/v2"
88
. "github.com/onsi/gomega"
9-
"github.com/stackitcloud/cloud-provider-stackit/pkg/stackit"
9+
stackitconfig "github.com/stackitcloud/cloud-provider-stackit/pkg/stackit/config"
1010
"go.uber.org/mock/gomock"
1111
"google.golang.org/grpc/codes"
1212
"google.golang.org/grpc/status"
@@ -42,7 +42,7 @@ var _ = Describe("NodeServer", func() {
4242
d,
4343
mountMock,
4444
metadataMock,
45-
stackit.BlockStorageOpts{},
45+
stackitconfig.BlockStorageOpts{},
4646
)
4747
})
4848

0 commit comments

Comments
 (0)