You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by da...@apache.org on 2022/04/18 08:33:06 UTC
[cloudstack-go] branch main updated: Fix listVPCs unmarshall error when a VPC has network tiers attached (#26)
This is an automated email from the ASF dual-hosted git repository.
davidjumani pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack-go.git
The following commit(s) were added to refs/heads/main by this push:
new fe331a3 Fix listVPCs unmarshall error when a VPC has network tiers attached (#26)
fe331a3 is described below
commit fe331a3c0dac0e24b0dd3121422332b1eb904070
Author: tetra12 <45...@users.noreply.github.com>
AuthorDate: Mon Apr 18 11:33:02 2022 +0300
Fix listVPCs unmarshall error when a VPC has network tiers attached (#26)
* Started to impl VPC list test
* * Upd list VPCs test for both simple and network cases
* Bump go version
* Add listVPCs success and fail responses for test
* Upd VPC schema
* Updated generator to output valid network type for VPC Service
* Minor fixes
Co-authored-by: tampler <so...@gmail.com>
Co-authored-by: davidjumani <dj...@gmail.com>
---
cloudstack/VPCService.go | 6 +-
cloudstack/VPCService_test.go | 25 +++
cloudstack/testdata/VPCServiceData.json | 312 +++++++++++++++++++++++++++++++-
generate/generate.go | 2 +
go.mod | 2 +-
5 files changed, 342 insertions(+), 5 deletions(-)
diff --git a/cloudstack/VPCService.go b/cloudstack/VPCService.go
index 546de71..f7c9f80 100644
--- a/cloudstack/VPCService.go
+++ b/cloudstack/VPCService.go
@@ -718,7 +718,7 @@ type CreateVPCResponse struct {
JobID string `json:"jobid"`
Jobstatus int `json:"jobstatus"`
Name string `json:"name"`
- Network []string `json:"network"`
+ Network []*Network `json:"network"`
Networkdomain string `json:"networkdomain"`
Project string `json:"project"`
Projectid string `json:"projectid"`
@@ -2855,7 +2855,7 @@ type VPC struct {
JobID string `json:"jobid"`
Jobstatus int `json:"jobstatus"`
Name string `json:"name"`
- Network []string `json:"network"`
+ Network []*Network `json:"network"`
Networkdomain string `json:"networkdomain"`
Project string `json:"project"`
Projectid string `json:"projectid"`
@@ -3169,7 +3169,7 @@ type UpdateVPCResponse struct {
JobID string `json:"jobid"`
Jobstatus int `json:"jobstatus"`
Name string `json:"name"`
- Network []string `json:"network"`
+ Network []*Network `json:"network"`
Networkdomain string `json:"networkdomain"`
Project string `json:"project"`
Projectid string `json:"projectid"`
diff --git a/cloudstack/VPCService_test.go b/cloudstack/VPCService_test.go
index 80231bc..595ce1b 100644
--- a/cloudstack/VPCService_test.go
+++ b/cloudstack/VPCService_test.go
@@ -38,6 +38,7 @@ func TestVPCService_RestartVPC(t *testing.T) {
defer server.Close()
client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
params := client.VPC.NewRestartVPCParams("f9ec95f3-70be-448a-8ba2-cb6388dce55a")
+
resp, err := client.VPC.RestartVPC(params)
if err != nil {
t.Errorf("Failed to restart VPC network due to: %v", err)
@@ -46,3 +47,27 @@ func TestVPCService_RestartVPC(t *testing.T) {
t.Errorf("Failed to restart VPC network")
}
}
+
+func TestVPCService_ListVPCs(t *testing.T) {
+
+ server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
+ apiName := "listVPCs"
+ response, err := ParseAsyncResponse(apiName, "VPCService", *request)
+ if err != nil {
+ t.Errorf("Failed to parse response, due to: %v", err)
+ }
+ fmt.Fprintln(writer, response)
+ }))
+ defer server.Close()
+
+ client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
+ params := client.VPC.NewListVPCsParams()
+ resp, err := client.VPC.ListVPCs(params)
+
+ if err != nil {
+ t.Errorf("Failed to list VPCs due to: %v", err)
+ }
+ if resp == nil {
+ t.Errorf("Failed to list VPCs")
+ }
+}
diff --git a/cloudstack/testdata/VPCServiceData.json b/cloudstack/testdata/VPCServiceData.json
index 25b0050..595f832 100644
--- a/cloudstack/testdata/VPCServiceData.json
+++ b/cloudstack/testdata/VPCServiceData.json
@@ -22,5 +22,315 @@
"jobid": "98272f42-917c-4286-8c05-4e38d85d32e0"
}
}
+ },
+ "listVPCs": {
+ "listVPCs": {
+ "listvpcresponse": {
+ "count": 2,
+ "vpc": [
+ {
+ "id": "49b5fa29-e98f-4078-b407-7e7928105ec0",
+ "name": "my-vpc",
+ "displaytext": "my-vpc-text",
+ "state": "Enabled",
+ "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81",
+ "zonename": "SimZone1",
+ "service": [
+ { "name": "Dns", "provider": [{ "name": "VpcVirtualRouter" }] },
+ { "name": "Dhcp", "provider": [{ "name": "VpcVirtualRouter" }] },
+ {
+ "name": "PortForwarding",
+ "provider": [{ "name": "VpcVirtualRouter" }]
+ },
+ {
+ "name": "StaticNat",
+ "provider": [{ "name": "VpcVirtualRouter" }]
+ },
+ { "name": "Vpn", "provider": [{ "name": "VpcVirtualRouter" }] },
+ {
+ "name": "SourceNat",
+ "provider": [{ "name": "VpcVirtualRouter" }]
+ },
+ {
+ "name": "NetworkACL",
+ "provider": [{ "name": "VpcVirtualRouter" }]
+ },
+ {
+ "name": "UserData",
+ "provider": [{ "name": "VpcVirtualRouter" }]
+ },
+ {
+ "name": "Lb",
+ "provider": [
+ { "name": "VpcVirtualRouter" },
+ { "name": "InternalLbVm" }
+ ]
+ }
+ ],
+ "cidr": "10.0.0.0/8",
+ "vpcofferingid": "8142b164-0fa2-40c6-9067-2a90ae526df5",
+ "vpcofferingname": "Default VPC offering",
+ "created": "2021-12-26T22:26:18+0000",
+ "account": "admin",
+ "domainid": "bbae9696-627f-11ec-8fb6-0242ac110002",
+ "domain": "ROOT",
+ "network": [],
+ "restartrequired": false,
+ "networkdomain": "my-domain",
+ "tags": [{ "key": "my-tag", "value": "true" }],
+ "fordisplay": true,
+ "distributedvpcrouter": false,
+ "regionlevelvpc": false,
+ "redundantvpcrouter": false,
+ "hasannotations": false
+ },
+ {
+ "id": "78d49100-e4af-4692-9a49-284fa2444eb9",
+ "name": "my-vpc",
+ "displaytext": "my-vpc",
+ "state": "Enabled",
+ "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81",
+ "zonename": "SimZone1",
+ "service": [
+ { "name": "Dns", "provider": [{ "name": "VpcVirtualRouter" }] },
+ { "name": "Dhcp", "provider": [{ "name": "VpcVirtualRouter" }] },
+ {
+ "name": "PortForwarding",
+ "provider": [{ "name": "VpcVirtualRouter" }]
+ },
+ {
+ "name": "StaticNat",
+ "provider": [{ "name": "VpcVirtualRouter" }]
+ },
+ { "name": "Vpn", "provider": [{ "name": "VpcVirtualRouter" }] },
+ {
+ "name": "SourceNat",
+ "provider": [{ "name": "VpcVirtualRouter" }]
+ },
+ {
+ "name": "NetworkACL",
+ "provider": [{ "name": "VpcVirtualRouter" }]
+ },
+ {
+ "name": "UserData",
+ "provider": [{ "name": "VpcVirtualRouter" }]
+ },
+ {
+ "name": "Lb",
+ "provider": [
+ { "name": "VpcVirtualRouter" },
+ { "name": "InternalLbVm" }
+ ]
+ }
+ ],
+ "cidr": "10.0.0.0/8",
+ "vpcofferingid": "8142b164-0fa2-40c6-9067-2a90ae526df5",
+ "vpcofferingname": "Default VPC offering",
+ "created": "2021-12-26T22:28:44+0000",
+ "account": "admin",
+ "domainid": "bbae9696-627f-11ec-8fb6-0242ac110002",
+ "domain": "ROOT",
+ "network": [
+ {
+ "id": "e22cab07-58ac-4a1b-b0a8-fcee1bbecc7d",
+ "name": "my-network",
+ "displaytext": "my-network",
+ "broadcastdomaintype": "Vlan",
+ "traffictype": "Guest",
+ "gateway": "10.1.1.1",
+ "netmask": "255.255.255.0",
+ "cidr": "10.1.1.0/24",
+ "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81",
+ "zonename": "SimZone1",
+ "networkofferingid": "f26a1059-24df-4f76-9daf-16d42ce9df11",
+ "networkofferingname": "DefaultIsolatedNetworkOfferingForVpcNetworks",
+ "networkofferingdisplaytext": "Offering for Isolated Vpc networks with Source Nat service enabled",
+ "networkofferingconservemode": false,
+ "networkofferingavailability": "Optional",
+ "issystem": false,
+ "state": "Allocated",
+ "related": "e22cab07-58ac-4a1b-b0a8-fcee1bbecc7d",
+ "dns1": "10.147.28.6",
+ "type": "Isolated",
+ "acltype": "Account",
+ "account": "admin",
+ "domainid": "bbae9696-627f-11ec-8fb6-0242ac110002",
+ "domain": "ROOT",
+ "service": [
+ {
+ "name": "Dns",
+ "provider": [{ "name": "VpcVirtualRouter" }],
+ "capability": [
+ {
+ "name": "AllowDnsSuffixModification",
+ "value": "true",
+ "canchooseservicecapability": false
+ }
+ ]
+ },
+ {
+ "name": "Dhcp",
+ "provider": [{ "name": "VpcVirtualRouter" }],
+ "capability": [
+ {
+ "name": "DhcpAccrossMultipleSubnets",
+ "value": "true",
+ "canchooseservicecapability": false
+ }
+ ]
+ },
+ {
+ "name": "PortForwarding",
+ "provider": [{ "name": "VpcVirtualRouter" }],
+ "capability": [
+ {
+ "name": "SupportedProtocols",
+ "value": "tcp,udp",
+ "canchooseservicecapability": false
+ }
+ ]
+ },
+ {
+ "name": "StaticNat",
+ "provider": [{ "name": "VpcVirtualRouter" }],
+ "capability": [
+ {
+ "name": "ElasticIp",
+ "value": "false",
+ "canchooseservicecapability": false
+ },
+ {
+ "name": "AssociatePublicIP",
+ "value": "true",
+ "canchooseservicecapability": false
+ }
+ ]
+ },
+ {
+ "name": "Vpn",
+ "provider": [{ "name": "VpcVirtualRouter" }],
+ "capability": [
+ {
+ "name": "SupportedVpnTypes",
+ "value": "pptp,l2tp,ipsec",
+ "canchooseservicecapability": false
+ },
+ {
+ "name": "VpnTypes",
+ "value": "s2svpn",
+ "canchooseservicecapability": false
+ }
+ ]
+ },
+ {
+ "name": "SourceNat",
+ "provider": [{ "name": "VpcVirtualRouter" }],
+ "capability": [
+ {
+ "name": "SupportedSourceNatTypes",
+ "value": "peraccount",
+ "canchooseservicecapability": true
+ },
+ {
+ "name": "RedundantRouter",
+ "value": "false",
+ "canchooseservicecapability": true
+ }
+ ]
+ },
+ {
+ "name": "NetworkACL",
+ "provider": [{ "name": "VpcVirtualRouter" }],
+ "capability": [
+ {
+ "name": "SupportedProtocols",
+ "value": "tcp,udp,icmp",
+ "canchooseservicecapability": false
+ }
+ ]
+ },
+ {
+ "name": "UserData",
+ "provider": [{ "name": "VpcVirtualRouter" }],
+ "capability": []
+ },
+ {
+ "name": "Lb",
+ "provider": [{ "name": "VpcVirtualRouter" }],
+ "capability": [
+ {
+ "name": "SupportedStickinessMethods",
+ "value": "[{\"methodname\":\"LbCookie\",\"paramlist\":[{\"paramname\":\"cookie-name\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"mode\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"nocache\",\"required\":false,\"isflag\":true,\"description\":\" \"},{\"paramname\":\"indirect\",\"required\":false,\"isflag\":true,\"description\":\" \"},{\"paramname\":\"postonly\",\"required\":false,\"isflag\":true,\"desc [...]
+ "canchooseservicecapability": false
+ },
+ {
+ "name": "SupportedLbAlgorithms",
+ "value": "roundrobin,leastconn,source",
+ "canchooseservicecapability": false
+ },
+ {
+ "name": "LbSchemes",
+ "value": "Public",
+ "canchooseservicecapability": false
+ },
+ {
+ "name": "SupportedProtocols",
+ "value": "tcp, udp, tcp-proxy",
+ "canchooseservicecapability": false
+ },
+ {
+ "name": "SupportedLBIsolation",
+ "value": "dedicated",
+ "canchooseservicecapability": true
+ },
+ {
+ "name": "AutoScaleCounters",
+ "value": "[{\"methodname\":\"cpu\",\"paramlist\":[]},{\"methodname\":\"memory\",\"paramlist\":[]}]",
+ "canchooseservicecapability": false
+ },
+ {
+ "name": "ElasticLb",
+ "value": "false",
+ "canchooseservicecapability": false
+ },
+ {
+ "name": "InlineMode",
+ "value": "false",
+ "canchooseservicecapability": false
+ }
+ ]
+ }
+ ],
+ "networkdomain": "my-domain",
+ "physicalnetworkid": "ffcffe07-5cbf-4862-9c52-8e7153a5239a",
+ "restartrequired": false,
+ "specifyipranges": false,
+ "vpcid": "78d49100-e4af-4692-9a49-284fa2444eb9",
+ "vpcname": "my-vpc",
+ "canusefordeploy": true,
+ "ispersistent": false,
+ "tags": [],
+ "details": {},
+ "displaynetwork": true,
+ "strechedl2subnet": false,
+ "redundantrouter": false,
+ "created": "2021-12-26T22:28:52+0000",
+ "receivedbytes": 0,
+ "sentbytes": 0,
+ "hasannotations": false
+ }
+ ],
+ "restartrequired": false,
+ "networkdomain": "my-domain",
+ "tags": [{ "key": "my-tag", "value": "true" }],
+ "fordisplay": true,
+ "distributedvpcrouter": false,
+ "regionlevelvpc": false,
+ "redundantvpcrouter": false,
+ "hasannotations": false
+ }
+ ]
+ }
+ }
}
-}
\ No newline at end of file
+}
diff --git a/generate/generate.go b/generate/generate.go
index 488cf4e..1fc5f38 100644
--- a/generate/generate.go
+++ b/generate/generate.go
@@ -1850,6 +1850,8 @@ func mapType(aName string, pName string, pType string) string {
case "list":
if pName == "downloaddetails" || pName == "owner" {
return "[]map[string]string"
+ } else if pName == "network" {
+ return "[]*Network"
}
return "[]string"
case "map":
diff --git a/go.mod b/go.mod
index 6a6c2ec..274ecbb 100644
--- a/go.mod
+++ b/go.mod
@@ -1,5 +1,5 @@
module github.com/apache/cloudstack-go/v2
-go 1.13
+go 1.17
require github.com/golang/mock v1.6.0