From 78fa5e496c8a81f2a7527c1cd5a762a9611e27ad Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Thu, 14 Oct 2021 14:50:57 +0530 Subject: [PATCH] Refactor tests - decouple test data from test files (#14) * refactor tests * Decouple Test data from tests --- cloudstack/AccountService_test.go | 173 +------ cloudstack/AddressService_test.go | 88 +--- cloudstack/AffinityGroupService_test.go | 39 +- cloudstack/AsyncJobService_test.go | 22 +- cloudstack/AuthenticationService_test.go | 37 +- cloudstack/CertificateService_test.go | 31 +- cloudstack/ClusterService.go | 4 + cloudstack/ClusterService_test.go | 344 +++---------- cloudstack/ConfigurationService.go | 4 + cloudstack/ConfigurationService_test.go | 98 ++-- cloudstack/DiskOfferingService_test.go | 61 +-- cloudstack/DomainService_test.go | 155 ++---- cloudstack/FirewallService_test.go | 141 +----- cloudstack/HostService_test.go | 394 ++------------- cloudstack/HypervisorService_test.go | 23 +- cloudstack/ISOService_test.go | 41 +- cloudstack/ImageStoreService_test.go | 59 +-- cloudstack/LoadBalancerService_test.go | 80 +-- cloudstack/NetworkOfferingService_test.go | 111 +---- cloudstack/NetworkService_test.go | 436 +---------------- cloudstack/PoolService_test.go | 81 +-- cloudstack/ProjectService_test.go | 314 +----------- cloudstack/ResourcetagsService_test.go | 58 +-- cloudstack/SSHService_test.go | 169 +------ cloudstack/ServiceOfferingService_test.go | 72 +-- cloudstack/StoragePoolService_test.go | 104 +--- cloudstack/TemplateService_test.go | 165 +------ cloudstack/UserService_test.go | 189 ++----- cloudstack/VLANService_test.go | 20 +- cloudstack/VirtualMachineService_test.go | 463 +----------------- cloudstack/cloudstack_test.go | 44 ++ cloudstack/testdata/AccountServiceData.json | 154 ++++++ cloudstack/testdata/AddressServiceData.json | 80 +++ .../testdata/AffinityGroupServiceData.json | 36 ++ .../testdata/ApiDiscoveryServiceData.json | 138 ++++++ cloudstack/testdata/AsyncJobServiceData.json | 17 + .../testdata/AuthenticationServiceData.json | 23 + .../testdata/CertificateServiceData.json | 28 ++ cloudstack/testdata/ClusterServiceData.json | 257 ++++++++++ .../testdata/ConfigurationServiceData.json | 51 ++ .../testdata/DiskOfferingServiceData.json | 42 ++ cloudstack/testdata/DomainServiceData.json | 124 +++++ cloudstack/testdata/FirewallServiceData.json | 123 +++++ cloudstack/testdata/HostServiceData.json | 359 ++++++++++++++ .../testdata/HypervisorServiceData.json | 18 + cloudstack/testdata/ISOServiceData.json | 36 ++ .../testdata/ImageStoreServiceData.json | 40 ++ .../testdata/LoadBalancerServiceData.json | 72 +++ .../testdata/NetworkOfferingServiceData.json | 85 ++++ cloudstack/testdata/NetworkServiceData.json | 413 ++++++++++++++++ cloudstack/testdata/PoolServiceData.json | 62 +++ cloudstack/testdata/ProjectServiceData.json | 296 +++++++++++ .../testdata/ResourceTagsServiceData.json | 50 ++ cloudstack/testdata/SSHServiceData.json | 145 ++++++ .../testdata/ServiceOfferingServiceData.json | 53 ++ .../testdata/StoragePoolServiceData.json | 96 ++++ cloudstack/testdata/TemplateServiceData.json | 150 ++++++ cloudstack/testdata/UserServiceData.json | 151 ++++++ cloudstack/testdata/VLANServiceData.json | 15 + .../testdata/VirtualMachineServiceData.json | 440 +++++++++++++++++ generate/generate.go | 2 + 61 files changed, 4130 insertions(+), 3446 deletions(-) create mode 100644 cloudstack/testdata/AccountServiceData.json create mode 100644 cloudstack/testdata/AddressServiceData.json create mode 100644 cloudstack/testdata/AffinityGroupServiceData.json create mode 100644 cloudstack/testdata/ApiDiscoveryServiceData.json create mode 100644 cloudstack/testdata/AsyncJobServiceData.json create mode 100644 cloudstack/testdata/AuthenticationServiceData.json create mode 100644 cloudstack/testdata/CertificateServiceData.json create mode 100644 cloudstack/testdata/ClusterServiceData.json create mode 100644 cloudstack/testdata/ConfigurationServiceData.json create mode 100644 cloudstack/testdata/DiskOfferingServiceData.json create mode 100644 cloudstack/testdata/DomainServiceData.json create mode 100644 cloudstack/testdata/FirewallServiceData.json create mode 100644 cloudstack/testdata/HostServiceData.json create mode 100644 cloudstack/testdata/HypervisorServiceData.json create mode 100644 cloudstack/testdata/ISOServiceData.json create mode 100644 cloudstack/testdata/ImageStoreServiceData.json create mode 100644 cloudstack/testdata/LoadBalancerServiceData.json create mode 100644 cloudstack/testdata/NetworkOfferingServiceData.json create mode 100644 cloudstack/testdata/NetworkServiceData.json create mode 100644 cloudstack/testdata/PoolServiceData.json create mode 100644 cloudstack/testdata/ProjectServiceData.json create mode 100644 cloudstack/testdata/ResourceTagsServiceData.json create mode 100644 cloudstack/testdata/SSHServiceData.json create mode 100644 cloudstack/testdata/ServiceOfferingServiceData.json create mode 100644 cloudstack/testdata/StoragePoolServiceData.json create mode 100644 cloudstack/testdata/TemplateServiceData.json create mode 100644 cloudstack/testdata/UserServiceData.json create mode 100644 cloudstack/testdata/VLANServiceData.json create mode 100644 cloudstack/testdata/VirtualMachineServiceData.json diff --git a/cloudstack/AccountService_test.go b/cloudstack/AccountService_test.go index 4959fce..3e93614 100644 --- a/cloudstack/AccountService_test.go +++ b/cloudstack/AccountService_test.go @@ -27,97 +27,20 @@ import ( ) func TestListAccounts(t *testing.T) { + apiName := "listAccountsResponse" server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - resp := ` -{ - "listaccountsresponse": { - "account": [ - { - "accountdetails": { - "key0": "value0", - "key1": "value1" - }, - "accounttype": 1, - "cpuavailable": "Unlimited", - "cpulimit": "Unlimited", - "cputotal": 1, - "domain": "ROOT", - "domainid": "62f5fe2e-5f5a-11e5-bc86-0242ac11180a", - "groups": [], - "id": "62f61a73-5f5a-11e5-bc86-0242ac11180a", - "ipavailable": "Unlimited", - "iplimit": "Unlimited", - "iptotal": 1, - "isdefault": true, - "memoryavailable": "Unlimited", - "memorylimit": "Unlimited", - "memorytotal": 512, - "name": "admin", - "networkavailable": "Unlimited", - "networklimit": "Unlimited", - "networktotal": 1, - "primarystorageavailable": "Unlimited", - "primarystoragelimit": "Unlimited", - "primarystoragetotal": 2, - "projectavailable": "Unlimited", - "projectlimit": "Unlimited", - "projecttotal": 1, - "receivedbytes": 100, - "secondarystorageavailable": "Unlimited", - "secondarystoragelimit": "Unlimited", - "secondarystoragetotal": 0, - "sentbytes": 100, - "snapshotavailable": "Unlimited", - "snapshotlimit": "Unlimited", - "snapshottotal": 0, - "state": "enabled", - "templateavailable": "Unlimited", - "templatelimit": "Unlimited", - "templatetotal": 0, - "user": [ - { - "account": "admin", - "accountid": "62f61a73-5f5a-11e5-bc86-0242ac11180a", - "accounttype": 1, - "apikey": "BFCyYeY0HhhrvNWC7FBwHTlso52ow3XWZUzNuiv03jmJOQn-5UH5BTVRVheiBnaRfYFE9yOzjwiqkbahq9P-Rw", - "created": "2015-09-20T05:42:31+0000", - "domain": "ROOT", - "domainid": "62f5fe2e-5f5a-11e5-bc86-0242ac11180a", - "email": "admin@mailprovider.com", - "firstname": "Admin", - "id": "62f6394b-5f5a-11e5-bc86-0242ac11180a", - "iscallerchilddomain": false, - "isdefault": true, - "lastname": "User", - "secretkey": "Em1UPdKTYEDaUxPXKtpqy_1uYluHWU2ZHotPi-VnBi_-MOEUAANoFHg3ycDProluDzYAXmT3YRssk367ylr_4A", - "state": "enabled", - "username": "admin" - } - ], - "vmavailable": "Unlimited", - "vmlimit": "Unlimited", - "vmrunning": 1, - "vmtotal": 1, - "volumeavailable": "Unlimited", - "volumelimit": "Unlimited", - "volumetotal": 1, - "vpcavailable": "Unlimited", - "vpclimit": "Unlimited", - "vpctotal": 0 - } - ], - "count": 1 - } -} - ` - fmt.Fprintln(w, resp) + resp, err := ReadData(apiName, "AccountService") + if err != nil { + t.Errorf("Failed to read response data, due to: %v", err) + return + } + fmt.Fprintln(w, resp[apiName]) })) defer server.Close() client := newClient(server.URL, "APIKEY", "SECRETKEY", true, true) p := client.Account.NewListAccountsParams() acc, _ := client.Account.ListAccounts(p) - accounts := acc.Accounts if len(accounts) != 1 { t.Errorf("length: actual %d, expected 1", len(accounts)) @@ -141,82 +64,14 @@ func TestListAccounts(t *testing.T) { } func TestCreateAccounts(t *testing.T) { + apiName := "createAccountsResponse" server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - resp := ` -{ - "createaccountresponse": { - "account": { - "accountdetails": { - "key0": "value0", - "key1": "value1" - }, - "accounttype": 2, - "cpuavailable": "40", - "cpulimit": "40", - "cputotal": 0, - "domain": "ROOT", - "domainid": "62f5fe2e-5f5a-11e5-bc86-0242ac11180a", - "groups": [], - "id": "c9cb9df8-dcd5-44c5-a40d-2e7d266669a6", - "ipavailable": "20", - "iplimit": "20", - "iptotal": 0, - "isdefault": false, - "memoryavailable": "40960", - "memorylimit": "40960", - "memorytotal": 0, - "name": "user01", - "networkavailable": "20", - "networklimit": "20", - "networktotal": 0, - "primarystorageavailable": "200", - "primarystoragelimit": "200", - "primarystoragetotal": 0, - "projectavailable": "Unlimited", - "projectlimit": "Unlimited", - "projecttotal": 0, - "secondarystorageavailable": "400", - "secondarystoragelimit": "400", - "secondarystoragetotal": 0, - "snapshotavailable": "20", - "snapshotlimit": "20", - "snapshottotal": 0, - "state": "enabled", - "templateavailable": "20", - "templatelimit": "20", - "templatetotal": 0, - "user": [ - { - "account": "user01", - "accountid": "c9cb9df8-dcd5-44c5-a40d-2e7d266669a6", - "accounttype": 2, - "created": "2016-07-26T02:17:17+0000", - "domain": "ROOT", - "domainid": "62f5fe2e-5f5a-11e5-bc86-0242ac11180a", - "email": "user01@example.com", - "firstname": "user01", - "id": "1d69ac45-a8f7-469c-ab24-d2b0382fa8be", - "iscallerchilddomain": false, - "isdefault": false, - "lastname": "user01", - "state": "enabled", - "username": "user01" - } - ], - "vmavailable": "20", - "vmlimit": "20", - "vmtotal": 0, - "volumeavailable": "20", - "volumelimit": "20", - "volumetotal": 0, - "vpcavailable": "20", - "vpclimit": "20", - "vpctotal": 0 - } - } -} - ` - fmt.Fprintln(w, resp) + resp, err := ReadData(apiName, "AccountService") + if err != nil { + t.Errorf("Failed to read response data, due to: %v", err) + return + } + fmt.Fprintln(w, resp[apiName]) })) defer server.Close() diff --git a/cloudstack/AddressService_test.go b/cloudstack/AddressService_test.go index ba017aa..e993488 100644 --- a/cloudstack/AddressService_test.go +++ b/cloudstack/AddressService_test.go @@ -27,60 +27,13 @@ import ( ) func TestAssociateIpAddress(t *testing.T) { + apiName := "associateIpAddress" server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - responses := map[string]string{ - "associateIpAddress": ` - { - "associateipaddressresponse": { - "id": "dc51835f-b0e2-4a2e-91a4-6cccc44bdae3", - "jobid": "8e805516-1729-46cf-a7d0-7289d523871e" - } - }`, - "queryAsyncJobResult": ` - { - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.address.AssociateIPAddrCmdByAdmin", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "ipaddress": { - "id": "dc51835f-b0e2-4a2e-91a4-6cccc44bdae3", - "ipaddress": "10.70.3.100", - "allocated": "2021-10-01T16:25:11+0000", - "zoneid": "3fc049b0-87ae-4d77-90c1-cce70da17db6", - "zonename": "testAdvZone2", - "issourcenat": true, - "account": "admin", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "forvirtualnetwork": true, - "vlanid": "2e86e486-b472-4f12-a9b2-bb73701241e0", - "vlanname": "vlan://untagged", - "isstaticnat": false, - "issystem": false, - "associatednetworkid": "cf8056db-25e1-49d1-b023-f13a717e5ecc", - "associatednetworkname": "test-adv-network", - "networkid": "f17d38db-4810-437e-be28-d38cd30e3034", - "state": "Allocating", - "physicalnetworkid": "0d6c1e76-2d83-459a-bbce-c133fbd732b7", - "tags":[], - "isportable": false, - "fordisplay": true - } - }, - "jobinstancetype": "IpAddress", - "jobinstanceid": "dc51835f-b0e2-4a2e-91a4-6cccc44bdae3", - "created": "2021-10-01T16:25:12+0000", - "completed": "2021-10-01T16:25:12+0000", - "jobid": "8e805516-1729-46cf-a7d0-7289d523871e" - } - }`, + response, err := ParseAsyncResponse(apiName, "AddressService", *r) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintln(w, responses[r.FormValue("command")]) + fmt.Fprintln(w, response) })) defer server.Close() @@ -98,34 +51,13 @@ func TestAssociateIpAddress(t *testing.T) { } func TestDisassociateIpAddress(t *testing.T) { + apiName := "disassociateIpAddress" server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "disassociateIpAddress": `{ - "disassociateipaddressresponse": { - "jobid": "44fc961e-9d57-4313-9f11-7556508b319c" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.user.address.DisassociateIPAddrCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "success": true - }, - "jobinstancetype": "IpAddress", - "jobinstanceid": "a767fbe1-ed7a-4d7c-8221-c7d736ca622d", - "created": "2021-10-01T16:42:32+0000", - "completed": "2021-10-01T16:42:33+0000", - "jobid": "44fc961e-9d57-4313-9f11-7556508b319c" - } - }`, + response, err := ParseAsyncResponse(apiName, "AddressService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintln(writer, responses[request.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() diff --git a/cloudstack/AffinityGroupService_test.go b/cloudstack/AffinityGroupService_test.go index 81877ea..03104f7 100644 --- a/cloudstack/AffinityGroupService_test.go +++ b/cloudstack/AffinityGroupService_test.go @@ -27,42 +27,13 @@ import ( ) func TestCreateAffinityGroup(t *testing.T) { + apiName := "createAffinityGroup" server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "createAffinityGroup": `{ - "createaffinitygroupresponse": { - "id": "5059d7e3-9213-448d-9314-6ae4e1d95a33", - "jobid": "58e969e8-768b-44d0-b278-fd1b2f236c00" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.user.affinitygroup.CreateAffinityGroupCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "affinitygroup": { - "id": "5059d7e3-9213-448d-9314-6ae4e1d95a33", - "name": "testAffinityGroup", - "description": "testAffinityGroup", - "account": "admin", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "type": "host affinity" - } - }, - "jobinstancetype": "AffinityGroup", - "created": "2021-10-01T16:59:04+0000", - "completed": "2021-10-01T16:59:04+0000", - "jobid": "58e969e8-768b-44d0-b278-fd1b2f236c00" - } - }`, + responses, err := ParseAsyncResponse(apiName, "AffinityGroupService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintln(writer, responses) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) diff --git a/cloudstack/AsyncJobService_test.go b/cloudstack/AsyncJobService_test.go index 2a2f786..7e55029 100644 --- a/cloudstack/AsyncJobService_test.go +++ b/cloudstack/AsyncJobService_test.go @@ -27,23 +27,13 @@ import ( ) func TestListAsyncJobs(t *testing.T) { + apiName := "listAsyncJobs" server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "listasyncjobsresponse": { - "asyncjobs": [ - { - "accountid": "bc1b465f-1d18-11ec-9173-50eb7122da94", - "created": "2021-09-29T17:50:11+0530", - "jobid": "6679e6b9-4bf2-4d83-b9f0-235fc1609227", - "jobprocstatus": 0, - "jobresultcode": 0, - "userid": "bc1b60db-1d18-11ec-9173-50eb7122da94" - } - ], - "count": 1 - } - }` - fmt.Fprintf(writer, response) + response, err := ReadData(apiName, "AsyncJobService") + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() diff --git a/cloudstack/AuthenticationService_test.go b/cloudstack/AuthenticationService_test.go index 6115637..2295ab5 100644 --- a/cloudstack/AuthenticationService_test.go +++ b/cloudstack/AuthenticationService_test.go @@ -27,25 +27,13 @@ import ( ) func TestAuthenticationService_Login(t *testing.T) { + apiName := "login" server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - loginResponse := `{ - "loginresponse": { - "username": "admin", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "timeout": 3600, - "account": "admin", - "firstname": "admin", - "lastname": "cloud", - "type": "1", - "timezone": "PST", - "timezoneoffset": "-7.0", - "registered": "false", - "sessionkey": "umn5ciBuEdorc784g4pJr-U5POM" - } -} - ` - fmt.Fprintf(writer, loginResponse) + loginResponse, err := ReadData(apiName, "AuthenticationService") + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) + } + fmt.Fprintf(writer, loginResponse[apiName]) })) defer server.Close() @@ -68,13 +56,12 @@ func TestAuthenticationService_Login(t *testing.T) { func TestAuthenticationService_Logout(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - logoutResponse := `{ - "logoutresponse": { - "description": "success" - } -} - ` - fmt.Fprintln(writer, logoutResponse) + apiName := "logout" + logoutResponse, err := ReadData(apiName, "AuthenticationService") + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) + } + fmt.Fprintln(writer, logoutResponse[apiName]) })) defer server.Close() diff --git a/cloudstack/CertificateService_test.go b/cloudstack/CertificateService_test.go index 5d0ff60..3c781ec 100644 --- a/cloudstack/CertificateService_test.go +++ b/cloudstack/CertificateService_test.go @@ -28,33 +28,12 @@ import ( func TestUploadCustomCertificate(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "uploadCustomCertificate": `{ - "uploadcustomcertificateresponse": { - "jobid": "bb14e24d-af95-4d9d-8ead-e4f42ccd83f7" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "3bcbd8be-19eb-11ec-83a0-1e00bd000159", - "userid": "3bcd30ee-19eb-11ec-83a0-1e00bd000159", - "cmd": "org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "customcertificate": { - "message": "Certificate has been successfully updated, if its the server certificate we would reboot all running console proxy VMs and secondary storage VMs to propagate the new certificate, please give a few minutes for console access and storage services service to be up and working again" - } - }, - "created": "2021-10-02T07:43:59+0000", - "completed": "2021-10-02T07:43:59+0000", - "jobid": "bb14e24d-af95-4d9d-8ead-e4f42ccd83f7" - } - }`, + apiName := "uploadCustomCertificate" + response, err := ParseAsyncResponse(apiName, "CertificateService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintln(writer, responses[request.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() diff --git a/cloudstack/ClusterService.go b/cloudstack/ClusterService.go index ba0e5f9..9ab7b82 100644 --- a/cloudstack/ClusterService.go +++ b/cloudstack/ClusterService.go @@ -1629,6 +1629,10 @@ func (s *ClusterService) UpdateCluster(p *UpdateClusterParams) (*UpdateClusterRe return nil, err } + if resp, err = getRawValue(resp); err != nil { + return nil, err + } + var r UpdateClusterResponse if err := json.Unmarshal(resp, &r); err != nil { return nil, err diff --git a/cloudstack/ClusterService_test.go b/cloudstack/ClusterService_test.go index 0cba0ef..914a5fc 100644 --- a/cloudstack/ClusterService_test.go +++ b/cloudstack/ClusterService_test.go @@ -81,77 +81,12 @@ var ( func TestClusterService_ListClusters(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - resp := `{ -"listclustersresponse": -{ - "cluster": [ - { - "allocationstate": "Enabled", - "clustertype": "CloudManaged", - "cpuovercommitratio": "1.0", - "hypervisortype": "Simulator", - "id": "38f93102-4f87-49ab-bafa-854bdf31cfe6", - "managedstate": "Managed", - "memoryovercommitratio": "1.0", - "name": "SimCluster0", - "podid": "6137ef6f-753f-4e7b-a728-8d46a92358d2", - "podname": "POD0", - "resourcedetails": { - "cluster.cpu.allocated.capacity.disablethreshold": "0.85", - "cluster.cpu.allocated.capacity.notificationthreshold": "0.01", - "cluster.memory.allocated.capacity.disablethreshold": "0.02", - "cluster.memory.allocated.capacity.notificationthreshold": "0.01", - "cluster.storage.allocated.capacity.notificationthreshold": "0.01", - "cluster.storage.capacity.notificationthreshold": "0.01", - "cpuOvercommitRatio": "1.0", - "memoryOvercommitRatio": "1.0", - "outOfBandManagementEnabled": "true", - "resourceHAEnabled": "true" - }, - "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81", - "zonename": "SimZone1" - }, - { - "allocationstate": "Enabled", - "clustertype": "CloudManaged", - "cpuovercommitratio": "1.0", - "hypervisortype": "Simulator", - "id": "388a9023-f0a9-43f1-a962-b8689e0fca09", - "managedstate": "Unmanaged", - "memoryovercommitratio": "1.0", - "name": "SimCluster1", - "podid": "6137ef6f-753f-4e7b-a728-8d46a92358d2", - "podname": "POD0", - "resourcedetails": { - "cpuOvercommitRatio": "1.0", - "memoryOvercommitRatio": "1.0" - }, - "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81", - "zonename": "SimZone1" - }, - { - "allocationstate": "Enabled", - "clustertype": "CloudManaged", - "cpuovercommitratio": "1.0", - "hypervisortype": "KVM", - "id": "f1f5a259-1b55-431d-ad7e-6d39c28f1b15", - "managedstate": "Managed", - "memoryovercommitratio": "1.0", - "name": "TestCluster", - "podid": "6137ef6f-753f-4e7b-a728-8d46a92358d2", - "podname": "POD0", - "resourcedetails": { - "cpuOvercommitRatio": "1.0", - "memoryOvercommitRatio": "1.0" - }, - "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81", - "zonename": "SimZone1" - } - ], - "count": 3 -} -}` - fmt.Fprintln(writer, resp) + apiName := "listClusters" + resp, err := ReadData(apiName, "ClusterService") + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) + } + fmt.Fprintln(writer, resp[apiName]) })) defer server.Close() @@ -170,32 +105,12 @@ func TestClusterService_ListClusters(t *testing.T) { func TestClusterService_DisableHAForCluster(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "disableHAForCluster": `{ - "disablehaforclusterresponse": { - "jobid": "c0591985-d022-4a2d-b5b5-1ac209849f66" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.ha.DisableHAForClusterCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "success": true - }, - "created": "2021-10-02T08:59:13+0000", - "completed": "2021-10-02T08:59:13+0000", - "jobid": "c0591985-d022-4a2d-b5b5-1ac209849f66" - } - } - `, + apiName := "disableHAForCluster" + responses, err := ParseAsyncResponse(apiName, "ClusterService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, responses) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -212,31 +127,12 @@ func TestClusterService_DisableHAForCluster(t *testing.T) { func TestClusterService_EnableHAForCluster(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "enableHAForCluster": `{ - "enablehaforclusterresponse": { - "jobid": "875ead2d-7b78-4bb0-83f5-c40a2a944dde" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.ha.EnableHAForClusterCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "success": true - }, - "created": "2021-10-02T09:05:15+0000", - "completed": "2021-10-02T09:05:15+0000", - "jobid": "875ead2d-7b78-4bb0-83f5-c40a2a944dde" - } - }`, + apiName := "enableHAForCluster" + responses, err := ParseAsyncResponse(apiName, "ClusterService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, responses) })) defer server.Close() @@ -254,34 +150,12 @@ func TestClusterService_EnableHAForCluster(t *testing.T) { func TestClusterService_DisableOutOfBandManagementForCluster(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "disableOutOfBandManagementForCluster": `{ - "disableoutofbandmanagementforclusterresponse": { - "jobid": "067b171f-ca63-4d41-bb87-461589e20223" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.outofbandmanagement.DisableOutOfBandManagementForClusterCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "outofbandmanagement": { - "enabled": false, - "status": true - } - }, - "created": "2021-10-02T09:09:04+0000", - "completed": "2021-10-02T09:09:04+0000", - "jobid": "067b171f-ca63-4d41-bb87-461589e20223" - } - }`, + apiName := "disableOutOfBandManagementForCluster" + responses, err := ParseAsyncResponse(apiName, "ClusterService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, responses) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -298,34 +172,12 @@ func TestClusterService_DisableOutOfBandManagementForCluster(t *testing.T) { func TestClusterService_EnableOutOfBandManagementForCluster(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "enableOutOfBandManagementForCluster": `{ - "enableoutofbandmanagementforclusterresponse": { - "jobid": "16f517a5-247b-4f96-aba4-0e876e1e9720" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.outofbandmanagement.EnableOutOfBandManagementForClusterCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "outofbandmanagement": { - "enabled": true, - "status": true - } - }, - "created": "2021-10-02T09:14:30+0000", - "completed": "2021-10-02T09:14:30+0000", - "jobid": "16f517a5-247b-4f96-aba4-0e876e1e9720" - } - }`, + apiName := "enableOutOfBandManagementForCluster" + responses, err := ParseAsyncResponse(apiName, "ClusterService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, responses) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -342,38 +194,12 @@ func TestClusterService_EnableOutOfBandManagementForCluster(t *testing.T) { func TestClusterService_DedicateCluster(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "dedicateCluster": `{ - "dedicateclusterresponse": { - "jobid": "64e777d8-9c72-4639-aa75-057971ecd289" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.commands.DedicateClusterCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "dedicatedcluster": { - "id": "60a97ad1-702b-40dd-9ca5-a67954a28fbd", - "clusterid": "f1f5a259-1b55-431d-ad7e-6d39c28f1b15", - "clustername": "TestCluster", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "affinitygroupid": "a8725454-1680-4517-85ce-6f8ec08300fb" - } - }, - "created": "2021-10-02T09:16:25+0000", - "completed": "2021-10-02T09:16:25+0000", - "jobid": "64e777d8-9c72-4639-aa75-057971ecd289" - } - }`, + apiName := "dedicateCluster" + responses, err := ParseAsyncResponse(apiName, "ClusterService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, responses) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -390,31 +216,12 @@ func TestClusterService_DedicateCluster(t *testing.T) { func TestClusterService_ReleaseDedicatedCluster(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "releaseDedicatedCluster": `{ - "releasededicatedclusterresponse": { - "jobid": "e7cb7eb7-b77d-4568-9bcf-11bb5fd78938" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.commands.ReleaseDedicatedClusterCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "success": true - }, - "created": "2021-10-02T14:40:30+0000", - "completed": "2021-10-02T14:40:30+0000", - "jobid": "e7cb7eb7-b77d-4568-9bcf-11bb5fd78938" - } - }`, + apiName := "releaseDedicatedCluster" + responses, err := ParseAsyncResponse(apiName, "ClusterService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, responses) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -429,58 +236,39 @@ func TestClusterService_ReleaseDedicatedCluster(t *testing.T) { } } -//func TestClusterService_UpdateCluster(t *testing.T) { -// server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { -// response := `{ -// "updateclusterresponse": { -// "cluster": { -// "id": "f1f5a259-1b55-431d-ad7e-6d39c28f1b15", -// "name": "TestClusterUpdated", -// "podid": "6137ef6f-753f-4e7b-a728-8d46a92358d2", -// "podname": "POD0", -// "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81", -// "zonename": "SimZone1", -// "hypervisortype": "KVM", -// "clustertype": "CloudManaged", -// "allocationstate": "Enabled", -// "managedstate": "Managed", -// "cpuovercommitratio": "1.0", -// "memoryovercommitratio": "1.0", -// "resourcedetails": { -// "cpuOvercommitRatio": "1.0", -// "resourceHAEnabled": "true", -// "memoryOvercommitRatio": "1.0", -// "outOfBandManagementEnabled": "true" -// } -// } -// } -// }` -// fmt.Fprintf(writer, response) -// })) -// defer server.Close() -// client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) -// params := client.Cluster.NewUpdateClusterParams("f1f5a259-1b55-431d-ad7e-6d39c28f1b15") -// params.SetClustername("TestClusterUpdated") -// params.SetManagedstate("Unmanaged") -// resp, err := client.Cluster.UpdateCluster(params) -// if err != nil { -// t.Errorf("Failed to updated cluster details - name, due to: %v", err) -// } -// -// fmt.Println(resp) -// if resp.Name != "TestClusterUpdated" { -// t.Errorf("Failed to updated cluster name") -// } -//} +func TestClusterService_UpdateCluster(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { + apiName := "updateCluster" + response, err := ReadData(apiName, "ClusterService") + if err != nil { + t.Errorf("Failed to read response data, due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) + })) + defer server.Close() + client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) + params := client.Cluster.NewUpdateClusterParams("f1f5a259-1b55-431d-ad7e-6d39c28f1b15") + params.SetClustername("TestClusterUpdated") + params.SetManagedstate("Unmanaged") + resp, err := client.Cluster.UpdateCluster(params) + if err != nil { + t.Errorf("Failed to updated cluster details - name, due to: %v", err) + } + + fmt.Println(resp) + if resp.Name != "TestClusterUpdated" { + t.Errorf("Failed to updated cluster name") + } +} func TestClusterService_DeleteCluster(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := `{ - "deleteclusterresponse": { - "success": true - } - }` - fmt.Fprintf(writer, responses) + apiName := "deleteCluster" + response, err := ReadData(apiName, "ClusterService") + if err != nil { + t.Errorf("Failed to read response data, due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) diff --git a/cloudstack/ConfigurationService.go b/cloudstack/ConfigurationService.go index c58cad6..2d43350 100644 --- a/cloudstack/ConfigurationService.go +++ b/cloudstack/ConfigurationService.go @@ -438,6 +438,10 @@ func (s *ConfigurationService) UpdateConfiguration(p *UpdateConfigurationParams) return nil, err } + if resp, err = getRawValue(resp); err != nil { + return nil, err + } + var r UpdateConfigurationResponse if err := json.Unmarshal(resp, &r); err != nil { return nil, err diff --git a/cloudstack/ConfigurationService_test.go b/cloudstack/ConfigurationService_test.go index 3c6bad5..50099df 100644 --- a/cloudstack/ConfigurationService_test.go +++ b/cloudstack/ConfigurationService_test.go @@ -28,31 +28,12 @@ import ( func TestConfigurationService_ListCapabilities(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - resp := `{ - "listcapabilitiesresponse": { - "capability": { - "securitygroupsenabled": true, - "dynamicrolesenabled": true, - "cloudstackversion": "4.15.2.0", - "userpublictemplateenabled": false, - "supportELB": "false", - "projectinviterequired": true, - "allowusercreateprojects": true, - "customdiskofferingminsize": 1, - "customdiskofferingmaxsize": 1024, - "regionsecondaryenabled": false, - "kvmsnapshotenabled": true, - "allowuserviewdestroyedvm": true, - "allowuserexpungerecovervm": true, - "allowuserexpungerecovervolume": true, - "allowuserviewalldomainaccounts": false, - "kubernetesserviceenabled": true, - "kubernetesclusterexperimentalfeaturesenabled": true, - "defaultuipagesize": 20 - } + apiName := "listCapabilities" + resp, err := ReadData(apiName, "ConfigurationService") + if err != nil { + t.Errorf("Failed to read response data, due to: %v", err) } - }` - fmt.Fprintf(w, resp) + fmt.Fprintf(w, resp[apiName]) })) defer server.Close() @@ -70,21 +51,12 @@ func TestConfigurationService_ListCapabilities(t *testing.T) { func TestConfigurationService_ListConfigurations(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - resp := `{ - "listconfigurationsresponse": { - "configuration": [ - { - "category": "Project Defaults", - "description": "If regular user can create a project; true by default", - "isdynamic": false, - "name": "allow.user.create.projects", - "value": "true" - } - ], - "count": 1 - } - }` - fmt.Fprintf(w, resp) + apiName := "listConfigurations" + resp, err := ReadData(apiName, "ConfigurationService") + if err != nil { + t.Errorf("Failed to read response data, due to: %v", err) + } + fmt.Fprintf(w, resp[apiName]) })) client := newClient(server.URL, "APIKEY", "SECRETKEY", true, true) p := client.Configuration.NewListConfigurationsParams() @@ -98,30 +70,24 @@ func TestConfigurationService_ListConfigurations(t *testing.T) { } } -//func TestConfigurationService_UpdateConfigurations(t *testing.T) { -// server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { -// resp := `{ -// "updateconfigurationresponse": { -// "configuration": { -// "category": "Project Defaults", -// "name": "allow.user.create.projects", -// "value": "false", -// "description": "If regular user can create a project; true by default", -// "isdynamic": false -// } -// } -// }` -// fmt.Fprintf(w, resp) -// })) -// client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) -// p := client.Configuration.NewUpdateConfigurationParams("allow.user.create.projects") -// p.SetValue("false") -// resp, err := client.Configuration.UpdateConfiguration(p) -// if err != nil { -// t.Errorf("Failed to update configuration due to: %v", err) -// } -// fmt.Println(resp.Value) -// if resp.Value != "false" { -// t.Errorf("Failed to update configuration") -// } -//} +func TestConfigurationService_UpdateConfigurations(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + apiName := "updateConfiguration" + resp, err := ReadData(apiName, "ConfigurationService") + if err != nil { + t.Errorf("Failed to read response data, due to: %v", err) + } + fmt.Fprintf(w, resp[apiName]) + })) + client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) + p := client.Configuration.NewUpdateConfigurationParams("allow.user.create.projects") + p.SetValue("false") + resp, err := client.Configuration.UpdateConfiguration(p) + if err != nil { + t.Errorf("Failed to update configuration due to: %v", err) + } + fmt.Println(resp) + if resp.Value != "false" { + t.Errorf("Failed to update configuration") + } +} diff --git a/cloudstack/DiskOfferingService_test.go b/cloudstack/DiskOfferingService_test.go index 994cb34..69cbfff 100644 --- a/cloudstack/DiskOfferingService_test.go +++ b/cloudstack/DiskOfferingService_test.go @@ -28,23 +28,12 @@ import ( func TestDiskOfferingService_CreateDiskOffering(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "creatediskofferingresponse": { - "diskoffering": { - "id": "7662b6ae-f00b-4268-973f-f3f87eaf82c5", - "name": "test", - "displaytext": "test", - "disksize": 0, - "created": "2021-10-02T15:19:25+0000", - "iscustomized": true, - "storagetype": "shared", - "provisioningtype": "thin", - "cacheMode": "none", - "displayoffering": true - } - } - }` - fmt.Fprintf(writer, response) + apiName := "createDiskOffering" + response, err := ReadData(apiName, "DiskOfferingService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) params := client.DiskOffering.NewCreateDiskOfferingParams("test", "test") @@ -60,26 +49,12 @@ func TestDiskOfferingService_CreateDiskOffering(t *testing.T) { func TestDiskOfferingService_ListDiskOffering(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "listdiskofferingsresponse": { - "count": 1, - "diskoffering": [ - { - "id": "7662b6ae-f00b-4268-973f-f3f87eaf82c5", - "name": "test", - "displaytext": "test", - "disksize": 0, - "created": "2021-10-02T15:19:25+0000", - "iscustomized": true, - "storagetype": "shared", - "provisioningtype": "thin", - "cacheMode": "none", - "displayoffering": true - } - ] - } - }` - fmt.Fprintf(writer, response) + apiName := "listDiskOfferings" + response, err := ReadData(apiName, "DiskOfferingService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) params := client.DiskOffering.NewListDiskOfferingsParams() @@ -96,12 +71,12 @@ func TestDiskOfferingService_ListDiskOffering(t *testing.T) { func TestDiskOfferingService_DeleteDiskOffering(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "deletediskofferingresponse": { - "success": true - } - }` - fmt.Fprintf(writer, response) + apiName := "deleteDiskOffering" + response, err := ReadData(apiName, "DiskOfferingService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) params := client.DiskOffering.NewDeleteDiskOfferingParams("7662b6ae-f00b-4268-973f-f3f87eaf82c5") diff --git a/cloudstack/DomainService_test.go b/cloudstack/DomainService_test.go index 7dc3aeb..8bbd178 100644 --- a/cloudstack/DomainService_test.go +++ b/cloudstack/DomainService_test.go @@ -28,21 +28,12 @@ import ( func TestDomainService_CreateDomain(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "createdomainresponse": { - "domain": { - "id": "1530cc8c-efe7-4dff-84c4-96a1e8a1cd7a", - "name": "testDomain", - "level": 1, - "parentdomainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "parentdomainname": "ROOT", - "haschild": false, - "path": "ROOT/testDomain", - "secondarystoragetotal": 0 - } - } - }` - fmt.Fprintf(writer, response) + apiName := "createDomain" + response, err := ReadData(apiName, "DomainService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -60,21 +51,12 @@ func TestDomainService_CreateDomain(t *testing.T) { func TestDomainService_UpdateDomain(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "updatedomainresponse": { - "domain": { - "id": "ee05fd92-7365-4421-a15b-abfa11dfc4f6", - "name": "testDomainUpdated", - "level": 1, - "parentdomainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "parentdomainname": "ROOT", - "haschild": false, - "path": "ROOT/testDomainUpdated", - "secondarystoragetotal": 0 - } - } - }` - fmt.Fprintf(writer, response) + apiName := "updateDomain" + response, err := ReadData(apiName, "DomainService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -93,60 +75,12 @@ func TestDomainService_UpdateDomain(t *testing.T) { func TestDomainService_ListDomains(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "listdomainsresponse": { - "count": 1, - "domain": [ - { - "id": "097d3992-7a67-42e1-afb5-b4d2d81e280f", - "name": "DummyDomain", - "level": 1, - "parentdomainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "parentdomainname": "ROOT", - "haschild": false, - "path": "ROOT/DummyDomain", - "state": "Active", - "vmlimit": "Unlimited", - "vmtotal": 0, - "vmavailable": "Unlimited", - "iplimit": "Unlimited", - "iptotal": 0, - "ipavailable": "Unlimited", - "volumelimit": "Unlimited", - "volumetotal": 0, - "volumeavailable": "Unlimited", - "snapshotlimit": "Unlimited", - "snapshottotal": 0, - "snapshotavailable": "Unlimited", - "templatelimit": "Unlimited", - "templatetotal": 0, - "templateavailable": "Unlimited", - "projectlimit": "Unlimited", - "projecttotal": 0, - "projectavailable": "Unlimited", - "networklimit": "Unlimited", - "networktotal": 0, - "networkavailable": "Unlimited", - "vpclimit": "Unlimited", - "vpctotal": 0, - "vpcavailable": "Unlimited", - "cpulimit": "Unlimited", - "cputotal": 0, - "cpuavailable": "Unlimited", - "memorylimit": "Unlimited", - "memorytotal": 0, - "memoryavailable": "Unlimited", - "primarystoragelimit": "-1", - "primarystoragetotal": 0, - "primarystorageavailable": "-1", - "secondarystoragelimit": "-1", - "secondarystoragetotal": 0, - "secondarystorageavailable": "-1.0" - } - ] - } - }` - fmt.Fprintf(writer, response) + apiName := "listDomains" + response, err := ReadData(apiName, "DomainService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -166,24 +100,12 @@ func TestDomainService_ListDomains(t *testing.T) { func TestDomainService_ListDomainChildren(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "listdomainchildrenresponse": { - "count": 1, - "domain": [ - { - "id": "bfe3c14c-3a4a-4f85-b03c-308852967296", - "name": "subdomain", - "level": 2, - "parentdomainid": "99becf06-7f0f-4eb4-bdc3-44fecb8cb829", - "parentdomainname": "domain", - "haschild": false, - "path": "ROOT/domain/subdomain", - "secondarystoragetotal": 0 - } - ] - } - }` - fmt.Fprintf(writer, response) + apiName := "listDomainChildren" + response, err := ReadData(apiName, "DomainService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -200,31 +122,12 @@ func TestDomainService_ListDomainChildren(t *testing.T) { func TestDomainService_DeleteDomain(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := map[string]string{ - "deleteDomain": `{ - "deletedomainresponse": { - "jobid": "318c77c0-8c42-42fb-8c23-363819c85dd3" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.domain.DeleteDomainCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "success": true - }, - "created": "2021-10-02T17:44:42+0000", - "completed": "2021-10-02T17:44:42+0000", - "jobid": "318c77c0-8c42-42fb-8c23-363819c85dd3" - } - }`, + apiName := "deleteDomain" + response, err := ParseAsyncResponse(apiName, "DomainService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, response[request.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) diff --git a/cloudstack/FirewallService_test.go b/cloudstack/FirewallService_test.go index fc06eed..abfd1af 100644 --- a/cloudstack/FirewallService_test.go +++ b/cloudstack/FirewallService_test.go @@ -28,44 +28,12 @@ import ( func TestFirewallService_CreateFirewallRule(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "createFirewallRule": `{ - "createfirewallruleresponse": { - "id": "fb4ad2ee-02c8-433e-a769-6f18afddc750", - "jobid": "104d5139-91dc-40a1-af2b-a94730e42e89" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "bc1b501c-1d18-11ec-9173-50eb7122da94", - "userid": "bc1b6b47-1d18-11ec-9173-50eb7122da94", - "cmd": "org.apache.cloudstack.api.command.user.firewall.CreateFirewallRuleCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "firewallrule": { - "id": "fb4ad2ee-02c8-433e-a769-6f18afddc750", - "protocol": "tcp", - "ipaddressid": "a4aa35ef-34ad-4332-9247-378c83b8f927", - "networkid": "c4a3303c-376d-4d56-b336-1bd91cb130b6", - "ipaddress": "192.168.2.4", - "state": "Active", - "cidrlist": "0.0.0.0/0", - "tags": [], - "fordisplay": true - } - }, - "jobinstancetype": "FirewallRule", - "jobinstanceid": "fb4ad2ee-02c8-433e-a769-6f18afddc750", - "created": "2021-10-02T23:20:07+0530", - "completed": "2021-10-02T23:20:07+0530", - "jobid": "104d5139-91dc-40a1-af2b-a94730e42e89" - } - }`, + apiName := "createFirewallRule" + response, err := ParseAsyncResponse(apiName, "FirewallService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -85,31 +53,12 @@ func TestFirewallService_CreateFirewallRule(t *testing.T) { func TestFirewallService_DeleteFirewallRule(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "deleteFirewallRule": `{ - "deletefirewallruleresponse": { - "jobid": "6ae96f78-1c28-45f9-a30b-761ac5f3a87b" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "bc1b501c-1d18-11ec-9173-50eb7122da94", - "userid": "bc1b6b47-1d18-11ec-9173-50eb7122da94", - "cmd": "org.apache.cloudstack.api.command.user.firewall.DeleteFirewallRuleCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "success": true - }, - "created": "2021-10-02T23:25:22+0530", - "completed": "2021-10-02T23:25:22+0530", - "jobid": "6ae96f78-1c28-45f9-a30b-761ac5f3a87b" - } - }`, + apiName := "deleteFirewallRule" + response, err := ParseAsyncResponse(apiName, "FirewallService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -125,43 +74,12 @@ func TestFirewallService_DeleteFirewallRule(t *testing.T) { func TestFirewallService_CreateEgressFirewallRule(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "createEgressFirewallRule": `{ - "createegressfirewallruleresponse": { - "id": "b7d8b539-8c72-4d25-8539-625f665681ad", - "jobid": "8841a004-eb50-4d4e-aed5-7bc2494dc856" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "bc1b501c-1d18-11ec-9173-50eb7122da94", - "userid": "bc1b6b47-1d18-11ec-9173-50eb7122da94", - "cmd": "org.apache.cloudstack.api.command.user.firewall.CreateEgressFirewallRuleCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "firewallrule": { - "id": "b7d8b539-8c72-4d25-8539-625f665681ad", - "protocol": "tcp", - "networkid": "c4a3303c-376d-4d56-b336-1bd91cb130b6", - "state": "Active", - "cidrlist": "10.1.1.0/24", - "tags": [], - "fordisplay": true, - "destcidrlist": "" - } - }, - "jobinstancetype": "FirewallRule", - "jobinstanceid": "b7d8b539-8c72-4d25-8539-625f665681ad", - "created": "2021-10-02T23:29:41+0530", - "completed": "2021-10-02T23:29:41+0530", - "jobid": "8841a004-eb50-4d4e-aed5-7bc2494dc856" - } - }`, + apiName := "createEgressFirewallRule" + response, err := ParseAsyncResponse(apiName, "FirewallService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -178,31 +96,12 @@ func TestFirewallService_CreateEgressFirewallRule(t *testing.T) { func TestFirewallService_DeleteEgressFirewallRule(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "deleteEgressFirewallRule": `{ - "deleteegressfirewallruleresponse": { - "jobid": "91b10008-2e9f-412d-afa6-3c54a0bb19f5" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "bc1b501c-1d18-11ec-9173-50eb7122da94", - "userid": "bc1b6b47-1d18-11ec-9173-50eb7122da94", - "cmd": "org.apache.cloudstack.api.command.user.firewall.DeleteEgressFirewallRuleCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "success": true - }, - "created": "2021-10-02T23:32:08+0530", - "completed": "2021-10-02T23:32:08+0530", - "jobid": "91b10008-2e9f-412d-afa6-3c54a0bb19f5" - } - }`, + apiName := "deleteEgressFirewallRule" + response, err := ParseAsyncResponse(apiName, "FirewallService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) diff --git a/cloudstack/HostService_test.go b/cloudstack/HostService_test.go index a47db77..2e542b4 100644 --- a/cloudstack/HostService_test.go +++ b/cloudstack/HostService_test.go @@ -28,61 +28,12 @@ import ( func TestHostService_AddHost(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "addhostresponse": { - "count": 1, - "host": [ - { - "capabilities": "hvm", - "clusterid": "2e4816cf-d8bf-4ef0-993a-05e42078c5a8", - "clustername": "C0", - "clustertype": "CloudManaged", - "cpuallocated": "0%", - "cpuallocatedpercentage": "0%", - "cpuallocatedvalue": 0, - "cpuallocatedwithoverprovisioning": "0%", - "cpunumber": 4, - "cpuspeed": 8000, - "cpuwithoverprovisioning": "32000", - "created": "2021-10-03T10:59:51+0530", - "events": "StartAgentRebalance; AgentConnected; ManagementServerDown; PingTimeout; ShutdownRequested; HostDown; AgentDisconnected; Ping; Remove", - "hahost": false, - "hasannotations": false, - "hostha": { - "haenable": false, - "hastate": "Disabled" - }, - "hypervisor": "Simulator", - "hypervisorversion": "4.16.0.0-SNAPSHOT", - "id": "d9960e4d-5da9-47be-af88-5cd19473b844", - "ipaddress": "172.16.15.5", - "islocalstorageactive": false, - "lastpinged": "1970-01-19T16:32:39+0530", - "managementserverid": "028003eb-4d1a-4d17-a2e3-0ec901c9ee5c", - "memoryallocated": 0, - "memoryallocatedbytes": 0, - "memoryallocatedpercentage": "0%", - "memorytotal": 8589934592, - "memorywithoverprovisioning": "8589934592", - "name": "SimulatedAgent.5417728f-9fc2-424c-89a6-00a7e0d2852f", - "outofbandmanagement": { - "enabled": false, - "powerstate": "Disabled" - }, - "podid": "5382edc2-e689-4074-bd67-0e1a236eb2bc", - "podname": "POD0", - "resourcestate": "Enabled", - "state": "Up", - "type": "Routing", - "version": "4.16.0.0-SNAPSHOT", - "zoneid": "d4a81f75-5d92-415e-ab59-e85cc2ce56d9", - "zonename": "Sandbox-simulator" - } - ] - } - }` - - fmt.Fprintln(writer, response) + apiName := "addHost" + response, err := ReadData(apiName, "HostService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintln(writer, response[apiName]) })) defer server.Close() @@ -103,60 +54,12 @@ func TestHostService_AddHost(t *testing.T) { func TestHostService_ListHosts(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "listhostsresponse": { - "count": 1, - "host": [ - { - "capabilities": "hvm", - "clusterid": "2e4816cf-d8bf-4ef0-993a-05e42078c5a8", - "clustername": "C0", - "clustertype": "CloudManaged", - "cpuallocated": "0%", - "cpuallocatedpercentage": "0%", - "cpuallocatedvalue": 0, - "cpuallocatedwithoverprovisioning": "0%", - "cpunumber": 4, - "cpuspeed": 8000, - "cpuwithoverprovisioning": "32000", - "created": "2021-10-03T10:59:51+0530", - "events": "StartAgentRebalance; AgentConnected; ManagementServerDown; PingTimeout; ShutdownRequested; HostDown; AgentDisconnected; Ping; Remove", - "hahost": false, - "hasannotations": false, - "hostha": { - "haenable": false, - "hastate": "Disabled" - }, - "hypervisor": "Simulator", - "hypervisorversion": "4.16.0.0-SNAPSHOT", - "id": "d9960e4d-5da9-47be-af88-5cd19473b844", - "ipaddress": "172.16.15.5", - "islocalstorageactive": false, - "lastpinged": "1970-01-19T16:32:39+0530", - "managementserverid": "028003eb-4d1a-4d17-a2e3-0ec901c9ee5c", - "memoryallocated": 0, - "memoryallocatedbytes": 0, - "memoryallocatedpercentage": "0%", - "memorytotal": 8589934592, - "memorywithoverprovisioning": "8589934592", - "name": "SimulatedAgent.5417728f-9fc2-424c-89a6-00a7e0d2852f", - "outofbandmanagement": { - "enabled": false, - "powerstate": "Disabled" - }, - "podid": "5382edc2-e689-4074-bd67-0e1a236eb2bc", - "podname": "POD0", - "resourcestate": "Enabled", - "state": "Up", - "type": "Routing", - "version": "4.16.0.0-SNAPSHOT", - "zoneid": "d4a81f75-5d92-415e-ab59-e85cc2ce56d9", - "zonename": "Sandbox-simulator" - } - ] - } - }` - fmt.Fprintln(writer, response) + apiName := "listHosts" + response, err := ReadData(apiName, "HostService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintln(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -173,89 +76,12 @@ func TestHostService_ListHosts(t *testing.T) { func TestHostService_PrepareHostForMaintenance(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "prepareHostForMaintenance": `{ - "preparehostformaintenanceresponse": { - "jobid": "0931656b-d30d-474b-aa79-13077d275400" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.host.PrepareForMaintenanceCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "host": { - "id": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", - "name": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf", - "state": "Up", - "disconnected": "2021-09-28T20:05:04+0000", - "type": "Routing", - "oscategoryid": "e4992bed-5fdf-11ea-9a56-1e006800018c", - "oscategoryname": "CentOS", - "ipaddress": "172.17.1.6", - "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", - "zonename": "shouldwork", - "podid": "647e68f7-5de7-459c-91fc-f36ccf6af9ad", - "podname": "poiuj", - "version": "4.14.0.0-SNAPSHOT", - "hypervisor": "Simulator", - "cpunumber": 4, - "cpuspeed": 8000, - "cpuallocated": "0%", - "cpuallocatedvalue": 0, - "cpuallocatedpercentage": "0%", - "cpuallocatedwithoverprovisioning": "0%", - "cpuused": "0%", - "cpuwithoverprovisioning": "32000", - "cpuloadaverage": 0, - "networkkbsread": 32768, - "networkkbswrite": 16384, - "memorytotal": 8589934592, - "memorywithoverprovisioning": "8589934592", - "memoryallocated": 0, - "memoryallocatedpercentage": "0%", - "memoryallocatedbytes": 0, - "memoryused": 0, - "capabilities": "hvm", - "lastpinged": "1970-01-19T10:58:33+0000", - "managementserverid": "18c349c6-ed36-4890-b670-4ef76e48485e", - "clusterid": "841bb416-2d65-4661-80cf-db708c8a1c4f", - "clustername": "lkjlkj", - "clustertype": "CloudManaged", - "islocalstorageactive": false, - "created": "2020-03-25T09:06:40+0000", - "events": "Ping; ShutdownRequested; PingTimeout; ManagementServerDown; AgentConnected; AgentDisconnected; Remove; StartAgentRebalance; HostDown", - "hosttags": "null", - "hostha": { - "haenable": true, - "hastate": "Disabled", - "haprovider": "simulatorhaprovider" - }, - "outofbandmanagement": { - "powerstate": "Disabled", - "enabled": false - }, - "resourcestate": "PrepareForMaintenance", - "hypervisorversion": "4.14.0.0-SNAPSHOT", - "hahost": false, - "jobid": "0931656b-d30d-474b-aa79-13077d275400", - "jobstatus": 0 - } - }, - "jobinstancetype": "Host", - "jobinstanceid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", - "created": "2021-10-03T06:52:21+0000", - "completed": "2021-10-03T06:52:21+0000", - "jobid": "0931656b-d30d-474b-aa79-13077d275400" - } - }`, + apiName := "prepareHostForMaintenance" + response, err := ParseAsyncResponse(apiName, "HostService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintln(writer, responses[request.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -271,89 +97,12 @@ func TestHostService_PrepareHostForMaintenance(t *testing.T) { func TestHostService_CancelHostForMaintenance(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "cancelHostMaintenance": `{ - "cancelhostmaintenanceresponse": { - "jobid": "b40f561d-9d0d-4eae-a376-fbafdff966f1" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.host.CancelMaintenanceCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "host": { - "id": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", - "name": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf", - "state": "Up", - "disconnected": "2021-09-28T20:05:04+0000", - "type": "Routing", - "oscategoryid": "e4992bed-5fdf-11ea-9a56-1e006800018c", - "oscategoryname": "CentOS", - "ipaddress": "172.17.1.6", - "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", - "zonename": "shouldwork", - "podid": "647e68f7-5de7-459c-91fc-f36ccf6af9ad", - "podname": "poiuj", - "version": "4.14.0.0-SNAPSHOT", - "hypervisor": "Simulator", - "cpunumber": 4, - "cpuspeed": 8000, - "cpuallocated": "10.18%", - "cpuallocatedvalue": 3256, - "cpuallocatedpercentage": "10.18%", - "cpuallocatedwithoverprovisioning": "10.18%", - "cpuused": "0%", - "cpuwithoverprovisioning": "32000", - "cpuloadaverage": 0, - "networkkbsread": 32768, - "networkkbswrite": 16384, - "memorytotal": 8589934592, - "memorywithoverprovisioning": "8589934592", - "memoryallocated": 1610612736, - "memoryallocatedpercentage": "18.75%", - "memoryallocatedbytes": 1610612736, - "memoryused": 0, - "capabilities": "hvm", - "lastpinged": "1970-01-19T10:58:33+0000", - "managementserverid": "18c349c6-ed36-4890-b670-4ef76e48485e", - "clusterid": "841bb416-2d65-4661-80cf-db708c8a1c4f", - "clustername": "lkjlkj", - "clustertype": "CloudManaged", - "islocalstorageactive": false, - "created": "2020-03-25T09:06:40+0000", - "events": "Ping; ShutdownRequested; PingTimeout; ManagementServerDown; AgentConnected; AgentDisconnected; Remove; StartAgentRebalance; HostDown", - "hosttags": "null", - "hostha": { - "haenable": true, - "hastate": "Disabled", - "haprovider": "simulatorhaprovider" - }, - "outofbandmanagement": { - "powerstate": "Disabled", - "enabled": false - }, - "resourcestate": "Enabled", - "hypervisorversion": "4.14.0.0-SNAPSHOT", - "hahost": false, - "jobid": "b40f561d-9d0d-4eae-a376-fbafdff966f1", - "jobstatus": 0 - } - }, - "jobinstancetype": "Host", - "jobinstanceid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", - "created": "2021-10-03T06:57:12+0000", - "completed": "2021-10-03T06:57:12+0000", - "jobid": "b40f561d-9d0d-4eae-a376-fbafdff966f1" - } - }`, + apiName := "cancelHostForMaintenance" + response, err := ParseAsyncResponse(apiName, "HostService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintln(writer, responses[request.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -369,35 +118,12 @@ func TestHostService_CancelHostForMaintenance(t *testing.T) { func TestHostService_EnableOutOfBandManagementForHost(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "enableOutOfBandManagementForHost": `{ - "enableoutofbandmanagementforhostresponse": { - "jobid": "049f5a42-343b-4156-9fb6-683f01433dca" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.outofbandmanagement.EnableOutOfBandManagementForHostCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "outofbandmanagement": { - "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", - "enabled": true, - "status": true - } - }, - "created": "2021-10-03T07:05:08+0000", - "completed": "2021-10-03T07:05:08+0000", - "jobid": "1c3022d1-c882-430c-ada7-ebf9d06d3e84" - } - }`, + apiName := "enableOutOfBandManagementForHost" + response, err := ParseAsyncResponse(apiName, "HostService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintln(writer, responses[request.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -413,35 +139,12 @@ func TestHostService_EnableOutOfBandManagementForHost(t *testing.T) { func TestHostService_DisableOutOfBandManagementForHost(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "disableOutOfBandManagementForHost": `{ - "disableoutofbandmanagementforhostresponse": { - "jobid": "a389b543-ce49-410f-8f9a-831be0480ee5" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.outofbandmanagement.DisableOutOfBandManagementForHostCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "outofbandmanagement": { - "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", - "enabled": false, - "status": true - } - }, - "created": "2021-10-03T07:06:25+0000", - "completed": "2021-10-03T07:06:25+0000", - "jobid": "a389b543-ce49-410f-8f9a-831be0480ee5" - } - }`, + apiName := "disableOutOfBandManagementForHost" + response, err := ParseAsyncResponse(apiName, "HostService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintln(writer, responses[request.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -457,35 +160,12 @@ func TestHostService_DisableOutOfBandManagementForHost(t *testing.T) { func TestHostService_EnableHAForHost(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "enableHAForHost": `{ - "enablehaforhostresponse": { - "jobid": "79da9d4b-6368-4ce5-9054-952295fc2c8a" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.ha.EnableHAForHostCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "hostha": { - "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", - "haenable": true, - "status": true - } - }, - "created": "2021-10-03T07:10:09+0000", - "completed": "2021-10-03T07:10:09+0000", - "jobid": "79da9d4b-6368-4ce5-9054-952295fc2c8a" - } - }`, + apiName := "enableHAForHost" + response, err := ParseAsyncResponse(apiName, "HostService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintln(writer, responses[request.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) diff --git a/cloudstack/HypervisorService_test.go b/cloudstack/HypervisorService_test.go index 23923bf..92ebf9e 100644 --- a/cloudstack/HypervisorService_test.go +++ b/cloudstack/HypervisorService_test.go @@ -28,23 +28,12 @@ import ( func TestHypervisorService_ListSpecificHypervisorCapabilities(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "listhypervisorcapabilitiesresponse": { - "count": 1, - "hypervisorCapabilities": [ - { - "id": "1", - "hypervisorversion": "default", - "hypervisor": "XenServer", - "maxguestslimit": 50, - "securitygroupenabled": true, - "maxdatavolumeslimit": 6, - "storagemotionenabled": false - } - ] - } - }` - fmt.Fprintf(writer, response) + apiName := "listHypervisorCapabilities" + response, err := ReadData(apiName, "HypervisorService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) diff --git a/cloudstack/ISOService_test.go b/cloudstack/ISOService_test.go index 2831304..4460b64 100644 --- a/cloudstack/ISOService_test.go +++ b/cloudstack/ISOService_test.go @@ -28,41 +28,12 @@ import ( func TestISOService_RegisterIso(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "registerisoresponse": { - "count": 1, - "iso": [ - { - "id": "e6d86706-aa8c-444c-bf5c-ba677f8e02c2", - "name": "testIso", - "displaytext": "testIso", - "ispublic": false, - "created": "2021-10-03T07:28:41+0000", - "isready": true, - "passwordenabled": false, - "bootable": true, - "isfeatured": false, - "crossZones": false, - "ostypeid": "e510f742-5fdf-11ea-9a56-1e006800018c", - "ostypename": "Other (64-bit)", - "account": "admin", - "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", - "zonename": "shouldwork", - "status": "Successfully Installed", - "size": 5242880, - "domain": "ROOT", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "isextractable": false, - "bits": 64, - "isdynamicallyscalable": false, - "directdownload": false, - "url": "http://dl.openvm.eu/cloudstack/iso/TinyCore-8.0.iso", - "tags": [] - } - ] - } - }` - fmt.Fprintln(writer, response) + apiName := "registerIso" + response, err := ReadData(apiName, "ISOService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintln(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) diff --git a/cloudstack/ImageStoreService_test.go b/cloudstack/ImageStoreService_test.go index 2f5055c..2f6102f 100644 --- a/cloudstack/ImageStoreService_test.go +++ b/cloudstack/ImageStoreService_test.go @@ -28,22 +28,12 @@ import ( func TestImageStoreService_AddImageStore(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "addimagestoreresponse": { - "imagestore": { - "id": "0ac85364-e31a-4840-97a4-a237b4291dfa", - "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81", - "zonename": "SimZone1", - "name": "nfs://192.168.0.20/export/testing/secondary", - "url": "nfs://192.168.0.20/export/testing/secondary", - "protocol": "nfs", - "providername": "NFS", - "scope": "ZONE", - "readonly": false - } - } - }` - fmt.Fprintf(writer, response) + apiName := "addImageStore" + response, err := ReadData(apiName, "ImageStoreService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintln(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -61,25 +51,12 @@ func TestImageStoreService_AddImageStore(t *testing.T) { func TestImageStoreService_ListImageStores(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "listimagestoresresponse": { - "count": 1, - "imagestore": [ - { - "id": "06f9e780-fac0-42fa-ac0e-e6eb6a038178", - "zoneid": "3fc049b0-87ae-4d77-90c1-cce70da17db6", - "zonename": "testAdvZone2", - "name": "testAdvSecondaryStorage", - "url": "nfs://10.70.4.150/export/testing/secondary2", - "protocol": "nfs", - "providername": "NFS", - "scope": "ZONE", - "readonly": false - } - ] - } - }` - fmt.Fprintf(writer, response) + apiName := "listImageStores" + response, err := ReadData(apiName, "ImageStoreService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintln(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -97,12 +74,12 @@ func TestImageStoreService_ListImageStores(t *testing.T) { func TestImageStoreService_DeleteImageStore(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "deleteimagestoreresponse": { - "success": true - } - }` - fmt.Fprintf(writer, response) + apiName := "deleteImageStore" + response, err := ReadData(apiName, "ImageStoreService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintln(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) diff --git a/cloudstack/LoadBalancerService_test.go b/cloudstack/LoadBalancerService_test.go index 59adb0c..6256fe9 100644 --- a/cloudstack/LoadBalancerService_test.go +++ b/cloudstack/LoadBalancerService_test.go @@ -28,53 +28,12 @@ import ( func TestLoadBalancerService_CreateLoadBalancerRule(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "createLoadBalancerRule": `{ - "createloadbalancerruleresponse": { - "id": "d9186a3e-b39a-473f-8d5e-70cf1a7aed44", - "jobid": "83ab0ded-225b-4a91-9aed-c17b1da07989" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse":{ - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.user.loadbalancer.CreateLoadBalancerRuleCmd", - "completed": "2021-10-04T04:37:08+0000", - "created": "2021-10-04T04:37:08+0000", - "jobid": "83ab0ded-225b-4a91-9aed-c17b1da07989", - "jobinstanceid": "d9186a3e-b39a-473f-8d5e-70cf1a7aed44", - "jobinstancetype": "FirewallRule", - "jobprocstatus": 0, - "jobresult": { - "loadbalancer": { - "account": "admin", - "algorithm": "roundrobin", - "cidrlist": "", - "domain": "ROOT", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "fordisplay": true, - "id": "d9186a3e-b39a-473f-8d5e-70cf1a7aed44", - "name": "testLBRule", - "networkid": "cc39d938-5ea0-4d9c-b89d-421da3274e54", - "privateport": "9090", - "protocol": "tcp", - "publicip": "192.168.2.107", - "publicipid": "bab02a09-1244-4235-a938-150e75e04ce0", - "publicport": "9090", - "state": "Add", - "tags": [], - "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81", - "zonename": "SimZone1" - } - }, - "jobresultcode": 0, - "jobresulttype": "object", - "jobstatus": 1, - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c" - } - }`, + apiName := "createLoadBalancerRule" + response, err := ParseAsyncResponse(apiName, "LoadBalancerService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -93,31 +52,12 @@ func TestLoadBalancerService_CreateLoadBalancerRule(t *testing.T) { func TestLoadBalancerService_AssignLoadBalancerRule(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "assignToLoadBalancerRule": `{ - "assigntoloadbalancerruleresponse": { - "jobid": "7ab605d2-cddd-4f90-bd6b-884a8f62c16b" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.user.loadbalancer.AssignToLoadBalancerRuleCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "success": true - }, - "created": "2021-10-03T07:52:26+0000", - "completed": "2021-10-03T07:52:26+0000", - "jobid": "7ab605d2-cddd-4f90-bd6b-884a8f62c16b" - } - }`, + apiName := "assignLoadBalancerRule" + response, err := ParseAsyncResponse(apiName, "LoadBalancerService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, response) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) diff --git a/cloudstack/NetworkOfferingService_test.go b/cloudstack/NetworkOfferingService_test.go index 6094d19..b80611b 100644 --- a/cloudstack/NetworkOfferingService_test.go +++ b/cloudstack/NetworkOfferingService_test.go @@ -28,32 +28,12 @@ import ( func TestNetworkOfferingService_CreateNetworkOffering(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "createnetworkofferingresponse": { - "networkoffering": { - "id": "c2000683-68fd-437e-a4cf-f3676e1d18c1", - "name": "testNetOffering", - "displaytext": "testNetOffering", - "traffictype": "Guest", - "isdefault": false, - "specifyvlan": true, - "conservemode": true, - "specifyipranges": false, - "availability": "Optional", - "networkrate": 200, - "state": "Disabled", - "guestiptype": "L2", - "serviceofferingid": "c4b50796-22a5-4347-ae81-79911e44ac8d", - "service": [], - "forvpc": false, - "ispersistent": false, - "egressdefaultpolicy": true, - "supportsstrechedl2subnet": false, - "supportspublicaccess": false - } - } - }` - fmt.Fprintf(writer, response) + apiName := "createNetworkOffering" + response, err := ReadData(apiName, "NetworkOfferingService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -69,32 +49,12 @@ func TestNetworkOfferingService_CreateNetworkOffering(t *testing.T) { func TestNetworkOfferingService_UpdateNetworkOffering(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "updatenetworkofferingresponse": { - "networkoffering": { - "id": "c2000683-68fd-437e-a4cf-f3676e1d18c1", - "name": "testNetOffering", - "displaytext": "testNetOffering", - "traffictype": "Guest", - "isdefault": false, - "specifyvlan": true, - "conservemode": true, - "specifyipranges": false, - "availability": "Optional", - "networkrate": 200, - "state": "Enabled", - "guestiptype": "L2", - "serviceofferingid": "c4b50796-22a5-4347-ae81-79911e44ac8d", - "service": [], - "forvpc": false, - "ispersistent": false, - "egressdefaultpolicy": true, - "supportsstrechedl2subnet": false, - "supportspublicaccess": false - } - } - }` - fmt.Fprintln(writer, response) + apiName := "updateNetworkOffering" + response, err := ReadData(apiName, "NetworkOfferingService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -112,35 +72,12 @@ func TestNetworkOfferingService_UpdateNetworkOffering(t *testing.T) { func TestNetworkOfferingService_ListNetworkOffering(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "listnetworkofferingsresponse": { - "count": 1, - "networkoffering": [ - { - "id": "c2000683-68fd-437e-a4cf-f3676e1d18c1", - "name": "testNetOffering", - "displaytext": "testNetOffering", - "traffictype": "Guest", - "isdefault": false, - "specifyvlan": true, - "conservemode": true, - "specifyipranges": false, - "availability": "Optional", - "networkrate": 200, - "state": "Enabled", - "guestiptype": "L2", - "serviceofferingid": "c4b50796-22a5-4347-ae81-79911e44ac8d", - "service": [], - "forvpc": false, - "ispersistent": false, - "egressdefaultpolicy": true, - "supportsstrechedl2subnet": false, - "supportspublicaccess": false - } - ] - } - }` - fmt.Fprintf(writer, response) + apiName := "listNetworkOfferings" + response, err := ReadData(apiName, "NetworkOfferingService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -158,12 +95,12 @@ func TestNetworkOfferingService_ListNetworkOffering(t *testing.T) { func TestNetworkOfferingService_DeleteNetworkOffering(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "deletenetworkofferingresponse": { - "success": true - } - }` - fmt.Fprintf(writer, response) + apiName := "deleteNetworkOffering" + response, err := ReadData(apiName, "NetworkOfferingService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) diff --git a/cloudstack/NetworkService_test.go b/cloudstack/NetworkService_test.go index 4c76771..edf4b48 100644 --- a/cloudstack/NetworkService_test.go +++ b/cloudstack/NetworkService_test.go @@ -28,181 +28,12 @@ import ( func TestNetworkService_CreateNetwork(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "createnetworkresponse": { - "network": { - "id": "eb9c270d-dd66-443b-9524-ada1eff4442a", - "name": "testIsolatedNet", - "displaytext": "testIsolatedNet", - "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": "69b7f746-208a-47c3-a940-4d3ebb720372", - "networkofferingname": "DefaultIsolatedNetworkOfferingWithSourceNatService", - "networkofferingdisplaytext": "Offering for Isolated networks with Source Nat service enabled", - "networkofferingconservemode": true, - "networkofferingavailability": "Required", - "issystem": false, - "state": "Allocated", - "related": "eb9c270d-dd66-443b-9524-ada1eff4442a", - "dns1": "10.147.28.6", - "type": "Isolated", - "acltype": "Account", - "account": "admin", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "service": [ - { - "name": "Lb", - "capability": [ - { - "name": "SupportedLBIsolation", - "value": "dedicated", - "canchooseservicecapability": false - }, - { - "name": "SupportedLbAlgorithms", - "value": "roundrobin,leastconn,source", - "canchooseservicecapability": false - }, - { - "name": "SupportedProtocols", - "value": "tcp, udp, tcp-proxy", - "canchooseservicecapability": false - }, - { - "name": "LbSchemes", - "value": "Public", - "canchooseservicecapability": false - }, - { - "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,\"description\":\" \"},{\"paramname\":\"domain\",\"required\":false,\"isflag\":false,\"description\":\" \"}],\"description\":\"This is loadbalancer cookie based stickiness method.\"},{\"methodname\":\"AppCookie\",\"paramlist\":[{\"paramname\":\"cookie-name\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"length\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"holdtime\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"request-learn\",\"required\":false,\"isflag\":true,\"description\":\" \"},{\"paramname\":\"prefix\",\"required\":false,\"isflag\":true,\"description\":\" \"},{\"paramname\":\"mode\",\"required\":false,\"isflag\":false,\"description\":\" \"}],\"description\":\"This is App session based sticky method. Define session stickiness on an existing application cookie. It can be used only for a specific http traffic\"},{\"methodname\":\"SourceBased\",\"paramlist\":[{\"paramname\":\"tablesize\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"expire\",\"required\":false,\"isflag\":false,\"description\":\" \"}],\"description\":\"This is source based Stickiness method, it can be used for any type of protocol.\"}]", - "canchooseservicecapability": false - }, - { - "name": "AutoScaleCounters", - "value": "[{\"methodname\":\"cpu\",\"paramlist\":[]},{\"methodname\":\"memory\",\"paramlist\":[]}]", - "canchooseservicecapability": false - } - ] - }, - { - "name": "PortForwarding", - "capability": [ - { - "name": "SupportedProtocols", - "value": "tcp,udp", - "canchooseservicecapability": false - } - ] - }, - { - "name": "SourceNat", - "capability": [ - { - "name": "SupportedSourceNatTypes", - "value": "peraccount", - "canchooseservicecapability": false - }, - { - "name": "RedundantRouter", - "value": "true", - "canchooseservicecapability": false - } - ] - }, - { - "name": "Vpn", - "capability": [ - { - "name": "VpnTypes", - "value": "removeaccessvpn", - "canchooseservicecapability": false - }, - { - "name": "SupportedVpnTypes", - "value": "pptp,l2tp,ipsec", - "canchooseservicecapability": false - } - ] - }, - { - "name": "Dns", - "capability": [ - { - "name": "AllowDnsSuffixModification", - "value": "true", - "canchooseservicecapability": false - } - ] - }, - { - "name": "Dhcp", - "capability": [ - { - "name": "DhcpAccrossMultipleSubnets", - "value": "true", - "canchooseservicecapability": false - } - ] - }, - { - "name": "StaticNat" - }, - { - "name": "UserData" - }, - { - "name": "Firewall", - "capability": [ - { - "name": "TrafficStatistics", - "value": "per public ip", - "canchooseservicecapability": false - }, - { - "name": "SupportedProtocols", - "value": "tcp,udp,icmp", - "canchooseservicecapability": false - }, - { - "name": "MultipleIps", - "value": "true", - "canchooseservicecapability": false - }, - { - "name": "SupportedTrafficDirection", - "value": "ingress, egress", - "canchooseservicecapability": false - }, - { - "name": "SupportedEgressProtocols", - "value": "tcp,udp,icmp, all", - "canchooseservicecapability": false - } - ] - } - ], - "networkdomain": "cs2sandbox.simulator", - "physicalnetworkid": "8e27a637-7525-49ed-81ce-52bd5e5d9ea2", - "restartrequired": false, - "specifyipranges": false, - "canusefordeploy": true, - "ispersistent": false, - "tags": [], - "details": {}, - "displaynetwork": true, - "strechedl2subnet": false, - "redundantrouter": false - } - } - }` - fmt.Fprintf(writer, response) + apiName := "createNetwork" + response, err := ReadData(apiName, "NetworkService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -218,184 +49,12 @@ func TestNetworkService_CreateNetwork(t *testing.T) { func TestNetworkService_ListNetworks(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "listnetworksresponse": { - "count": 1, - "network": [ - { - "id": "eb9c270d-dd66-443b-9524-ada1eff4442a", - "name": "testIsolatedNet", - "displaytext": "testIsolatedNet", - "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": "69b7f746-208a-47c3-a940-4d3ebb720372", - "networkofferingname": "DefaultIsolatedNetworkOfferingWithSourceNatService", - "networkofferingdisplaytext": "Offering for Isolated networks with Source Nat service enabled", - "networkofferingconservemode": true, - "networkofferingavailability": "Required", - "issystem": false, - "state": "Allocated", - "related": "eb9c270d-dd66-443b-9524-ada1eff4442a", - "dns1": "10.147.28.6", - "type": "Isolated", - "acltype": "Account", - "account": "admin", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "service": [ - { - "name": "Lb", - "capability": [ - { - "name": "SupportedLBIsolation", - "value": "dedicated", - "canchooseservicecapability": false - }, - { - "name": "SupportedLbAlgorithms", - "value": "roundrobin,leastconn,source", - "canchooseservicecapability": false - }, - { - "name": "SupportedProtocols", - "value": "tcp, udp, tcp-proxy", - "canchooseservicecapability": false - }, - { - "name": "LbSchemes", - "value": "Public", - "canchooseservicecapability": false - }, - { - "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,\"description\":\" \"},{\"paramname\":\"domain\",\"required\":false,\"isflag\":false,\"description\":\" \"}],\"description\":\"This is loadbalancer cookie based stickiness method.\"},{\"methodname\":\"AppCookie\",\"paramlist\":[{\"paramname\":\"cookie-name\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"length\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"holdtime\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"request-learn\",\"required\":false,\"isflag\":true,\"description\":\" \"},{\"paramname\":\"prefix\",\"required\":false,\"isflag\":true,\"description\":\" \"},{\"paramname\":\"mode\",\"required\":false,\"isflag\":false,\"description\":\" \"}],\"description\":\"This is App session based sticky method. Define session stickiness on an existing application cookie. It can be used only for a specific http traffic\"},{\"methodname\":\"SourceBased\",\"paramlist\":[{\"paramname\":\"tablesize\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"expire\",\"required\":false,\"isflag\":false,\"description\":\" \"}],\"description\":\"This is source based Stickiness method, it can be used for any type of protocol.\"}]", - "canchooseservicecapability": false - }, - { - "name": "AutoScaleCounters", - "value": "[{\"methodname\":\"cpu\",\"paramlist\":[]},{\"methodname\":\"memory\",\"paramlist\":[]}]", - "canchooseservicecapability": false - } - ] - }, - { - "name": "PortForwarding", - "capability": [ - { - "name": "SupportedProtocols", - "value": "tcp,udp", - "canchooseservicecapability": false - } - ] - }, - { - "name": "SourceNat", - "capability": [ - { - "name": "SupportedSourceNatTypes", - "value": "peraccount", - "canchooseservicecapability": false - }, - { - "name": "RedundantRouter", - "value": "true", - "canchooseservicecapability": false - } - ] - }, - { - "name": "Vpn", - "capability": [ - { - "name": "VpnTypes", - "value": "removeaccessvpn", - "canchooseservicecapability": false - }, - { - "name": "SupportedVpnTypes", - "value": "pptp,l2tp,ipsec", - "canchooseservicecapability": false - } - ] - }, - { - "name": "Dns", - "capability": [ - { - "name": "AllowDnsSuffixModification", - "value": "true", - "canchooseservicecapability": false - } - ] - }, - { - "name": "Dhcp", - "capability": [ - { - "name": "DhcpAccrossMultipleSubnets", - "value": "true", - "canchooseservicecapability": false - } - ] - }, - { - "name": "StaticNat" - }, - { - "name": "UserData" - }, - { - "name": "Firewall", - "capability": [ - { - "name": "TrafficStatistics", - "value": "per public ip", - "canchooseservicecapability": false - }, - { - "name": "SupportedProtocols", - "value": "tcp,udp,icmp", - "canchooseservicecapability": false - }, - { - "name": "MultipleIps", - "value": "true", - "canchooseservicecapability": false - }, - { - "name": "SupportedTrafficDirection", - "value": "ingress, egress", - "canchooseservicecapability": false - }, - { - "name": "SupportedEgressProtocols", - "value": "tcp,udp,icmp, all", - "canchooseservicecapability": false - } - ] - } - ], - "networkdomain": "cs2sandbox.simulator", - "physicalnetworkid": "8e27a637-7525-49ed-81ce-52bd5e5d9ea2", - "restartrequired": false, - "specifyipranges": false, - "canusefordeploy": true, - "ispersistent": false, - "tags": [], - "details": {}, - "displaynetwork": true, - "strechedl2subnet": false, - "redundantrouter": false - } - ] - } - }` - fmt.Fprintf(writer, response) + apiName := "listNetworks" + response, err := ReadData(apiName, "NetworkService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -415,32 +74,13 @@ func TestNetworkService_ListNetworks(t *testing.T) { func TestNetworkService_DeleteNetwork(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "deleteNetwork": `{ - "deletenetworkresponse": { - "jobid": "8fe59207-90f5-4382-af17-e8b413bda517" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.user.network.DeleteNetworkCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "success": true - }, - "jobinstancetype": "Network", - "created": "2021-10-04T05:11:01+0000", - "completed": "2021-10-04T05:11:02+0000", - "jobid": "8fe59207-90f5-4382-af17-e8b413bda517" - } - }`, + apiName := "deleteNetwork" + response, err := ParseAsyncResponse(apiName, "NetworkService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Println(response) + fmt.Fprintf(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -496,42 +136,12 @@ func TestNetworkService_DeleteNetwork(t *testing.T) { func TestNetworkService_CreatePhysicalNetwork(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "createPhysicalNetwork": `{ - "createphysicalnetworkresponse": { - "id": "256b3b3f-4a31-48f3-a939-79b01357fb87", - "jobid": "a52138ee-752e-400a-8289-c534eebca026" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "bc1b501c-1d18-11ec-9173-50eb7122da94", - "userid": "bc1b6b47-1d18-11ec-9173-50eb7122da94", - "cmd": "org.apache.cloudstack.api.command.admin.network.CreatePhysicalNetworkCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "physicalnetwork": { - "id": "256b3b3f-4a31-48f3-a939-79b01357fb87", - "name": "testPhyNet", - "broadcastdomainrange": "ZONE", - "zoneid": "d4a81f75-5d92-415e-ab59-e85cc2ce56d9", - "zonename": "Sandbox-simulator", - "state": "Disabled", - "isolationmethods": "VLAN" - } - }, - "jobinstancetype": "PhysicalNetwork", - "jobinstanceid": "256b3b3f-4a31-48f3-a939-79b01357fb87", - "created": "2021-10-04T11:26:38+0530", - "completed": "2021-10-04T11:26:38+0530", - "jobid": "a52138ee-752e-400a-8289-c534eebca026" - } - }`, + apiName := "createPhysicalNetwork" + response, err := ParseAsyncResponse(apiName, "NetworkService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) diff --git a/cloudstack/PoolService_test.go b/cloudstack/PoolService_test.go index 0d689b7..8636e8d 100644 --- a/cloudstack/PoolService_test.go +++ b/cloudstack/PoolService_test.go @@ -28,31 +28,12 @@ import ( func TestPoolService_CreateStoragePool(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - response := `{ - "createstoragepoolresponse": { - "storagepool": { - "id": "3fd44942-4881-3fb0-95f1-5d7b7ae64cfb", - "zoneid": "6ebc7a1c-ff98-425c-ac0d-b6c2e3ae6e33", - "zonename": "TestZone", - "podid": "6a1dbf48-8b8e-45ab-8249-cf43a86f012d", - "podname": "TestPod", - "name": "testPrimary1", - "ipaddress": "10.1.1.2", - "path": "/export/primary1", - "created": "2021-10-04T08:17:38+0000", - "type": "NetworkFilesystem", - "clusterid": "a73fb4a4-642b-4ea4-92b8-b74ec8908534", - "clustername": "TestCluster", - "disksizetotal": 1099511627776, - "disksizeallocated": 0, - "state": "Up", - "scope": "CLUSTER", - "overprovisionfactor": "2.0", - "provider": "DefaultPrimary" - } - } - }` - fmt.Fprintf(writer, response) + apiName := "createStoragePool" + response, err := ReadData(apiName, "PoolService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -70,38 +51,12 @@ func TestPoolService_CreateStoragePool(t *testing.T) { func TestPoolService_ListStoragePools(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - response := `{ - "liststoragepoolsresponse": { - "count": 1, - "storagepool": [ - { - "clusterid": "a73fb4a4-642b-4ea4-92b8-b74ec8908534", - "clustername": "TestCluster", - "created": "2021-10-04T08:17:38+0000", - "disksizeallocated": 0, - "disksizetotal": 1099511627776, - "disksizeused": 0, - "id": "3fd44942-4881-3fb0-95f1-5d7b7ae64cfb", - "ipaddress": "10.1.1.2", - "name": "testPrimary1", - "overprovisionfactor": "2.0", - "path": "/export/primary1", - "podid": "6a1dbf48-8b8e-45ab-8249-cf43a86f012d", - "podname": "TestPod", - "provider": "DefaultPrimary", - "scope": "CLUSTER", - "state": "Up", - "storagecapabilities": { - "VOLUME_SNAPSHOT_QUIESCEVM": "false" - }, - "type": "NetworkFilesystem", - "zoneid": "6ebc7a1c-ff98-425c-ac0d-b6c2e3ae6e33", - "zonename": "TestZone" - } - ] - } - }` - fmt.Fprintf(writer, response) + apiName := "listStoragePools" + response, err := ReadData(apiName, "PoolService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -120,12 +75,12 @@ func TestPoolService_ListStoragePools(t *testing.T) { func TestPoolService_DeleteStoragePool(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - response := `{ - "deletestoragepoolresponse": { - "success": true - } - }` - fmt.Fprintf(writer, response) + apiName := "deleteStoragePool" + response, err := ReadData(apiName, "PoolService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", true) diff --git a/cloudstack/ProjectService_test.go b/cloudstack/ProjectService_test.go index f078c1e..6691fff 100644 --- a/cloudstack/ProjectService_test.go +++ b/cloudstack/ProjectService_test.go @@ -28,82 +28,12 @@ import ( func TestProjectService_CreateProject(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "createProject": `{ - "createprojectresponse": { - "id": "69646881-8d7f-4800-987d-106698a42608", - "jobid": "0666daab-af9b-4001-ae70-78ac6bc697e8" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.user.project.CreateProjectCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "project": { - "id": "69646881-8d7f-4800-987d-106698a42608", - "name": "testProject", - "displaytext": "testProject", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "owner": [ - { - "account": "admin" - } - ], - "projectaccountname": "PrjAcct-testProject-1", - "state": "Active", - "tags": [], - "networklimit": "20", - "networktotal": 0, - "networkavailable": "20", - "vpclimit": "20", - "vpctotal": 0, - "vpcavailable": "20", - "cpulimit": "40", - "cputotal": 0, - "cpuavailable": "40", - "memorylimit": "40960", - "memorytotal": 0, - "memoryavailable": "40960", - "primarystoragelimit": "200", - "primarystoragetotal": 0, - "primarystorageavailable": "200", - "secondarystoragelimit": "400", - "secondarystoragetotal": 0, - "secondarystorageavailable": "400.0", - "vmlimit": "20", - "vmtotal": 0, - "vmavailable": "20", - "iplimit": "20", - "iptotal": 0, - "ipavailable": "20", - "volumelimit": "20", - "volumetotal": 0, - "volumeavailable": "20", - "snapshotlimit": "20", - "snapshottotal": 0, - "snapshotavailable": "20", - "templatelimit": "20", - "templatetotal": 0, - "templateavailable": "20", - "vmstopped": 0, - "vmrunning": 0 - } - }, - "jobinstancetype": "None", - "created": "2021-10-04T06:21:54+0000", - "completed": "2021-10-04T06:21:54+0000", - "jobid": "0666daab-af9b-4001-ae70-78ac6bc697e8" - } - }`, + apiName := "createProject" + response, err := ParseAsyncResponse(apiName, "ProjectService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -120,80 +50,12 @@ func TestProjectService_CreateProject(t *testing.T) { func TestProjectService_ActivateProject(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "activateProject": `{ - "activaterojectresponse": { - "jobid": "fa12a90a-29fc-43c0-8cbd-5be49b72ed22" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.user.project.ActivateProjectCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "project": { - "id": "99a842a4-e50f-4265-8ca7-249959506c13", - "name": "Admin Project", - "displaytext": "Admin Project", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "owner": [ - { - "account": "admin" - } - ], - "projectaccountname": "PrjAcct-Admin Project-1", - "state": "Active", - "tags": [], - "networklimit": "20", - "networktotal": 0, - "networkavailable": "20", - "vpclimit": "20", - "vpctotal": 0, - "vpcavailable": "20", - "cpulimit": "40", - "cputotal": 0, - "cpuavailable": "40", - "memorylimit": "40960", - "memorytotal": 0, - "memoryavailable": "40960", - "primarystoragelimit": "200", - "primarystoragetotal": 0, - "primarystorageavailable": "200", - "secondarystoragelimit": "400", - "secondarystoragetotal": 0, - "secondarystorageavailable": "400.0", - "vmlimit": "20", - "vmtotal": 0, - "vmavailable": "20", - "iplimit": "20", - "iptotal": 0, - "ipavailable": "20", - "volumelimit": "20", - "volumetotal": 0, - "volumeavailable": "20", - "snapshotlimit": "20", - "snapshottotal": 0, - "snapshotavailable": "20", - "templatelimit": "20", - "templatetotal": 0, - "templateavailable": "20", - "vmstopped": 0, - "vmrunning": 0 - } - }, - "created": "2021-10-04T06:30:39+0000", - "completed": "2021-10-04T06:30:39+0000", - "jobid": "fa12a90a-29fc-43c0-8cbd-5be49b72ed22" - } - }`, + apiName := "activateProject" + response, err := ParseAsyncResponse(apiName, "ProjectService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -210,80 +72,12 @@ func TestProjectService_ActivateProject(t *testing.T) { func TestProjectService_SuspendProject(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "suspendProject": `{ - "suspendprojectresponse": { - "jobid": "608f4d53-ceae-4747-9c0d-e8c15fc52135" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.user.project.SuspendProjectCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "project": { - "id": "99a842a4-e50f-4265-8ca7-249959506c13", - "name": "Admin Project", - "displaytext": "Admin Project", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "owner": [ - { - "account": "admin" - } - ], - "projectaccountname": "PrjAcct-Admin Project-1", - "state": "Suspended", - "tags": [], - "networklimit": "20", - "networktotal": 0, - "networkavailable": "20", - "vpclimit": "20", - "vpctotal": 0, - "vpcavailable": "20", - "cpulimit": "40", - "cputotal": 0, - "cpuavailable": "40", - "memorylimit": "40960", - "memorytotal": 0, - "memoryavailable": "40960", - "primarystoragelimit": "200", - "primarystoragetotal": 0, - "primarystorageavailable": "200", - "secondarystoragelimit": "400", - "secondarystoragetotal": 0, - "secondarystorageavailable": "400.0", - "vmlimit": "20", - "vmtotal": 0, - "vmavailable": "20", - "iplimit": "20", - "iptotal": 0, - "ipavailable": "20", - "volumelimit": "20", - "volumetotal": 0, - "volumeavailable": "20", - "snapshotlimit": "20", - "snapshottotal": 0, - "snapshotavailable": "20", - "templatelimit": "20", - "templatetotal": 0, - "templateavailable": "20", - "vmstopped": 0, - "vmrunning": 0 - } - }, - "created": "2021-10-04T06:34:01+0000", - "completed": "2021-10-04T06:34:01+0000", - "jobid": "608f4d53-ceae-4747-9c0d-e8c15fc52135" - } - }`, + apiName := "suspendProject" + response, err := ParseAsyncResponse(apiName, "ProjectService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -300,80 +94,12 @@ func TestProjectService_SuspendProject(t *testing.T) { func TestProjectService_UpdateProject(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "updateProject": `{ - "updateprojectresponse": { - "jobid": "1330d540-c099-4943-ac22-3fd5846c0e5b" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.user.project.UpdateProjectCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "project": { - "id": "69646881-8d7f-4800-987d-106698a42608", - "name": "testProject", - "displaytext": "testProjectUpdate", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "owner": [ - { - "account": "admin" - } - ], - "projectaccountname": "PrjAcct-testProject-1", - "state": "Active", - "tags": [], - "networklimit": "20", - "networktotal": 0, - "networkavailable": "20", - "vpclimit": "20", - "vpctotal": 0, - "vpcavailable": "20", - "cpulimit": "40", - "cputotal": 0, - "cpuavailable": "40", - "memorylimit": "40960", - "memorytotal": 0, - "memoryavailable": "40960", - "primarystoragelimit": "200", - "primarystoragetotal": 0, - "primarystorageavailable": "200", - "secondarystoragelimit": "400", - "secondarystoragetotal": 0, - "secondarystorageavailable": "400.0", - "vmlimit": "20", - "vmtotal": 0, - "vmavailable": "20", - "iplimit": "20", - "iptotal": 0, - "ipavailable": "20", - "volumelimit": "20", - "volumetotal": 0, - "volumeavailable": "20", - "snapshotlimit": "20", - "snapshottotal": 0, - "snapshotavailable": "20", - "templatelimit": "20", - "templatetotal": 0, - "templateavailable": "20", - "vmstopped": 0, - "vmrunning": 0 - } - }, - "created": "2021-10-04T06:35:29+0000", - "completed": "2021-10-04T06:35:29+0000", - "jobid": "1330d540-c099-4943-ac22-3fd5846c0e5b" - } - }`, + apiName := "updateProject" + response, err := ParseAsyncResponse(apiName, "ProjectService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) diff --git a/cloudstack/ResourcetagsService_test.go b/cloudstack/ResourcetagsService_test.go index 3b9c6fc..30404d4 100644 --- a/cloudstack/ResourcetagsService_test.go +++ b/cloudstack/ResourcetagsService_test.go @@ -28,31 +28,12 @@ import ( func TestResourcetagsService_CreateTags(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "createTags": `{ - "createtagsresponse": { - "jobid": "fb96bb6b-c192-492d-9671-42cea59a3709" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.user.tag.CreateTagsCmd", - "completed": "2021-10-04T06:58:35+0000", - "created": "2021-10-04T06:58:35+0000", - "jobid": "4901a56e-60aa-4385-8ab6-8f9591ef0469", - "jobprocstatus": 0, - "jobresult": { - "success": true - }, - "jobresultcode": 0, - "jobresulttype": "object", - "jobstatus": 1, - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c" - } - }`, + apiName := "createTags" + response, err := ParseAsyncResponse(apiName, "ResourceTagsService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) @@ -73,31 +54,12 @@ func TestResourcetagsService_CreateTags(t *testing.T) { func TestResourcetagsService_DeleteTags(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "deleteTags": `{ - "deletetagsresponse": { - "jobid": "494d0f35-057a-4cc7-bf5d-b52d3b803a36" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.user.tag.DeleteTagsCmd", - "completed": "2021-10-04T07:07:22+0000", - "created": "2021-10-04T07:07:22+0000", - "jobid": "494d0f35-057a-4cc7-bf5d-b52d3b803a36", - "jobprocstatus": 0, - "jobresult": { - "success": true - }, - "jobresultcode": 0, - "jobresulttype": "object", - "jobstatus": 1, - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c" - } - }`, + apiName := "deleteTags" + response, err := ParseAsyncResponse(apiName, "ResourceTagsService", *request) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false) diff --git a/cloudstack/SSHService_test.go b/cloudstack/SSHService_test.go index 7b3c9d6..6fd01f7 100644 --- a/cloudstack/SSHService_test.go +++ b/cloudstack/SSHService_test.go @@ -28,19 +28,12 @@ import ( func TestSSHService_CreateSSHKeyPair(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - response := `{ - "createsshkeypairresponse": { - "keypair": { - "privatekey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAlMDlCrzlmEBwmPmQBhvD4PeRdEUV2tyoEuLLwkg7FkZFrjdd\nZaC8+N82Jm/lr27sqq5xVoo6n54k3hG9HVxNZjQBY5IiRNeQIF30Ye5c6TzboCCH\nAJVZYf4Dj5ucJvxg+V1+rZMNNJs6y2tMRGfmQ9zdrHZwOutKBeWTlGLtXyMabc5o\nVVe4hjngxh7s+CbEAA8oE9KFk1ZyhJ7SDj6G9vrMoBYNgqNGG6DHF/NM0A0yaEnj\nZU5MECXnw9qT7W8ggy5UM9AYtfzAyWBrS3jDwFgOjEZ+TW7vvC1Q3lnGkzpTHlye\nRppPm/7Xa8xapIdDV2UdEXnChHj9+Jwpa5nBJQIDAQABAoIBABaReW56oD7MMAkV\ne+NhXQOJq/i+7oTpC1rqK83LFaPYf4PiBHqBu4nqm5WTTn6iTqfKlYlyqVhELwW+\nHToSIfAKnddUeXyGU+iFOKmO92uvfwa5SKIvBoOWfUXRbwx/J9tNcwW0lMFRd8ca\n/VQ3izjqjns28OoPfoiMfyp5I9hWCNoC0KmIqHClqSVU5rpYpEcm70jA1PhLMItf\n8ECEPRQBBoFAEQSnyqohFBOKxna0Urs8qUOJ38FfK883h+ltRSzna7D9QetC+lny\n9OTuAMYe7ytnzGPJITLXjIN3Nj40n+dNmcRl7y0u00FdVpN92HlosCJvQqeJYY5V\nhcfi/aECgYEAxSKvGknRtQjuT+emmG4TmC110ZCcQY1tgIMwkPL++rR9Qp8M5t5p\nocxpK5NYhGgai4Kep5F4P2nePHFemwgP1jHawxsc3G/IA+0c27Y+9uAZSM2mDCcf\nXIvBxkOGcI1UcJYUTwAYdfgtJmVkS3Mj519r1lk2+pJAN14NkC87wekCgYEAwSvS\no7ILlqZo//DThhHakFFLFRKD82ghNMc0b8yheSY+V+tkzW+nugqvm5rhH3GH+M8U\nMLm5sdWauT2/1l7kaUla923lwMDxhd4Buv6v6IZYVNyzJLA5DAT3T7i5fmixE1MG\ncpmZhbpsuikFRUP3Z2td1D8cuZxHN6OrWtCso90CgYEAtJIGji/b1NVvZOWtZaY+\ncIADkYfCeREQokyIqdzKzd2Rdvq1GKvVWg0gsHdw9ydcWTm2FYtb98oDdJ3rqFoE\nF5Dm7xvgndIOBfqlGmOe3Qd8YYFtfWhAg8bIIdEsTeBG3jG6PHq77SL8SFVLPwki\ndAalgluJzo80HwMZrV52gDECgYA5JXm/K6D6BGjzro8lDosWPrZzmXKnw5pvPq9o\nk6UBbirrX5wGmo2IIDkrU3peDvwmwzw53fftgD+xpW7nQFNaQnVC1aQujeXlsHPa\nmhX4OCZRlKj6pZd60s1HLGLT3qzkBp/Vr1MXmLspp5EDmMPMOJsdez5IOs9mymib\nCTjJkQKBgFv0d3RnnxOU9EuTA6DmqxrYnWCQVEl1jwTJwfX6+1hfiBzLMCKWxEZ4\nla4rcmvMkL+uWwfLp/R29ciZC+G08Tc7tPVmZunqT3XBgSAt0y3Q3WXkkZG9RHlS\nCK2YbtViHML+G5dackvASf1p7+w2b3WS8fHFH2GTSTiM/OqReBVF\n-----END RSA PRIVATE KEY-----\n", - "name": "testSSHKey", - "account": "admin", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "fingerprint": "3b:f7:0b:34:40:0d:a5:3c:2a:75:f8:82:1d:88:99:36" - } - } - }` - fmt.Fprintf(writer, response) + apiName := "createSSHKeyPair" + response, err := ReadData(apiName, "SSHService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -57,21 +50,12 @@ func TestSSHService_CreateSSHKeyPair(t *testing.T) { func TestSSHService_ListSSHKeyPairs(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - response := `{ - "listsshkeypairsresponse": { - "count": 1, - "sshkeypair": [ - { - "account": "admin", - "domain": "ROOT", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "fingerprint": "3b:f7:0b:34:40:0d:a5:3c:2a:75:f8:82:1d:88:99:36", - "name": "testSSHKey" - } - ] - } - }` - fmt.Fprintf(writer, response) + apiName := "listSSHKeyPairs" + response, err := ReadData(apiName, "SSHService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -89,119 +73,12 @@ func TestSSHService_ListSSHKeyPairs(t *testing.T) { func TestSSHService_ResetSSHKeyForVirtualMachine(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - responses := map[string]string{ - "resetSSHKeyForVirtualMachine": `{ - "resetSSHKeyforvirtualmachineresponse": { - "jobid": "da766971-3902-4675-9cf2-8bcb2398aba3" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.vm.ResetVMSSHKeyCmdByAdmin", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "virtualmachine": { - "id": "8aa29529-b238-45f3-8992-5befadcd8bb0", - "name": "Admin-VPC-T3-VM", - "displayname": "abc12", - "account": "admin", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "username": "admin", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "created": "2021-07-05T09:16:22+0000", - "state": "Stopped", - "haenable": false, - "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", - "zonename": "shouldwork", - "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c", - "templatename": "CentOS 5.6 (64-bit)", - "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI", - "passwordenabled": false, - "serviceofferingid": "79802d1a-186b-4e34-a550-220987cb03c2", - "serviceofferingname": "const1", - "diskofferingid": "3d321179-f9c6-4a77-8f47-6fae3a8126d1", - "diskofferingname": "Medium", - "backupofferingid": "7c42d74e-c029-4431-9025-6caa8b903472", - "backupofferingname": "BackupGoldDummy", - "cpunumber": 1, - "cpuspeed": 1000, - "memory": 256, - "cpuused": "10%", - "networkkbsread": 209485824, - "networkkbswrite": 104742912, - "diskkbsread": 0, - "diskkbswrite": 0, - "memorykbs": 0, - "memoryintfreekbs": 0, - "memorytargetkbs": 0, - "diskioread": 0, - "diskiowrite": 0, - "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c", - "rootdeviceid": 1, - "rootdevicetype": "DATADISK", - "securitygroup": [], - "nic": [ - { - "id": "511941ff-229d-4a3b-8b09-f83b0608ed6b", - "networkid": "30358053-0f9d-4112-9948-976477896db6", - "networkname": "test-network-2", - "netmask": "255.255.255.0", - "gateway": "10.1.2.1", - "ipaddress": "10.1.2.71", - "traffictype": "Guest", - "type": "Isolated", - "isdefault": true, - "macaddress": "02:00:35:ff:00:0c", - "secondaryip": [], - "extradhcpoption": [] - }, - { - "id": "186e56ee-8de8-4869-ac00-dc91dc51d6f2", - "networkid": "6463e120-c36a-4569-aaa7-729922a55825", - "networkname": "sw1", - "traffictype": "Guest", - "type": "L2", - "isdefault": false, - "macaddress": "02:00:3d:a2:00:02", - "secondaryip": [], - "extradhcpoption": [] - } - ], - "hypervisor": "Simulator", - "instancename": "i-2-613-QA", - "details": { - "cpuNumber": "1", - "memory": "256", - "Message.ReservedCapacityFreed.Flag": "true", - "SSH.PublicKey": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCUwOUKvOWYQHCY+ZAGG8Pg95F0RRXa3KgS4svCSDsWRkWuN11loLz43zYmb+WvbuyqrnFWijqfniTeEb0dXE1mNAFjkiJE15AgXfRh7lzpPNugIIcAlVlh/gOPm5wm/GD5XX6tkw00mzrLa0xEZ+ZD3N2sdnA660oF5ZOUYu1fIxptzmhVV7iGOeDGHuz4JsQADygT0oWTVnKEntIOPob2+sygFg2Co0YboMcX80zQDTJoSeNlTkwQJefD2pPtbyCDLlQz0Bi1/MDJYGtLeMPAWA6MRn5Nbu+8LVDeWcaTOlMeXJ5Gmk+b/tdrzFqkh0NXZR0RecKEeP34nClrmcEl \n", - "Encrypted.Password": "YcyvikAL5LHq4gXwGVE3yW0j7iuuTWcxnMpYQDqHn+6R1agzIibv3eoF1onUFgHYQ0XtJUzMR4QfZDzlHnqYDTB+rKjjc9YcZzWhVSoVKQ45bUqAKFBXJTfDLQ3ZmvULxJ2VXf/HuuOh5Th5S62bP68QrrVCMPUArUYRRFPw0EkQVdvjwF1raNXpKWDAtcwITaroxW0pL9S8ome5R7JHKPxyK9G8/lqC4ywodvPaG+vGV0eHTiQeUab/dQ8Pxze6Ny88uwv8oH2vu+zMbs91uDDL9lMl7WV5Rq6RucKRAjOBLfPj+f+8jq3xnCG8JzUa63G2lAvP9qIzk3eYzoeYkw==" - }, - "keypair": "testSSHKey", - "affinitygroup": [], - "displayvm": true, - "isdynamicallyscalable": false, - "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c", - "osdisplayname": "CentOS 5.6 (64-bit)", - "tags": [], - "jobid": "da766971-3902-4675-9cf2-8bcb2398aba3", - "jobstatus": 0 - } - }, - "jobinstancetype": "VirtualMachine", - "jobinstanceid": "8aa29529-b238-45f3-8992-5befadcd8bb0", - "created": "2021-10-04T07:39:55+0000", - "completed": "2021-10-04T07:39:55+0000", - "jobid": "da766971-3902-4675-9cf2-8bcb2398aba3" - } - }`, + apiName := "resetSSHKeyForVirtualMachine" + response, err := ParseAsyncResponse(apiName, "SSHService", *r) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintln(writer, responses[r.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -218,12 +95,12 @@ func TestSSHService_ResetSSHKeyForVirtualMachine(t *testing.T) { func TestSSHService_DeleteSSHKeyPair(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - response := `{ - "deletesshkeypairresponse": { - "success": true - } - }` - fmt.Fprintf(writer, response) + apiName := "deleteSSHKeyPair" + response, err := ReadData(apiName, "SSHService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", true) diff --git a/cloudstack/ServiceOfferingService_test.go b/cloudstack/ServiceOfferingService_test.go index c0b750c..448b336 100644 --- a/cloudstack/ServiceOfferingService_test.go +++ b/cloudstack/ServiceOfferingService_test.go @@ -28,30 +28,12 @@ import ( func TestServiceOfferingService_CreateServiceOffering(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - response := `{ - "createserviceofferingresponse": { - "serviceoffering": { - "id": "efaeeab0-4b09-4729-8b6f-62645db41b37", - "name": "testServiceOffering", - "displaytext": "testServiceOffering", - "cpunumber": 2, - "cpuspeed": 1000, - "memory": 2048, - "created": "2021-10-04T07:16:42+0000", - "storagetype": "shared", - "provisioningtype": "thin", - "offerha": false, - "limitcpuuse": false, - "isvolatile": false, - "issystem": false, - "defaultuse": false, - "iscustomized": false, - "cacheMode": "none", - "rootdisksize": 0 - } - } - }` - fmt.Fprintf(w, response) + apiName := "createServiceOffering" + response, err := ReadData(apiName, "ServiceOfferingService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(w, response[apiName]) })) defer server.Close() @@ -69,30 +51,12 @@ func TestServiceOfferingService_CreateServiceOffering(t *testing.T) { func TestServiceOfferingService_UpdateServiceOffering(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - response := `{ - "updateserviceofferingresponse": { - "serviceoffering": { - "id": "efaeeab0-4b09-4729-8b6f-62645db41b37", - "name": "testServiceOfferingUpdated", - "displaytext": "testServiceOffering", - "cpunumber": 2, - "cpuspeed": 1000, - "memory": 2048, - "created": "2021-10-04T07:16:42+0000", - "storagetype": "shared", - "provisioningtype": "thin", - "offerha": false, - "limitcpuuse": false, - "isvolatile": false, - "issystem": false, - "defaultuse": false, - "iscustomized": false, - "cacheMode": "none", - "rootdisksize": 0 - } - } - }` - fmt.Fprintln(w, response) + apiName := "updateServiceOffering" + response, err := ReadData(apiName, "ServiceOfferingService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(w, response[apiName]) })) defer server.Close() @@ -112,12 +76,12 @@ func TestServiceOfferingService_UpdateServiceOffering(t *testing.T) { func TestServiceOfferingService_DeleteServiceOffering(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - response := `{ - "deleteserviceofferingresponse": { - "success": true - } - }` - fmt.Fprintf(w, response) + apiName := "deleteServiceOffering" + response, err := ReadData(apiName, "ServiceOfferingService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(w, response[apiName]) })) client := NewClient(server.URL, "APIKEY", "SECRETKEY", true) p := client.ServiceOffering.NewDeleteServiceOfferingParams("efaeeab0-4b09-4729-8b6f-62645db41b37") diff --git a/cloudstack/StoragePoolService_test.go b/cloudstack/StoragePoolService_test.go index b875097..a83e87c 100644 --- a/cloudstack/StoragePoolService_test.go +++ b/cloudstack/StoragePoolService_test.go @@ -28,54 +28,12 @@ import ( func TestStoragePoolService_CancelStorageMaintenance(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - responses := map[string]string{ - "cancelStorageMaintenance": `{ - "cancelprimarystoragemaintenanceresponse": { - "jobid": "7cc3faa4-73c5-45cb-a982-683a13023827" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.storage.CancelPrimaryStorageMaintenanceCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "storagepool": { - "id": "44ad900d-785b-3eff-addc-a5e6bf4927ef", - "zoneid": "753941b6-5239-4ab3-b2b3-7522d2a6d1ba", - "zonename": "DummySG", - "podid": "b52f7877-227e-4e3f-974b-2397a37d6e1c", - "podname": "SGAdvPod", - "name": "SGAdvPS", - "ipaddress": "10.1.1.3", - "path": "/export/testing/primary ", - "created": "2020-07-27T06:01:56+0000", - "type": "NetworkFilesystem", - "clusterid": "a7b4c0e1-8ba4-41ea-a2f4-490798ddd166", - "clustername": "SGAdvCluster", - "disksizetotal": 1099511627776, - "disksizeallocated": 100, - "state": "Up", - "scope": "CLUSTER", - "overprovisionfactor": "2.0", - "provider": "DefaultPrimary", - "jobid": "7cc3faa4-73c5-45cb-a982-683a13023827", - "jobstatus": 0 - } - }, - "jobinstancetype": "StoragePool", - "jobinstanceid": "44ad900d-785b-3eff-addc-a5e6bf4927ef", - "created": "2021-10-04T08:06:55+0000", - "completed": "2021-10-04T08:06:55+0000", - "jobid": "7cc3faa4-73c5-45cb-a982-683a13023827" - } - }`, + apiName := "cancelStorageMaintenance" + response, err := ParseAsyncResponse(apiName, "StoragePoolService", *r) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[r.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -91,54 +49,12 @@ func TestStoragePoolService_CancelStorageMaintenance(t *testing.T) { } func TestStoragePoolService_EnableStorageMaintenance(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - responses := map[string]string{ - "enableStorageMaintenance": `{ - "prepareprimarystorageformaintenanceresponse": { - "jobid": "3036df18-12ca-44a0-9c77-19fcf81dad75" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.storage.PreparePrimaryStorageForMaintenanceCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "storagepool": { - "id": "44ad900d-785b-3eff-addc-a5e6bf4927ef", - "zoneid": "753941b6-5239-4ab3-b2b3-7522d2a6d1ba", - "zonename": "DummySG", - "podid": "b52f7877-227e-4e3f-974b-2397a37d6e1c", - "podname": "SGAdvPod", - "name": "SGAdvPS", - "ipaddress": "10.1.1.3", - "path": "/export/testing/primary ", - "created": "2020-07-27T06:01:56+0000", - "type": "NetworkFilesystem", - "clusterid": "a7b4c0e1-8ba4-41ea-a2f4-490798ddd166", - "clustername": "SGAdvCluster", - "disksizetotal": 1099511627776, - "disksizeallocated": 100, - "state": "Maintenance", - "scope": "CLUSTER", - "overprovisionfactor": "2.0", - "provider": "DefaultPrimary", - "jobid": "3036df18-12ca-44a0-9c77-19fcf81dad75", - "jobstatus": 0 - } - }, - "jobinstancetype": "StoragePool", - "jobinstanceid": "44ad900d-785b-3eff-addc-a5e6bf4927ef", - "created": "2021-10-04T08:13:01+0000", - "completed": "2021-10-04T08:13:02+0000", - "jobid": "3036df18-12ca-44a0-9c77-19fcf81dad75" - } - }`, + apiName := "enableStorageMaintenance" + response, err := ParseAsyncResponse(apiName, "StoragePoolService", *r) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[r.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true) diff --git a/cloudstack/TemplateService_test.go b/cloudstack/TemplateService_test.go index e8d88fd..fa474a0 100644 --- a/cloudstack/TemplateService_test.go +++ b/cloudstack/TemplateService_test.go @@ -28,55 +28,12 @@ import ( func TestTemplateService_RegisterTemplate(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - response := `{ - "registertemplateresponse": { - "count": 1, - "template": [ - { - "id": "5ce8f0b1-a910-4631-a8de-1e332bf3a6b7", - "name": "testTemplate", - "displaytext": "testTemplate", - "ispublic": false, - "created": "2021-10-04T08:41:23+0000", - "isready": true, - "passwordenabled": false, - "format": "VHD", - "isfeatured": false, - "crossZones": false, - "ostypeid": "f3404cc6-c38c-11eb-848b-1e006800018c", - "ostypename": "Amazon Linux 3 (64 bit)", - "account": "admin", - "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", - "zonename": "shouldwork", - "status": "Download Complete", - "size": 5242880, - "physicalsize": 5242880, - "templatetype": "USER", - "hypervisor": "Simulator", - "domain": "ROOT", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "isextractable": false, - "details": {}, - "downloaddetails": [ - { - "downloadState": "DOWNLOADED", - "datastore": "secon", - "downloadPercent": "100" - } - ], - "bits": 0, - "sshkeyenabled": false, - "isdynamicallyscalable": false, - "directdownload": false, - "deployasis": false, - "requireshvm": true, - "url": "http://dl.openvm.eu/cloudstack/macchinina/x86_64/macchinina-xen.vhd.bz2", - "tags": [] - } - ] - } - }` - fmt.Fprintf(writer, response) + apiName := "registerTemplate" + response, err := ReadData(apiName, "TemplateService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -95,72 +52,12 @@ func TestTemplateService_RegisterTemplate(t *testing.T) { func TestTemplateService_CreateTemplate(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - responses := map[string]string{ - "createTemplate": `{ - "createtemplateresponse": { - "id": "b07dd9e4-1720-4122-b840-1e57a79e0dd9", - "jobid": "13cc57e2-f388-49d5-95f3-de5ba43835fb" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.template.CreateTemplateCmdByAdmin", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "template": { - "id": "b07dd9e4-1720-4122-b840-1e57a79e0dd9", - "name": "createTempFromVol", - "displaytext": "createTempFromVol", - "ispublic": false, - "created": "2021-10-04T08:45:37+0000", - "isready": true, - "passwordenabled": false, - "format": "RAW", - "isfeatured": false, - "crossZones": false, - "ostypeid": "e510f742-5fdf-11ea-9a56-1e006800018c", - "ostypename": "Other (64-bit)", - "account": "admin", - "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", - "zonename": "shouldwork", - "status": "Download Complete", - "size": 21474836480, - "templatetype": "USER", - "hypervisor": "Simulator", - "domain": "ROOT", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "isextractable": false, - "details": {}, - "downloaddetails": [ - { - "downloadState": "DOWNLOADED", - "datastore": "secon", - "downloadPercent": "100" - } - ], - "bits": 0, - "sshkeyenabled": false, - "isdynamicallyscalable": false, - "directdownload": false, - "deployasis": false, - "requireshvm": false, - "tags": [] - } - }, - "jobinstancetype": "Template", - "jobinstanceid": "b07dd9e4-1720-4122-b840-1e57a79e0dd9", - "created": "2021-10-04T08:45:37+0000", - "completed": "2021-10-04T08:45:37+0000", - "jobid": "13cc57e2-f388-49d5-95f3-de5ba43835fb" - } - }`, + apiName := "createTemplate" + response, err := ParseAsyncResponse(apiName, "TemplateService", *r) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[r.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -177,42 +74,12 @@ func TestTemplateService_CreateTemplate(t *testing.T) { func TestTemplateService_ExtractTemplate(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - responses := map[string]string{ - "extractTemplate": `{ - "extracttemplateresponse": { - "jobid": "d2c86fca-26ca-436e-b5cf-60754c598da3" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.user.template.ExtractTemplateCmd", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "template": { - "id": "5ce8f0b1-a910-4631-a8de-1e332bf3a6b7", - "name": "testTemplate", - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "state": "DOWNLOAD_URL_CREATED", - "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", - "zonename": "shouldwork", - "extractMode": "HTTP_DOWNLOAD", - "url": "http://172.17.1.11/userdata/a7a2ca0e-65c7-4b9e-bc61-3a4ab6adf6c0.vhd" - } - }, - "jobinstancetype": "Template", - "jobinstanceid": "5ce8f0b1-a910-4631-a8de-1e332bf3a6b7", - "created": "2021-10-04T08:50:45+0000", - "completed": "2021-10-04T08:50:46+0000", - "jobid": "d2c86fca-26ca-436e-b5cf-60754c598da3" - } - }`, + apiName := "extractTemplate" + response, err := ParseAsyncResponse(apiName, "TemplateService", *r) + if err != nil { + t.Errorf("Failed to parse response, due to: %v", err) } - fmt.Fprintf(writer, responses[r.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true) diff --git a/cloudstack/UserService_test.go b/cloudstack/UserService_test.go index 1dfbf30..919eab8 100644 --- a/cloudstack/UserService_test.go +++ b/cloudstack/UserService_test.go @@ -28,31 +28,12 @@ import ( func TestUserService_CreateUser(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "createuserresponse": { - "user": { - "id": "cd2b5afa-db4d-4532-88ec-1356a273e534", - "username": "dummyUser", - "firstname": "firstname", - "lastname": "lastname", - "email": "user@xyz.com", - "created": "2021-10-04T08:57:35+0000", - "state": "enabled", - "account": "admin", - "accounttype": 1, - "usersource": "native", - "roleid": "16919363-5fe0-11ea-9a56-1e006800018c", - "roletype": "Admin", - "rolename": "Root Admin", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "iscallerchilddomain": false, - "isdefault": false - } - } - }` - fmt.Fprintf(writer, response) + apiName := "createUser" + response, err := ReadData(apiName, "UserService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -70,31 +51,12 @@ func TestUserService_CreateUser(t *testing.T) { func TestUserService_EnableUser(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "enableuserresponse": { - "user": { - "account": "admin", - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "accounttype": 1, - "created": "2021-10-04T08:57:35+0000", - "domain": "ROOT", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "email": "user@xyz.com", - "firstname": "firstname", - "id": "cd2b5afa-db4d-4532-88ec-1356a273e534", - "iscallerchilddomain": false, - "isdefault": false, - "lastname": "lastname", - "roleid": "16919363-5fe0-11ea-9a56-1e006800018c", - "rolename": "Root Admin", - "roletype": "Admin", - "state": "enabled", - "username": "dummyUser", - "usersource": "native" - } - } - }` - fmt.Fprintf(writer, response) + apiName := "enableUser" + response, err := ReadData(apiName, "UserService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -112,50 +74,12 @@ func TestUserService_EnableUser(t *testing.T) { func TestUserService_DisableUser(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - responses := map[string]string{ - "disableUser": `{ - "disableResponse": { - "jobid": "e4eb553f-6188-441c-beb8-09056b0a1e1f" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.user.DisableUserCmd", - "completed": "2021-10-04T09:06:53+0000", - "created": "2021-10-04T09:06:52+0000", - "jobid": "e4eb553f-6188-441c-beb8-09056b0a1e1f", - "jobprocstatus": 0, - "jobresult": { - "user": { - "account": "admin", - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "accounttype": 1, - "created": "2021-10-04T08:57:35+0000", - "domain": "ROOT", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "email": "user@xyz.com", - "firstname": "firstname", - "id": "cd2b5afa-db4d-4532-88ec-1356a273e534", - "iscallerchilddomain": false, - "isdefault": false, - "lastname": "lastname", - "roleid": "16919363-5fe0-11ea-9a56-1e006800018c", - "rolename": "Root Admin", - "roletype": "Admin", - "state": "disabled", - "username": "dummyUser", - "usersource": "native" - } - }, - "jobresultcode": 0, - "jobresulttype": "object", - "jobstatus": 1, - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c" - } - }`, + apiName := "disableUser" + response, err := ParseAsyncResponse(apiName, "UserService", *request) + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) } - fmt.Fprintf(writer, responses[request.FormValue("command")]) + fmt.Fprintf(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -173,35 +97,12 @@ func TestUserService_DisableUser(t *testing.T) { func TestUserService_ListUser(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "listusersresponse": { - "count": 1, - "user": [ - { - "id": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "username": "admin", - "firstname": "admin", - "lastname": "cloud", - "created": "2020-03-06T20:24:53+0000", - "state": "enabled", - "account": "admin", - "accounttype": 1, - "usersource": "native", - "roleid": "16919363-5fe0-11ea-9a56-1e006800018c", - "roletype": "Admin", - "rolename": "Root Admin", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "timezone": "PST", - "apikey": "DN7uIwbqAMASSB1GUGHWvXqUlDDBf7H6A3XI-kNeXahW5LMUoqgfDEDWMv8zWKaj51fDozg8fjqc7tGCSozScA", - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "iscallerchilddomain": false, - "isdefault": true - } - ] - } - }` - fmt.Fprintf(writer, response) + apiName := "listUsers" + response, err := ReadData(apiName, "UserService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -220,32 +121,12 @@ func TestUserService_ListUser(t *testing.T) { func TestUserService_LockUser(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "lockuserresponse": { - "user": { - "account": "kittycat", - "accountid": "2841efe4-aba4-4abf-bfdc-c6d0825c29a6", - "accounttype": 0, - "created": "2020-06-26T18:21:57+0000", - "domain": "saml", - "domainid": "1d4a08f6-5c37-4385-9d95-fa4e654ecf4e", - "email": "cat@cat.com", - "firstname": "Ashley", - "id": "3b7325b3-849c-4314-ad19-dd3c483b6d1a", - "iscallerchilddomain": false, - "isdefault": false, - "lastname": "Cat", - "roleid": "1691ce2c-5fe0-11ea-9a56-1e006800018c", - "rolename": "User", - "roletype": "User", - "state": "locked", - "timezone": "IST", - "username": "ashley", - "usersource": "saml2disabled" - } - } - }` - fmt.Fprintln(writer, response) + apiName := "lockUser" + response, err := ReadData(apiName, "UserService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -263,12 +144,12 @@ func TestUserService_LockUser(t *testing.T) { func TestUserService_DeleteUser(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "deleteuserresponse": { - "success": true - } - }` - fmt.Fprintf(writer, response) + apiName := "deleteUser" + response, err := ReadData(apiName, "UserService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintf(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", true) diff --git a/cloudstack/VLANService_test.go b/cloudstack/VLANService_test.go index 569dcec..22ea41f 100644 --- a/cloudstack/VLANService_test.go +++ b/cloudstack/VLANService_test.go @@ -28,20 +28,12 @@ import ( func TestNetworkService_DedicateGuestVLANRange(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - response := `{ - "dedicateguestvlanrangeresponse": { - "dedicatedguestvlanrange": { - "id": "b1afc5fe-b17c-4db3-8411-c323e4997ead", - "account": "admin", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "guestvlanrange": "100-110", - "physicalnetworkid": 200, - "zoneid": 1 - } - } - }` - fmt.Fprintf(writer, response) + apiName := "dedicateGuestVlanRange" + response, err := ReadData(apiName, "VLANService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) + } + fmt.Fprintln(writer, response[apiName]) })) defer server.Close() client := NewClient(server.URL, "APIKEY", "SECRETKEY", false) diff --git a/cloudstack/VirtualMachineService_test.go b/cloudstack/VirtualMachineService_test.go index 6886715..1a68736 100644 --- a/cloudstack/VirtualMachineService_test.go +++ b/cloudstack/VirtualMachineService_test.go @@ -28,94 +28,12 @@ import ( func TestVirtualMachineService_DeployVirtualMachine(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - responses := map[string]string{ - "deployVirtualMachine": `{ - "deployvirtualmachineresponse": { - "id": "915653c4-298b-4d74-bdee-4ced282114f1", - "jobid": "74bbb422-fb74-47ac-a22a-ad86a7831d3f" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.vm.DeployVMCmdByAdmin", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "virtualmachine": { - "id": "915653c4-298b-4d74-bdee-4ced282114f1", - "name": "testDummyVM", - "displayname": "testDummyVM", - "account": "admin", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "username": "admin", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "created": "2021-10-04T09:24:38+0000", - "state": "Running", - "haenable": false, - "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", - "zonename": "shouldwork", - "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", - "hostname": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf", - "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c", - "templatename": "CentOS 5.6 (64-bit)", - "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI", - "passwordenabled": false, - "serviceofferingid": "498ce071-a077-4237-9492-e55c42553327", - "serviceofferingname": "Very small instance", - "cpunumber": 1, - "cpuspeed": 100, - "memory": 256, - "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c", - "rootdeviceid": 0, - "rootdevicetype": "ROOT", - "securitygroup": [], - "nic": [ - { - "id": "47d79da1-2fe1-4a44-a503-523055714a72", - "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8", - "networkname": "test", - "netmask": "255.255.255.0", - "gateway": "10.1.1.1", - "ipaddress": "10.1.1.62", - "isolationuri": "vlan://1850", - "broadcasturi": "vlan://1850", - "traffictype": "Guest", - "type": "Isolated", - "isdefault": true, - "macaddress": "02:00:34:fb:00:01", - "secondaryip": [], - "extradhcpoption": [] - } - ], - "hypervisor": "Simulator", - "instancename": "i-2-683-QA", - "details": {}, - "affinitygroup": [], - "displayvm": true, - "isdynamicallyscalable": false, - "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c", - "osdisplayname": "CentOS 5.6 (64-bit)", - "bootmode": "legacy", - "boottype": "Bios", - "tags": [], - "jobid": "74bbb422-fb74-47ac-a22a-ad86a7831d3f", - "jobstatus": 0 - } - }, - "jobinstancetype": "VirtualMachine", - "jobinstanceid": "915653c4-298b-4d74-bdee-4ced282114f1", - "created": "2021-10-04T09:24:38+0000", - "completed": "2021-10-04T09:24:42+0000", - "jobid": "74bbb422-fb74-47ac-a22a-ad86a7831d3f" - } - }`, + apiName := "deployVirtualMachine" + response, err := ParseAsyncResponse(apiName, "VirtualMachineService", *r) + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) } - fmt.Fprintf(writer, responses[r.FormValue("command")]) + fmt.Fprintf(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -136,94 +54,12 @@ func TestVirtualMachineService_DeployVirtualMachine(t *testing.T) { func TestVirtualMachineService_AddNicToVirtualMachine(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - responses := map[string]string{ - "addNicToVirtualMachine": `{ - "addnictovirtualmachineresponse": { - "jobid": "ec9d4711-b334-4750-868b-fb4d79d5801c" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.vm.AddNicToVMCmdByAdmin", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "virtualmachine": { - "id": "915653c4-298b-4d74-bdee-4ced282114f1", - "name": "testDummyVM", - "displayname": "testDummyVM", - "account": "admin", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "username": "admin", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "created": "2021-10-04T09:24:38+0000", - "state": "Running", - "haenable": false, - "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", - "zonename": "shouldwork", - "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", - "hostname": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf", - "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c", - "securitygroup": [], - "nic": [ - { - "id": "0921d201-f7ac-4f49-bf09-ffe9497fdab0", - "networkid": "30358053-0f9d-4112-9948-976477896db6", - "networkname": "test-network-2", - "netmask": "255.255.255.0", - "gateway": "10.1.2.1", - "ipaddress": "10.1.2.102", - "isolationuri": "vlan://1955", - "broadcasturi": "vlan://1955", - "traffictype": "Guest", - "type": "Isolated", - "isdefault": false, - "macaddress": "02:00:13:a4:00:21", - "secondaryip": [], - "extradhcpoption": [] - }, - { - "id": "47d79da1-2fe1-4a44-a503-523055714a72", - "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8", - "networkname": "test", - "netmask": "255.255.255.0", - "gateway": "10.1.1.1", - "ipaddress": "10.1.1.62", - "isolationuri": "vlan://1850", - "broadcasturi": "vlan://1850", - "traffictype": "Guest", - "type": "Isolated", - "isdefault": true, - "macaddress": "02:00:34:fb:00:01", - "secondaryip": [], - "extradhcpoption": [] - } - ], - "hypervisor": "Simulator", - "instancename": "i-2-683-QA", - "details": {}, - "affinitygroup": [], - "displayvm": true, - "isdynamicallyscalable": false, - "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c", - "osdisplayname": "CentOS 5.6 (64-bit)", - "bootmode": "legacy", - "boottype": "Bios", - "tags": [] - } - }, - "created": "2021-10-04T09:29:51+0000", - "completed": "2021-10-04T09:29:54+0000", - "jobid": "ec9d4711-b334-4750-868b-fb4d79d5801c" - } - }`, + apiName := "addNicToVirtualMachine" + response, err := ParseAsyncResponse(apiName, "VirtualMachineService", *r) + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) } - fmt.Fprintf(writer, responses[r.FormValue("command")]) + fmt.Fprintf(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -242,99 +78,12 @@ func TestVirtualMachineService_AddNicToVirtualMachine(t *testing.T) { func TestVirtualMachineService_StopVirtualMachine(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - responses := map[string]string{ - "stopVirtualMachine": `{ - "stopvirtualmachineresponse": { - "jobid": "604bc5ed-1b7e-4d63-abc8-a55077a4c2c1" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.vm.StopVMCmdByAdmin", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "virtualmachine": { - "id": "915653c4-298b-4d74-bdee-4ced282114f1", - "name": "testDummyVM", - "displayname": "testDummyVM", - "account": "admin", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "username": "admin", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "created": "2021-10-04T09:24:38+0000", - "state": "Stopped", - "haenable": false, - "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", - "zonename": "shouldwork", - "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c", - "templatename": "CentOS 5.6 (64-bit)", - "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI", - "passwordenabled": false, - "serviceofferingid": "498ce071-a077-4237-9492-e55c42553327", - "serviceofferingname": "Very small instance", - "cpunumber": 1, - "cpuspeed": 100, - "memory": 256, - "cpuused": "10%", - "networkkbsread": 917504, - "networkkbswrite": 458752, - "diskkbsread": 0, - "diskkbswrite": 0, - "memorykbs": 0, - "memoryintfreekbs": 0, - "memorytargetkbs": 0, - "diskioread": 0, - "diskiowrite": 0, - "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c", - "rootdeviceid": 0, - "rootdevicetype": "ROOT", - "securitygroup": [], - "nic": [ - { - "id": "47d79da1-2fe1-4a44-a503-523055714a72", - "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8", - "networkname": "test", - "netmask": "255.255.255.0", - "gateway": "10.1.1.1", - "ipaddress": "10.1.1.62", - "traffictype": "Guest", - "type": "Isolated", - "isdefault": true, - "macaddress": "02:00:34:fb:00:01", - "secondaryip": [], - "extradhcpoption": [] - } - ], - "hypervisor": "Simulator", - "instancename": "i-2-683-QA", - "details": { - "Message.ReservedCapacityFreed.Flag": "false" - }, - "affinitygroup": [], - "displayvm": true, - "isdynamicallyscalable": false, - "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c", - "osdisplayname": "CentOS 5.6 (64-bit)", - "tags": [], - "jobid": "604bc5ed-1b7e-4d63-abc8-a55077a4c2c1", - "jobstatus": 0 - } - }, - "jobinstancetype": "VirtualMachine", - "jobinstanceid": "915653c4-298b-4d74-bdee-4ced282114f1", - "created": "2021-10-04T09:53:06+0000", - "completed": "2021-10-04T09:53:08+0000", - "jobid": "604bc5ed-1b7e-4d63-abc8-a55077a4c2c1" - } - }`, + apiName := "stopVirtualMachine" + response, err := ParseAsyncResponse(apiName, "VirtualMachineService", *r) + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) } - fmt.Fprintln(writer, responses[r.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -352,103 +101,12 @@ func TestVirtualMachineService_StopVirtualMachine(t *testing.T) { func TestVirtualMachineService_StartVirtualMachine(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - responses := map[string]string{ - "startVirtualMachine": `{ - "startvirtualmachineresponse": { - "jobid": "468d69d7-f327-4105-bec2-0e43107ae956" - } - }`, - "queryAsyncJobResult": `{ - "queryasyncjobresultresponse": { - "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "cmd": "org.apache.cloudstack.api.command.admin.vm.StartVMCmdByAdmin", - "jobstatus": 1, - "jobprocstatus": 0, - "jobresultcode": 0, - "jobresulttype": "object", - "jobresult": { - "virtualmachine": { - "id": "915653c4-298b-4d74-bdee-4ced282114f1", - "name": "testDummyVM", - "displayname": "testDummyVM", - "account": "admin", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "username": "admin", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "domain": "ROOT", - "created": "2021-10-04T09:24:38+0000", - "state": "Running", - "haenable": false, - "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", - "zonename": "shouldwork", - "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", - "hostname": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf", - "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c", - "templatename": "CentOS 5.6 (64-bit)", - "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI", - "passwordenabled": false, - "serviceofferingid": "498ce071-a077-4237-9492-e55c42553327", - "serviceofferingname": "Very small instance", - "cpunumber": 1, - "cpuspeed": 100, - "memory": 256, - "cpuused": "10%", - "networkkbsread": 917504, - "networkkbswrite": 458752, - "diskkbsread": 0, - "diskkbswrite": 0, - "memorykbs": 0, - "memoryintfreekbs": 0, - "memorytargetkbs": 0, - "diskioread": 0, - "diskiowrite": 0, - "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c", - "rootdeviceid": 0, - "rootdevicetype": "ROOT", - "securitygroup": [], - "nic": [ - { - "id": "47d79da1-2fe1-4a44-a503-523055714a72", - "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8", - "networkname": "test", - "netmask": "255.255.255.0", - "gateway": "10.1.1.1", - "ipaddress": "10.1.1.62", - "isolationuri": "vlan://1994", - "broadcasturi": "vlan://1994", - "traffictype": "Guest", - "type": "Isolated", - "isdefault": true, - "macaddress": "02:00:34:fb:00:01", - "secondaryip": [], - "extradhcpoption": [] - } - ], - "hypervisor": "Simulator", - "instancename": "i-2-683-QA", - "details": { - "Message.ReservedCapacityFreed.Flag": "false" - }, - "affinitygroup": [], - "displayvm": true, - "isdynamicallyscalable": false, - "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c", - "osdisplayname": "CentOS 5.6 (64-bit)", - "tags": [], - "jobid": "468d69d7-f327-4105-bec2-0e43107ae956", - "jobstatus": 0 - } - }, - "jobinstancetype": "VirtualMachine", - "jobinstanceid": "915653c4-298b-4d74-bdee-4ced282114f1", - "created": "2021-10-04T09:57:19+0000", - "completed": "2021-10-04T09:57:22+0000", - "jobid": "468d69d7-f327-4105-bec2-0e43107ae956" - } - }`, + apiName := "startVirtualMachine" + response, err := ParseAsyncResponse(apiName, "VirtualMachineService", *r) + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) } - fmt.Fprintln(writer, responses[r.FormValue("command")]) + fmt.Fprintln(writer, response) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true) @@ -466,83 +124,12 @@ func TestVirtualMachineService_StartVirtualMachine(t *testing.T) { func TestVirtualMachineService_ListVirtualMachines(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) { - response := `{ - "listVirtualMachines": { - "count": 1, - "virtualmachine": [ - { - "account": "admin", - "affinitygroup": [], - "cpunumber": 1, - "cpuspeed": 100, - "cpuused": "10%", - "created": "2021-10-04T09:24:38+0000", - "details": { - "Message.ReservedCapacityFreed.Flag": "false" - }, - "diskioread": 0, - "diskiowrite": 0, - "diskkbsread": 0, - "diskkbswrite": 0, - "displayname": "testDummyVM", - "displayvm": true, - "domain": "ROOT", - "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", - "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c", - "haenable": false, - "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", - "hostname": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf", - "hypervisor": "Simulator", - "id": "915653c4-298b-4d74-bdee-4ced282114f1", - "instancename": "i-2-683-QA", - "isdynamicallyscalable": false, - "memory": 256, - "memoryintfreekbs": 0, - "memorykbs": 0, - "memorytargetkbs": 0, - "name": "testDummyVM", - "networkkbsread": 1015808, - "networkkbswrite": 507904, - "nic": [ - { - "broadcasturi": "vlan://1994", - "extradhcpoption": [], - "gateway": "10.1.1.1", - "id": "47d79da1-2fe1-4a44-a503-523055714a72", - "ipaddress": "10.1.1.62", - "isdefault": true, - "isolationuri": "vlan://1994", - "macaddress": "02:00:34:fb:00:01", - "netmask": "255.255.255.0", - "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8", - "networkname": "test", - "secondaryip": [], - "traffictype": "Guest", - "type": "Isolated" - } - ], - "osdisplayname": "CentOS 5.6 (64-bit)", - "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c", - "passwordenabled": false, - "rootdeviceid": 0, - "rootdevicetype": "ROOT", - "securitygroup": [], - "serviceofferingid": "498ce071-a077-4237-9492-e55c42553327", - "serviceofferingname": "Very small instance", - "state": "Running", - "tags": [], - "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI", - "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c", - "templatename": "CentOS 5.6 (64-bit)", - "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", - "username": "admin", - "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", - "zonename": "shouldwork" - } - ] + apiName := "listVirtualMachines" + response, err := ReadData(apiName, "VirtualMachineService") + if err != nil { + t.Errorf("Failed to read response data due to: %v", err) } - }` - fmt.Fprintln(writer, response) + fmt.Fprintln(writer, response[apiName]) })) defer server.Close() client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true) diff --git a/cloudstack/cloudstack_test.go b/cloudstack/cloudstack_test.go index c6301f9..c32dc8f 100644 --- a/cloudstack/cloudstack_test.go +++ b/cloudstack/cloudstack_test.go @@ -20,6 +20,10 @@ package cloudstack import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" "testing" ) @@ -29,6 +33,46 @@ var ( CS_SECRET_KEY = "valid-secret-key" ) +func ReadData(apiName string, testDataFile string) (map[string]string, error) { + var data interface{} + apis, err := ioutil.ReadFile("testdata/" + testDataFile + "Data.json") + if err != nil { + return nil, err + } + + if err := json.Unmarshal([]byte(apis), &data); err != nil { + return nil, err + } + + jsonBytes, err := json.Marshal(data.(map[string]interface{})[apiName]) + + if err != nil { + // fmt.Println(err) + return nil, err + } + response := make(map[string]string) + response[apiName] = string(jsonBytes) + + return response, nil +} + +func ParseAsyncResponse(apiName string, filename string, r http.Request) (string, error) { + response, err := ReadData(apiName, filename) + if err != nil { + fmt.Printf("Failed to read response data, due to: %v", err) + return "", err + } + jsonStr := response[apiName] + responses := make(map[string]interface{}) + err = json.Unmarshal([]byte(jsonStr), &responses) + if err != nil { + fmt.Printf("Failed to parse the response, due to: %v", err) + return "", err + } + s, _ := json.Marshal(responses[r.FormValue("command")]) + return string(s), nil +} + func TestCreateAsyncClient(t *testing.T) { client := NewAsyncClient(CS_API_URL, CS_API_KEY, CS_SECRET_KEY, true) diff --git a/cloudstack/testdata/AccountServiceData.json b/cloudstack/testdata/AccountServiceData.json new file mode 100644 index 0000000..a673dc6 --- /dev/null +++ b/cloudstack/testdata/AccountServiceData.json @@ -0,0 +1,154 @@ +{ + "listAccountsResponse": { + "listaccountsresponse": { + "account": [ + { + "accountdetails": { + "key0": "value0", + "key1": "value1" + }, + "accounttype": 1, + "cpuavailable": "Unlimited", + "cpulimit": "Unlimited", + "cputotal": 1, + "domain": "ROOT", + "domainid": "62f5fe2e-5f5a-11e5-bc86-0242ac11180a", + "groups": [], + "id": "62f61a73-5f5a-11e5-bc86-0242ac11180a", + "ipavailable": "Unlimited", + "iplimit": "Unlimited", + "iptotal": 1, + "isdefault": true, + "memoryavailable": "Unlimited", + "memorylimit": "Unlimited", + "memorytotal": 512, + "name": "admin", + "networkavailable": "Unlimited", + "networklimit": "Unlimited", + "networktotal": 1, + "primarystorageavailable": "Unlimited", + "primarystoragelimit": "Unlimited", + "primarystoragetotal": 2, + "projectavailable": "Unlimited", + "projectlimit": "Unlimited", + "projecttotal": 1, + "receivedbytes": 100, + "secondarystorageavailable": "Unlimited", + "secondarystoragelimit": "Unlimited", + "secondarystoragetotal": 0, + "sentbytes": 100, + "snapshotavailable": "Unlimited", + "snapshotlimit": "Unlimited", + "snapshottotal": 0, + "state": "enabled", + "templateavailable": "Unlimited", + "templatelimit": "Unlimited", + "templatetotal": 0, + "user": [ + { + "account": "admin", + "accountid": "62f61a73-5f5a-11e5-bc86-0242ac11180a", + "accounttype": 1, + "apikey": "BFCyYeY0HhhrvNWC7FBwHTlso52ow3XWZUzNuiv03jmJOQn-5UH5BTVRVheiBnaRfYFE9yOzjwiqkbahq9P-Rw", + "created": "2015-09-20T05:42:31+0000", + "domain": "ROOT", + "domainid": "62f5fe2e-5f5a-11e5-bc86-0242ac11180a", + "email": "admin@mailprovider.com", + "firstname": "Admin", + "id": "62f6394b-5f5a-11e5-bc86-0242ac11180a", + "iscallerchilddomain": false, + "isdefault": true, + "lastname": "User", + "secretkey": "Em1UPdKTYEDaUxPXKtpqy_1uYluHWU2ZHotPi-VnBi_-MOEUAANoFHg3ycDProluDzYAXmT3YRssk367ylr_4A", + "state": "enabled", + "username": "admin" + } + ], + "vmavailable": "Unlimited", + "vmlimit": "Unlimited", + "vmrunning": 1, + "vmtotal": 1, + "volumeavailable": "Unlimited", + "volumelimit": "Unlimited", + "volumetotal": 1, + "vpcavailable": "Unlimited", + "vpclimit": "Unlimited", + "vpctotal": 0 + } + ], + "count": 1 + } + }, + "createAccountsResponse": { + "createaccountresponse": { + "account": { + "accountdetails": { + "key0": "value0", + "key1": "value1" + }, + "accounttype": 2, + "cpuavailable": "40", + "cpulimit": "40", + "cputotal": 0, + "domain": "ROOT", + "domainid": "62f5fe2e-5f5a-11e5-bc86-0242ac11180a", + "groups": [], + "id": "c9cb9df8-dcd5-44c5-a40d-2e7d266669a6", + "ipavailable": "20", + "iplimit": "20", + "iptotal": 0, + "isdefault": false, + "memoryavailable": "40960", + "memorylimit": "40960", + "memorytotal": 0, + "name": "user01", + "networkavailable": "20", + "networklimit": "20", + "networktotal": 0, + "primarystorageavailable": "200", + "primarystoragelimit": "200", + "primarystoragetotal": 0, + "projectavailable": "Unlimited", + "projectlimit": "Unlimited", + "projecttotal": 0, + "secondarystorageavailable": "400", + "secondarystoragelimit": "400", + "secondarystoragetotal": 0, + "snapshotavailable": "20", + "snapshotlimit": "20", + "snapshottotal": 0, + "state": "enabled", + "templateavailable": "20", + "templatelimit": "20", + "templatetotal": 0, + "user": [ + { + "account": "user01", + "accountid": "c9cb9df8-dcd5-44c5-a40d-2e7d266669a6", + "accounttype": 2, + "created": "2016-07-26T02:17:17+0000", + "domain": "ROOT", + "domainid": "62f5fe2e-5f5a-11e5-bc86-0242ac11180a", + "email": "user01@example.com", + "firstname": "user01", + "id": "1d69ac45-a8f7-469c-ab24-d2b0382fa8be", + "iscallerchilddomain": false, + "isdefault": false, + "lastname": "user01", + "state": "enabled", + "username": "user01" + } + ], + "vmavailable": "20", + "vmlimit": "20", + "vmtotal": 0, + "volumeavailable": "20", + "volumelimit": "20", + "volumetotal": 0, + "vpcavailable": "20", + "vpclimit": "20", + "vpctotal": 0 + } + } + } +} diff --git a/cloudstack/testdata/AddressServiceData.json b/cloudstack/testdata/AddressServiceData.json new file mode 100644 index 0000000..5073dae --- /dev/null +++ b/cloudstack/testdata/AddressServiceData.json @@ -0,0 +1,80 @@ +{ + "associateIpAddress": { + "associateIpAddress": { + "associateipaddressresponse": { + "id": "dc51835f-b0e2-4a2e-91a4-6cccc44bdae3", + "jobid": "8e805516-1729-46cf-a7d0-7289d523871e" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.address.AssociateIPAddrCmdByAdmin", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "ipaddress": { + "id": "dc51835f-b0e2-4a2e-91a4-6cccc44bdae3", + "ipaddress": "10.70.3.100", + "allocated": "2021-10-01T16:25:11+0000", + "zoneid": "3fc049b0-87ae-4d77-90c1-cce70da17db6", + "zonename": "testAdvZone2", + "issourcenat": true, + "account": "admin", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "forvirtualnetwork": true, + "vlanid": "2e86e486-b472-4f12-a9b2-bb73701241e0", + "vlanname": "vlan://untagged", + "isstaticnat": false, + "issystem": false, + "associatednetworkid": "cf8056db-25e1-49d1-b023-f13a717e5ecc", + "associatednetworkname": "test-adv-network", + "networkid": "f17d38db-4810-437e-be28-d38cd30e3034", + "state": "Allocating", + "physicalnetworkid": "0d6c1e76-2d83-459a-bbce-c133fbd732b7", + "tags": [], + "isportable": false, + "fordisplay": true + } + }, + "jobinstancetype": "IpAddress", + "jobinstanceid": "dc51835f-b0e2-4a2e-91a4-6cccc44bdae3", + "created": "2021-10-01T16:25:12+0000", + "completed": "2021-10-01T16:25:12+0000", + "jobid": "8e805516-1729-46cf-a7d0-7289d523871e" + } + } + }, + "disassociateIpAddress": { + "disassociateIpAddress": { + "disassociateipaddressresponse": { + "jobid": "44fc961e-9d57-4313-9f11-7556508b319c" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.user.address.DisassociateIPAddrCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "success": true + }, + "jobinstancetype": "IpAddress", + "jobinstanceid": "a767fbe1-ed7a-4d7c-8221-c7d736ca622d", + "created": "2021-10-01T16:42:32+0000", + "completed": "2021-10-01T16:42:33+0000", + "jobid": "44fc961e-9d57-4313-9f11-7556508b319c" + } + } + } +} + + diff --git a/cloudstack/testdata/AffinityGroupServiceData.json b/cloudstack/testdata/AffinityGroupServiceData.json new file mode 100644 index 0000000..a398e22 --- /dev/null +++ b/cloudstack/testdata/AffinityGroupServiceData.json @@ -0,0 +1,36 @@ +{ + "createAffinityGroup": { + "createAffinityGroup": { + "createaffinitygroupresponse": { + "id": "5059d7e3-9213-448d-9314-6ae4e1d95a33", + "jobid": "58e969e8-768b-44d0-b278-fd1b2f236c00" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.user.affinitygroup.CreateAffinityGroupCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "affinitygroup": { + "id": "5059d7e3-9213-448d-9314-6ae4e1d95a33", + "name": "testAffinityGroup", + "description": "testAffinityGroup", + "account": "admin", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "type": "host affinity" + } + }, + "jobinstancetype": "AffinityGroup", + "created": "2021-10-01T16:59:04+0000", + "completed": "2021-10-01T16:59:04+0000", + "jobid": "58e969e8-768b-44d0-b278-fd1b2f236c00" + } + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/ApiDiscoveryServiceData.json b/cloudstack/testdata/ApiDiscoveryServiceData.json new file mode 100644 index 0000000..5b701f6 --- /dev/null +++ b/cloudstack/testdata/ApiDiscoveryServiceData.json @@ -0,0 +1,138 @@ +{ + "listApis": { + "listapisresponse": { + "api": [ + { + "description": "List registered keypairs", + "isasync": false, + "name": "listSSHKeyPairs", + "params": [ + { + "description": "", + "length": 255, + "name": "page", + "required": false, + "type": "integer" + }, + { + "description": "A key pair name to look for", + "length": 255, + "name": "name", + "required": false, + "type": "string" + }, + { + "description": "If set to false, list only resources belonging to the command's caller; if set to true - list resources that the caller is authorized to see. Default value is false", + "length": 255, + "name": "listall", + "required": false, + "type": "boolean" + }, + { + "description": "list objects by project", + "length": 255, + "name": "projectid", + "related": "activateProject", + "required": false, + "type": "uuid" + }, + { + "description": "list resources by account. Must be used with the domainId parameter.", + "length": 255, + "name": "account", + "required": false, + "type": "string" + }, + { + "description": "A public key fingerprint to look for", + "length": 255, + "name": "fingerprint", + "required": false, + "type": "string" + }, + { + "description": "List by keyword", + "length": 255, + "name": "keyword", + "required": false, + "type": "string" + }, + { + "description": "", + "length": 255, + "name": "pagesize", + "required": false, + "type": "integer" + }, + { + "description": "list only resources belonging to the domain specified", + "length": 255, + "name": "domainid", + "related": "listDomains", + "required": false, + "type": "uuid" + }, + { + "description": "defaults to false, but if true, lists all resources from the parent specified by the domainId till leaves.", + "length": 255, + "name": "isrecursive", + "required": false, + "type": "boolean" + } + ], + "related": "", + "response": [ + {}, + { + "description": "Name of the keypair", + "name": "name", + "type": "string" + }, + { + "description": "Fingerprint of the public key", + "name": "fingerprint", + "type": "string" + }, + { + "description": "the domain name of the keypair owner", + "name": "domain", + "type": "string" + }, + { + "description": "true if the entity/resource has annotations", + "name": "hasannotations", + "type": "boolean" + }, + { + "description": "the domain id of the keypair owner", + "name": "domainid", + "type": "string" + }, + { + "description": "the current status of the latest async job acting on this object", + "name": "jobstatus", + "type": "integer" + }, + { + "description": "the UUID of the latest async job acting on this object", + "name": "jobid", + "type": "string" + }, + { + "description": "the owner of the keypair", + "name": "account", + "type": "string" + }, + {}, + { + "description": "ID of the ssh keypair", + "name": "id", + "type": "string" + } + ] + } + ], + "count": 1 + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/AsyncJobServiceData.json b/cloudstack/testdata/AsyncJobServiceData.json new file mode 100644 index 0000000..9d928c2 --- /dev/null +++ b/cloudstack/testdata/AsyncJobServiceData.json @@ -0,0 +1,17 @@ +{ + "listAsyncJobs": { + "listasyncjobsresponse": { + "asyncjobs": [ + { + "accountid": "bc1b465f-1d18-11ec-9173-50eb7122da94", + "created": "2021-09-29T17:50:11+0530", + "jobid": "6679e6b9-4bf2-4d83-b9f0-235fc1609227", + "jobprocstatus": 0, + "jobresultcode": 0, + "userid": "bc1b60db-1d18-11ec-9173-50eb7122da94" + } + ], + "count": 1 + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/AuthenticationServiceData.json b/cloudstack/testdata/AuthenticationServiceData.json new file mode 100644 index 0000000..fba17b5 --- /dev/null +++ b/cloudstack/testdata/AuthenticationServiceData.json @@ -0,0 +1,23 @@ +{ + "login": { + "loginresponse": { + "username": "admin", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "timeout": 3600, + "account": "admin", + "firstname": "admin", + "lastname": "cloud", + "type": "1", + "timezone": "PST", + "timezoneoffset": "-7.0", + "registered": "false", + "sessionkey": "umn5ciBuEdorc784g4pJr-U5POM" + } + }, + "logout": { + "logoutresponse": { + "description": "success" + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/CertificateServiceData.json b/cloudstack/testdata/CertificateServiceData.json new file mode 100644 index 0000000..df1ef3e --- /dev/null +++ b/cloudstack/testdata/CertificateServiceData.json @@ -0,0 +1,28 @@ +{ + "uploadCustomCertificate": { + "uploadCustomCertificate": { + "uploadcustomcertificateresponse": { + "jobid": "bb14e24d-af95-4d9d-8ead-e4f42ccd83f7" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "3bcbd8be-19eb-11ec-83a0-1e00bd000159", + "userid": "3bcd30ee-19eb-11ec-83a0-1e00bd000159", + "cmd": "org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "customcertificate": { + "message": "Certificate has been successfully updated, if its the server certificate we would reboot all running console proxy VMs and secondary storage VMs to propagate the new certificate, please give a few minutes for console access and storage services service to be up and working again" + } + }, + "created": "2021-10-02T07:43:59+0000", + "completed": "2021-10-02T07:43:59+0000", + "jobid": "bb14e24d-af95-4d9d-8ead-e4f42ccd83f7" + } + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/ClusterServiceData.json b/cloudstack/testdata/ClusterServiceData.json new file mode 100644 index 0000000..70b6e2a --- /dev/null +++ b/cloudstack/testdata/ClusterServiceData.json @@ -0,0 +1,257 @@ +{ + "listClusters": { + "listclustersresponse": { + "cluster": [ + { + "allocationstate": "Enabled", + "clustertype": "CloudManaged", + "cpuovercommitratio": "1.0", + "hypervisortype": "Simulator", + "id": "38f93102-4f87-49ab-bafa-854bdf31cfe6", + "managedstate": "Managed", + "memoryovercommitratio": "1.0", + "name": "SimCluster0", + "podid": "6137ef6f-753f-4e7b-a728-8d46a92358d2", + "podname": "POD0", + "resourcedetails": { + "cluster.cpu.allocated.capacity.disablethreshold": "0.85", + "cluster.cpu.allocated.capacity.notificationthreshold": "0.01", + "cluster.memory.allocated.capacity.disablethreshold": "0.02", + "cluster.memory.allocated.capacity.notificationthreshold": "0.01", + "cluster.storage.allocated.capacity.notificationthreshold": "0.01", + "cluster.storage.capacity.notificationthreshold": "0.01", + "cpuOvercommitRatio": "1.0", + "memoryOvercommitRatio": "1.0", + "outOfBandManagementEnabled": "true", + "resourceHAEnabled": "true" + }, + "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81", + "zonename": "SimZone1" + }, + { + "allocationstate": "Enabled", + "clustertype": "CloudManaged", + "cpuovercommitratio": "1.0", + "hypervisortype": "Simulator", + "id": "388a9023-f0a9-43f1-a962-b8689e0fca09", + "managedstate": "Unmanaged", + "memoryovercommitratio": "1.0", + "name": "SimCluster1", + "podid": "6137ef6f-753f-4e7b-a728-8d46a92358d2", + "podname": "POD0", + "resourcedetails": { + "cpuOvercommitRatio": "1.0", + "memoryOvercommitRatio": "1.0" + }, + "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81", + "zonename": "SimZone1" + }, + { + "allocationstate": "Enabled", + "clustertype": "CloudManaged", + "cpuovercommitratio": "1.0", + "hypervisortype": "KVM", + "id": "f1f5a259-1b55-431d-ad7e-6d39c28f1b15", + "managedstate": "Managed", + "memoryovercommitratio": "1.0", + "name": "TestCluster", + "podid": "6137ef6f-753f-4e7b-a728-8d46a92358d2", + "podname": "POD0", + "resourcedetails": { + "cpuOvercommitRatio": "1.0", + "memoryOvercommitRatio": "1.0" + }, + "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81", + "zonename": "SimZone1" + } + ], + "count": 3 + } + }, + "disableHAForCluster": { + "disableHAForCluster": { + "disablehaforclusterresponse": { + "jobid": "c0591985-d022-4a2d-b5b5-1ac209849f66" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.ha.DisableHAForClusterCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "success": true + }, + "created": "2021-10-02T08:59:13+0000", + "completed": "2021-10-02T08:59:13+0000", + "jobid": "c0591985-d022-4a2d-b5b5-1ac209849f66" + } + } + }, + "enableHAForCluster": { + "enableHAForCluster": { + "enablehaforclusterresponse": { + "jobid": "875ead2d-7b78-4bb0-83f5-c40a2a944dde" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.ha.EnableHAForClusterCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "success": true + }, + "created": "2021-10-02T09:05:15+0000", + "completed": "2021-10-02T09:05:15+0000", + "jobid": "875ead2d-7b78-4bb0-83f5-c40a2a944dde" + } + } + }, + "disableOutOfBandManagementForCluster": { + "disableOutOfBandManagementForCluster": { + "disableoutofbandmanagementforclusterresponse": { + "jobid": "067b171f-ca63-4d41-bb87-461589e20223" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.outofbandmanagement.DisableOutOfBandManagementForClusterCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "outofbandmanagement": { + "enabled": false, + "status": true + } + }, + "created": "2021-10-02T09:09:04+0000", + "completed": "2021-10-02T09:09:04+0000", + "jobid": "067b171f-ca63-4d41-bb87-461589e20223" + } + } + }, + "enableOutOfBandManagementForCluster": { + "enableOutOfBandManagementForCluster": { + "enableoutofbandmanagementforclusterresponse": { + "jobid": "16f517a5-247b-4f96-aba4-0e876e1e9720" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.outofbandmanagement.EnableOutOfBandManagementForClusterCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "outofbandmanagement": { + "enabled": true, + "status": true + } + }, + "created": "2021-10-02T09:14:30+0000", + "completed": "2021-10-02T09:14:30+0000", + "jobid": "16f517a5-247b-4f96-aba4-0e876e1e9720" + } + } + }, + "dedicateCluster": { + "dedicateCluster": { + "dedicateclusterresponse": { + "jobid": "64e777d8-9c72-4639-aa75-057971ecd289" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.commands.DedicateClusterCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "dedicatedcluster": { + "id": "60a97ad1-702b-40dd-9ca5-a67954a28fbd", + "clusterid": "f1f5a259-1b55-431d-ad7e-6d39c28f1b15", + "clustername": "TestCluster", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "affinitygroupid": "a8725454-1680-4517-85ce-6f8ec08300fb" + } + }, + "created": "2021-10-02T09:16:25+0000", + "completed": "2021-10-02T09:16:25+0000", + "jobid": "64e777d8-9c72-4639-aa75-057971ecd289" + } + } + }, + "releaseDedicatedCluster": { + "releaseDedicatedCluster": { + "releasededicatedclusterresponse": { + "jobid": "e7cb7eb7-b77d-4568-9bcf-11bb5fd78938" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.commands.ReleaseDedicatedClusterCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "success": true + }, + "created": "2021-10-02T14:40:30+0000", + "completed": "2021-10-02T14:40:30+0000", + "jobid": "e7cb7eb7-b77d-4568-9bcf-11bb5fd78938" + } + } + }, + "updateCluster": { + "updateclusterresponse": { + "cluster": { + "id": "f1f5a259-1b55-431d-ad7e-6d39c28f1b15", + "name": "TestClusterUpdated", + "podid": "6137ef6f-753f-4e7b-a728-8d46a92358d2", + "podname": "POD0", + "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81", + "zonename": "SimZone1", + "hypervisortype": "KVM", + "clustertype": "CloudManaged", + "allocationstate": "Enabled", + "managedstate": "Managed", + "cpuovercommitratio": "1.0", + "memoryovercommitratio": "1.0", + "resourcedetails": { + "cpuOvercommitRatio": "1.0", + "resourceHAEnabled": "true", + "memoryOvercommitRatio": "1.0", + "outOfBandManagementEnabled": "true" + } + } + } + }, + "deleteCluster": { + "deleteclusterresponse": { + "success": true + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/ConfigurationServiceData.json b/cloudstack/testdata/ConfigurationServiceData.json new file mode 100644 index 0000000..ef13dde --- /dev/null +++ b/cloudstack/testdata/ConfigurationServiceData.json @@ -0,0 +1,51 @@ +{ + "listCapabilities": { + "listcapabilitiesresponse": { + "capability": { + "securitygroupsenabled": true, + "dynamicrolesenabled": true, + "cloudstackversion": "4.15.2.0", + "userpublictemplateenabled": false, + "supportELB": "false", + "projectinviterequired": true, + "allowusercreateprojects": true, + "customdiskofferingminsize": 1, + "customdiskofferingmaxsize": 1024, + "regionsecondaryenabled": false, + "kvmsnapshotenabled": true, + "allowuserviewdestroyedvm": true, + "allowuserexpungerecovervm": true, + "allowuserexpungerecovervolume": true, + "allowuserviewalldomainaccounts": false, + "kubernetesserviceenabled": true, + "kubernetesclusterexperimentalfeaturesenabled": true, + "defaultuipagesize": 20 + } + } + }, + "listConfigurations": { + "listconfigurationsresponse": { + "configuration": [ + { + "category": "Project Defaults", + "description": "If regular user can create a project; true by default", + "isdynamic": false, + "name": "allow.user.create.projects", + "value": "true" + } + ], + "count": 1 + } + }, + "updateConfiguration": { + "updateconfigurationresponse": { + "configuration": { + "category": "Project Defaults", + "name": "allow.user.create.projects", + "value": "false", + "description": "If regular user can create a project; true by default", + "isdynamic": false + } + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/DiskOfferingServiceData.json b/cloudstack/testdata/DiskOfferingServiceData.json new file mode 100644 index 0000000..6ca8836 --- /dev/null +++ b/cloudstack/testdata/DiskOfferingServiceData.json @@ -0,0 +1,42 @@ +{ + "createDiskOffering": { + "creatediskofferingresponse": { + "diskoffering": { + "id": "7662b6ae-f00b-4268-973f-f3f87eaf82c5", + "name": "test", + "displaytext": "test", + "disksize": 0, + "created": "2021-10-02T15:19:25+0000", + "iscustomized": true, + "storagetype": "shared", + "provisioningtype": "thin", + "cacheMode": "none", + "displayoffering": true + } + } + }, + "listDiskOfferings": { + "listdiskofferingsresponse": { + "count": 1, + "diskoffering": [ + { + "id": "7662b6ae-f00b-4268-973f-f3f87eaf82c5", + "name": "test", + "displaytext": "test", + "disksize": 0, + "created": "2021-10-02T15:19:25+0000", + "iscustomized": true, + "storagetype": "shared", + "provisioningtype": "thin", + "cacheMode": "none", + "displayoffering": true + } + ] + } + }, + "deleteDiskOffering": { + "deletediskofferingresponse": { + "success": true + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/DomainServiceData.json b/cloudstack/testdata/DomainServiceData.json new file mode 100644 index 0000000..469964c --- /dev/null +++ b/cloudstack/testdata/DomainServiceData.json @@ -0,0 +1,124 @@ +{ + "createDomain": { + "createdomainresponse": { + "domain": { + "id": "1530cc8c-efe7-4dff-84c4-96a1e8a1cd7a", + "name": "testDomain", + "level": 1, + "parentdomainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "parentdomainname": "ROOT", + "haschild": false, + "path": "ROOT/testDomain", + "secondarystoragetotal": 0 + } + } + }, + "updateDomain": { + "updatedomainresponse": { + "domain": { + "id": "ee05fd92-7365-4421-a15b-abfa11dfc4f6", + "name": "testDomainUpdated", + "level": 1, + "parentdomainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "parentdomainname": "ROOT", + "haschild": false, + "path": "ROOT/testDomainUpdated", + "secondarystoragetotal": 0 + } + } + }, + "listDomains": { + "listdomainsresponse": { + "count": 1, + "domain": [ + { + "id": "097d3992-7a67-42e1-afb5-b4d2d81e280f", + "name": "DummyDomain", + "level": 1, + "parentdomainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "parentdomainname": "ROOT", + "haschild": false, + "path": "ROOT/DummyDomain", + "state": "Active", + "vmlimit": "Unlimited", + "vmtotal": 0, + "vmavailable": "Unlimited", + "iplimit": "Unlimited", + "iptotal": 0, + "ipavailable": "Unlimited", + "volumelimit": "Unlimited", + "volumetotal": 0, + "volumeavailable": "Unlimited", + "snapshotlimit": "Unlimited", + "snapshottotal": 0, + "snapshotavailable": "Unlimited", + "templatelimit": "Unlimited", + "templatetotal": 0, + "templateavailable": "Unlimited", + "projectlimit": "Unlimited", + "projecttotal": 0, + "projectavailable": "Unlimited", + "networklimit": "Unlimited", + "networktotal": 0, + "networkavailable": "Unlimited", + "vpclimit": "Unlimited", + "vpctotal": 0, + "vpcavailable": "Unlimited", + "cpulimit": "Unlimited", + "cputotal": 0, + "cpuavailable": "Unlimited", + "memorylimit": "Unlimited", + "memorytotal": 0, + "memoryavailable": "Unlimited", + "primarystoragelimit": "-1", + "primarystoragetotal": 0, + "primarystorageavailable": "-1", + "secondarystoragelimit": "-1", + "secondarystoragetotal": 0, + "secondarystorageavailable": "-1.0" + } + ] + } + }, + "listDomainChildren": { + "listdomainchildrenresponse": { + "count": 1, + "domain": [ + { + "id": "bfe3c14c-3a4a-4f85-b03c-308852967296", + "name": "subdomain", + "level": 2, + "parentdomainid": "99becf06-7f0f-4eb4-bdc3-44fecb8cb829", + "parentdomainname": "domain", + "haschild": false, + "path": "ROOT/domain/subdomain", + "secondarystoragetotal": 0 + } + ] + } + }, + "deleteDomain": { + "deleteDomain": { + "deletedomainresponse": { + "jobid": "318c77c0-8c42-42fb-8c23-363819c85dd3" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.domain.DeleteDomainCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "success": true + }, + "created": "2021-10-02T17:44:42+0000", + "completed": "2021-10-02T17:44:42+0000", + "jobid": "318c77c0-8c42-42fb-8c23-363819c85dd3" + } + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/FirewallServiceData.json b/cloudstack/testdata/FirewallServiceData.json new file mode 100644 index 0000000..6edf39b --- /dev/null +++ b/cloudstack/testdata/FirewallServiceData.json @@ -0,0 +1,123 @@ +{ + "createFirewallRule": { + "createFirewallRule": { + "createfirewallruleresponse": { + "id": "fb4ad2ee-02c8-433e-a769-6f18afddc750", + "jobid": "104d5139-91dc-40a1-af2b-a94730e42e89" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "bc1b501c-1d18-11ec-9173-50eb7122da94", + "userid": "bc1b6b47-1d18-11ec-9173-50eb7122da94", + "cmd": "org.apache.cloudstack.api.command.user.firewall.CreateFirewallRuleCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "firewallrule": { + "id": "fb4ad2ee-02c8-433e-a769-6f18afddc750", + "protocol": "tcp", + "ipaddressid": "a4aa35ef-34ad-4332-9247-378c83b8f927", + "networkid": "c4a3303c-376d-4d56-b336-1bd91cb130b6", + "ipaddress": "192.168.2.4", + "state": "Active", + "cidrlist": "0.0.0.0/0", + "tags": [], + "fordisplay": true + } + }, + "jobinstancetype": "FirewallRule", + "jobinstanceid": "fb4ad2ee-02c8-433e-a769-6f18afddc750", + "created": "2021-10-02T23:20:07+0530", + "completed": "2021-10-02T23:20:07+0530", + "jobid": "104d5139-91dc-40a1-af2b-a94730e42e89" + } + } + }, + "deleteFirewallRule": { + "deleteFirewallRule": { + "deletefirewallruleresponse": { + "jobid": "6ae96f78-1c28-45f9-a30b-761ac5f3a87b" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "bc1b501c-1d18-11ec-9173-50eb7122da94", + "userid": "bc1b6b47-1d18-11ec-9173-50eb7122da94", + "cmd": "org.apache.cloudstack.api.command.user.firewall.DeleteFirewallRuleCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "success": true + }, + "created": "2021-10-02T23:25:22+0530", + "completed": "2021-10-02T23:25:22+0530", + "jobid": "6ae96f78-1c28-45f9-a30b-761ac5f3a87b" + } + } + }, + "createEgressFirewallRule": { + "createEgressFirewallRule": { + "createegressfirewallruleresponse": { + "id": "b7d8b539-8c72-4d25-8539-625f665681ad", + "jobid": "8841a004-eb50-4d4e-aed5-7bc2494dc856" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "bc1b501c-1d18-11ec-9173-50eb7122da94", + "userid": "bc1b6b47-1d18-11ec-9173-50eb7122da94", + "cmd": "org.apache.cloudstack.api.command.user.firewall.CreateEgressFirewallRuleCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "firewallrule": { + "id": "b7d8b539-8c72-4d25-8539-625f665681ad", + "protocol": "tcp", + "networkid": "c4a3303c-376d-4d56-b336-1bd91cb130b6", + "state": "Active", + "cidrlist": "10.1.1.0/24", + "tags": [], + "fordisplay": true, + "destcidrlist": "" + } + }, + "jobinstancetype": "FirewallRule", + "jobinstanceid": "b7d8b539-8c72-4d25-8539-625f665681ad", + "created": "2021-10-02T23:29:41+0530", + "completed": "2021-10-02T23:29:41+0530", + "jobid": "8841a004-eb50-4d4e-aed5-7bc2494dc856" + } + } + }, + "deleteEgressFirewallRule": { + "deleteEgressFirewallRule": { + "deleteegressfirewallruleresponse": { + "jobid": "91b10008-2e9f-412d-afa6-3c54a0bb19f5" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "bc1b501c-1d18-11ec-9173-50eb7122da94", + "userid": "bc1b6b47-1d18-11ec-9173-50eb7122da94", + "cmd": "org.apache.cloudstack.api.command.user.firewall.DeleteEgressFirewallRuleCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "success": true + }, + "created": "2021-10-02T23:32:08+0530", + "completed": "2021-10-02T23:32:08+0530", + "jobid": "91b10008-2e9f-412d-afa6-3c54a0bb19f5" + } + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/HostServiceData.json b/cloudstack/testdata/HostServiceData.json new file mode 100644 index 0000000..425d402 --- /dev/null +++ b/cloudstack/testdata/HostServiceData.json @@ -0,0 +1,359 @@ +{ + "addHost": { + "addhostresponse": { + "count": 1, + "host": [ + { + "capabilities": "hvm", + "clusterid": "2e4816cf-d8bf-4ef0-993a-05e42078c5a8", + "clustername": "C0", + "clustertype": "CloudManaged", + "cpuallocated": "0%", + "cpuallocatedpercentage": "0%", + "cpuallocatedvalue": 0, + "cpuallocatedwithoverprovisioning": "0%", + "cpunumber": 4, + "cpuspeed": 8000, + "cpuwithoverprovisioning": "32000", + "created": "2021-10-03T10:59:51+0530", + "events": "StartAgentRebalance; AgentConnected; ManagementServerDown; PingTimeout; ShutdownRequested; HostDown; AgentDisconnected; Ping; Remove", + "hahost": false, + "hasannotations": false, + "hostha": { + "haenable": false, + "hastate": "Disabled" + }, + "hypervisor": "Simulator", + "hypervisorversion": "4.16.0.0-SNAPSHOT", + "id": "d9960e4d-5da9-47be-af88-5cd19473b844", + "ipaddress": "172.16.15.5", + "islocalstorageactive": false, + "lastpinged": "1970-01-19T16:32:39+0530", + "managementserverid": "028003eb-4d1a-4d17-a2e3-0ec901c9ee5c", + "memoryallocated": 0, + "memoryallocatedbytes": 0, + "memoryallocatedpercentage": "0%", + "memorytotal": 8589934592, + "memorywithoverprovisioning": "8589934592", + "name": "SimulatedAgent.5417728f-9fc2-424c-89a6-00a7e0d2852f", + "outofbandmanagement": { + "enabled": false, + "powerstate": "Disabled" + }, + "podid": "5382edc2-e689-4074-bd67-0e1a236eb2bc", + "podname": "POD0", + "resourcestate": "Enabled", + "state": "Up", + "type": "Routing", + "version": "4.16.0.0-SNAPSHOT", + "zoneid": "d4a81f75-5d92-415e-ab59-e85cc2ce56d9", + "zonename": "Sandbox-simulator" + } + ] + } + }, + "listHosts": { + "listhostsresponse": { + "count": 1, + "host": [ + { + "capabilities": "hvm", + "clusterid": "2e4816cf-d8bf-4ef0-993a-05e42078c5a8", + "clustername": "C0", + "clustertype": "CloudManaged", + "cpuallocated": "0%", + "cpuallocatedpercentage": "0%", + "cpuallocatedvalue": 0, + "cpuallocatedwithoverprovisioning": "0%", + "cpunumber": 4, + "cpuspeed": 8000, + "cpuwithoverprovisioning": "32000", + "created": "2021-10-03T10:59:51+0530", + "events": "StartAgentRebalance; AgentConnected; ManagementServerDown; PingTimeout; ShutdownRequested; HostDown; AgentDisconnected; Ping; Remove", + "hahost": false, + "hasannotations": false, + "hostha": { + "haenable": false, + "hastate": "Disabled" + }, + "hypervisor": "Simulator", + "hypervisorversion": "4.16.0.0-SNAPSHOT", + "id": "d9960e4d-5da9-47be-af88-5cd19473b844", + "ipaddress": "172.16.15.5", + "islocalstorageactive": false, + "lastpinged": "1970-01-19T16:32:39+0530", + "managementserverid": "028003eb-4d1a-4d17-a2e3-0ec901c9ee5c", + "memoryallocated": 0, + "memoryallocatedbytes": 0, + "memoryallocatedpercentage": "0%", + "memorytotal": 8589934592, + "memorywithoverprovisioning": "8589934592", + "name": "SimulatedAgent.5417728f-9fc2-424c-89a6-00a7e0d2852f", + "outofbandmanagement": { + "enabled": false, + "powerstate": "Disabled" + }, + "podid": "5382edc2-e689-4074-bd67-0e1a236eb2bc", + "podname": "POD0", + "resourcestate": "Enabled", + "state": "Up", + "type": "Routing", + "version": "4.16.0.0-SNAPSHOT", + "zoneid": "d4a81f75-5d92-415e-ab59-e85cc2ce56d9", + "zonename": "Sandbox-simulator" + } + ] + } + }, + "prepareHostForMaintenance": { + "prepareHostForMaintenance": { + "preparehostformaintenanceresponse": { + "jobid": "0931656b-d30d-474b-aa79-13077d275400" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.host.PrepareForMaintenanceCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "host": { + "id": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", + "name": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf", + "state": "Up", + "disconnected": "2021-09-28T20:05:04+0000", + "type": "Routing", + "oscategoryid": "e4992bed-5fdf-11ea-9a56-1e006800018c", + "oscategoryname": "CentOS", + "ipaddress": "172.17.1.6", + "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", + "zonename": "shouldwork", + "podid": "647e68f7-5de7-459c-91fc-f36ccf6af9ad", + "podname": "poiuj", + "version": "4.14.0.0-SNAPSHOT", + "hypervisor": "Simulator", + "cpunumber": 4, + "cpuspeed": 8000, + "cpuallocated": "0%", + "cpuallocatedvalue": 0, + "cpuallocatedpercentage": "0%", + "cpuallocatedwithoverprovisioning": "0%", + "cpuused": "0%", + "cpuwithoverprovisioning": "32000", + "cpuloadaverage": 0, + "networkkbsread": 32768, + "networkkbswrite": 16384, + "memorytotal": 8589934592, + "memorywithoverprovisioning": "8589934592", + "memoryallocated": 0, + "memoryallocatedpercentage": "0%", + "memoryallocatedbytes": 0, + "memoryused": 0, + "capabilities": "hvm", + "lastpinged": "1970-01-19T10:58:33+0000", + "managementserverid": "18c349c6-ed36-4890-b670-4ef76e48485e", + "clusterid": "841bb416-2d65-4661-80cf-db708c8a1c4f", + "clustername": "lkjlkj", + "clustertype": "CloudManaged", + "islocalstorageactive": false, + "created": "2020-03-25T09:06:40+0000", + "events": "Ping; ShutdownRequested; PingTimeout; ManagementServerDown; AgentConnected; AgentDisconnected; Remove; StartAgentRebalance; HostDown", + "hosttags": "null", + "hostha": { + "haenable": true, + "hastate": "Disabled", + "haprovider": "simulatorhaprovider" + }, + "outofbandmanagement": { + "powerstate": "Disabled", + "enabled": false + }, + "resourcestate": "PrepareForMaintenance", + "hypervisorversion": "4.14.0.0-SNAPSHOT", + "hahost": false, + "jobid": "0931656b-d30d-474b-aa79-13077d275400", + "jobstatus": 0 + } + }, + "jobinstancetype": "Host", + "jobinstanceid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", + "created": "2021-10-03T06:52:21+0000", + "completed": "2021-10-03T06:52:21+0000", + "jobid": "0931656b-d30d-474b-aa79-13077d275400" + } + } + }, + "cancelHostForMaintenance": { + "cancelHostMaintenance": { + "cancelhostmaintenanceresponse": { + "jobid": "b40f561d-9d0d-4eae-a376-fbafdff966f1" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.host.CancelMaintenanceCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "host": { + "id": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", + "name": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf", + "state": "Up", + "disconnected": "2021-09-28T20:05:04+0000", + "type": "Routing", + "oscategoryid": "e4992bed-5fdf-11ea-9a56-1e006800018c", + "oscategoryname": "CentOS", + "ipaddress": "172.17.1.6", + "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", + "zonename": "shouldwork", + "podid": "647e68f7-5de7-459c-91fc-f36ccf6af9ad", + "podname": "poiuj", + "version": "4.14.0.0-SNAPSHOT", + "hypervisor": "Simulator", + "cpunumber": 4, + "cpuspeed": 8000, + "cpuallocated": "10.18%", + "cpuallocatedvalue": 3256, + "cpuallocatedpercentage": "10.18%", + "cpuallocatedwithoverprovisioning": "10.18%", + "cpuused": "0%", + "cpuwithoverprovisioning": "32000", + "cpuloadaverage": 0, + "networkkbsread": 32768, + "networkkbswrite": 16384, + "memorytotal": 8589934592, + "memorywithoverprovisioning": "8589934592", + "memoryallocated": 1610612736, + "memoryallocatedpercentage": "18.75%", + "memoryallocatedbytes": 1610612736, + "memoryused": 0, + "capabilities": "hvm", + "lastpinged": "1970-01-19T10:58:33+0000", + "managementserverid": "18c349c6-ed36-4890-b670-4ef76e48485e", + "clusterid": "841bb416-2d65-4661-80cf-db708c8a1c4f", + "clustername": "lkjlkj", + "clustertype": "CloudManaged", + "islocalstorageactive": false, + "created": "2020-03-25T09:06:40+0000", + "events": "Ping; ShutdownRequested; PingTimeout; ManagementServerDown; AgentConnected; AgentDisconnected; Remove; StartAgentRebalance; HostDown", + "hosttags": "null", + "hostha": { + "haenable": true, + "hastate": "Disabled", + "haprovider": "simulatorhaprovider" + }, + "outofbandmanagement": { + "powerstate": "Disabled", + "enabled": false + }, + "resourcestate": "Enabled", + "hypervisorversion": "4.14.0.0-SNAPSHOT", + "hahost": false, + "jobid": "b40f561d-9d0d-4eae-a376-fbafdff966f1", + "jobstatus": 0 + } + }, + "jobinstancetype": "Host", + "jobinstanceid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", + "created": "2021-10-03T06:57:12+0000", + "completed": "2021-10-03T06:57:12+0000", + "jobid": "b40f561d-9d0d-4eae-a376-fbafdff966f1" + } + } + }, + "enableOutOfBandManagementForHost": { + "enableOutOfBandManagementForHost": { + "enableoutofbandmanagementforhostresponse": { + "jobid": "049f5a42-343b-4156-9fb6-683f01433dca" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.outofbandmanagement.EnableOutOfBandManagementForHostCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "outofbandmanagement": { + "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", + "enabled": true, + "status": true + } + }, + "created": "2021-10-03T07:05:08+0000", + "completed": "2021-10-03T07:05:08+0000", + "jobid": "1c3022d1-c882-430c-ada7-ebf9d06d3e84" + } + } + }, + "disableOutOfBandManagementForHost": { + "disableOutOfBandManagementForHost": { + "disableoutofbandmanagementforhostresponse": { + "jobid": "a389b543-ce49-410f-8f9a-831be0480ee5" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.outofbandmanagement.DisableOutOfBandManagementForHostCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "outofbandmanagement": { + "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", + "enabled": false, + "status": true + } + }, + "created": "2021-10-03T07:06:25+0000", + "completed": "2021-10-03T07:06:25+0000", + "jobid": "a389b543-ce49-410f-8f9a-831be0480ee5" + } + } + }, + "enableHAForHost": { + "enableHAForHost": { + "enablehaforhostresponse": { + "jobid": "79da9d4b-6368-4ce5-9054-952295fc2c8a" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.ha.EnableHAForHostCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "hostha": { + "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", + "haenable": true, + "status": true + } + }, + "created": "2021-10-03T07:10:09+0000", + "completed": "2021-10-03T07:10:09+0000", + "jobid": "79da9d4b-6368-4ce5-9054-952295fc2c8a" + } + } + }, + "disableHAForHost": { + + } +} \ No newline at end of file diff --git a/cloudstack/testdata/HypervisorServiceData.json b/cloudstack/testdata/HypervisorServiceData.json new file mode 100644 index 0000000..0431dfc --- /dev/null +++ b/cloudstack/testdata/HypervisorServiceData.json @@ -0,0 +1,18 @@ +{ + "listHypervisorCapabilities": { + "listhypervisorcapabilitiesresponse": { + "count": 1, + "hypervisorCapabilities": [ + { + "id": "1", + "hypervisorversion": "default", + "hypervisor": "XenServer", + "maxguestslimit": 50, + "securitygroupenabled": true, + "maxdatavolumeslimit": 6, + "storagemotionenabled": false + } + ] + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/ISOServiceData.json b/cloudstack/testdata/ISOServiceData.json new file mode 100644 index 0000000..40c5a33 --- /dev/null +++ b/cloudstack/testdata/ISOServiceData.json @@ -0,0 +1,36 @@ +{ + "registerIso": { + "registerisoresponse": { + "count": 1, + "iso": [ + { + "id": "e6d86706-aa8c-444c-bf5c-ba677f8e02c2", + "name": "testIso", + "displaytext": "testIso", + "ispublic": false, + "created": "2021-10-03T07:28:41+0000", + "isready": true, + "passwordenabled": false, + "bootable": true, + "isfeatured": false, + "crossZones": false, + "ostypeid": "e510f742-5fdf-11ea-9a56-1e006800018c", + "ostypename": "Other (64-bit)", + "account": "admin", + "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", + "zonename": "shouldwork", + "status": "Successfully Installed", + "size": 5242880, + "domain": "ROOT", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "isextractable": false, + "bits": 64, + "isdynamicallyscalable": false, + "directdownload": false, + "url": "http://dl.openvm.eu/cloudstack/iso/TinyCore-8.0.iso", + "tags": [] + } + ] + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/ImageStoreServiceData.json b/cloudstack/testdata/ImageStoreServiceData.json new file mode 100644 index 0000000..067d8aa --- /dev/null +++ b/cloudstack/testdata/ImageStoreServiceData.json @@ -0,0 +1,40 @@ +{ + "addImageStore": { + "addimagestoreresponse": { + "imagestore": { + "id": "0ac85364-e31a-4840-97a4-a237b4291dfa", + "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81", + "zonename": "SimZone1", + "name": "nfs://192.168.0.20/export/testing/secondary", + "url": "nfs://192.168.0.20/export/testing/secondary", + "protocol": "nfs", + "providername": "NFS", + "scope": "ZONE", + "readonly": false + } + } + }, + "listImageStores": { + "listimagestoresresponse": { + "count": 1, + "imagestore": [ + { + "id": "06f9e780-fac0-42fa-ac0e-e6eb6a038178", + "zoneid": "3fc049b0-87ae-4d77-90c1-cce70da17db6", + "zonename": "testAdvZone2", + "name": "testAdvSecondaryStorage", + "url": "nfs://10.70.4.150/export/testing/secondary2", + "protocol": "nfs", + "providername": "NFS", + "scope": "ZONE", + "readonly": false + } + ] + } + }, + "deleteImageStore": { + "deleteimagestoreresponse": { + "success": true + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/LoadBalancerServiceData.json b/cloudstack/testdata/LoadBalancerServiceData.json new file mode 100644 index 0000000..5e8b549 --- /dev/null +++ b/cloudstack/testdata/LoadBalancerServiceData.json @@ -0,0 +1,72 @@ +{ + "createLoadBalancerRule": { + "createLoadBalancerRule": { + "createloadbalancerruleresponse": { + "id": "d9186a3e-b39a-473f-8d5e-70cf1a7aed44", + "jobid": "83ab0ded-225b-4a91-9aed-c17b1da07989" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse":{ + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.user.loadbalancer.CreateLoadBalancerRuleCmd", + "completed": "2021-10-04T04:37:08+0000", + "created": "2021-10-04T04:37:08+0000", + "jobid": "83ab0ded-225b-4a91-9aed-c17b1da07989", + "jobinstanceid": "d9186a3e-b39a-473f-8d5e-70cf1a7aed44", + "jobinstancetype": "FirewallRule", + "jobprocstatus": 0, + "jobresult": { + "loadbalancer": { + "account": "admin", + "algorithm": "roundrobin", + "cidrlist": "", + "domain": "ROOT", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "fordisplay": true, + "id": "d9186a3e-b39a-473f-8d5e-70cf1a7aed44", + "name": "testLBRule", + "networkid": "cc39d938-5ea0-4d9c-b89d-421da3274e54", + "privateport": "9090", + "protocol": "tcp", + "publicip": "192.168.2.107", + "publicipid": "bab02a09-1244-4235-a938-150e75e04ce0", + "publicport": "9090", + "state": "Add", + "tags": [], + "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81", + "zonename": "SimZone1" + } + }, + "jobresultcode": 0, + "jobresulttype": "object", + "jobstatus": 1, + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c" + } + } + }, + "assignLoadBalancerRule": { + "assignToLoadBalancerRule": { + "assigntoloadbalancerruleresponse": { + "jobid": "7ab605d2-cddd-4f90-bd6b-884a8f62c16b" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.user.loadbalancer.AssignToLoadBalancerRuleCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "success": true + }, + "created": "2021-10-03T07:52:26+0000", + "completed": "2021-10-03T07:52:26+0000", + "jobid": "7ab605d2-cddd-4f90-bd6b-884a8f62c16b" + } + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/NetworkOfferingServiceData.json b/cloudstack/testdata/NetworkOfferingServiceData.json new file mode 100644 index 0000000..ea757ca --- /dev/null +++ b/cloudstack/testdata/NetworkOfferingServiceData.json @@ -0,0 +1,85 @@ +{ + "createNetworkOffering": { + "createnetworkofferingresponse": { + "networkoffering": { + "id": "c2000683-68fd-437e-a4cf-f3676e1d18c1", + "name": "testNetOffering", + "displaytext": "testNetOffering", + "traffictype": "Guest", + "isdefault": false, + "specifyvlan": true, + "conservemode": true, + "specifyipranges": false, + "availability": "Optional", + "networkrate": 200, + "state": "Disabled", + "guestiptype": "L2", + "serviceofferingid": "c4b50796-22a5-4347-ae81-79911e44ac8d", + "service": [], + "forvpc": false, + "ispersistent": false, + "egressdefaultpolicy": true, + "supportsstrechedl2subnet": false, + "supportspublicaccess": false + } + } + }, + "updateNetworkOffering": { + "updatenetworkofferingresponse": { + "networkoffering": { + "id": "c2000683-68fd-437e-a4cf-f3676e1d18c1", + "name": "testNetOffering", + "displaytext": "testNetOffering", + "traffictype": "Guest", + "isdefault": false, + "specifyvlan": true, + "conservemode": true, + "specifyipranges": false, + "availability": "Optional", + "networkrate": 200, + "state": "Enabled", + "guestiptype": "L2", + "serviceofferingid": "c4b50796-22a5-4347-ae81-79911e44ac8d", + "service": [], + "forvpc": false, + "ispersistent": false, + "egressdefaultpolicy": true, + "supportsstrechedl2subnet": false, + "supportspublicaccess": false + } + } + }, + "listNetworkOfferings": { + "listnetworkofferingsresponse": { + "count": 1, + "networkoffering": [ + { + "id": "c2000683-68fd-437e-a4cf-f3676e1d18c1", + "name": "testNetOffering", + "displaytext": "testNetOffering", + "traffictype": "Guest", + "isdefault": false, + "specifyvlan": true, + "conservemode": true, + "specifyipranges": false, + "availability": "Optional", + "networkrate": 200, + "state": "Enabled", + "guestiptype": "L2", + "serviceofferingid": "c4b50796-22a5-4347-ae81-79911e44ac8d", + "service": [], + "forvpc": false, + "ispersistent": false, + "egressdefaultpolicy": true, + "supportsstrechedl2subnet": false, + "supportspublicaccess": false + } + ] + } + }, + "deleteNetworkOffering": { + "deletenetworkofferingresponse": { + "success": true + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/NetworkServiceData.json b/cloudstack/testdata/NetworkServiceData.json new file mode 100644 index 0000000..b90d76a --- /dev/null +++ b/cloudstack/testdata/NetworkServiceData.json @@ -0,0 +1,413 @@ +{ + "createNetwork": { + "createnetworkresponse": { + "network": { + "id": "eb9c270d-dd66-443b-9524-ada1eff4442a", + "name": "testIsolatedNet", + "displaytext": "testIsolatedNet", + "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": "69b7f746-208a-47c3-a940-4d3ebb720372", + "networkofferingname": "DefaultIsolatedNetworkOfferingWithSourceNatService", + "networkofferingdisplaytext": "Offering for Isolated networks with Source Nat service enabled", + "networkofferingconservemode": true, + "networkofferingavailability": "Required", + "issystem": false, + "state": "Allocated", + "related": "eb9c270d-dd66-443b-9524-ada1eff4442a", + "dns1": "10.147.28.6", + "type": "Isolated", + "acltype": "Account", + "account": "admin", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "service": [ + { + "name": "Lb", + "capability": [ + { + "name": "SupportedLBIsolation", + "value": "dedicated", + "canchooseservicecapability": false + }, + { + "name": "SupportedLbAlgorithms", + "value": "roundrobin,leastconn,source", + "canchooseservicecapability": false + }, + { + "name": "SupportedProtocols", + "value": "tcp, udp, tcp-proxy", + "canchooseservicecapability": false + }, + { + "name": "LbSchemes", + "value": "Public", + "canchooseservicecapability": false + }, + { + "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,\"description\":\" \"},{\"paramname\":\"domain\",\"required\":false,\"isflag\":false,\"description\":\" \"}],\"description\":\"This is loadbalancer cookie based stickiness method.\"},{\"methodname\":\"AppCookie\",\"paramlist\":[{\"paramname\":\"cookie-name\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"length\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"holdtime\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"request-learn\",\"required\":false,\"isflag\":true,\"description\":\" \"},{\"paramname\":\"prefix\",\"required\":false,\"isflag\":true,\"description\":\" \"},{\"paramname\":\"mode\",\"required\":false,\"isflag\":false,\"description\":\" \"}],\"description\":\"This is App session based sticky method. Define session stickiness on an existing application cookie. It can be used only for a specific http traffic\"},{\"methodname\":\"SourceBased\",\"paramlist\":[{\"paramname\":\"tablesize\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"expire\",\"required\":false,\"isflag\":false,\"description\":\" \"}],\"description\":\"This is source based Stickiness method, it can be used for any type of protocol.\"}]", + "canchooseservicecapability": false + }, + { + "name": "AutoScaleCounters", + "value": "[{\"methodname\":\"cpu\",\"paramlist\":[]},{\"methodname\":\"memory\",\"paramlist\":[]}]", + "canchooseservicecapability": false + } + ] + }, + { + "name": "PortForwarding", + "capability": [ + { + "name": "SupportedProtocols", + "value": "tcp,udp", + "canchooseservicecapability": false + } + ] + }, + { + "name": "SourceNat", + "capability": [ + { + "name": "SupportedSourceNatTypes", + "value": "peraccount", + "canchooseservicecapability": false + }, + { + "name": "RedundantRouter", + "value": "true", + "canchooseservicecapability": false + } + ] + }, + { + "name": "Vpn", + "capability": [ + { + "name": "VpnTypes", + "value": "removeaccessvpn", + "canchooseservicecapability": false + }, + { + "name": "SupportedVpnTypes", + "value": "pptp,l2tp,ipsec", + "canchooseservicecapability": false + } + ] + }, + { + "name": "Dns", + "capability": [ + { + "name": "AllowDnsSuffixModification", + "value": "true", + "canchooseservicecapability": false + } + ] + }, + { + "name": "Dhcp", + "capability": [ + { + "name": "DhcpAccrossMultipleSubnets", + "value": "true", + "canchooseservicecapability": false + } + ] + }, + { + "name": "StaticNat" + }, + { + "name": "UserData" + }, + { + "name": "Firewall", + "capability": [ + { + "name": "TrafficStatistics", + "value": "per public ip", + "canchooseservicecapability": false + }, + { + "name": "SupportedProtocols", + "value": "tcp,udp,icmp", + "canchooseservicecapability": false + }, + { + "name": "MultipleIps", + "value": "true", + "canchooseservicecapability": false + }, + { + "name": "SupportedTrafficDirection", + "value": "ingress, egress", + "canchooseservicecapability": false + }, + { + "name": "SupportedEgressProtocols", + "value": "tcp,udp,icmp, all", + "canchooseservicecapability": false + } + ] + } + ], + "networkdomain": "cs2sandbox.simulator", + "physicalnetworkid": "8e27a637-7525-49ed-81ce-52bd5e5d9ea2", + "restartrequired": false, + "specifyipranges": false, + "canusefordeploy": true, + "ispersistent": false, + "tags": [], + "details": {}, + "displaynetwork": true, + "strechedl2subnet": false, + "redundantrouter": false + } + } + }, + "listNetworks": { + "listnetworksresponse": { + "count": 1, + "network": [ + { + "id": "eb9c270d-dd66-443b-9524-ada1eff4442a", + "name": "testIsolatedNet", + "displaytext": "testIsolatedNet", + "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": "69b7f746-208a-47c3-a940-4d3ebb720372", + "networkofferingname": "DefaultIsolatedNetworkOfferingWithSourceNatService", + "networkofferingdisplaytext": "Offering for Isolated networks with Source Nat service enabled", + "networkofferingconservemode": true, + "networkofferingavailability": "Required", + "issystem": false, + "state": "Allocated", + "related": "eb9c270d-dd66-443b-9524-ada1eff4442a", + "dns1": "10.147.28.6", + "type": "Isolated", + "acltype": "Account", + "account": "admin", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "service": [ + { + "name": "Lb", + "capability": [ + { + "name": "SupportedLBIsolation", + "value": "dedicated", + "canchooseservicecapability": false + }, + { + "name": "SupportedLbAlgorithms", + "value": "roundrobin,leastconn,source", + "canchooseservicecapability": false + }, + { + "name": "SupportedProtocols", + "value": "tcp, udp, tcp-proxy", + "canchooseservicecapability": false + }, + { + "name": "LbSchemes", + "value": "Public", + "canchooseservicecapability": false + }, + { + "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,\"description\":\" \"},{\"paramname\":\"domain\",\"required\":false,\"isflag\":false,\"description\":\" \"}],\"description\":\"This is loadbalancer cookie based stickiness method.\"},{\"methodname\":\"AppCookie\",\"paramlist\":[{\"paramname\":\"cookie-name\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"length\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"holdtime\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"request-learn\",\"required\":false,\"isflag\":true,\"description\":\" \"},{\"paramname\":\"prefix\",\"required\":false,\"isflag\":true,\"description\":\" \"},{\"paramname\":\"mode\",\"required\":false,\"isflag\":false,\"description\":\" \"}],\"description\":\"This is App session based sticky method. Define session stickiness on an existing application cookie. It can be used only for a specific http traffic\"},{\"methodname\":\"SourceBased\",\"paramlist\":[{\"paramname\":\"tablesize\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"expire\",\"required\":false,\"isflag\":false,\"description\":\" \"}],\"description\":\"This is source based Stickiness method, it can be used for any type of protocol.\"}]", + "canchooseservicecapability": false + }, + { + "name": "AutoScaleCounters", + "value": "[{\"methodname\":\"cpu\",\"paramlist\":[]},{\"methodname\":\"memory\",\"paramlist\":[]}]", + "canchooseservicecapability": false + } + ] + }, + { + "name": "PortForwarding", + "capability": [ + { + "name": "SupportedProtocols", + "value": "tcp,udp", + "canchooseservicecapability": false + } + ] + }, + { + "name": "SourceNat", + "capability": [ + { + "name": "SupportedSourceNatTypes", + "value": "peraccount", + "canchooseservicecapability": false + }, + { + "name": "RedundantRouter", + "value": "true", + "canchooseservicecapability": false + } + ] + }, + { + "name": "Vpn", + "capability": [ + { + "name": "VpnTypes", + "value": "removeaccessvpn", + "canchooseservicecapability": false + }, + { + "name": "SupportedVpnTypes", + "value": "pptp,l2tp,ipsec", + "canchooseservicecapability": false + } + ] + }, + { + "name": "Dns", + "capability": [ + { + "name": "AllowDnsSuffixModification", + "value": "true", + "canchooseservicecapability": false + } + ] + }, + { + "name": "Dhcp", + "capability": [ + { + "name": "DhcpAccrossMultipleSubnets", + "value": "true", + "canchooseservicecapability": false + } + ] + }, + { + "name": "StaticNat" + }, + { + "name": "UserData" + }, + { + "name": "Firewall", + "capability": [ + { + "name": "TrafficStatistics", + "value": "per public ip", + "canchooseservicecapability": false + }, + { + "name": "SupportedProtocols", + "value": "tcp,udp,icmp", + "canchooseservicecapability": false + }, + { + "name": "MultipleIps", + "value": "true", + "canchooseservicecapability": false + }, + { + "name": "SupportedTrafficDirection", + "value": "ingress, egress", + "canchooseservicecapability": false + }, + { + "name": "SupportedEgressProtocols", + "value": "tcp,udp,icmp, all", + "canchooseservicecapability": false + } + ] + } + ], + "networkdomain": "cs2sandbox.simulator", + "physicalnetworkid": "8e27a637-7525-49ed-81ce-52bd5e5d9ea2", + "restartrequired": false, + "specifyipranges": false, + "canusefordeploy": true, + "ispersistent": false, + "tags": [], + "details": {}, + "displaynetwork": true, + "strechedl2subnet": false, + "redundantrouter": false + } + ] + } + }, + "deleteNetwork": { + "deleteNetwork": { + "deletenetworkresponse": { + "jobid": "8fe59207-90f5-4382-af17-e8b413bda517" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.user.network.DeleteNetworkCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "success": true + }, + "jobinstancetype": "Network", + "created": "2021-10-04T05:11:01+0000", + "completed": "2021-10-04T05:11:02+0000", + "jobid": "8fe59207-90f5-4382-af17-e8b413bda517" + } + } + }, + "createPhysicalNetwork": { + "createPhysicalNetwork": { + "createphysicalnetworkresponse": { + "id": "256b3b3f-4a31-48f3-a939-79b01357fb87", + "jobid": "a52138ee-752e-400a-8289-c534eebca026" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "bc1b501c-1d18-11ec-9173-50eb7122da94", + "userid": "bc1b6b47-1d18-11ec-9173-50eb7122da94", + "cmd": "org.apache.cloudstack.api.command.admin.network.CreatePhysicalNetworkCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "physicalnetwork": { + "id": "256b3b3f-4a31-48f3-a939-79b01357fb87", + "name": "testPhyNet", + "broadcastdomainrange": "ZONE", + "zoneid": "d4a81f75-5d92-415e-ab59-e85cc2ce56d9", + "zonename": "Sandbox-simulator", + "state": "Disabled", + "isolationmethods": "VLAN" + } + }, + "jobinstancetype": "PhysicalNetwork", + "jobinstanceid": "256b3b3f-4a31-48f3-a939-79b01357fb87", + "created": "2021-10-04T11:26:38+0530", + "completed": "2021-10-04T11:26:38+0530", + "jobid": "a52138ee-752e-400a-8289-c534eebca026" + } + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/PoolServiceData.json b/cloudstack/testdata/PoolServiceData.json new file mode 100644 index 0000000..2a5050c --- /dev/null +++ b/cloudstack/testdata/PoolServiceData.json @@ -0,0 +1,62 @@ +{ + "createStoragePool": { + "createstoragepoolresponse": { + "storagepool": { + "id": "3fd44942-4881-3fb0-95f1-5d7b7ae64cfb", + "zoneid": "6ebc7a1c-ff98-425c-ac0d-b6c2e3ae6e33", + "zonename": "TestZone", + "podid": "6a1dbf48-8b8e-45ab-8249-cf43a86f012d", + "podname": "TestPod", + "name": "testPrimary1", + "ipaddress": "10.1.1.2", + "path": "/export/primary1", + "created": "2021-10-04T08:17:38+0000", + "type": "NetworkFilesystem", + "clusterid": "a73fb4a4-642b-4ea4-92b8-b74ec8908534", + "clustername": "TestCluster", + "disksizetotal": 1099511627776, + "disksizeallocated": 0, + "state": "Up", + "scope": "CLUSTER", + "overprovisionfactor": "2.0", + "provider": "DefaultPrimary" + } + } + }, + "listStoragePools": { + "liststoragepoolsresponse": { + "count": 1, + "storagepool": [ + { + "clusterid": "a73fb4a4-642b-4ea4-92b8-b74ec8908534", + "clustername": "TestCluster", + "created": "2021-10-04T08:17:38+0000", + "disksizeallocated": 0, + "disksizetotal": 1099511627776, + "disksizeused": 0, + "id": "3fd44942-4881-3fb0-95f1-5d7b7ae64cfb", + "ipaddress": "10.1.1.2", + "name": "testPrimary1", + "overprovisionfactor": "2.0", + "path": "/export/primary1", + "podid": "6a1dbf48-8b8e-45ab-8249-cf43a86f012d", + "podname": "TestPod", + "provider": "DefaultPrimary", + "scope": "CLUSTER", + "state": "Up", + "storagecapabilities": { + "VOLUME_SNAPSHOT_QUIESCEVM": "false" + }, + "type": "NetworkFilesystem", + "zoneid": "6ebc7a1c-ff98-425c-ac0d-b6c2e3ae6e33", + "zonename": "TestZone" + } + ] + } + }, + "deleteStoragePool": { + "deletestoragepoolresponse": { + "success": true + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/ProjectServiceData.json b/cloudstack/testdata/ProjectServiceData.json new file mode 100644 index 0000000..0eb7a78 --- /dev/null +++ b/cloudstack/testdata/ProjectServiceData.json @@ -0,0 +1,296 @@ +{ + "createProject": { + "createProject": { + "createprojectresponse": { + "id": "69646881-8d7f-4800-987d-106698a42608", + "jobid": "0666daab-af9b-4001-ae70-78ac6bc697e8" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.user.project.CreateProjectCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "project": { + "id": "69646881-8d7f-4800-987d-106698a42608", + "name": "testProject", + "displaytext": "testProject", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "owner": [ + { + "account": "admin" + } + ], + "projectaccountname": "PrjAcct-testProject-1", + "state": "Active", + "tags": [], + "networklimit": "20", + "networktotal": 0, + "networkavailable": "20", + "vpclimit": "20", + "vpctotal": 0, + "vpcavailable": "20", + "cpulimit": "40", + "cputotal": 0, + "cpuavailable": "40", + "memorylimit": "40960", + "memorytotal": 0, + "memoryavailable": "40960", + "primarystoragelimit": "200", + "primarystoragetotal": 0, + "primarystorageavailable": "200", + "secondarystoragelimit": "400", + "secondarystoragetotal": 0, + "secondarystorageavailable": "400.0", + "vmlimit": "20", + "vmtotal": 0, + "vmavailable": "20", + "iplimit": "20", + "iptotal": 0, + "ipavailable": "20", + "volumelimit": "20", + "volumetotal": 0, + "volumeavailable": "20", + "snapshotlimit": "20", + "snapshottotal": 0, + "snapshotavailable": "20", + "templatelimit": "20", + "templatetotal": 0, + "templateavailable": "20", + "vmstopped": 0, + "vmrunning": 0 + } + }, + "jobinstancetype": "None", + "created": "2021-10-04T06:21:54+0000", + "completed": "2021-10-04T06:21:54+0000", + "jobid": "0666daab-af9b-4001-ae70-78ac6bc697e8" + } + } + }, + "activateProject": { + "activateProject": { + "activaterojectresponse": { + "jobid": "fa12a90a-29fc-43c0-8cbd-5be49b72ed22" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.user.project.ActivateProjectCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "project": { + "id": "99a842a4-e50f-4265-8ca7-249959506c13", + "name": "Admin Project", + "displaytext": "Admin Project", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "owner": [ + { + "account": "admin" + } + ], + "projectaccountname": "PrjAcct-Admin Project-1", + "state": "Active", + "tags": [], + "networklimit": "20", + "networktotal": 0, + "networkavailable": "20", + "vpclimit": "20", + "vpctotal": 0, + "vpcavailable": "20", + "cpulimit": "40", + "cputotal": 0, + "cpuavailable": "40", + "memorylimit": "40960", + "memorytotal": 0, + "memoryavailable": "40960", + "primarystoragelimit": "200", + "primarystoragetotal": 0, + "primarystorageavailable": "200", + "secondarystoragelimit": "400", + "secondarystoragetotal": 0, + "secondarystorageavailable": "400.0", + "vmlimit": "20", + "vmtotal": 0, + "vmavailable": "20", + "iplimit": "20", + "iptotal": 0, + "ipavailable": "20", + "volumelimit": "20", + "volumetotal": 0, + "volumeavailable": "20", + "snapshotlimit": "20", + "snapshottotal": 0, + "snapshotavailable": "20", + "templatelimit": "20", + "templatetotal": 0, + "templateavailable": "20", + "vmstopped": 0, + "vmrunning": 0 + } + }, + "created": "2021-10-04T06:30:39+0000", + "completed": "2021-10-04T06:30:39+0000", + "jobid": "fa12a90a-29fc-43c0-8cbd-5be49b72ed22" + } + } + }, + "suspendProject": { + "suspendProject": { + "suspendprojectresponse": { + "jobid": "608f4d53-ceae-4747-9c0d-e8c15fc52135" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.user.project.SuspendProjectCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "project": { + "id": "99a842a4-e50f-4265-8ca7-249959506c13", + "name": "Admin Project", + "displaytext": "Admin Project", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "owner": [ + { + "account": "admin" + } + ], + "projectaccountname": "PrjAcct-Admin Project-1", + "state": "Suspended", + "tags": [], + "networklimit": "20", + "networktotal": 0, + "networkavailable": "20", + "vpclimit": "20", + "vpctotal": 0, + "vpcavailable": "20", + "cpulimit": "40", + "cputotal": 0, + "cpuavailable": "40", + "memorylimit": "40960", + "memorytotal": 0, + "memoryavailable": "40960", + "primarystoragelimit": "200", + "primarystoragetotal": 0, + "primarystorageavailable": "200", + "secondarystoragelimit": "400", + "secondarystoragetotal": 0, + "secondarystorageavailable": "400.0", + "vmlimit": "20", + "vmtotal": 0, + "vmavailable": "20", + "iplimit": "20", + "iptotal": 0, + "ipavailable": "20", + "volumelimit": "20", + "volumetotal": 0, + "volumeavailable": "20", + "snapshotlimit": "20", + "snapshottotal": 0, + "snapshotavailable": "20", + "templatelimit": "20", + "templatetotal": 0, + "templateavailable": "20", + "vmstopped": 0, + "vmrunning": 0 + } + }, + "created": "2021-10-04T06:34:01+0000", + "completed": "2021-10-04T06:34:01+0000", + "jobid": "608f4d53-ceae-4747-9c0d-e8c15fc52135" + } + } + }, + "updateProject": { + "updateProject": { + "updateprojectresponse": { + "jobid": "1330d540-c099-4943-ac22-3fd5846c0e5b" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.user.project.UpdateProjectCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "project": { + "id": "69646881-8d7f-4800-987d-106698a42608", + "name": "testProject", + "displaytext": "testProjectUpdate", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "owner": [ + { + "account": "admin" + } + ], + "projectaccountname": "PrjAcct-testProject-1", + "state": "Active", + "tags": [], + "networklimit": "20", + "networktotal": 0, + "networkavailable": "20", + "vpclimit": "20", + "vpctotal": 0, + "vpcavailable": "20", + "cpulimit": "40", + "cputotal": 0, + "cpuavailable": "40", + "memorylimit": "40960", + "memorytotal": 0, + "memoryavailable": "40960", + "primarystoragelimit": "200", + "primarystoragetotal": 0, + "primarystorageavailable": "200", + "secondarystoragelimit": "400", + "secondarystoragetotal": 0, + "secondarystorageavailable": "400.0", + "vmlimit": "20", + "vmtotal": 0, + "vmavailable": "20", + "iplimit": "20", + "iptotal": 0, + "ipavailable": "20", + "volumelimit": "20", + "volumetotal": 0, + "volumeavailable": "20", + "snapshotlimit": "20", + "snapshottotal": 0, + "snapshotavailable": "20", + "templatelimit": "20", + "templatetotal": 0, + "templateavailable": "20", + "vmstopped": 0, + "vmrunning": 0 + } + }, + "created": "2021-10-04T06:35:29+0000", + "completed": "2021-10-04T06:35:29+0000", + "jobid": "1330d540-c099-4943-ac22-3fd5846c0e5b" + } + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/ResourceTagsServiceData.json b/cloudstack/testdata/ResourceTagsServiceData.json new file mode 100644 index 0000000..e8419e0 --- /dev/null +++ b/cloudstack/testdata/ResourceTagsServiceData.json @@ -0,0 +1,50 @@ +{ + "createTags": { + "createTags": { + "createtagsresponse": { + "jobid": "fb96bb6b-c192-492d-9671-42cea59a3709" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.user.tag.CreateTagsCmd", + "completed": "2021-10-04T06:58:35+0000", + "created": "2021-10-04T06:58:35+0000", + "jobid": "4901a56e-60aa-4385-8ab6-8f9591ef0469", + "jobprocstatus": 0, + "jobresult": { + "success": true + }, + "jobresultcode": 0, + "jobresulttype": "object", + "jobstatus": 1, + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c" + } + } + }, + "deleteTags": { + "deleteTags": { + "deletetagsresponse": { + "jobid": "494d0f35-057a-4cc7-bf5d-b52d3b803a36" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.user.tag.DeleteTagsCmd", + "completed": "2021-10-04T07:07:22+0000", + "created": "2021-10-04T07:07:22+0000", + "jobid": "494d0f35-057a-4cc7-bf5d-b52d3b803a36", + "jobprocstatus": 0, + "jobresult": { + "success": true + }, + "jobresultcode": 0, + "jobresulttype": "object", + "jobstatus": 1, + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c" + } + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/SSHServiceData.json b/cloudstack/testdata/SSHServiceData.json new file mode 100644 index 0000000..b782bf2 --- /dev/null +++ b/cloudstack/testdata/SSHServiceData.json @@ -0,0 +1,145 @@ +{ + "createSSHKeyPair": { + "createsshkeypairresponse": { + "keypair": { + "privatekey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAlMDlCrzlmEBwmPmQBhvD4PeRdEUV2tyoEuLLwkg7FkZFrjdd\nZaC8+N82Jm/lr27sqq5xVoo6n54k3hG9HVxNZjQBY5IiRNeQIF30Ye5c6TzboCCH\nAJVZYf4Dj5ucJvxg+V1+rZMNNJs6y2tMRGfmQ9zdrHZwOutKBeWTlGLtXyMabc5o\nVVe4hjngxh7s+CbEAA8oE9KFk1ZyhJ7SDj6G9vrMoBYNgqNGG6DHF/NM0A0yaEnj\nZU5MECXnw9qT7W8ggy5UM9AYtfzAyWBrS3jDwFgOjEZ+TW7vvC1Q3lnGkzpTHlye\nRppPm/7Xa8xapIdDV2UdEXnChHj9+Jwpa5nBJQIDAQABAoIBABaReW56oD7MMAkV\ne+NhXQOJq/i+7oTpC1rqK83LFaPYf4PiBHqBu4nqm5WTTn6iTqfKlYlyqVhELwW+\nHToSIfAKnddUeXyGU+iFOKmO92uvfwa5SKIvBoOWfUXRbwx/J9tNcwW0lMFRd8ca\n/VQ3izjqjns28OoPfoiMfyp5I9hWCNoC0KmIqHClqSVU5rpYpEcm70jA1PhLMItf\n8ECEPRQBBoFAEQSnyqohFBOKxna0Urs8qUOJ38FfK883h+ltRSzna7D9QetC+lny\n9OTuAMYe7ytnzGPJITLXjIN3Nj40n+dNmcRl7y0u00FdVpN92HlosCJvQqeJYY5V\nhcfi/aECgYEAxSKvGknRtQjuT+emmG4TmC110ZCcQY1tgIMwkPL++rR9Qp8M5t5p\nocxpK5NYhGgai4Kep5F4P2nePHFemwgP1jHawxsc3G/IA+0c27Y+9uAZSM2mDCcf\nXIvBxkOGcI1UcJYUTwAYdfgtJmVkS3Mj519r1lk2+pJAN14NkC87wekCgYEAwSvS\no7ILlqZo//DThhHakFFLFRKD82ghNMc0b8yheSY+V+tkzW+nugqvm5rhH3GH+M8U\nMLm5sdWauT2/1l7kaUla923lwMDxhd4Buv6v6IZYVNyzJLA5DAT3T7i5fmixE1MG\ncpmZhbpsuikFRUP3Z2td1D8cuZxHN6OrWtCso90CgYEAtJIGji/b1NVvZOWtZaY+\ncIADkYfCeREQokyIqdzKzd2Rdvq1GKvVWg0gsHdw9ydcWTm2FYtb98oDdJ3rqFoE\nF5Dm7xvgndIOBfqlGmOe3Qd8YYFtfWhAg8bIIdEsTeBG3jG6PHq77SL8SFVLPwki\ndAalgluJzo80HwMZrV52gDECgYA5JXm/K6D6BGjzro8lDosWPrZzmXKnw5pvPq9o\nk6UBbirrX5wGmo2IIDkrU3peDvwmwzw53fftgD+xpW7nQFNaQnVC1aQujeXlsHPa\nmhX4OCZRlKj6pZd60s1HLGLT3qzkBp/Vr1MXmLspp5EDmMPMOJsdez5IOs9mymib\nCTjJkQKBgFv0d3RnnxOU9EuTA6DmqxrYnWCQVEl1jwTJwfX6+1hfiBzLMCKWxEZ4\nla4rcmvMkL+uWwfLp/R29ciZC+G08Tc7tPVmZunqT3XBgSAt0y3Q3WXkkZG9RHlS\nCK2YbtViHML+G5dackvASf1p7+w2b3WS8fHFH2GTSTiM/OqReBVF\n-----END RSA PRIVATE KEY-----\n", + "name": "testSSHKey", + "account": "admin", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "fingerprint": "3b:f7:0b:34:40:0d:a5:3c:2a:75:f8:82:1d:88:99:36" + } + } + }, + "listSSHKeyPairs": { + "listsshkeypairsresponse": { + "count": 1, + "sshkeypair": [ + { + "account": "admin", + "domain": "ROOT", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "fingerprint": "3b:f7:0b:34:40:0d:a5:3c:2a:75:f8:82:1d:88:99:36", + "name": "testSSHKey" + } + ] + } + }, + "resetSSHKeyForVirtualMachine": { + "resetSSHKeyForVirtualMachine": { + "resetSSHKeyforvirtualmachineresponse": { + "jobid": "da766971-3902-4675-9cf2-8bcb2398aba3" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.vm.ResetVMSSHKeyCmdByAdmin", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "virtualmachine": { + "id": "8aa29529-b238-45f3-8992-5befadcd8bb0", + "name": "Admin-VPC-T3-VM", + "displayname": "abc12", + "account": "admin", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "username": "admin", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "created": "2021-07-05T09:16:22+0000", + "state": "Stopped", + "haenable": false, + "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", + "zonename": "shouldwork", + "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c", + "templatename": "CentOS 5.6 (64-bit)", + "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI", + "passwordenabled": false, + "serviceofferingid": "79802d1a-186b-4e34-a550-220987cb03c2", + "serviceofferingname": "const1", + "diskofferingid": "3d321179-f9c6-4a77-8f47-6fae3a8126d1", + "diskofferingname": "Medium", + "backupofferingid": "7c42d74e-c029-4431-9025-6caa8b903472", + "backupofferingname": "BackupGoldDummy", + "cpunumber": 1, + "cpuspeed": 1000, + "memory": 256, + "cpuused": "10%", + "networkkbsread": 209485824, + "networkkbswrite": 104742912, + "diskkbsread": 0, + "diskkbswrite": 0, + "memorykbs": 0, + "memoryintfreekbs": 0, + "memorytargetkbs": 0, + "diskioread": 0, + "diskiowrite": 0, + "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c", + "rootdeviceid": 1, + "rootdevicetype": "DATADISK", + "securitygroup": [], + "nic": [ + { + "id": "511941ff-229d-4a3b-8b09-f83b0608ed6b", + "networkid": "30358053-0f9d-4112-9948-976477896db6", + "networkname": "test-network-2", + "netmask": "255.255.255.0", + "gateway": "10.1.2.1", + "ipaddress": "10.1.2.71", + "traffictype": "Guest", + "type": "Isolated", + "isdefault": true, + "macaddress": "02:00:35:ff:00:0c", + "secondaryip": [], + "extradhcpoption": [] + }, + { + "id": "186e56ee-8de8-4869-ac00-dc91dc51d6f2", + "networkid": "6463e120-c36a-4569-aaa7-729922a55825", + "networkname": "sw1", + "traffictype": "Guest", + "type": "L2", + "isdefault": false, + "macaddress": "02:00:3d:a2:00:02", + "secondaryip": [], + "extradhcpoption": [] + } + ], + "hypervisor": "Simulator", + "instancename": "i-2-613-QA", + "details": { + "cpuNumber": "1", + "memory": "256", + "Message.ReservedCapacityFreed.Flag": "true", + "SSH.PublicKey": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCUwOUKvOWYQHCY+ZAGG8Pg95F0RRXa3KgS4svCSDsWRkWuN11loLz43zYmb+WvbuyqrnFWijqfniTeEb0dXE1mNAFjkiJE15AgXfRh7lzpPNugIIcAlVlh/gOPm5wm/GD5XX6tkw00mzrLa0xEZ+ZD3N2sdnA660oF5ZOUYu1fIxptzmhVV7iGOeDGHuz4JsQADygT0oWTVnKEntIOPob2+sygFg2Co0YboMcX80zQDTJoSeNlTkwQJefD2pPtbyCDLlQz0Bi1/MDJYGtLeMPAWA6MRn5Nbu+8LVDeWcaTOlMeXJ5Gmk+b/tdrzFqkh0NXZR0RecKEeP34nClrmcEl \n", + "Encrypted.Password": "YcyvikAL5LHq4gXwGVE3yW0j7iuuTWcxnMpYQDqHn+6R1agzIibv3eoF1onUFgHYQ0XtJUzMR4QfZDzlHnqYDTB+rKjjc9YcZzWhVSoVKQ45bUqAKFBXJTfDLQ3ZmvULxJ2VXf/HuuOh5Th5S62bP68QrrVCMPUArUYRRFPw0EkQVdvjwF1raNXpKWDAtcwITaroxW0pL9S8ome5R7JHKPxyK9G8/lqC4ywodvPaG+vGV0eHTiQeUab/dQ8Pxze6Ny88uwv8oH2vu+zMbs91uDDL9lMl7WV5Rq6RucKRAjOBLfPj+f+8jq3xnCG8JzUa63G2lAvP9qIzk3eYzoeYkw==" + }, + "keypair": "testSSHKey", + "affinitygroup": [], + "displayvm": true, + "isdynamicallyscalable": false, + "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c", + "osdisplayname": "CentOS 5.6 (64-bit)", + "tags": [], + "jobid": "da766971-3902-4675-9cf2-8bcb2398aba3", + "jobstatus": 0 + } + }, + "jobinstancetype": "VirtualMachine", + "jobinstanceid": "8aa29529-b238-45f3-8992-5befadcd8bb0", + "created": "2021-10-04T07:39:55+0000", + "completed": "2021-10-04T07:39:55+0000", + "jobid": "da766971-3902-4675-9cf2-8bcb2398aba3" + } + } + }, + "deleteSSHKeyPair": { + "deletesshkeypairresponse": { + "success": true + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/ServiceOfferingServiceData.json b/cloudstack/testdata/ServiceOfferingServiceData.json new file mode 100644 index 0000000..9def5ec --- /dev/null +++ b/cloudstack/testdata/ServiceOfferingServiceData.json @@ -0,0 +1,53 @@ +{ + "createServiceOffering": { + "createserviceofferingresponse": { + "serviceoffering": { + "id": "efaeeab0-4b09-4729-8b6f-62645db41b37", + "name": "testServiceOffering", + "displaytext": "testServiceOffering", + "cpunumber": 2, + "cpuspeed": 1000, + "memory": 2048, + "created": "2021-10-04T07:16:42+0000", + "storagetype": "shared", + "provisioningtype": "thin", + "offerha": false, + "limitcpuuse": false, + "isvolatile": false, + "issystem": false, + "defaultuse": false, + "iscustomized": false, + "cacheMode": "none", + "rootdisksize": 0 + } + } + }, + "updateServiceOffering": { + "updateserviceofferingresponse": { + "serviceoffering": { + "id": "efaeeab0-4b09-4729-8b6f-62645db41b37", + "name": "testServiceOfferingUpdated", + "displaytext": "testServiceOffering", + "cpunumber": 2, + "cpuspeed": 1000, + "memory": 2048, + "created": "2021-10-04T07:16:42+0000", + "storagetype": "shared", + "provisioningtype": "thin", + "offerha": false, + "limitcpuuse": false, + "isvolatile": false, + "issystem": false, + "defaultuse": false, + "iscustomized": false, + "cacheMode": "none", + "rootdisksize": 0 + } + } + }, + "deleteServiceOffering": { + "deleteserviceofferingresponse": { + "success": true + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/StoragePoolServiceData.json b/cloudstack/testdata/StoragePoolServiceData.json new file mode 100644 index 0000000..ef67c27 --- /dev/null +++ b/cloudstack/testdata/StoragePoolServiceData.json @@ -0,0 +1,96 @@ +{ + "cancelStorageMaintenance": { + "cancelStorageMaintenance": { + "cancelprimarystoragemaintenanceresponse": { + "jobid": "7cc3faa4-73c5-45cb-a982-683a13023827" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.storage.CancelPrimaryStorageMaintenanceCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "storagepool": { + "id": "44ad900d-785b-3eff-addc-a5e6bf4927ef", + "zoneid": "753941b6-5239-4ab3-b2b3-7522d2a6d1ba", + "zonename": "DummySG", + "podid": "b52f7877-227e-4e3f-974b-2397a37d6e1c", + "podname": "SGAdvPod", + "name": "SGAdvPS", + "ipaddress": "10.1.1.3", + "path": "/export/testing/primary ", + "created": "2020-07-27T06:01:56+0000", + "type": "NetworkFilesystem", + "clusterid": "a7b4c0e1-8ba4-41ea-a2f4-490798ddd166", + "clustername": "SGAdvCluster", + "disksizetotal": 1099511627776, + "disksizeallocated": 100, + "state": "Up", + "scope": "CLUSTER", + "overprovisionfactor": "2.0", + "provider": "DefaultPrimary", + "jobid": "7cc3faa4-73c5-45cb-a982-683a13023827", + "jobstatus": 0 + } + }, + "jobinstancetype": "StoragePool", + "jobinstanceid": "44ad900d-785b-3eff-addc-a5e6bf4927ef", + "created": "2021-10-04T08:06:55+0000", + "completed": "2021-10-04T08:06:55+0000", + "jobid": "7cc3faa4-73c5-45cb-a982-683a13023827" + } + } + }, + "enableStorageMaintenance": { + "enableStorageMaintenance": { + "prepareprimarystorageformaintenanceresponse": { + "jobid": "3036df18-12ca-44a0-9c77-19fcf81dad75" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.storage.PreparePrimaryStorageForMaintenanceCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "storagepool": { + "id": "44ad900d-785b-3eff-addc-a5e6bf4927ef", + "zoneid": "753941b6-5239-4ab3-b2b3-7522d2a6d1ba", + "zonename": "DummySG", + "podid": "b52f7877-227e-4e3f-974b-2397a37d6e1c", + "podname": "SGAdvPod", + "name": "SGAdvPS", + "ipaddress": "10.1.1.3", + "path": "/export/testing/primary ", + "created": "2020-07-27T06:01:56+0000", + "type": "NetworkFilesystem", + "clusterid": "a7b4c0e1-8ba4-41ea-a2f4-490798ddd166", + "clustername": "SGAdvCluster", + "disksizetotal": 1099511627776, + "disksizeallocated": 100, + "state": "Maintenance", + "scope": "CLUSTER", + "overprovisionfactor": "2.0", + "provider": "DefaultPrimary", + "jobid": "3036df18-12ca-44a0-9c77-19fcf81dad75", + "jobstatus": 0 + } + }, + "jobinstancetype": "StoragePool", + "jobinstanceid": "44ad900d-785b-3eff-addc-a5e6bf4927ef", + "created": "2021-10-04T08:13:01+0000", + "completed": "2021-10-04T08:13:02+0000", + "jobid": "3036df18-12ca-44a0-9c77-19fcf81dad75" + } + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/TemplateServiceData.json b/cloudstack/testdata/TemplateServiceData.json new file mode 100644 index 0000000..f4f4ca2 --- /dev/null +++ b/cloudstack/testdata/TemplateServiceData.json @@ -0,0 +1,150 @@ +{ + "registerTemplate": { + "registertemplateresponse": { + "count": 1, + "template": [ + { + "id": "5ce8f0b1-a910-4631-a8de-1e332bf3a6b7", + "name": "testTemplate", + "displaytext": "testTemplate", + "ispublic": false, + "created": "2021-10-04T08:41:23+0000", + "isready": true, + "passwordenabled": false, + "format": "VHD", + "isfeatured": false, + "crossZones": false, + "ostypeid": "f3404cc6-c38c-11eb-848b-1e006800018c", + "ostypename": "Amazon Linux 3 (64 bit)", + "account": "admin", + "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", + "zonename": "shouldwork", + "status": "Download Complete", + "size": 5242880, + "physicalsize": 5242880, + "templatetype": "USER", + "hypervisor": "Simulator", + "domain": "ROOT", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "isextractable": false, + "details": {}, + "downloaddetails": [ + { + "downloadState": "DOWNLOADED", + "datastore": "secon", + "downloadPercent": "100" + } + ], + "bits": 0, + "sshkeyenabled": false, + "isdynamicallyscalable": false, + "directdownload": false, + "deployasis": false, + "requireshvm": true, + "url": "http://dl.openvm.eu/cloudstack/macchinina/x86_64/macchinina-xen.vhd.bz2", + "tags": [] + } + ] + } + }, + "createTemplate": { + "createTemplate": { + "createtemplateresponse": { + "id": "b07dd9e4-1720-4122-b840-1e57a79e0dd9", + "jobid": "13cc57e2-f388-49d5-95f3-de5ba43835fb" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.template.CreateTemplateCmdByAdmin", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "template": { + "id": "b07dd9e4-1720-4122-b840-1e57a79e0dd9", + "name": "createTempFromVol", + "displaytext": "createTempFromVol", + "ispublic": false, + "created": "2021-10-04T08:45:37+0000", + "isready": true, + "passwordenabled": false, + "format": "RAW", + "isfeatured": false, + "crossZones": false, + "ostypeid": "e510f742-5fdf-11ea-9a56-1e006800018c", + "ostypename": "Other (64-bit)", + "account": "admin", + "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", + "zonename": "shouldwork", + "status": "Download Complete", + "size": 21474836480, + "templatetype": "USER", + "hypervisor": "Simulator", + "domain": "ROOT", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "isextractable": false, + "details": {}, + "downloaddetails": [ + { + "downloadState": "DOWNLOADED", + "datastore": "secon", + "downloadPercent": "100" + } + ], + "bits": 0, + "sshkeyenabled": false, + "isdynamicallyscalable": false, + "directdownload": false, + "deployasis": false, + "requireshvm": false, + "tags": [] + } + }, + "jobinstancetype": "Template", + "jobinstanceid": "b07dd9e4-1720-4122-b840-1e57a79e0dd9", + "created": "2021-10-04T08:45:37+0000", + "completed": "2021-10-04T08:45:37+0000", + "jobid": "13cc57e2-f388-49d5-95f3-de5ba43835fb" + } + } + }, + "extractTemplate": { + "extractTemplate": { + "extracttemplateresponse": { + "jobid": "d2c86fca-26ca-436e-b5cf-60754c598da3" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.user.template.ExtractTemplateCmd", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "template": { + "id": "5ce8f0b1-a910-4631-a8de-1e332bf3a6b7", + "name": "testTemplate", + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "state": "DOWNLOAD_URL_CREATED", + "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", + "zonename": "shouldwork", + "extractMode": "HTTP_DOWNLOAD", + "url": "http://172.17.1.11/userdata/a7a2ca0e-65c7-4b9e-bc61-3a4ab6adf6c0.vhd" + } + }, + "jobinstancetype": "Template", + "jobinstanceid": "5ce8f0b1-a910-4631-a8de-1e332bf3a6b7", + "created": "2021-10-04T08:50:45+0000", + "completed": "2021-10-04T08:50:46+0000", + "jobid": "d2c86fca-26ca-436e-b5cf-60754c598da3" + } + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/UserServiceData.json b/cloudstack/testdata/UserServiceData.json new file mode 100644 index 0000000..e38b4f8 --- /dev/null +++ b/cloudstack/testdata/UserServiceData.json @@ -0,0 +1,151 @@ +{ + "createUser": { + "createuserresponse": { + "user": { + "id": "cd2b5afa-db4d-4532-88ec-1356a273e534", + "username": "dummyUser", + "firstname": "firstname", + "lastname": "lastname", + "email": "user@xyz.com", + "created": "2021-10-04T08:57:35+0000", + "state": "enabled", + "account": "admin", + "accounttype": 1, + "usersource": "native", + "roleid": "16919363-5fe0-11ea-9a56-1e006800018c", + "roletype": "Admin", + "rolename": "Root Admin", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "iscallerchilddomain": false, + "isdefault": false + } + } + }, + "enableUser": { + "enableuserresponse": { + "user": { + "account": "admin", + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "accounttype": 1, + "created": "2021-10-04T08:57:35+0000", + "domain": "ROOT", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "email": "user@xyz.com", + "firstname": "firstname", + "id": "cd2b5afa-db4d-4532-88ec-1356a273e534", + "iscallerchilddomain": false, + "isdefault": false, + "lastname": "lastname", + "roleid": "16919363-5fe0-11ea-9a56-1e006800018c", + "rolename": "Root Admin", + "roletype": "Admin", + "state": "enabled", + "username": "dummyUser", + "usersource": "native" + } + } + }, + "disableUser": { + "disableUser": { + "disableResponse": { + "jobid": "e4eb553f-6188-441c-beb8-09056b0a1e1f" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.user.DisableUserCmd", + "completed": "2021-10-04T09:06:53+0000", + "created": "2021-10-04T09:06:52+0000", + "jobid": "e4eb553f-6188-441c-beb8-09056b0a1e1f", + "jobprocstatus": 0, + "jobresult": { + "user": { + "account": "admin", + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "accounttype": 1, + "created": "2021-10-04T08:57:35+0000", + "domain": "ROOT", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "email": "user@xyz.com", + "firstname": "firstname", + "id": "cd2b5afa-db4d-4532-88ec-1356a273e534", + "iscallerchilddomain": false, + "isdefault": false, + "lastname": "lastname", + "roleid": "16919363-5fe0-11ea-9a56-1e006800018c", + "rolename": "Root Admin", + "roletype": "Admin", + "state": "disabled", + "username": "dummyUser", + "usersource": "native" + } + }, + "jobresultcode": 0, + "jobresulttype": "object", + "jobstatus": 1, + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c" + } + } + }, + "listUsers": { + "listusersresponse": { + "count": 1, + "user": [ + { + "id": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "username": "admin", + "firstname": "admin", + "lastname": "cloud", + "created": "2020-03-06T20:24:53+0000", + "state": "enabled", + "account": "admin", + "accounttype": 1, + "usersource": "native", + "roleid": "16919363-5fe0-11ea-9a56-1e006800018c", + "roletype": "Admin", + "rolename": "Root Admin", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "timezone": "PST", + "apikey": "DN7uIwbqAMASSB1GUGHWvXqUlDDBf7H6A3XI-kNeXahW5LMUoqgfDEDWMv8zWKaj51fDozg8fjqc7tGCSozScA", + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "iscallerchilddomain": false, + "isdefault": true + } + ] + } + }, + "lockUser": { + "lockuserresponse": { + "user": { + "account": "kittycat", + "accountid": "2841efe4-aba4-4abf-bfdc-c6d0825c29a6", + "accounttype": 0, + "created": "2020-06-26T18:21:57+0000", + "domain": "saml", + "domainid": "1d4a08f6-5c37-4385-9d95-fa4e654ecf4e", + "email": "cat@cat.com", + "firstname": "Ashley", + "id": "3b7325b3-849c-4314-ad19-dd3c483b6d1a", + "iscallerchilddomain": false, + "isdefault": false, + "lastname": "Cat", + "roleid": "1691ce2c-5fe0-11ea-9a56-1e006800018c", + "rolename": "User", + "roletype": "User", + "state": "locked", + "timezone": "IST", + "username": "ashley", + "usersource": "saml2disabled" + } + } + }, + "deleteUser": { + "deleteuserresponse": { + "success": true + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/VLANServiceData.json b/cloudstack/testdata/VLANServiceData.json new file mode 100644 index 0000000..6b37341 --- /dev/null +++ b/cloudstack/testdata/VLANServiceData.json @@ -0,0 +1,15 @@ +{ + "dedicateGuestVlanRange": { + "dedicateguestvlanrangeresponse": { + "dedicatedguestvlanrange": { + "id": "b1afc5fe-b17c-4db3-8411-c323e4997ead", + "account": "admin", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "guestvlanrange": "100-110", + "physicalnetworkid": 200, + "zoneid": 1 + } + } + } +} \ No newline at end of file diff --git a/cloudstack/testdata/VirtualMachineServiceData.json b/cloudstack/testdata/VirtualMachineServiceData.json new file mode 100644 index 0000000..72dd165 --- /dev/null +++ b/cloudstack/testdata/VirtualMachineServiceData.json @@ -0,0 +1,440 @@ +{ + "deployVirtualMachine": { + "deployVirtualMachine": { + "deployvirtualmachineresponse": { + "id": "915653c4-298b-4d74-bdee-4ced282114f1", + "jobid": "74bbb422-fb74-47ac-a22a-ad86a7831d3f" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.vm.DeployVMCmdByAdmin", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "virtualmachine": { + "id": "915653c4-298b-4d74-bdee-4ced282114f1", + "name": "testDummyVM", + "displayname": "testDummyVM", + "account": "admin", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "username": "admin", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "created": "2021-10-04T09:24:38+0000", + "state": "Running", + "haenable": false, + "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", + "zonename": "shouldwork", + "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", + "hostname": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf", + "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c", + "templatename": "CentOS 5.6 (64-bit)", + "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI", + "passwordenabled": false, + "serviceofferingid": "498ce071-a077-4237-9492-e55c42553327", + "serviceofferingname": "Very small instance", + "cpunumber": 1, + "cpuspeed": 100, + "memory": 256, + "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c", + "rootdeviceid": 0, + "rootdevicetype": "ROOT", + "securitygroup": [], + "nic": [ + { + "id": "47d79da1-2fe1-4a44-a503-523055714a72", + "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8", + "networkname": "test", + "netmask": "255.255.255.0", + "gateway": "10.1.1.1", + "ipaddress": "10.1.1.62", + "isolationuri": "vlan://1850", + "broadcasturi": "vlan://1850", + "traffictype": "Guest", + "type": "Isolated", + "isdefault": true, + "macaddress": "02:00:34:fb:00:01", + "secondaryip": [], + "extradhcpoption": [] + } + ], + "hypervisor": "Simulator", + "instancename": "i-2-683-QA", + "details": {}, + "affinitygroup": [], + "displayvm": true, + "isdynamicallyscalable": false, + "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c", + "osdisplayname": "CentOS 5.6 (64-bit)", + "bootmode": "legacy", + "boottype": "Bios", + "tags": [], + "jobid": "74bbb422-fb74-47ac-a22a-ad86a7831d3f", + "jobstatus": 0 + } + }, + "jobinstancetype": "VirtualMachine", + "jobinstanceid": "915653c4-298b-4d74-bdee-4ced282114f1", + "created": "2021-10-04T09:24:38+0000", + "completed": "2021-10-04T09:24:42+0000", + "jobid": "74bbb422-fb74-47ac-a22a-ad86a7831d3f" + } + } + }, + "addNicToVirtualMachine": { + "addNicToVirtualMachine": { + "addnictovirtualmachineresponse": { + "jobid": "ec9d4711-b334-4750-868b-fb4d79d5801c" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.vm.AddNicToVMCmdByAdmin", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "virtualmachine": { + "id": "915653c4-298b-4d74-bdee-4ced282114f1", + "name": "testDummyVM", + "displayname": "testDummyVM", + "account": "admin", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "username": "admin", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "created": "2021-10-04T09:24:38+0000", + "state": "Running", + "haenable": false, + "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", + "zonename": "shouldwork", + "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", + "hostname": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf", + "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c", + "securitygroup": [], + "nic": [ + { + "id": "0921d201-f7ac-4f49-bf09-ffe9497fdab0", + "networkid": "30358053-0f9d-4112-9948-976477896db6", + "networkname": "test-network-2", + "netmask": "255.255.255.0", + "gateway": "10.1.2.1", + "ipaddress": "10.1.2.102", + "isolationuri": "vlan://1955", + "broadcasturi": "vlan://1955", + "traffictype": "Guest", + "type": "Isolated", + "isdefault": false, + "macaddress": "02:00:13:a4:00:21", + "secondaryip": [], + "extradhcpoption": [] + }, + { + "id": "47d79da1-2fe1-4a44-a503-523055714a72", + "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8", + "networkname": "test", + "netmask": "255.255.255.0", + "gateway": "10.1.1.1", + "ipaddress": "10.1.1.62", + "isolationuri": "vlan://1850", + "broadcasturi": "vlan://1850", + "traffictype": "Guest", + "type": "Isolated", + "isdefault": true, + "macaddress": "02:00:34:fb:00:01", + "secondaryip": [], + "extradhcpoption": [] + } + ], + "hypervisor": "Simulator", + "instancename": "i-2-683-QA", + "details": {}, + "affinitygroup": [], + "displayvm": true, + "isdynamicallyscalable": false, + "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c", + "osdisplayname": "CentOS 5.6 (64-bit)", + "bootmode": "legacy", + "boottype": "Bios", + "tags": [] + } + }, + "created": "2021-10-04T09:29:51+0000", + "completed": "2021-10-04T09:29:54+0000", + "jobid": "ec9d4711-b334-4750-868b-fb4d79d5801c" + } + } + }, + "stopVirtualMachine": { + "stopVirtualMachine": { + "stopvirtualmachineresponse": { + "jobid": "604bc5ed-1b7e-4d63-abc8-a55077a4c2c1" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.vm.StopVMCmdByAdmin", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "virtualmachine": { + "id": "915653c4-298b-4d74-bdee-4ced282114f1", + "name": "testDummyVM", + "displayname": "testDummyVM", + "account": "admin", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "username": "admin", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "created": "2021-10-04T09:24:38+0000", + "state": "Stopped", + "haenable": false, + "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", + "zonename": "shouldwork", + "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c", + "templatename": "CentOS 5.6 (64-bit)", + "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI", + "passwordenabled": false, + "serviceofferingid": "498ce071-a077-4237-9492-e55c42553327", + "serviceofferingname": "Very small instance", + "cpunumber": 1, + "cpuspeed": 100, + "memory": 256, + "cpuused": "10%", + "networkkbsread": 917504, + "networkkbswrite": 458752, + "diskkbsread": 0, + "diskkbswrite": 0, + "memorykbs": 0, + "memoryintfreekbs": 0, + "memorytargetkbs": 0, + "diskioread": 0, + "diskiowrite": 0, + "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c", + "rootdeviceid": 0, + "rootdevicetype": "ROOT", + "securitygroup": [], + "nic": [ + { + "id": "47d79da1-2fe1-4a44-a503-523055714a72", + "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8", + "networkname": "test", + "netmask": "255.255.255.0", + "gateway": "10.1.1.1", + "ipaddress": "10.1.1.62", + "traffictype": "Guest", + "type": "Isolated", + "isdefault": true, + "macaddress": "02:00:34:fb:00:01", + "secondaryip": [], + "extradhcpoption": [] + } + ], + "hypervisor": "Simulator", + "instancename": "i-2-683-QA", + "details": { + "Message.ReservedCapacityFreed.Flag": "false" + }, + "affinitygroup": [], + "displayvm": true, + "isdynamicallyscalable": false, + "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c", + "osdisplayname": "CentOS 5.6 (64-bit)", + "tags": [], + "jobid": "604bc5ed-1b7e-4d63-abc8-a55077a4c2c1", + "jobstatus": 0 + } + }, + "jobinstancetype": "VirtualMachine", + "jobinstanceid": "915653c4-298b-4d74-bdee-4ced282114f1", + "created": "2021-10-04T09:53:06+0000", + "completed": "2021-10-04T09:53:08+0000", + "jobid": "604bc5ed-1b7e-4d63-abc8-a55077a4c2c1" + } + } + }, + "startVirtualMachine": { + "startVirtualMachine": { + "startvirtualmachineresponse": { + "jobid": "468d69d7-f327-4105-bec2-0e43107ae956" + } + }, + "queryAsyncJobResult": { + "queryasyncjobresultresponse": { + "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "cmd": "org.apache.cloudstack.api.command.admin.vm.StartVMCmdByAdmin", + "jobstatus": 1, + "jobprocstatus": 0, + "jobresultcode": 0, + "jobresulttype": "object", + "jobresult": { + "virtualmachine": { + "id": "915653c4-298b-4d74-bdee-4ced282114f1", + "name": "testDummyVM", + "displayname": "testDummyVM", + "account": "admin", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "username": "admin", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "domain": "ROOT", + "created": "2021-10-04T09:24:38+0000", + "state": "Running", + "haenable": false, + "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", + "zonename": "shouldwork", + "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", + "hostname": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf", + "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c", + "templatename": "CentOS 5.6 (64-bit)", + "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI", + "passwordenabled": false, + "serviceofferingid": "498ce071-a077-4237-9492-e55c42553327", + "serviceofferingname": "Very small instance", + "cpunumber": 1, + "cpuspeed": 100, + "memory": 256, + "cpuused": "10%", + "networkkbsread": 917504, + "networkkbswrite": 458752, + "diskkbsread": 0, + "diskkbswrite": 0, + "memorykbs": 0, + "memoryintfreekbs": 0, + "memorytargetkbs": 0, + "diskioread": 0, + "diskiowrite": 0, + "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c", + "rootdeviceid": 0, + "rootdevicetype": "ROOT", + "securitygroup": [], + "nic": [ + { + "id": "47d79da1-2fe1-4a44-a503-523055714a72", + "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8", + "networkname": "test", + "netmask": "255.255.255.0", + "gateway": "10.1.1.1", + "ipaddress": "10.1.1.62", + "isolationuri": "vlan://1994", + "broadcasturi": "vlan://1994", + "traffictype": "Guest", + "type": "Isolated", + "isdefault": true, + "macaddress": "02:00:34:fb:00:01", + "secondaryip": [], + "extradhcpoption": [] + } + ], + "hypervisor": "Simulator", + "instancename": "i-2-683-QA", + "details": { + "Message.ReservedCapacityFreed.Flag": "false" + }, + "affinitygroup": [], + "displayvm": true, + "isdynamicallyscalable": false, + "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c", + "osdisplayname": "CentOS 5.6 (64-bit)", + "tags": [], + "jobid": "468d69d7-f327-4105-bec2-0e43107ae956", + "jobstatus": 0 + } + }, + "jobinstancetype": "VirtualMachine", + "jobinstanceid": "915653c4-298b-4d74-bdee-4ced282114f1", + "created": "2021-10-04T09:57:19+0000", + "completed": "2021-10-04T09:57:22+0000", + "jobid": "468d69d7-f327-4105-bec2-0e43107ae956" + } + } + }, + "listVirtualMachines": { + "listVirtualMachines": { + "count": 1, + "virtualmachine": [ + { + "account": "admin", + "affinitygroup": [], + "cpunumber": 1, + "cpuspeed": 100, + "cpuused": "10%", + "created": "2021-10-04T09:24:38+0000", + "details": { + "Message.ReservedCapacityFreed.Flag": "false" + }, + "diskioread": 0, + "diskiowrite": 0, + "diskkbsread": 0, + "diskkbswrite": 0, + "displayname": "testDummyVM", + "displayvm": true, + "domain": "ROOT", + "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c", + "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c", + "haenable": false, + "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9", + "hostname": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf", + "hypervisor": "Simulator", + "id": "915653c4-298b-4d74-bdee-4ced282114f1", + "instancename": "i-2-683-QA", + "isdynamicallyscalable": false, + "memory": 256, + "memoryintfreekbs": 0, + "memorykbs": 0, + "memorytargetkbs": 0, + "name": "testDummyVM", + "networkkbsread": 1015808, + "networkkbswrite": 507904, + "nic": [ + { + "broadcasturi": "vlan://1994", + "extradhcpoption": [], + "gateway": "10.1.1.1", + "id": "47d79da1-2fe1-4a44-a503-523055714a72", + "ipaddress": "10.1.1.62", + "isdefault": true, + "isolationuri": "vlan://1994", + "macaddress": "02:00:34:fb:00:01", + "netmask": "255.255.255.0", + "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8", + "networkname": "test", + "secondaryip": [], + "traffictype": "Guest", + "type": "Isolated" + } + ], + "osdisplayname": "CentOS 5.6 (64-bit)", + "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c", + "passwordenabled": false, + "rootdeviceid": 0, + "rootdevicetype": "ROOT", + "securitygroup": [], + "serviceofferingid": "498ce071-a077-4237-9492-e55c42553327", + "serviceofferingname": "Very small instance", + "state": "Running", + "tags": [], + "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI", + "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c", + "templatename": "CentOS 5.6 (64-bit)", + "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c", + "username": "admin", + "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2", + "zonename": "shouldwork" + } + ] + } + } +} \ No newline at end of file diff --git a/generate/generate.go b/generate/generate.go index a161976..429df5a 100644 --- a/generate/generate.go +++ b/generate/generate.go @@ -1328,6 +1328,8 @@ func (s *service) generateNewAPICallFunc(a *API) { "CreateNetworkOffering", "UpdateNetworkOffering", "UpdateServiceOffering", + "UpdateConfiguration", + "UpdateCluster", "CreateSSHKeyPair", "CreateSecurityGroup", "CreateServiceOffering",