From 56e3a42c3c1e992bd9b143f4234e260ebcc3be69 Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Wed, 11 Dec 2019 17:23:40 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=81=BF=E5=85=8Dzstack=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=90=AB=E6=9C=89=E4=B8=AD=E6=96=87,=E6=9C=AA?= =?UTF-8?q?=E7=BC=96=E7=A0=81=E5=AF=BC=E8=87=B4=E8=AF=B7=E6=B1=82=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/multicloud/zstack/cluster.go | 6 ++++-- pkg/multicloud/zstack/configuration.go | 4 +++- pkg/multicloud/zstack/disk.go | 11 +++++++---- pkg/multicloud/zstack/disk_offering.go | 5 +++-- pkg/multicloud/zstack/eip.go | 7 ++++--- pkg/multicloud/zstack/host.go | 9 +++++---- pkg/multicloud/zstack/image.go | 10 ++++++---- pkg/multicloud/zstack/image_server.go | 12 ++++++++---- pkg/multicloud/zstack/instance.go | 12 +++++++----- pkg/multicloud/zstack/network.go | 9 +++++---- pkg/multicloud/zstack/network_service.go | 11 ++++++----- pkg/multicloud/zstack/offering.go | 13 ++++++++----- pkg/multicloud/zstack/region.go | 5 +++-- pkg/multicloud/zstack/securitygroup.go | 9 +++++---- pkg/multicloud/zstack/snapshot.go | 7 ++++--- pkg/multicloud/zstack/storage.go | 11 ++++++----- pkg/multicloud/zstack/storage_local.go | 5 +++-- pkg/multicloud/zstack/systag.go | 12 +++++++----- pkg/multicloud/zstack/vip.go | 5 +++-- pkg/multicloud/zstack/wire.go | 10 ++++++---- pkg/multicloud/zstack/zstack.go | 20 ++++++++++---------- 21 files changed, 113 insertions(+), 80 deletions(-) diff --git a/pkg/multicloud/zstack/cluster.go b/pkg/multicloud/zstack/cluster.go index 18188f056f..3ae32ad803 100644 --- a/pkg/multicloud/zstack/cluster.go +++ b/pkg/multicloud/zstack/cluster.go @@ -14,6 +14,8 @@ package zstack +import "net/url" + type SCluster struct { ZStackBasic Description string `json:"description"` @@ -26,9 +28,9 @@ type SCluster struct { func (region *SRegion) GetClusters() ([]SCluster, error) { clusters := []SCluster{} - params := []string{} + params := url.Values{} if SkipEsxi { - params = append(params, "q=type!=vmware") + params.Set("q", "type!=vmware") } return clusters, region.client.listAll("clusters", params, &clusters) } diff --git a/pkg/multicloud/zstack/configuration.go b/pkg/multicloud/zstack/configuration.go index 787852d987..33282eda55 100644 --- a/pkg/multicloud/zstack/configuration.go +++ b/pkg/multicloud/zstack/configuration.go @@ -14,6 +14,8 @@ package zstack +import "net/url" + type SConfiguration struct { Name string Category string @@ -24,5 +26,5 @@ type SConfiguration struct { func (region *SRegion) GetConfigrations() ([]SConfiguration, error) { configrations := []SConfiguration{} - return configrations, region.client.listAll("global-configurations", []string{}, &configrations) + return configrations, region.client.listAll("global-configurations", url.Values{}, &configrations) } diff --git a/pkg/multicloud/zstack/disk.go b/pkg/multicloud/zstack/disk.go index 97dc6e44ca..dad3ed3d69 100644 --- a/pkg/multicloud/zstack/disk.go +++ b/pkg/multicloud/zstack/disk.go @@ -17,6 +17,7 @@ package zstack import ( "context" "fmt" + "net/url" "strings" "time" @@ -119,15 +120,17 @@ func (region *SRegion) GetDiskWithStorage(diskId string) (*SDisk, error) { func (region *SRegion) GetDisks(storageId string, diskIds []string, diskType string) ([]SDisk, error) { disks := []SDisk{} - params := []string{"q=status!=Deleted", "q=status!=NotInstantiated"} + params := url.Values{} + params.Add("q", "status!=Deleted") + params.Add("q", "status!=NotInstantiated") if len(storageId) > 0 { - params = append(params, "q=primaryStorageUuid="+storageId) + params.Add("q", "primaryStorageUuid="+storageId) } if len(diskIds) > 0 { - params = append(params, "q=uuid?="+strings.Join(diskIds, ",")) + params.Add("q", "uuid?="+strings.Join(diskIds, ",")) } if len(diskType) > 0 { - params = append(params, "q=type="+diskType) + params.Add("q", "type="+diskType) } return disks, region.client.listAll("volumes", params, &disks) } diff --git a/pkg/multicloud/zstack/disk_offering.go b/pkg/multicloud/zstack/disk_offering.go index 99ef46b9ba..f264902972 100644 --- a/pkg/multicloud/zstack/disk_offering.go +++ b/pkg/multicloud/zstack/disk_offering.go @@ -16,6 +16,7 @@ package zstack import ( "fmt" + "net/url" "yunion.io/x/jsonutils" ) @@ -30,9 +31,9 @@ type SDiskOffering struct { func (region *SRegion) GetDiskOfferings(diskSizeGB int) ([]SDiskOffering, error) { offerings := []SDiskOffering{} - params := []string{} + params := url.Values{} if diskSizeGB != 0 { - params = append(params, "q=diskSize="+fmt.Sprintf("%d", diskSizeGB*1024*1024*1024)) + params.Add("q", "diskSize="+fmt.Sprintf("%d", diskSizeGB*1024*1024*1024)) } return offerings, region.client.listAll("disk-offerings", params, &offerings) } diff --git a/pkg/multicloud/zstack/eip.go b/pkg/multicloud/zstack/eip.go index fdf7c6d683..66126842ba 100644 --- a/pkg/multicloud/zstack/eip.go +++ b/pkg/multicloud/zstack/eip.go @@ -16,6 +16,7 @@ package zstack import ( "fmt" + "net/url" "time" "yunion.io/x/jsonutils" @@ -43,12 +44,12 @@ func (region *SRegion) GetEip(eipId string) (*SEipAddress, error) { func (region *SRegion) GetEips(eipId, instanceId string) ([]SEipAddress, error) { eips := []SEipAddress{} - params := []string{} + params := url.Values{} if len(eipId) > 0 { - params = append(params, "q=uuid="+eipId) + params.Add("q", "uuid="+eipId) } if len(instanceId) > 0 { - params = append(params, "q=vmNic.vmInstanceUuid="+instanceId) + params.Add("q", "vmNic.vmInstanceUuid="+instanceId) } err := region.client.listAll("eips", params, &eips) if err != nil { diff --git a/pkg/multicloud/zstack/host.go b/pkg/multicloud/zstack/host.go index 7a9f474131..3c219aa48f 100644 --- a/pkg/multicloud/zstack/host.go +++ b/pkg/multicloud/zstack/host.go @@ -16,6 +16,7 @@ package zstack import ( "fmt" + "net/url" "strings" "github.com/pkg/errors" @@ -52,15 +53,15 @@ type SHost struct { func (region *SRegion) GetHosts(zoneId string, hostId string) ([]SHost, error) { hosts := []SHost{} - params := []string{} + params := url.Values{} if len(zoneId) > 0 { - params = append(params, "q=zone.uuid="+zoneId) + params.Add("q", "zone.uuid="+zoneId) } if len(hostId) > 0 { - params = append(params, "q=uuid="+hostId) + params.Add("q", "uuid="+hostId) } if SkipEsxi { - params = append(params, "q=hypervisorType!=ESX") + params.Add("q", "hypervisorType!=ESX") } return hosts, region.client.listAll("hosts", params, &hosts) } diff --git a/pkg/multicloud/zstack/image.go b/pkg/multicloud/zstack/image.go index ef798026d6..6ba90d2e63 100644 --- a/pkg/multicloud/zstack/image.go +++ b/pkg/multicloud/zstack/image.go @@ -19,6 +19,7 @@ import ( "fmt" "io" "net/http" + "net/url" "sort" "time" @@ -197,15 +198,16 @@ func (region *SRegion) GetImage(imageId string) (*SImage, error) { func (region *SRegion) GetImages(zoneId string, imageId string) ([]SImage, error) { images := []SImage{} - params := []string{"q=system=false"} + params := url.Values{} + params.Add("q", "system=false") if len(zoneId) > 0 { - params = append(params, "q=backupStorage.zone.uuid="+zoneId) + params.Add("q", "backupStorage.zone.uuid="+zoneId) } if len(imageId) > 0 { - params = append(params, "q=uuid="+imageId) + params.Add("q", "uuid="+imageId) } if SkipEsxi { - params = append(params, "q=type!=vmware") + params.Add("q", "type!=vmware") } return images, region.client.listAll("images", params, &images) } diff --git a/pkg/multicloud/zstack/image_server.go b/pkg/multicloud/zstack/image_server.go index 385a1b5300..a51a3daec3 100644 --- a/pkg/multicloud/zstack/image_server.go +++ b/pkg/multicloud/zstack/image_server.go @@ -14,6 +14,8 @@ package zstack +import "net/url" + type ImageServers []SImageServer type SImageServer struct { @@ -49,15 +51,17 @@ func (v ImageServers) Less(i, j int) bool { func (region *SRegion) GetImageServers(zoneId, serverId string) ([]SImageServer, error) { servers := []SImageServer{} - params := []string{"q=state=Enabled", "q=status=Connected"} + params := url.Values{} + params.Add("q", "state=Enabled") + params.Add("q", "status=Connected") if SkipEsxi { - params = append(params, "q=type!=VCenter") + params.Add("q", "type!=VCenter") } if len(zoneId) > 0 { - params = append(params, "q=zone.uuid="+zoneId) + params.Add("q", "zone.uuid="+zoneId) } if len(serverId) > 0 { - params = append(params, "q=uuid="+serverId) + params.Add("q", "uuid="+serverId) } return servers, region.client.listAll("backup-storage", params, &servers) } diff --git a/pkg/multicloud/zstack/instance.go b/pkg/multicloud/zstack/instance.go index 9c47979b06..98fd8ae39d 100644 --- a/pkg/multicloud/zstack/instance.go +++ b/pkg/multicloud/zstack/instance.go @@ -74,18 +74,20 @@ func (region *SRegion) GetInstance(instanceId string) (*SInstance, error) { func (region *SRegion) GetInstances(hostId string, instanceId string, nicId string) ([]SInstance, error) { instance := []SInstance{} - params := []string{"q=type=UserVm", "q=state!=Destroyed"} + params := url.Values{} + params.Add("q", "type=UserVm") + params.Add("q", "state!=Destroyed") if len(hostId) > 0 { - params = append(params, "q=lastHostUuid="+hostId) + params.Add("q", "lastHostUuid="+hostId) } if len(instanceId) > 0 { - params = append(params, "q=uuid="+instanceId) + params.Add("q", "uuid="+instanceId) } if len(nicId) > 0 { - params = append(params, "q=vmNics.uuid="+nicId) + params.Add("q", "vmNics.uuid="+nicId) } if SkipEsxi { - params = append(params, "q=hypervisorType!=ESX") + params.Add("q", "hypervisorType!=ESX") } return instance, region.client.listAll("vm-instances", params, &instance) } diff --git a/pkg/multicloud/zstack/network.go b/pkg/multicloud/zstack/network.go index ad9cb2d969..ad1755efd6 100644 --- a/pkg/multicloud/zstack/network.go +++ b/pkg/multicloud/zstack/network.go @@ -16,6 +16,7 @@ package zstack import ( "fmt" + "net/url" "yunion.io/x/jsonutils" "yunion.io/x/pkg/util/netutils" @@ -87,15 +88,15 @@ func (region *SRegion) GetL3Network(l3Id string) (*SL3Network, error) { func (region *SRegion) GetL3Networks(zoneId string, wireId string, l3Id string) ([]SL3Network, error) { l3Networks := []SL3Network{} - params := []string{} + params := url.Values{} if len(zoneId) > 0 { - params = append(params, "q=zone.uuid="+zoneId) + params.Add("q", "zone.uuid="+zoneId) } if len(wireId) > 0 { - params = append(params, "q=l2NetworkUuid="+wireId) + params.Add("q", "l2NetworkUuid="+wireId) } if len(l3Id) > 0 { - params = append(params, "q=uuid="+l3Id) + params.Add("q", "uuid="+l3Id) } return l3Networks, region.client.listAll("l3-networks", params, &l3Networks) } diff --git a/pkg/multicloud/zstack/network_service.go b/pkg/multicloud/zstack/network_service.go index 919654db5d..68697d8d23 100644 --- a/pkg/multicloud/zstack/network_service.go +++ b/pkg/multicloud/zstack/network_service.go @@ -16,6 +16,7 @@ package zstack import ( "fmt" + "net/url" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -63,21 +64,21 @@ func (region *SRegion) GetNetworkServices() (*SNetworkService, error) { func (region *SRegion) GetNetworkServiceProviders(Type string) ([]SNetworkServiceProvider, error) { providers := []SNetworkServiceProvider{} - params := []string{} + params := url.Values{} if len(Type) > 0 { - params = append(params, "q=type="+Type) + params.Add("q", "type="+Type) } return providers, region.client.listAll("network-services/providers", params, &providers) } func (region *SRegion) GetNetworkServiceRef(l3Id string, Type string) ([]SNetworkServiceRef, error) { refs := []SNetworkServiceRef{} - params := []string{} + params := url.Values{} if len(l3Id) > 0 { - params = append(params, "q=l3NetworkUuid="+l3Id) + params.Add("q", "l3NetworkUuid="+l3Id) } if len(Type) > 0 { - params = append(params, "q=networkServiceType="+Type) + params.Add("q", "networkServiceType="+Type) } return refs, region.client.listAll("l3-networks/network-services/refs", params, &refs) } diff --git a/pkg/multicloud/zstack/offering.go b/pkg/multicloud/zstack/offering.go index 86ef3b300f..a9ffdca8df 100644 --- a/pkg/multicloud/zstack/offering.go +++ b/pkg/multicloud/zstack/offering.go @@ -16,6 +16,7 @@ package zstack import ( "fmt" + "net/url" "github.com/pkg/errors" @@ -85,18 +86,20 @@ func (region *SRegion) CreateInstanceOffering(name string, cpu int, memoryMb int func (region *SRegion) GetInstanceOfferings(offerId string, name string, cpu int, memorySizeMb int) ([]SInstanceOffering, error) { offerings := []SInstanceOffering{} - params := []string{"q=type=UserVM", "q=state=Enabled"} + params := url.Values{} + params.Add("q", "type=UserVM") + params.Add("q", "state=Enabled") if len(offerId) > 0 { - params = append(params, "q=uuid="+offerId) + params.Add("q", "uid="+offerId) } if len(name) > 0 { - params = append(params, "q=name="+name) + params.Add("q", "name="+name) } if cpu != 0 { - params = append(params, fmt.Sprintf("q=cpuNum=%d", cpu)) + params.Add("q", fmt.Sprintf("cpuNum=%d", cpu)) } if memorySizeMb != 0 { - params = append(params, fmt.Sprintf("q=memorySize=%d", memorySizeMb*1024*1024)) + params.Add("q", fmt.Sprintf("memorySize=%d", memorySizeMb*1024*1024)) } if err := region.client.listAll("instance-offerings", params, &offerings); err != nil { return nil, err diff --git a/pkg/multicloud/zstack/region.go b/pkg/multicloud/zstack/region.go index 1a6e85aed2..b97541de05 100644 --- a/pkg/multicloud/zstack/region.go +++ b/pkg/multicloud/zstack/region.go @@ -16,6 +16,7 @@ package zstack import ( "fmt" + "net/url" "strings" "github.com/pkg/errors" @@ -184,9 +185,9 @@ func (region *SRegion) GetZone(zoneId string) (*SZone, error) { func (region *SRegion) GetZones(zoneId string) ([]SZone, error) { zones := []SZone{} - params := []string{} + params := url.Values{} if len(zoneId) > 0 { - params = append(params, "q=uuid="+zoneId) + params.Add("q", "uuid="+zoneId) } err := region.client.listAll("zones", params, &zones) if err != nil { diff --git a/pkg/multicloud/zstack/securitygroup.go b/pkg/multicloud/zstack/securitygroup.go index 53c4eb7c3a..9924214146 100644 --- a/pkg/multicloud/zstack/securitygroup.go +++ b/pkg/multicloud/zstack/securitygroup.go @@ -17,6 +17,7 @@ package zstack import ( "fmt" "net" + "net/url" "sort" "strings" @@ -81,15 +82,15 @@ func (region *SRegion) GetSecurityGroup(secgroupId string) (*SSecurityGroup, err func (region *SRegion) GetSecurityGroups(secgroupId string, instanceId string, name string) ([]SSecurityGroup, error) { secgroups := []SSecurityGroup{} - params := []string{} + params := url.Values{} if len(secgroupId) > 0 { - params = append(params, "q=uuid="+secgroupId) + params.Add("q", "uuid="+secgroupId) } if len(instanceId) > 0 { - params = append(params, "q=vmNic.vmInstanceUuid="+instanceId) + params.Add("q", "vmNic.vmInstanceUuid="+instanceId) } if len(name) > 0 { - params = append(params, "q=name="+name) + params.Add("q", "name="+name) } err := region.client.listAll("security-groups", params, &secgroups) if err != nil { diff --git a/pkg/multicloud/zstack/snapshot.go b/pkg/multicloud/zstack/snapshot.go index 94460b611d..460cda8b81 100644 --- a/pkg/multicloud/zstack/snapshot.go +++ b/pkg/multicloud/zstack/snapshot.go @@ -16,6 +16,7 @@ package zstack import ( "fmt" + "net/url" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -95,12 +96,12 @@ func (region *SRegion) GetSnapshot(snapshotId string) (*SSnapshot, error) { func (region *SRegion) GetSnapshots(snapshotId string, diskId string) ([]SSnapshot, error) { snapshots := []SSnapshot{} - params := []string{} + params := url.Values{} if len(snapshotId) > 0 { - params = append(params, "q=uuid="+snapshotId) + params.Add("q", "uuid="+snapshotId) } if len(diskId) > 0 { - params = append(params, "q=volumeUuid="+diskId) + params.Add("q", "volumeUuid="+diskId) } if err := region.client.listAll("volume-snapshots", params, &snapshots); err != nil { return nil, err diff --git a/pkg/multicloud/zstack/storage.go b/pkg/multicloud/zstack/storage.go index eab7fd6401..b0a3694953 100644 --- a/pkg/multicloud/zstack/storage.go +++ b/pkg/multicloud/zstack/storage.go @@ -16,6 +16,7 @@ package zstack import ( "fmt" + "net/url" "strings" "yunion.io/x/jsonutils" @@ -118,18 +119,18 @@ func (region *SRegion) GetStorage(storageId string) (*SStorage, error) { func (region *SRegion) GetStorages(zoneId, clusterId, storageId string) ([]SStorage, error) { storages := []SStorage{} - params := []string{} + params := url.Values{} if len(zoneId) > 0 { - params = append(params, "q=zone.uuid="+zoneId) + params.Add("q", "zone.uuid="+zoneId) } if len(clusterId) > 0 { - params = append(params, "q=cluster.uuid="+clusterId) + params.Add("q", "cluster.uuid="+clusterId) } if SkipEsxi { - params = append(params, "q=type!=VCenter") + params.Add("q", "type!=VCenter") } if len(storageId) > 0 { - params = append(params, "q=uuid="+storageId) + params.Add("q", "uuid="+storageId) } return storages, region.client.listAll("primary-storage", params, &storages) } diff --git a/pkg/multicloud/zstack/storage_local.go b/pkg/multicloud/zstack/storage_local.go index 24a66dd255..777c263d40 100644 --- a/pkg/multicloud/zstack/storage_local.go +++ b/pkg/multicloud/zstack/storage_local.go @@ -16,6 +16,7 @@ package zstack import ( "fmt" + "net/url" "strings" "yunion.io/x/jsonutils" @@ -55,9 +56,9 @@ func (region *SRegion) GetLocalStorage(storageId string, hostId string) (*SLocal func (region *SRegion) GetLocalStorages(storageId string, hostId string) ([]SLocalStorage, error) { localStorage := []SLocalStorage{} - params := []string{} + params := url.Values{} if len(hostId) > 0 { - params = append(params, "hostUuid="+hostId) + params.Set("hostUuid", hostId) } err := region.client.listAll(fmt.Sprintf("primary-storage/local-storage/%s/capacities", storageId), params, &localStorage) if err != nil { diff --git a/pkg/multicloud/zstack/systag.go b/pkg/multicloud/zstack/systag.go index 167a582d53..99f8106771 100644 --- a/pkg/multicloud/zstack/systag.go +++ b/pkg/multicloud/zstack/systag.go @@ -14,6 +14,8 @@ package zstack +import "net/url" + type SSysTag struct { ZStackTime Inherent bool `json:"inherent"` @@ -26,18 +28,18 @@ type SSysTag struct { func (region *SRegion) GetSysTags(tagId string, resourceType string, resourceId string, tag string) ([]SSysTag, error) { tags := []SSysTag{} - params := []string{} + params := url.Values{} if len(tagId) > 0 { - params = append(params, "q=uuid="+tagId) + params.Add("q", "uuid="+tagId) } if len(resourceType) > 0 { - params = append(params, "q=resourceType="+resourceType) + params.Add("q", "resourceType="+resourceType) } if len(resourceId) > 0 { - params = append(params, "q=resourceUuid="+resourceId) + params.Add("q", "resourceUuid="+resourceId) } if len(tag) > 0 { - params = append(params, "q=tag="+tag) + params.Add("q", "tag="+tag) } return tags, region.client.listAll("system-tags", params, &tags) } diff --git a/pkg/multicloud/zstack/vip.go b/pkg/multicloud/zstack/vip.go index de57592107..ccfd2b947d 100644 --- a/pkg/multicloud/zstack/vip.go +++ b/pkg/multicloud/zstack/vip.go @@ -16,6 +16,7 @@ package zstack import ( "fmt" + "net/url" "github.com/pkg/errors" @@ -132,9 +133,9 @@ func (region *SRegion) GetNetworkId(vip *SVirtualIP) string { func (region *SRegion) GetVirtualIPs(vipId string) ([]SVirtualIP, error) { vips := []SVirtualIP{} - params := []string{} + params := url.Values{} if len(vipId) > 0 { - params = append(params, "q=uuid="+vipId) + params.Add("q", "uuid="+vipId) } return vips, region.client.listAll("vips", params, &vips) } diff --git a/pkg/multicloud/zstack/wire.go b/pkg/multicloud/zstack/wire.go index c3f69708dd..1ffb989126 100644 --- a/pkg/multicloud/zstack/wire.go +++ b/pkg/multicloud/zstack/wire.go @@ -16,6 +16,7 @@ package zstack import ( "fmt" + "net/url" "strings" "yunion.io/x/jsonutils" @@ -48,15 +49,16 @@ func (region *SRegion) GetWires(zoneId string, wireId string, clusterId string) if err != nil { return nil, err } - params := []string{"q=attachedClusterUuids?=" + strings.Join(clusterIds, ",")} + params := url.Values{} + params.Add("q", "attachedClusterUuids?="+strings.Join(clusterIds, ",")) if len(clusterId) > 0 { - params = []string{"q=attachedClusterUuids?=" + clusterId} + params.Set("q", "attachedClusterUuids?="+clusterId) } if len(zoneId) > 0 { - params = append(params, "q=zone.uuid="+zoneId) + params.Add("q", "zone.uuid="+zoneId) } if len(wireId) > 0 { - params = append(params, "q=uuid="+wireId) + params.Add("q", "uuid="+wireId) } err = region.client.listAll("l2-networks", params, &wires) if err != nil { diff --git a/pkg/multicloud/zstack/zstack.go b/pkg/multicloud/zstack/zstack.go index 88d0d8fe7d..65e5300d9e 100644 --- a/pkg/multicloud/zstack/zstack.go +++ b/pkg/multicloud/zstack/zstack.go @@ -120,13 +120,13 @@ func (cli *SZStackClient) GetIRegionById(id string) (cloudprovider.ICloudRegion, return nil, cloudprovider.ErrNotFound } -func (cli *SZStackClient) getRequestURL(resource string, params []string) string { - return cli.authURL + fmt.Sprintf("/zstack/%s/%s", ZSTACK_API_VERSION, resource) + "?" + strings.Join(params, "&") +func (cli *SZStackClient) getRequestURL(resource string, params url.Values) string { + return cli.authURL + fmt.Sprintf("/zstack/%s/%s", ZSTACK_API_VERSION, resource) + "?" + params.Encode() } func (cli *SZStackClient) testAccessKey() error { zones := []SZone{} - err := cli.listAll("zones", []string{}, &zones) + err := cli.listAll("zones", url.Values{}, &zones) if err != nil { return errors.Wrap(err, "testAccessKey") } @@ -155,7 +155,7 @@ func (cli *SZStackClient) connect() error { return fmt.Errorf("password auth has been deprecated, please using ak sk auth") } -func (cli *SZStackClient) listAll(resource string, params []string, retVal interface{}) error { +func (cli *SZStackClient) listAll(resource string, params url.Values, retVal interface{}) error { result := []jsonutils.JSONObject{} start, limit := 0, 50 for { @@ -193,18 +193,18 @@ func (cli *SZStackClient) sign(uri, method string, header http.Header) error { return nil } -func (cli *SZStackClient) _list(resource string, start int, limit int, params []string) (jsonutils.JSONObject, error) { +func (cli *SZStackClient) _list(resource string, start int, limit int, params url.Values) (jsonutils.JSONObject, error) { client := httputils.GetDefaultClient() header := http.Header{} if params == nil { - params = []string{} + params = url.Values{} } - params = append(params, "replyWithCount=true") - params = append(params, fmt.Sprintf("start=%d", start)) + params.Set("replyWithCount", "true") + params.Set("start", fmt.Sprintf("%d", start)) if limit == 0 { limit = 50 } - params = append(params, fmt.Sprintf("limit=%d", limit)) + params.Set("limit", fmt.Sprintf("%d", limit)) requestURL := cli.getRequestURL(resource, params) err := cli.sign(requestURL, "GET", header) if err != nil { @@ -404,7 +404,7 @@ func (cli *SZStackClient) _post(resource string, params jsonutils.JSONObject) (j return resp, nil } -func (cli *SZStackClient) list(baseURL string, start int, limit int, params []string, retVal interface{}) error { +func (cli *SZStackClient) list(baseURL string, start int, limit int, params url.Values, retVal interface{}) error { resp, err := cli._list(baseURL, start, limit, params) if err != nil { return err