Skip to content

Commit

Permalink
Egoscale V3 refactor
Browse files Browse the repository at this point in the history
Signed-off-by: Pierre-Emmanuel Jacquier <[email protected]>
  • Loading branch information
pierre-emmanuelJ committed Nov 11, 2024
1 parent 6c204cc commit 5eb625b
Show file tree
Hide file tree
Showing 89 changed files with 699 additions and 47,720 deletions.
17 changes: 15 additions & 2 deletions exoscale/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"encoding/json"
"errors"
"fmt"
"os"
"path/filepath"
"sync"
Expand Down Expand Up @@ -61,8 +62,9 @@ func newRefreshableExoscaleClient(ctx context.Context, config *globalConfig) (*r

//TODO add chain credentials with env...etc
creds := credentials.NewStaticCredentials(c.apiCredentials.APIKey, c.apiCredentials.APISecret)

exo, err := v3.NewClient(creds)
exo, err := v3.NewClient(creds, v3.ClientOptWithUserAgent(
fmt.Sprintf("Exoscale-K8s-Cloud-Controller/%s", versionString),
))
if err != nil {
return nil, err
}
Expand All @@ -79,6 +81,17 @@ func newRefreshableExoscaleClient(ctx context.Context, config *globalConfig) (*r
return c, nil
}

func (c *refreshableExoscaleClient) Wait(ctx context.Context, op *v3.Operation, states ...v3.OperationState) (*v3.Operation, error) {
c.RLock()
defer c.RUnlock()

return c.exo.Wait(
ctx,
op,
states...,
)
}

func (c *refreshableExoscaleClient) watchCredentialsFile(ctx context.Context, path string) {
watcher, err := fsnotify.NewWatcher()
if err != nil {
Expand Down
116 changes: 58 additions & 58 deletions exoscale/client_mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package exoscale
import (
"context"

egoscale "github.com/exoscale/egoscale/v2"
v3 "github.com/exoscale/egoscale/v3"

"github.com/stretchr/testify/mock"
)
Expand All @@ -12,87 +12,87 @@ type exoscaleClientMock struct {
mock.Mock
}

func (m *exoscaleClientMock) CreateNetworkLoadBalancer(
func (m *exoscaleClientMock) CreateLoadBalancer(
ctx context.Context,
zone string,
nlb *egoscale.NetworkLoadBalancer,
) (*egoscale.NetworkLoadBalancer, error) {
args := m.Called(ctx, zone, nlb)
return args.Get(0).(*egoscale.NetworkLoadBalancer), args.Error(1)
req v3.CreateLoadBalancerRequest,
) (*v3.Operation, error) {
args := m.Called(ctx, req)
return args.Get(0).(*v3.Operation), args.Error(1)
}

func (m *exoscaleClientMock) CreateNetworkLoadBalancerService(
func (m *exoscaleClientMock) AddServiceToLoadBalancer(
ctx context.Context,
zone string,
nlb *egoscale.NetworkLoadBalancer,
svc *egoscale.NetworkLoadBalancerService,
) (*egoscale.NetworkLoadBalancerService, error) {
args := m.Called(ctx, zone, nlb, svc)
return args.Get(0).(*egoscale.NetworkLoadBalancerService), args.Error(1)
id v3.UUID,
req v3.AddServiceToLoadBalancerRequest,
) (*v3.Operation, error) {
args := m.Called(ctx, id, req)
return args.Get(0).(*v3.Operation), args.Error(1)
}

func (m *exoscaleClientMock) DeleteNetworkLoadBalancer(
func (m *exoscaleClientMock) DeleteLoadBalancer(
ctx context.Context,
zone string,
nlb *egoscale.NetworkLoadBalancer,
) error {
args := m.Called(ctx, zone, nlb)
return args.Error(0)
id v3.UUID,
) (*v3.Operation, error) {
args := m.Called(ctx, id)
return args.Get(0).(*v3.Operation), args.Error(1)
}

func (m *exoscaleClientMock) DeleteNetworkLoadBalancerService(
func (m *exoscaleClientMock) DeleteLoadBalancerService(
ctx context.Context,
zone string,
nlb *egoscale.NetworkLoadBalancer,
svc *egoscale.NetworkLoadBalancerService,
) error {
args := m.Called(ctx, zone, nlb, svc)
return args.Error(0)
id v3.UUID,
serviceID v3.UUID,
) (*v3.Operation, error) {
args := m.Called(ctx, id)
return args.Get(0).(*v3.Operation), args.Error(1)
}

func (m *exoscaleClientMock) GetInstance(ctx context.Context, zone, id string) (*egoscale.Instance, error) {
args := m.Called(ctx, zone, id)
return args.Get(0).(*egoscale.Instance), args.Error(1)
func (m *exoscaleClientMock) GetInstance(ctx context.Context, id v3.UUID) (*v3.Instance, error) {
args := m.Called(ctx, id)
return args.Get(0).(*v3.Instance), args.Error(1)
}

func (m *exoscaleClientMock) GetInstanceType(ctx context.Context, zone, id string) (*egoscale.InstanceType, error) {
args := m.Called(ctx, zone, id)
return args.Get(0).(*egoscale.InstanceType), args.Error(1)
func (m *exoscaleClientMock) GetInstanceType(ctx context.Context, id v3.UUID) (*v3.InstanceType, error) {
args := m.Called(ctx, id)
return args.Get(0).(*v3.InstanceType), args.Error(1)
}

func (m *exoscaleClientMock) GetNetworkLoadBalancer(
ctx context.Context,
zone string,
id string,
) (*egoscale.NetworkLoadBalancer, error) {
args := m.Called(ctx, zone, id)
return args.Get(0).(*egoscale.NetworkLoadBalancer), args.Error(1)
func (m *exoscaleClientMock) GetLoadBalancer(ctx context.Context, id v3.UUID) (*v3.LoadBalancer, error) {
args := m.Called(ctx, id)
return args.Get(0).(*v3.LoadBalancer), args.Error(1)
}

func (m *exoscaleClientMock) ListInstances(
ctx context.Context,
zone string,
opts ...egoscale.ListInstancesOpt,
) ([]*egoscale.Instance, error) {
args := m.Called(ctx, zone, opts)
return args.Get(0).([]*egoscale.Instance), args.Error(1)
opts ...v3.ListInstancesOpt,
) (*v3.ListInstancesResponse, error) {
args := m.Called(ctx, opts)
return args.Get(0).(*v3.ListInstancesResponse), args.Error(1)
}

func (m *exoscaleClientMock) UpdateLoadBalancer(
ctx context.Context,
id v3.UUID,
req v3.UpdateLoadBalancerRequest,
) (*v3.Operation, error) {
args := m.Called(ctx, id, req)
return args.Get(0).(*v3.Operation), args.Error(1)
}

func (m *exoscaleClientMock) UpdateNetworkLoadBalancer(
func (m *exoscaleClientMock) UpdateLoadBalancerService(
ctx context.Context,
zone string,
nlb *egoscale.NetworkLoadBalancer,
) error {
args := m.Called(ctx, zone, nlb)
return args.Error(0)
id v3.UUID,
serviceID v3.UUID,
req v3.UpdateLoadBalancerServiceRequest,
) (*v3.Operation, error) {
args := m.Called(ctx, id, serviceID, req)
return args.Get(0).(*v3.Operation), args.Error(1)
}

func (m *exoscaleClientMock) UpdateNetworkLoadBalancerService(
func (m *exoscaleClientMock) Wait(
ctx context.Context,
zone string,
nlb *egoscale.NetworkLoadBalancer,
svc *egoscale.NetworkLoadBalancerService,
) error {
args := m.Called(ctx, zone, nlb, svc)
return args.Error(0)
op *v3.Operation,
states ...v3.OperationState,
) (*v3.Operation, error) {
args := m.Called(ctx, op, states)
return args.Get(0).(*v3.Operation), args.Error(1)
}
4 changes: 0 additions & 4 deletions exoscale/exoscale.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ import (
"os"
"strings"

egoscale "github.com/exoscale/egoscale/v2"

"k8s.io/client-go/kubernetes"
cloudprovider "k8s.io/cloud-provider"
"k8s.io/klog/v2"
Expand Down Expand Up @@ -41,8 +39,6 @@ type cloudProvider struct {
}

func init() {
egoscale.UserAgent = fmt.Sprintf("Exoscale-K8s-Cloud-Controller/%s %s", versionString, egoscale.UserAgent)

cloudprovider.RegisterCloudProvider(ProviderName, func(config io.Reader) (cloudprovider.Interface, error) {
cfg, err := readExoscaleConfig(config)
if err != nil {
Expand Down
11 changes: 5 additions & 6 deletions exoscale/instances.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (
cloudprovider "k8s.io/cloud-provider"
cloudproviderapi "k8s.io/cloud-provider/api"

exoapi "github.com/exoscale/egoscale/v2/api"
v3 "github.com/exoscale/egoscale/v3"
)

Expand Down Expand Up @@ -270,7 +269,7 @@ func (i *instances) InstanceExistsByProviderID(ctx context.Context, providerID s

_, err := i.p.computeInstanceByProviderID(ctx, providerID)
if err != nil {
if errors.Is(err, exoapi.ErrNotFound) {
if errors.Is(err, v3.ErrNotFound) {
return false, nil
}

Expand Down Expand Up @@ -303,7 +302,7 @@ func (i *instances) InstanceShutdownByProviderID(ctx context.Context, providerID
return instance.State == "stopping" || instance.State == "stopped", nil
}

func (c *refreshableExoscaleClient) GetInstance(ctx context.Context, zone string, id v3.UUID) (*v3.Instance, error) {
func (c *refreshableExoscaleClient) GetInstance(ctx context.Context, id v3.UUID) (*v3.Instance, error) {
c.RLock()
defer c.RUnlock()

Expand All @@ -313,18 +312,18 @@ func (c *refreshableExoscaleClient) GetInstance(ctx context.Context, zone string
)
}

func (c *refreshableExoscaleClient) GetInstanceType(ctx context.Context, zone string, id v3.UUID) (*v3.InstanceType, error) {
func (c *refreshableExoscaleClient) GetInstanceType(ctx context.Context, id v3.UUID) (*v3.InstanceType, error) {
c.RLock()
defer c.RUnlock()

return c.exo.GetInstanceType(
ctx,
id)
id,
)
}

func (c *refreshableExoscaleClient) ListInstances(
ctx context.Context,
zone string,
opts ...v3.ListInstancesOpt,
) (*v3.ListInstancesResponse, error) {
c.RLock()
Expand Down
Loading

0 comments on commit 5eb625b

Please sign in to comment.