Skip to content

Commit

Permalink
Merge pull request #156 from Leaseweb/feat/projects
Browse files Browse the repository at this point in the history
Add support for CloudStack projects, add listall to listVirtualMachine calls, update K8s deps to v1.29.8
  • Loading branch information
hrak authored Aug 20, 2024
2 parents 7e48373 + 1cf17e1 commit 7a413d6
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 23 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ api-url = <CloudStack API URL>
api-key = <CloudStack API Key>
secret-key = <CloudStack API Secret>
ssl-no-verify = <Disable SSL certificate validation: true or false (optional)>
project-id = <CloudStack project ID (optional)>
```

Create a secret named `cloudstack-secret` in namespace `kube-system`:
Expand Down
14 changes: 7 additions & 7 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,16 @@ require (
github.com/kubernetes-csi/csi-lib-utils v0.17.0
github.com/kubernetes-csi/csi-test/v5 v5.2.0
github.com/spf13/pflag v1.0.5
golang.org/x/sys v0.20.0
golang.org/x/text v0.16.0
golang.org/x/sys v0.24.0
golang.org/x/text v0.17.0
google.golang.org/grpc v1.65.0
gopkg.in/gcfg.v1 v1.2.3
k8s.io/api v0.29.7
k8s.io/apimachinery v0.29.7
k8s.io/client-go v0.29.7
k8s.io/component-base v0.29.7
k8s.io/api v0.29.8
k8s.io/apimachinery v0.29.8
k8s.io/client-go v0.29.8
k8s.io/component-base v0.29.8
k8s.io/klog/v2 v2.110.1
k8s.io/mount-utils v0.29.7
k8s.io/mount-utils v0.29.8
k8s.io/utils v0.0.0-20240102154912-e7106e64919e
)

Expand Down
28 changes: 14 additions & 14 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -167,15 +167,15 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
Expand Down Expand Up @@ -215,20 +215,20 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
k8s.io/api v0.29.7 h1:Q2/thp7YYESgy0MGzxT9RvA/6doLJHBXSFH8GGLxSbc=
k8s.io/api v0.29.7/go.mod h1:mPimdbyuIjwoLtBEVIGVUYb4BKOE+44XHt/n4IqKsLA=
k8s.io/apimachinery v0.29.7 h1:ICXzya58Q7hyEEfnTrbmdfX1n1schSepX2KUfC2/ykc=
k8s.io/apimachinery v0.29.7/go.mod h1:i3FJVwhvSp/6n8Fl4K97PJEP8C+MM+aoDq4+ZJBf70Y=
k8s.io/client-go v0.29.7 h1:vTtiFrGBKlcBhxaeZC4eDrqui1e108nsTyue/KU63IY=
k8s.io/client-go v0.29.7/go.mod h1:69BvVqdRozgR/9TP45u/oO0tfrdbP+I8RqrcCJQshzg=
k8s.io/component-base v0.29.7 h1:zXLJvZjvvDWdYmZCwZYk95E1Fd2oRXUz71mQukkRk5I=
k8s.io/component-base v0.29.7/go.mod h1:ddLTpIrjazaRI1EG83M41GNcYEAdskuQmx4JOOSXCOg=
k8s.io/api v0.29.8 h1:ZBKg9clWnIGtQ5yGhNwMw2zyyrsIAQaXhZACcYNflQE=
k8s.io/api v0.29.8/go.mod h1:XlGIpmpzKGrtVca7GlgNryZJ19SvQdI808NN7fy1SgQ=
k8s.io/apimachinery v0.29.8 h1:uBHc9WuKiTHClIspJqtR84WNpG0aOGn45HWqxgXkk8Y=
k8s.io/apimachinery v0.29.8/go.mod h1:i3FJVwhvSp/6n8Fl4K97PJEP8C+MM+aoDq4+ZJBf70Y=
k8s.io/client-go v0.29.8 h1:QMRKcIzqE/qawknXcsi51GdIAYN8UP39S/M5KnFu/J0=
k8s.io/client-go v0.29.8/go.mod h1:ZzrAAVrqO2jVXMb8My/jTke8n0a/mIynnA3y/1y1UB0=
k8s.io/component-base v0.29.8 h1:4LJ94/eOJpDFZFbGbRH4CEyk29a7PZr8noVe9tBJUUY=
k8s.io/component-base v0.29.8/go.mod h1:FYOQSsKgh9/+FNleq8m6cXH2Cq8fNiUnJzDROowLaqU=
k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0=
k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo=
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
k8s.io/mount-utils v0.29.7 h1:M0LA8Tx8HtpwBy24fajiUsaklIiNi1tNrHpROxX4bLI=
k8s.io/mount-utils v0.29.7/go.mod h1:SHUMR9n3b6tLgEmlyT36cL6fV6Sjwa5CJhc0guCXvb0=
k8s.io/mount-utils v0.29.8 h1:Bf1H+43DXRuusBEhHrxZkdt8ULbm2Rq70nDRy9+GQV0=
k8s.io/mount-utils v0.29.8/go.mod h1:SHUMR9n3b6tLgEmlyT36cL6fV6Sjwa5CJhc0guCXvb0=
k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ=
k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
Expand Down
8 changes: 6 additions & 2 deletions pkg/cloud/cloud.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,15 @@ var (
// client is the implementation of Interface.
type client struct {
*cloudstack.CloudStackClient
projectID string
}

// New creates a new cloud connector, given its configuration.
func New(config *Config) Interface {
csClient := cloudstack.NewAsyncClient(config.APIURL, config.APIKey, config.SecretKey, config.VerifySSL)
csClient := &client{
projectID: config.ProjectID,
}
csClient.CloudStackClient = cloudstack.NewAsyncClient(config.APIURL, config.APIKey, config.SecretKey, config.VerifySSL)

return &client{csClient}
return csClient
}
2 changes: 2 additions & 0 deletions pkg/cloud/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ type Config struct {
APIKey string
SecretKey string
VerifySSL bool
ProjectID string
}

// csConfig wraps the config for the CloudStack cloud provider.
Expand Down Expand Up @@ -42,5 +43,6 @@ func ReadConfig(configFilePath string) (*Config, error) {
APIKey: cfg.Global.APIKey,
SecretKey: cfg.Global.SecretKey,
VerifySSL: !cfg.Global.SSLNoVerify,
ProjectID: cfg.Global.ProjectID,
}, nil
}
8 changes: 8 additions & 0 deletions pkg/cloud/vms.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ func (c *client) GetVMByID(ctx context.Context, vmID string) (*VM, error) {
logger := klog.FromContext(ctx)
p := c.VirtualMachine.NewListVirtualMachinesParams()
p.SetId(vmID)
p.SetListall(true)
if c.projectID != "" {
p.SetProjectid(c.projectID)
}
logger.V(2).Info("CloudStack API call", "command", "ListVirtualMachines", "params", map[string]string{
"id": vmID,
})
Expand All @@ -35,6 +39,10 @@ func (c *client) getVMByName(ctx context.Context, name string) (*VM, error) {
logger := klog.FromContext(ctx)
p := c.VirtualMachine.NewListVirtualMachinesParams()
p.SetName(name)
p.SetListall(true)
if c.projectID != "" {
p.SetProjectid(c.projectID)
}
logger.V(2).Info("CloudStack API call", "command", "ListVirtualMachines", "params", map[string]string{
"name": name,
})
Expand Down
9 changes: 9 additions & 0 deletions pkg/cloud/volumes.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ func (c *client) GetVolumeByID(ctx context.Context, volumeID string) (*Volume, e
logger := klog.FromContext(ctx)
p := c.Volume.NewListVolumesParams()
p.SetId(volumeID)
if c.projectID != "" {
p.SetProjectid(c.projectID)
}
logger.V(2).Info("CloudStack API call", "command", "ListVolumes", "params", map[string]string{
"id": volumeID,
})
Expand All @@ -52,6 +55,9 @@ func (c *client) GetVolumeByName(ctx context.Context, name string) (*Volume, err
logger := klog.FromContext(ctx)
p := c.Volume.NewListVolumesParams()
p.SetName(name)
if c.projectID != "" {
p.SetProjectid(c.projectID)
}
logger.V(2).Info("CloudStack API call", "command", "ListVolumes", "params", map[string]string{
"name": name,
})
Expand All @@ -66,6 +72,9 @@ func (c *client) CreateVolume(ctx context.Context, diskOfferingID, zoneID, name
p.SetZoneid(zoneID)
p.SetName(name)
p.SetSize(sizeInGB)
if c.projectID != "" {
p.SetProjectid(c.projectID)
}
logger.V(2).Info("CloudStack API call", "command", "CreateVolume", "params", map[string]string{
"diskofferingid": diskOfferingID,
"zoneid": zoneID,
Expand Down

0 comments on commit 7a413d6

Please sign in to comment.