You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by da...@apache.org on 2021/11/29 10:56:22 UTC

[cloudstack-go] branch add-cks created (now 8c29dfa)

This is an automated email from the ASF dual-hosted git repository.

davidjumani pushed a change to branch add-cks
in repository https://gitbox.apache.org/repos/asf/cloudstack-go.git.


      at 8c29dfa  Adding kubernetes service

This branch includes the following new commits:

     new 8c29dfa  Adding kubernetes service

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[cloudstack-go] 01/01: Adding kubernetes service

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davidjumani pushed a commit to branch add-cks
in repository https://gitbox.apache.org/repos/asf/cloudstack-go.git

commit 8c29dfa969a74a192302e28ce896f372138978b5
Author: davidjumani <dj...@gmail.com>
AuthorDate: Mon Nov 29 16:26:03 2021 +0530

    Adding kubernetes service
---
 cloudstack/KubernetesService.go      |   2170 +
 cloudstack/KubernetesService_mock.go |    527 +
 cloudstack/cloudstack.go             |     11 +
 generate/layout.go                   |     14 +
 generate/listApis.json               | 112226 ++++++++++++++++----------------
 5 files changed, 59720 insertions(+), 55228 deletions(-)

diff --git a/cloudstack/KubernetesService.go b/cloudstack/KubernetesService.go
new file mode 100644
index 0000000..af5a801
--- /dev/null
+++ b/cloudstack/KubernetesService.go
@@ -0,0 +1,2170 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+package cloudstack
+
+import (
+	"encoding/json"
+	"fmt"
+	"net/url"
+	"strconv"
+	"strings"
+)
+
+type KubernetesServiceIface interface {
+	AddKubernetesSupportedVersion(p *AddKubernetesSupportedVersionParams) (*AddKubernetesSupportedVersionResponse, error)
+	NewAddKubernetesSupportedVersionParams(mincpunumber int, minmemory int, semanticversion string) *AddKubernetesSupportedVersionParams
+	CreateKubernetesCluster(p *CreateKubernetesClusterParams) (*CreateKubernetesClusterResponse, error)
+	NewCreateKubernetesClusterParams(description string, kubernetesversionid string, name string, serviceofferingid string, size int64, zoneid string) *CreateKubernetesClusterParams
+	DeleteKubernetesCluster(p *DeleteKubernetesClusterParams) (*DeleteKubernetesClusterResponse, error)
+	NewDeleteKubernetesClusterParams(id string) *DeleteKubernetesClusterParams
+	DeleteKubernetesSupportedVersion(p *DeleteKubernetesSupportedVersionParams) (*DeleteKubernetesSupportedVersionResponse, error)
+	NewDeleteKubernetesSupportedVersionParams(id string) *DeleteKubernetesSupportedVersionParams
+	GetKubernetesClusterConfig(p *GetKubernetesClusterConfigParams) (*GetKubernetesClusterConfigResponse, error)
+	NewGetKubernetesClusterConfigParams() *GetKubernetesClusterConfigParams
+	ListKubernetesClusters(p *ListKubernetesClustersParams) (*ListKubernetesClustersResponse, error)
+	NewListKubernetesClustersParams() *ListKubernetesClustersParams
+	GetKubernetesClusterID(name string, opts ...OptionFunc) (string, int, error)
+	GetKubernetesClusterByName(name string, opts ...OptionFunc) (*KubernetesCluster, int, error)
+	GetKubernetesClusterByID(id string, opts ...OptionFunc) (*KubernetesCluster, int, error)
+	ListKubernetesSupportedVersions(p *ListKubernetesSupportedVersionsParams) (*ListKubernetesSupportedVersionsResponse, error)
+	NewListKubernetesSupportedVersionsParams() *ListKubernetesSupportedVersionsParams
+	GetKubernetesSupportedVersionID(keyword string, opts ...OptionFunc) (string, int, error)
+	GetKubernetesSupportedVersionByName(name string, opts ...OptionFunc) (*KubernetesSupportedVersion, int, error)
+	GetKubernetesSupportedVersionByID(id string, opts ...OptionFunc) (*KubernetesSupportedVersion, int, error)
+	ScaleKubernetesCluster(p *ScaleKubernetesClusterParams) (*ScaleKubernetesClusterResponse, error)
+	NewScaleKubernetesClusterParams(id string) *ScaleKubernetesClusterParams
+	StartKubernetesCluster(p *StartKubernetesClusterParams) (*StartKubernetesClusterResponse, error)
+	NewStartKubernetesClusterParams(id string) *StartKubernetesClusterParams
+	StopKubernetesCluster(p *StopKubernetesClusterParams) (*StopKubernetesClusterResponse, error)
+	NewStopKubernetesClusterParams(id string) *StopKubernetesClusterParams
+	UpdateKubernetesSupportedVersion(p *UpdateKubernetesSupportedVersionParams) (*UpdateKubernetesSupportedVersionResponse, error)
+	NewUpdateKubernetesSupportedVersionParams(id string, state string) *UpdateKubernetesSupportedVersionParams
+	UpgradeKubernetesCluster(p *UpgradeKubernetesClusterParams) (*UpgradeKubernetesClusterResponse, error)
+	NewUpgradeKubernetesClusterParams(id string, kubernetesversionid string) *UpgradeKubernetesClusterParams
+}
+
+type AddKubernetesSupportedVersionParams struct {
+	p map[string]interface{}
+}
+
+func (p *AddKubernetesSupportedVersionParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["checksum"]; found {
+		u.Set("checksum", v.(string))
+	}
+	if v, found := p.p["mincpunumber"]; found {
+		vv := strconv.Itoa(v.(int))
+		u.Set("mincpunumber", vv)
+	}
+	if v, found := p.p["minmemory"]; found {
+		vv := strconv.Itoa(v.(int))
+		u.Set("minmemory", vv)
+	}
+	if v, found := p.p["name"]; found {
+		u.Set("name", v.(string))
+	}
+	if v, found := p.p["semanticversion"]; found {
+		u.Set("semanticversion", v.(string))
+	}
+	if v, found := p.p["url"]; found {
+		u.Set("url", v.(string))
+	}
+	if v, found := p.p["zoneid"]; found {
+		u.Set("zoneid", v.(string))
+	}
+	return u
+}
+
+func (p *AddKubernetesSupportedVersionParams) SetChecksum(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["checksum"] = v
+}
+
+func (p *AddKubernetesSupportedVersionParams) GetChecksum() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["checksum"].(string)
+	return value, ok
+}
+
+func (p *AddKubernetesSupportedVersionParams) SetMincpunumber(v int) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["mincpunumber"] = v
+}
+
+func (p *AddKubernetesSupportedVersionParams) GetMincpunumber() (int, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["mincpunumber"].(int)
+	return value, ok
+}
+
+func (p *AddKubernetesSupportedVersionParams) SetMinmemory(v int) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["minmemory"] = v
+}
+
+func (p *AddKubernetesSupportedVersionParams) GetMinmemory() (int, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["minmemory"].(int)
+	return value, ok
+}
+
+func (p *AddKubernetesSupportedVersionParams) SetName(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["name"] = v
+}
+
+func (p *AddKubernetesSupportedVersionParams) GetName() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["name"].(string)
+	return value, ok
+}
+
+func (p *AddKubernetesSupportedVersionParams) SetSemanticversion(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["semanticversion"] = v
+}
+
+func (p *AddKubernetesSupportedVersionParams) GetSemanticversion() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["semanticversion"].(string)
+	return value, ok
+}
+
+func (p *AddKubernetesSupportedVersionParams) SetUrl(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["url"] = v
+}
+
+func (p *AddKubernetesSupportedVersionParams) GetUrl() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["url"].(string)
+	return value, ok
+}
+
+func (p *AddKubernetesSupportedVersionParams) SetZoneid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["zoneid"] = v
+}
+
+func (p *AddKubernetesSupportedVersionParams) GetZoneid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["zoneid"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new AddKubernetesSupportedVersionParams instance,
+// as then you are sure you have configured all required params
+func (s *KubernetesService) NewAddKubernetesSupportedVersionParams(mincpunumber int, minmemory int, semanticversion string) *AddKubernetesSupportedVersionParams {
+	p := &AddKubernetesSupportedVersionParams{}
+	p.p = make(map[string]interface{})
+	p.p["mincpunumber"] = mincpunumber
+	p.p["minmemory"] = minmemory
+	p.p["semanticversion"] = semanticversion
+	return p
+}
+
+// Add a supported Kubernetes version
+func (s *KubernetesService) AddKubernetesSupportedVersion(p *AddKubernetesSupportedVersionParams) (*AddKubernetesSupportedVersionResponse, error) {
+	resp, err := s.cs.newRequest("addKubernetesSupportedVersion", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r AddKubernetesSupportedVersionResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	return &r, nil
+}
+
+type AddKubernetesSupportedVersionResponse struct {
+	Id                  string `json:"id"`
+	Isoid               string `json:"isoid"`
+	Isoname             string `json:"isoname"`
+	Isostate            string `json:"isostate"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
+	Mincpunumber        int    `json:"mincpunumber"`
+	Minmemory           int    `json:"minmemory"`
+	Name                string `json:"name"`
+	Semanticversion     string `json:"semanticversion"`
+	State               string `json:"state"`
+	Supportsautoscaling bool   `json:"supportsautoscaling"`
+	Supportsha          bool   `json:"supportsha"`
+	Zoneid              string `json:"zoneid"`
+	Zonename            string `json:"zonename"`
+}
+
+type CreateKubernetesClusterParams struct {
+	p map[string]interface{}
+}
+
+func (p *CreateKubernetesClusterParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["account"]; found {
+		u.Set("account", v.(string))
+	}
+	if v, found := p.p["controlnodes"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("controlnodes", vv)
+	}
+	if v, found := p.p["description"]; found {
+		u.Set("description", v.(string))
+	}
+	if v, found := p.p["dockerregistryemail"]; found {
+		u.Set("dockerregistryemail", v.(string))
+	}
+	if v, found := p.p["dockerregistrypassword"]; found {
+		u.Set("dockerregistrypassword", v.(string))
+	}
+	if v, found := p.p["dockerregistryurl"]; found {
+		u.Set("dockerregistryurl", v.(string))
+	}
+	if v, found := p.p["dockerregistryusername"]; found {
+		u.Set("dockerregistryusername", v.(string))
+	}
+	if v, found := p.p["domainid"]; found {
+		u.Set("domainid", v.(string))
+	}
+	if v, found := p.p["externalloadbalanceripaddress"]; found {
+		u.Set("externalloadbalanceripaddress", v.(string))
+	}
+	if v, found := p.p["keypair"]; found {
+		u.Set("keypair", v.(string))
+	}
+	if v, found := p.p["kubernetesversionid"]; found {
+		u.Set("kubernetesversionid", v.(string))
+	}
+	if v, found := p.p["masternodes"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("masternodes", vv)
+	}
+	if v, found := p.p["name"]; found {
+		u.Set("name", v.(string))
+	}
+	if v, found := p.p["networkid"]; found {
+		u.Set("networkid", v.(string))
+	}
+	if v, found := p.p["noderootdisksize"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("noderootdisksize", vv)
+	}
+	if v, found := p.p["projectid"]; found {
+		u.Set("projectid", v.(string))
+	}
+	if v, found := p.p["serviceofferingid"]; found {
+		u.Set("serviceofferingid", v.(string))
+	}
+	if v, found := p.p["size"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("size", vv)
+	}
+	if v, found := p.p["zoneid"]; found {
+		u.Set("zoneid", v.(string))
+	}
+	return u
+}
+
+func (p *CreateKubernetesClusterParams) SetAccount(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["account"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetAccount() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["account"].(string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetControlnodes(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["controlnodes"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetControlnodes() (int64, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["controlnodes"].(int64)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetDescription(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["description"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetDescription() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["description"].(string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetDockerregistryemail(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["dockerregistryemail"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetDockerregistryemail() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["dockerregistryemail"].(string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetDockerregistrypassword(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["dockerregistrypassword"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetDockerregistrypassword() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["dockerregistrypassword"].(string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetDockerregistryurl(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["dockerregistryurl"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetDockerregistryurl() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["dockerregistryurl"].(string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetDockerregistryusername(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["dockerregistryusername"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetDockerregistryusername() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["dockerregistryusername"].(string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetDomainid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["domainid"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetDomainid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["domainid"].(string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetExternalloadbalanceripaddress(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["externalloadbalanceripaddress"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetExternalloadbalanceripaddress() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["externalloadbalanceripaddress"].(string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetKeypair(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["keypair"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetKeypair() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["keypair"].(string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetKubernetesversionid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["kubernetesversionid"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetKubernetesversionid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["kubernetesversionid"].(string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetMasternodes(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["masternodes"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetMasternodes() (int64, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["masternodes"].(int64)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetName(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["name"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetName() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["name"].(string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetNetworkid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["networkid"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetNetworkid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["networkid"].(string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetNoderootdisksize(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["noderootdisksize"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetNoderootdisksize() (int64, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["noderootdisksize"].(int64)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetProjectid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["projectid"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetProjectid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["projectid"].(string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetServiceofferingid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["serviceofferingid"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetServiceofferingid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["serviceofferingid"].(string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetSize(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["size"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetSize() (int64, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["size"].(int64)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetZoneid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["zoneid"] = v
+}
+
+func (p *CreateKubernetesClusterParams) GetZoneid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["zoneid"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new CreateKubernetesClusterParams instance,
+// as then you are sure you have configured all required params
+func (s *KubernetesService) NewCreateKubernetesClusterParams(description string, kubernetesversionid string, name string, serviceofferingid string, size int64, zoneid string) *CreateKubernetesClusterParams {
+	p := &CreateKubernetesClusterParams{}
+	p.p = make(map[string]interface{})
+	p.p["description"] = description
+	p.p["kubernetesversionid"] = kubernetesversionid
+	p.p["name"] = name
+	p.p["serviceofferingid"] = serviceofferingid
+	p.p["size"] = size
+	p.p["zoneid"] = zoneid
+	return p
+}
+
+// Creates a Kubernetes cluster
+func (s *KubernetesService) CreateKubernetesCluster(p *CreateKubernetesClusterParams) (*CreateKubernetesClusterResponse, error) {
+	resp, err := s.cs.newRequest("createKubernetesCluster", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r CreateKubernetesClusterResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	// If we have a async client, we need to wait for the async result
+	if s.cs.async {
+		b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
+		if err != nil {
+			if err == AsyncTimeoutErr {
+				return &r, err
+			}
+			return nil, err
+		}
+
+		b, err = getRawValue(b)
+		if err != nil {
+			return nil, err
+		}
+
+		if err := json.Unmarshal(b, &r); err != nil {
+			return nil, err
+		}
+	}
+
+	return &r, nil
+}
+
+type CreateKubernetesClusterResponse struct {
+	Account               string   `json:"account"`
+	Associatednetworkname string   `json:"associatednetworkname"`
+	Autoscalingenabled    bool     `json:"autoscalingenabled"`
+	Consoleendpoint       string   `json:"consoleendpoint"`
+	Controlnodes          int64    `json:"controlnodes"`
+	Cpunumber             string   `json:"cpunumber"`
+	Description           string   `json:"description"`
+	Domain                string   `json:"domain"`
+	Domainid              string   `json:"domainid"`
+	Endpoint              string   `json:"endpoint"`
+	Hasannotations        bool     `json:"hasannotations"`
+	Id                    string   `json:"id"`
+	Ipaddress             string   `json:"ipaddress"`
+	Ipaddressid           string   `json:"ipaddressid"`
+	JobID                 string   `json:"jobid"`
+	Jobstatus             int      `json:"jobstatus"`
+	Keypair               string   `json:"keypair"`
+	Kubernetesversionid   string   `json:"kubernetesversionid"`
+	Kubernetesversionname string   `json:"kubernetesversionname"`
+	Masternodes           int64    `json:"masternodes"`
+	Maxsize               int64    `json:"maxsize"`
+	Memory                string   `json:"memory"`
+	Minsize               int64    `json:"minsize"`
+	Name                  string   `json:"name"`
+	Networkid             string   `json:"networkid"`
+	Project               string   `json:"project"`
+	Projectid             string   `json:"projectid"`
+	Serviceofferingid     string   `json:"serviceofferingid"`
+	Serviceofferingname   string   `json:"serviceofferingname"`
+	Size                  int64    `json:"size"`
+	State                 string   `json:"state"`
+	Templateid            string   `json:"templateid"`
+	Virtualmachines       []string `json:"virtualmachines"`
+	Zoneid                string   `json:"zoneid"`
+	Zonename              string   `json:"zonename"`
+}
+
+type DeleteKubernetesClusterParams struct {
+	p map[string]interface{}
+}
+
+func (p *DeleteKubernetesClusterParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["id"]; found {
+		u.Set("id", v.(string))
+	}
+	return u
+}
+
+func (p *DeleteKubernetesClusterParams) SetId(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["id"] = v
+}
+
+func (p *DeleteKubernetesClusterParams) GetId() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["id"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new DeleteKubernetesClusterParams instance,
+// as then you are sure you have configured all required params
+func (s *KubernetesService) NewDeleteKubernetesClusterParams(id string) *DeleteKubernetesClusterParams {
+	p := &DeleteKubernetesClusterParams{}
+	p.p = make(map[string]interface{})
+	p.p["id"] = id
+	return p
+}
+
+// Deletes a Kubernetes cluster
+func (s *KubernetesService) DeleteKubernetesCluster(p *DeleteKubernetesClusterParams) (*DeleteKubernetesClusterResponse, error) {
+	resp, err := s.cs.newRequest("deleteKubernetesCluster", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r DeleteKubernetesClusterResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	// If we have a async client, we need to wait for the async result
+	if s.cs.async {
+		b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
+		if err != nil {
+			if err == AsyncTimeoutErr {
+				return &r, err
+			}
+			return nil, err
+		}
+
+		if err := json.Unmarshal(b, &r); err != nil {
+			return nil, err
+		}
+	}
+
+	return &r, nil
+}
+
+type DeleteKubernetesClusterResponse struct {
+	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
+	Success     bool   `json:"success"`
+}
+
+type DeleteKubernetesSupportedVersionParams struct {
+	p map[string]interface{}
+}
+
+func (p *DeleteKubernetesSupportedVersionParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["id"]; found {
+		u.Set("id", v.(string))
+	}
+	return u
+}
+
+func (p *DeleteKubernetesSupportedVersionParams) SetId(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["id"] = v
+}
+
+func (p *DeleteKubernetesSupportedVersionParams) GetId() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["id"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new DeleteKubernetesSupportedVersionParams instance,
+// as then you are sure you have configured all required params
+func (s *KubernetesService) NewDeleteKubernetesSupportedVersionParams(id string) *DeleteKubernetesSupportedVersionParams {
+	p := &DeleteKubernetesSupportedVersionParams{}
+	p.p = make(map[string]interface{})
+	p.p["id"] = id
+	return p
+}
+
+// Deletes a Kubernetes cluster
+func (s *KubernetesService) DeleteKubernetesSupportedVersion(p *DeleteKubernetesSupportedVersionParams) (*DeleteKubernetesSupportedVersionResponse, error) {
+	resp, err := s.cs.newRequest("deleteKubernetesSupportedVersion", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r DeleteKubernetesSupportedVersionResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	// If we have a async client, we need to wait for the async result
+	if s.cs.async {
+		b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
+		if err != nil {
+			if err == AsyncTimeoutErr {
+				return &r, err
+			}
+			return nil, err
+		}
+
+		if err := json.Unmarshal(b, &r); err != nil {
+			return nil, err
+		}
+	}
+
+	return &r, nil
+}
+
+type DeleteKubernetesSupportedVersionResponse struct {
+	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
+	Success     bool   `json:"success"`
+}
+
+type GetKubernetesClusterConfigParams struct {
+	p map[string]interface{}
+}
+
+func (p *GetKubernetesClusterConfigParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["id"]; found {
+		u.Set("id", v.(string))
+	}
+	return u
+}
+
+func (p *GetKubernetesClusterConfigParams) SetId(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["id"] = v
+}
+
+func (p *GetKubernetesClusterConfigParams) GetId() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["id"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new GetKubernetesClusterConfigParams instance,
+// as then you are sure you have configured all required params
+func (s *KubernetesService) NewGetKubernetesClusterConfigParams() *GetKubernetesClusterConfigParams {
+	p := &GetKubernetesClusterConfigParams{}
+	p.p = make(map[string]interface{})
+	return p
+}
+
+// Get Kubernetes cluster config
+func (s *KubernetesService) GetKubernetesClusterConfig(p *GetKubernetesClusterConfigParams) (*GetKubernetesClusterConfigResponse, error) {
+	resp, err := s.cs.newRequest("getKubernetesClusterConfig", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r GetKubernetesClusterConfigResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	return &r, nil
+}
+
+type GetKubernetesClusterConfigResponse struct {
+	Configdata string `json:"configdata"`
+	Id         string `json:"id"`
+	JobID      string `json:"jobid"`
+	Jobstatus  int    `json:"jobstatus"`
+	Name       string `json:"name"`
+}
+
+type ListKubernetesClustersParams struct {
+	p map[string]interface{}
+}
+
+func (p *ListKubernetesClustersParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["account"]; found {
+		u.Set("account", v.(string))
+	}
+	if v, found := p.p["domainid"]; found {
+		u.Set("domainid", v.(string))
+	}
+	if v, found := p.p["id"]; found {
+		u.Set("id", v.(string))
+	}
+	if v, found := p.p["isrecursive"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("isrecursive", vv)
+	}
+	if v, found := p.p["keyword"]; found {
+		u.Set("keyword", v.(string))
+	}
+	if v, found := p.p["listall"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("listall", vv)
+	}
+	if v, found := p.p["name"]; found {
+		u.Set("name", v.(string))
+	}
+	if v, found := p.p["page"]; found {
+		vv := strconv.Itoa(v.(int))
+		u.Set("page", vv)
+	}
+	if v, found := p.p["pagesize"]; found {
+		vv := strconv.Itoa(v.(int))
+		u.Set("pagesize", vv)
+	}
+	if v, found := p.p["projectid"]; found {
+		u.Set("projectid", v.(string))
+	}
+	if v, found := p.p["state"]; found {
+		u.Set("state", v.(string))
+	}
+	return u
+}
+
+func (p *ListKubernetesClustersParams) SetAccount(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["account"] = v
+}
+
+func (p *ListKubernetesClustersParams) GetAccount() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["account"].(string)
+	return value, ok
+}
+
+func (p *ListKubernetesClustersParams) SetDomainid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["domainid"] = v
+}
+
+func (p *ListKubernetesClustersParams) GetDomainid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["domainid"].(string)
+	return value, ok
+}
+
+func (p *ListKubernetesClustersParams) SetId(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["id"] = v
+}
+
+func (p *ListKubernetesClustersParams) GetId() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["id"].(string)
+	return value, ok
+}
+
+func (p *ListKubernetesClustersParams) SetIsrecursive(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["isrecursive"] = v
+}
+
+func (p *ListKubernetesClustersParams) GetIsrecursive() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["isrecursive"].(bool)
+	return value, ok
+}
+
+func (p *ListKubernetesClustersParams) SetKeyword(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["keyword"] = v
+}
+
+func (p *ListKubernetesClustersParams) GetKeyword() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["keyword"].(string)
+	return value, ok
+}
+
+func (p *ListKubernetesClustersParams) SetListall(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["listall"] = v
+}
+
+func (p *ListKubernetesClustersParams) GetListall() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["listall"].(bool)
+	return value, ok
+}
+
+func (p *ListKubernetesClustersParams) SetName(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["name"] = v
+}
+
+func (p *ListKubernetesClustersParams) GetName() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["name"].(string)
+	return value, ok
+}
+
+func (p *ListKubernetesClustersParams) SetPage(v int) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["page"] = v
+}
+
+func (p *ListKubernetesClustersParams) GetPage() (int, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["page"].(int)
+	return value, ok
+}
+
+func (p *ListKubernetesClustersParams) SetPagesize(v int) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["pagesize"] = v
+}
+
+func (p *ListKubernetesClustersParams) GetPagesize() (int, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["pagesize"].(int)
+	return value, ok
+}
+
+func (p *ListKubernetesClustersParams) SetProjectid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["projectid"] = v
+}
+
+func (p *ListKubernetesClustersParams) GetProjectid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["projectid"].(string)
+	return value, ok
+}
+
+func (p *ListKubernetesClustersParams) SetState(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["state"] = v
+}
+
+func (p *ListKubernetesClustersParams) GetState() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["state"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new ListKubernetesClustersParams instance,
+// as then you are sure you have configured all required params
+func (s *KubernetesService) NewListKubernetesClustersParams() *ListKubernetesClustersParams {
+	p := &ListKubernetesClustersParams{}
+	p.p = make(map[string]interface{})
+	return p
+}
+
+// This is a courtesy helper function, which in some cases may not work as expected!
+func (s *KubernetesService) GetKubernetesClusterID(name string, opts ...OptionFunc) (string, int, error) {
+	p := &ListKubernetesClustersParams{}
+	p.p = make(map[string]interface{})
+
+	p.p["name"] = name
+
+	for _, fn := range append(s.cs.options, opts...) {
+		if err := fn(s.cs, p); err != nil {
+			return "", -1, err
+		}
+	}
+
+	l, err := s.ListKubernetesClusters(p)
+	if err != nil {
+		return "", -1, err
+	}
+
+	if l.Count == 0 {
+		return "", l.Count, fmt.Errorf("No match found for %s: %+v", name, l)
+	}
+
+	if l.Count == 1 {
+		return l.KubernetesClusters[0].Id, l.Count, nil
+	}
+
+	if l.Count > 1 {
+		for _, v := range l.KubernetesClusters {
+			if v.Name == name {
+				return v.Id, l.Count, nil
+			}
+		}
+	}
+	return "", l.Count, fmt.Errorf("Could not find an exact match for %s: %+v", name, l)
+}
+
+// This is a courtesy helper function, which in some cases may not work as expected!
+func (s *KubernetesService) GetKubernetesClusterByName(name string, opts ...OptionFunc) (*KubernetesCluster, int, error) {
+	id, count, err := s.GetKubernetesClusterID(name, opts...)
+	if err != nil {
+		return nil, count, err
+	}
+
+	r, count, err := s.GetKubernetesClusterByID(id, opts...)
+	if err != nil {
+		return nil, count, err
+	}
+	return r, count, nil
+}
+
+// This is a courtesy helper function, which in some cases may not work as expected!
+func (s *KubernetesService) GetKubernetesClusterByID(id string, opts ...OptionFunc) (*KubernetesCluster, int, error) {
+	p := &ListKubernetesClustersParams{}
+	p.p = make(map[string]interface{})
+
+	p.p["id"] = id
+
+	for _, fn := range append(s.cs.options, opts...) {
+		if err := fn(s.cs, p); err != nil {
+			return nil, -1, err
+		}
+	}
+
+	l, err := s.ListKubernetesClusters(p)
+	if err != nil {
+		if strings.Contains(err.Error(), fmt.Sprintf(
+			"Invalid parameter id value=%s due to incorrect long value format, "+
+				"or entity does not exist", id)) {
+			return nil, 0, fmt.Errorf("No match found for %s: %+v", id, l)
+		}
+		return nil, -1, err
+	}
+
+	if l.Count == 0 {
+		return nil, l.Count, fmt.Errorf("No match found for %s: %+v", id, l)
+	}
+
+	if l.Count == 1 {
+		return l.KubernetesClusters[0], l.Count, nil
+	}
+	return nil, l.Count, fmt.Errorf("There is more then one result for KubernetesCluster UUID: %s!", id)
+}
+
+// Lists Kubernetes clusters
+func (s *KubernetesService) ListKubernetesClusters(p *ListKubernetesClustersParams) (*ListKubernetesClustersResponse, error) {
+	resp, err := s.cs.newRequest("listKubernetesClusters", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r ListKubernetesClustersResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	return &r, nil
+}
+
+type ListKubernetesClustersResponse struct {
+	Count              int                  `json:"count"`
+	KubernetesClusters []*KubernetesCluster `json:"kubernetescluster"`
+}
+
+type KubernetesCluster struct {
+	Account               string   `json:"account"`
+	Associatednetworkname string   `json:"associatednetworkname"`
+	Autoscalingenabled    bool     `json:"autoscalingenabled"`
+	Consoleendpoint       string   `json:"consoleendpoint"`
+	Controlnodes          int64    `json:"controlnodes"`
+	Cpunumber             string   `json:"cpunumber"`
+	Description           string   `json:"description"`
+	Domain                string   `json:"domain"`
+	Domainid              string   `json:"domainid"`
+	Endpoint              string   `json:"endpoint"`
+	Hasannotations        bool     `json:"hasannotations"`
+	Id                    string   `json:"id"`
+	Ipaddress             string   `json:"ipaddress"`
+	Ipaddressid           string   `json:"ipaddressid"`
+	JobID                 string   `json:"jobid"`
+	Jobstatus             int      `json:"jobstatus"`
+	Keypair               string   `json:"keypair"`
+	Kubernetesversionid   string   `json:"kubernetesversionid"`
+	Kubernetesversionname string   `json:"kubernetesversionname"`
+	Masternodes           int64    `json:"masternodes"`
+	Maxsize               int64    `json:"maxsize"`
+	Memory                string   `json:"memory"`
+	Minsize               int64    `json:"minsize"`
+	Name                  string   `json:"name"`
+	Networkid             string   `json:"networkid"`
+	Project               string   `json:"project"`
+	Projectid             string   `json:"projectid"`
+	Serviceofferingid     string   `json:"serviceofferingid"`
+	Serviceofferingname   string   `json:"serviceofferingname"`
+	Size                  int64    `json:"size"`
+	State                 string   `json:"state"`
+	Templateid            string   `json:"templateid"`
+	Virtualmachines       []string `json:"virtualmachines"`
+	Zoneid                string   `json:"zoneid"`
+	Zonename              string   `json:"zonename"`
+}
+
+type ListKubernetesSupportedVersionsParams struct {
+	p map[string]interface{}
+}
+
+func (p *ListKubernetesSupportedVersionsParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["id"]; found {
+		u.Set("id", v.(string))
+	}
+	if v, found := p.p["keyword"]; found {
+		u.Set("keyword", v.(string))
+	}
+	if v, found := p.p["minimumkubernetesversionid"]; found {
+		u.Set("minimumkubernetesversionid", v.(string))
+	}
+	if v, found := p.p["minimumsemanticversion"]; found {
+		u.Set("minimumsemanticversion", v.(string))
+	}
+	if v, found := p.p["page"]; found {
+		vv := strconv.Itoa(v.(int))
+		u.Set("page", vv)
+	}
+	if v, found := p.p["pagesize"]; found {
+		vv := strconv.Itoa(v.(int))
+		u.Set("pagesize", vv)
+	}
+	if v, found := p.p["zoneid"]; found {
+		u.Set("zoneid", v.(string))
+	}
+	return u
+}
+
+func (p *ListKubernetesSupportedVersionsParams) SetId(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["id"] = v
+}
+
+func (p *ListKubernetesSupportedVersionsParams) GetId() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["id"].(string)
+	return value, ok
+}
+
+func (p *ListKubernetesSupportedVersionsParams) SetKeyword(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["keyword"] = v
+}
+
+func (p *ListKubernetesSupportedVersionsParams) GetKeyword() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["keyword"].(string)
+	return value, ok
+}
+
+func (p *ListKubernetesSupportedVersionsParams) SetMinimumkubernetesversionid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["minimumkubernetesversionid"] = v
+}
+
+func (p *ListKubernetesSupportedVersionsParams) GetMinimumkubernetesversionid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["minimumkubernetesversionid"].(string)
+	return value, ok
+}
+
+func (p *ListKubernetesSupportedVersionsParams) SetMinimumsemanticversion(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["minimumsemanticversion"] = v
+}
+
+func (p *ListKubernetesSupportedVersionsParams) GetMinimumsemanticversion() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["minimumsemanticversion"].(string)
+	return value, ok
+}
+
+func (p *ListKubernetesSupportedVersionsParams) SetPage(v int) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["page"] = v
+}
+
+func (p *ListKubernetesSupportedVersionsParams) GetPage() (int, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["page"].(int)
+	return value, ok
+}
+
+func (p *ListKubernetesSupportedVersionsParams) SetPagesize(v int) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["pagesize"] = v
+}
+
+func (p *ListKubernetesSupportedVersionsParams) GetPagesize() (int, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["pagesize"].(int)
+	return value, ok
+}
+
+func (p *ListKubernetesSupportedVersionsParams) SetZoneid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["zoneid"] = v
+}
+
+func (p *ListKubernetesSupportedVersionsParams) GetZoneid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["zoneid"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new ListKubernetesSupportedVersionsParams instance,
+// as then you are sure you have configured all required params
+func (s *KubernetesService) NewListKubernetesSupportedVersionsParams() *ListKubernetesSupportedVersionsParams {
+	p := &ListKubernetesSupportedVersionsParams{}
+	p.p = make(map[string]interface{})
+	return p
+}
+
+// This is a courtesy helper function, which in some cases may not work as expected!
+func (s *KubernetesService) GetKubernetesSupportedVersionID(keyword string, opts ...OptionFunc) (string, int, error) {
+	p := &ListKubernetesSupportedVersionsParams{}
+	p.p = make(map[string]interface{})
+
+	p.p["keyword"] = keyword
+
+	for _, fn := range append(s.cs.options, opts...) {
+		if err := fn(s.cs, p); err != nil {
+			return "", -1, err
+		}
+	}
+
+	l, err := s.ListKubernetesSupportedVersions(p)
+	if err != nil {
+		return "", -1, err
+	}
+
+	if l.Count == 0 {
+		return "", l.Count, fmt.Errorf("No match found for %s: %+v", keyword, l)
+	}
+
+	if l.Count == 1 {
+		return l.KubernetesSupportedVersions[0].Id, l.Count, nil
+	}
+
+	if l.Count > 1 {
+		for _, v := range l.KubernetesSupportedVersions {
+			if v.Name == keyword {
+				return v.Id, l.Count, nil
+			}
+		}
+	}
+	return "", l.Count, fmt.Errorf("Could not find an exact match for %s: %+v", keyword, l)
+}
+
+// This is a courtesy helper function, which in some cases may not work as expected!
+func (s *KubernetesService) GetKubernetesSupportedVersionByName(name string, opts ...OptionFunc) (*KubernetesSupportedVersion, int, error) {
+	id, count, err := s.GetKubernetesSupportedVersionID(name, opts...)
+	if err != nil {
+		return nil, count, err
+	}
+
+	r, count, err := s.GetKubernetesSupportedVersionByID(id, opts...)
+	if err != nil {
+		return nil, count, err
+	}
+	return r, count, nil
+}
+
+// This is a courtesy helper function, which in some cases may not work as expected!
+func (s *KubernetesService) GetKubernetesSupportedVersionByID(id string, opts ...OptionFunc) (*KubernetesSupportedVersion, int, error) {
+	p := &ListKubernetesSupportedVersionsParams{}
+	p.p = make(map[string]interface{})
+
+	p.p["id"] = id
+
+	for _, fn := range append(s.cs.options, opts...) {
+		if err := fn(s.cs, p); err != nil {
+			return nil, -1, err
+		}
+	}
+
+	l, err := s.ListKubernetesSupportedVersions(p)
+	if err != nil {
+		if strings.Contains(err.Error(), fmt.Sprintf(
+			"Invalid parameter id value=%s due to incorrect long value format, "+
+				"or entity does not exist", id)) {
+			return nil, 0, fmt.Errorf("No match found for %s: %+v", id, l)
+		}
+		return nil, -1, err
+	}
+
+	if l.Count == 0 {
+		return nil, l.Count, fmt.Errorf("No match found for %s: %+v", id, l)
+	}
+
+	if l.Count == 1 {
+		return l.KubernetesSupportedVersions[0], l.Count, nil
+	}
+	return nil, l.Count, fmt.Errorf("There is more then one result for KubernetesSupportedVersion UUID: %s!", id)
+}
+
+// Lists supported Kubernetes version
+func (s *KubernetesService) ListKubernetesSupportedVersions(p *ListKubernetesSupportedVersionsParams) (*ListKubernetesSupportedVersionsResponse, error) {
+	resp, err := s.cs.newRequest("listKubernetesSupportedVersions", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r ListKubernetesSupportedVersionsResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	return &r, nil
+}
+
+type ListKubernetesSupportedVersionsResponse struct {
+	Count                       int                           `json:"count"`
+	KubernetesSupportedVersions []*KubernetesSupportedVersion `json:"kubernetessupportedversion"`
+}
+
+type KubernetesSupportedVersion struct {
+	Id                  string `json:"id"`
+	Isoid               string `json:"isoid"`
+	Isoname             string `json:"isoname"`
+	Isostate            string `json:"isostate"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
+	Mincpunumber        int    `json:"mincpunumber"`
+	Minmemory           int    `json:"minmemory"`
+	Name                string `json:"name"`
+	Semanticversion     string `json:"semanticversion"`
+	State               string `json:"state"`
+	Supportsautoscaling bool   `json:"supportsautoscaling"`
+	Supportsha          bool   `json:"supportsha"`
+	Zoneid              string `json:"zoneid"`
+	Zonename            string `json:"zonename"`
+}
+
+type ScaleKubernetesClusterParams struct {
+	p map[string]interface{}
+}
+
+func (p *ScaleKubernetesClusterParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["autoscalingenabled"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("autoscalingenabled", vv)
+	}
+	if v, found := p.p["id"]; found {
+		u.Set("id", v.(string))
+	}
+	if v, found := p.p["maxsize"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("maxsize", vv)
+	}
+	if v, found := p.p["minsize"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("minsize", vv)
+	}
+	if v, found := p.p["nodeids"]; found {
+		vv := strings.Join(v.([]string), ",")
+		u.Set("nodeids", vv)
+	}
+	if v, found := p.p["serviceofferingid"]; found {
+		u.Set("serviceofferingid", v.(string))
+	}
+	if v, found := p.p["size"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("size", vv)
+	}
+	return u
+}
+
+func (p *ScaleKubernetesClusterParams) SetAutoscalingenabled(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["autoscalingenabled"] = v
+}
+
+func (p *ScaleKubernetesClusterParams) GetAutoscalingenabled() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["autoscalingenabled"].(bool)
+	return value, ok
+}
+
+func (p *ScaleKubernetesClusterParams) SetId(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["id"] = v
+}
+
+func (p *ScaleKubernetesClusterParams) GetId() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["id"].(string)
+	return value, ok
+}
+
+func (p *ScaleKubernetesClusterParams) SetMaxsize(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["maxsize"] = v
+}
+
+func (p *ScaleKubernetesClusterParams) GetMaxsize() (int64, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["maxsize"].(int64)
+	return value, ok
+}
+
+func (p *ScaleKubernetesClusterParams) SetMinsize(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["minsize"] = v
+}
+
+func (p *ScaleKubernetesClusterParams) GetMinsize() (int64, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["minsize"].(int64)
+	return value, ok
+}
+
+func (p *ScaleKubernetesClusterParams) SetNodeids(v []string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["nodeids"] = v
+}
+
+func (p *ScaleKubernetesClusterParams) GetNodeids() ([]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["nodeids"].([]string)
+	return value, ok
+}
+
+func (p *ScaleKubernetesClusterParams) SetServiceofferingid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["serviceofferingid"] = v
+}
+
+func (p *ScaleKubernetesClusterParams) GetServiceofferingid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["serviceofferingid"].(string)
+	return value, ok
+}
+
+func (p *ScaleKubernetesClusterParams) SetSize(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["size"] = v
+}
+
+func (p *ScaleKubernetesClusterParams) GetSize() (int64, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["size"].(int64)
+	return value, ok
+}
+
+// You should always use this function to get a new ScaleKubernetesClusterParams instance,
+// as then you are sure you have configured all required params
+func (s *KubernetesService) NewScaleKubernetesClusterParams(id string) *ScaleKubernetesClusterParams {
+	p := &ScaleKubernetesClusterParams{}
+	p.p = make(map[string]interface{})
+	p.p["id"] = id
+	return p
+}
+
+// Scales a created, running or stopped Kubernetes cluster
+func (s *KubernetesService) ScaleKubernetesCluster(p *ScaleKubernetesClusterParams) (*ScaleKubernetesClusterResponse, error) {
+	resp, err := s.cs.newRequest("scaleKubernetesCluster", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r ScaleKubernetesClusterResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	// If we have a async client, we need to wait for the async result
+	if s.cs.async {
+		b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
+		if err != nil {
+			if err == AsyncTimeoutErr {
+				return &r, err
+			}
+			return nil, err
+		}
+
+		b, err = getRawValue(b)
+		if err != nil {
+			return nil, err
+		}
+
+		if err := json.Unmarshal(b, &r); err != nil {
+			return nil, err
+		}
+	}
+
+	return &r, nil
+}
+
+type ScaleKubernetesClusterResponse struct {
+	Account               string   `json:"account"`
+	Associatednetworkname string   `json:"associatednetworkname"`
+	Autoscalingenabled    bool     `json:"autoscalingenabled"`
+	Consoleendpoint       string   `json:"consoleendpoint"`
+	Controlnodes          int64    `json:"controlnodes"`
+	Cpunumber             string   `json:"cpunumber"`
+	Description           string   `json:"description"`
+	Domain                string   `json:"domain"`
+	Domainid              string   `json:"domainid"`
+	Endpoint              string   `json:"endpoint"`
+	Hasannotations        bool     `json:"hasannotations"`
+	Id                    string   `json:"id"`
+	Ipaddress             string   `json:"ipaddress"`
+	Ipaddressid           string   `json:"ipaddressid"`
+	JobID                 string   `json:"jobid"`
+	Jobstatus             int      `json:"jobstatus"`
+	Keypair               string   `json:"keypair"`
+	Kubernetesversionid   string   `json:"kubernetesversionid"`
+	Kubernetesversionname string   `json:"kubernetesversionname"`
+	Masternodes           int64    `json:"masternodes"`
+	Maxsize               int64    `json:"maxsize"`
+	Memory                string   `json:"memory"`
+	Minsize               int64    `json:"minsize"`
+	Name                  string   `json:"name"`
+	Networkid             string   `json:"networkid"`
+	Project               string   `json:"project"`
+	Projectid             string   `json:"projectid"`
+	Serviceofferingid     string   `json:"serviceofferingid"`
+	Serviceofferingname   string   `json:"serviceofferingname"`
+	Size                  int64    `json:"size"`
+	State                 string   `json:"state"`
+	Templateid            string   `json:"templateid"`
+	Virtualmachines       []string `json:"virtualmachines"`
+	Zoneid                string   `json:"zoneid"`
+	Zonename              string   `json:"zonename"`
+}
+
+type StartKubernetesClusterParams struct {
+	p map[string]interface{}
+}
+
+func (p *StartKubernetesClusterParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["id"]; found {
+		u.Set("id", v.(string))
+	}
+	return u
+}
+
+func (p *StartKubernetesClusterParams) SetId(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["id"] = v
+}
+
+func (p *StartKubernetesClusterParams) GetId() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["id"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new StartKubernetesClusterParams instance,
+// as then you are sure you have configured all required params
+func (s *KubernetesService) NewStartKubernetesClusterParams(id string) *StartKubernetesClusterParams {
+	p := &StartKubernetesClusterParams{}
+	p.p = make(map[string]interface{})
+	p.p["id"] = id
+	return p
+}
+
+// Starts a stopped Kubernetes cluster
+func (s *KubernetesService) StartKubernetesCluster(p *StartKubernetesClusterParams) (*StartKubernetesClusterResponse, error) {
+	resp, err := s.cs.newRequest("startKubernetesCluster", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r StartKubernetesClusterResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	// If we have a async client, we need to wait for the async result
+	if s.cs.async {
+		b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
+		if err != nil {
+			if err == AsyncTimeoutErr {
+				return &r, err
+			}
+			return nil, err
+		}
+
+		b, err = getRawValue(b)
+		if err != nil {
+			return nil, err
+		}
+
+		if err := json.Unmarshal(b, &r); err != nil {
+			return nil, err
+		}
+	}
+
+	return &r, nil
+}
+
+type StartKubernetesClusterResponse struct {
+	Account               string   `json:"account"`
+	Associatednetworkname string   `json:"associatednetworkname"`
+	Autoscalingenabled    bool     `json:"autoscalingenabled"`
+	Consoleendpoint       string   `json:"consoleendpoint"`
+	Controlnodes          int64    `json:"controlnodes"`
+	Cpunumber             string   `json:"cpunumber"`
+	Description           string   `json:"description"`
+	Domain                string   `json:"domain"`
+	Domainid              string   `json:"domainid"`
+	Endpoint              string   `json:"endpoint"`
+	Hasannotations        bool     `json:"hasannotations"`
+	Id                    string   `json:"id"`
+	Ipaddress             string   `json:"ipaddress"`
+	Ipaddressid           string   `json:"ipaddressid"`
+	JobID                 string   `json:"jobid"`
+	Jobstatus             int      `json:"jobstatus"`
+	Keypair               string   `json:"keypair"`
+	Kubernetesversionid   string   `json:"kubernetesversionid"`
+	Kubernetesversionname string   `json:"kubernetesversionname"`
+	Masternodes           int64    `json:"masternodes"`
+	Maxsize               int64    `json:"maxsize"`
+	Memory                string   `json:"memory"`
+	Minsize               int64    `json:"minsize"`
+	Name                  string   `json:"name"`
+	Networkid             string   `json:"networkid"`
+	Project               string   `json:"project"`
+	Projectid             string   `json:"projectid"`
+	Serviceofferingid     string   `json:"serviceofferingid"`
+	Serviceofferingname   string   `json:"serviceofferingname"`
+	Size                  int64    `json:"size"`
+	State                 string   `json:"state"`
+	Templateid            string   `json:"templateid"`
+	Virtualmachines       []string `json:"virtualmachines"`
+	Zoneid                string   `json:"zoneid"`
+	Zonename              string   `json:"zonename"`
+}
+
+type StopKubernetesClusterParams struct {
+	p map[string]interface{}
+}
+
+func (p *StopKubernetesClusterParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["id"]; found {
+		u.Set("id", v.(string))
+	}
+	return u
+}
+
+func (p *StopKubernetesClusterParams) SetId(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["id"] = v
+}
+
+func (p *StopKubernetesClusterParams) GetId() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["id"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new StopKubernetesClusterParams instance,
+// as then you are sure you have configured all required params
+func (s *KubernetesService) NewStopKubernetesClusterParams(id string) *StopKubernetesClusterParams {
+	p := &StopKubernetesClusterParams{}
+	p.p = make(map[string]interface{})
+	p.p["id"] = id
+	return p
+}
+
+// Stops a running Kubernetes cluster
+func (s *KubernetesService) StopKubernetesCluster(p *StopKubernetesClusterParams) (*StopKubernetesClusterResponse, error) {
+	resp, err := s.cs.newRequest("stopKubernetesCluster", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r StopKubernetesClusterResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	// If we have a async client, we need to wait for the async result
+	if s.cs.async {
+		b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
+		if err != nil {
+			if err == AsyncTimeoutErr {
+				return &r, err
+			}
+			return nil, err
+		}
+
+		if err := json.Unmarshal(b, &r); err != nil {
+			return nil, err
+		}
+	}
+
+	return &r, nil
+}
+
+type StopKubernetesClusterResponse struct {
+	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
+	Success     bool   `json:"success"`
+}
+
+type UpdateKubernetesSupportedVersionParams struct {
+	p map[string]interface{}
+}
+
+func (p *UpdateKubernetesSupportedVersionParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["id"]; found {
+		u.Set("id", v.(string))
+	}
+	if v, found := p.p["state"]; found {
+		u.Set("state", v.(string))
+	}
+	return u
+}
+
+func (p *UpdateKubernetesSupportedVersionParams) SetId(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["id"] = v
+}
+
+func (p *UpdateKubernetesSupportedVersionParams) GetId() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["id"].(string)
+	return value, ok
+}
+
+func (p *UpdateKubernetesSupportedVersionParams) SetState(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["state"] = v
+}
+
+func (p *UpdateKubernetesSupportedVersionParams) GetState() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["state"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new UpdateKubernetesSupportedVersionParams instance,
+// as then you are sure you have configured all required params
+func (s *KubernetesService) NewUpdateKubernetesSupportedVersionParams(id string, state string) *UpdateKubernetesSupportedVersionParams {
+	p := &UpdateKubernetesSupportedVersionParams{}
+	p.p = make(map[string]interface{})
+	p.p["id"] = id
+	p.p["state"] = state
+	return p
+}
+
+// Update a supported Kubernetes version
+func (s *KubernetesService) UpdateKubernetesSupportedVersion(p *UpdateKubernetesSupportedVersionParams) (*UpdateKubernetesSupportedVersionResponse, error) {
+	resp, err := s.cs.newRequest("updateKubernetesSupportedVersion", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r UpdateKubernetesSupportedVersionResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	return &r, nil
+}
+
+type UpdateKubernetesSupportedVersionResponse struct {
+	Id                  string `json:"id"`
+	Isoid               string `json:"isoid"`
+	Isoname             string `json:"isoname"`
+	Isostate            string `json:"isostate"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
+	Mincpunumber        int    `json:"mincpunumber"`
+	Minmemory           int    `json:"minmemory"`
+	Name                string `json:"name"`
+	Semanticversion     string `json:"semanticversion"`
+	State               string `json:"state"`
+	Supportsautoscaling bool   `json:"supportsautoscaling"`
+	Supportsha          bool   `json:"supportsha"`
+	Zoneid              string `json:"zoneid"`
+	Zonename            string `json:"zonename"`
+}
+
+type UpgradeKubernetesClusterParams struct {
+	p map[string]interface{}
+}
+
+func (p *UpgradeKubernetesClusterParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["id"]; found {
+		u.Set("id", v.(string))
+	}
+	if v, found := p.p["kubernetesversionid"]; found {
+		u.Set("kubernetesversionid", v.(string))
+	}
+	return u
+}
+
+func (p *UpgradeKubernetesClusterParams) SetId(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["id"] = v
+}
+
+func (p *UpgradeKubernetesClusterParams) GetId() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["id"].(string)
+	return value, ok
+}
+
+func (p *UpgradeKubernetesClusterParams) SetKubernetesversionid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["kubernetesversionid"] = v
+}
+
+func (p *UpgradeKubernetesClusterParams) GetKubernetesversionid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["kubernetesversionid"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new UpgradeKubernetesClusterParams instance,
+// as then you are sure you have configured all required params
+func (s *KubernetesService) NewUpgradeKubernetesClusterParams(id string, kubernetesversionid string) *UpgradeKubernetesClusterParams {
+	p := &UpgradeKubernetesClusterParams{}
+	p.p = make(map[string]interface{})
+	p.p["id"] = id
+	p.p["kubernetesversionid"] = kubernetesversionid
+	return p
+}
+
+// Upgrades a running Kubernetes cluster
+func (s *KubernetesService) UpgradeKubernetesCluster(p *UpgradeKubernetesClusterParams) (*UpgradeKubernetesClusterResponse, error) {
+	resp, err := s.cs.newRequest("upgradeKubernetesCluster", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	var r UpgradeKubernetesClusterResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	// If we have a async client, we need to wait for the async result
+	if s.cs.async {
+		b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
+		if err != nil {
+			if err == AsyncTimeoutErr {
+				return &r, err
+			}
+			return nil, err
+		}
+
+		b, err = getRawValue(b)
+		if err != nil {
+			return nil, err
+		}
+
+		if err := json.Unmarshal(b, &r); err != nil {
+			return nil, err
+		}
+	}
+
+	return &r, nil
+}
+
+type UpgradeKubernetesClusterResponse struct {
+	Account               string   `json:"account"`
+	Associatednetworkname string   `json:"associatednetworkname"`
+	Autoscalingenabled    bool     `json:"autoscalingenabled"`
+	Consoleendpoint       string   `json:"consoleendpoint"`
+	Controlnodes          int64    `json:"controlnodes"`
+	Cpunumber             string   `json:"cpunumber"`
+	Description           string   `json:"description"`
+	Domain                string   `json:"domain"`
+	Domainid              string   `json:"domainid"`
+	Endpoint              string   `json:"endpoint"`
+	Hasannotations        bool     `json:"hasannotations"`
+	Id                    string   `json:"id"`
+	Ipaddress             string   `json:"ipaddress"`
+	Ipaddressid           string   `json:"ipaddressid"`
+	JobID                 string   `json:"jobid"`
+	Jobstatus             int      `json:"jobstatus"`
+	Keypair               string   `json:"keypair"`
+	Kubernetesversionid   string   `json:"kubernetesversionid"`
+	Kubernetesversionname string   `json:"kubernetesversionname"`
+	Masternodes           int64    `json:"masternodes"`
+	Maxsize               int64    `json:"maxsize"`
+	Memory                string   `json:"memory"`
+	Minsize               int64    `json:"minsize"`
+	Name                  string   `json:"name"`
+	Networkid             string   `json:"networkid"`
+	Project               string   `json:"project"`
+	Projectid             string   `json:"projectid"`
+	Serviceofferingid     string   `json:"serviceofferingid"`
+	Serviceofferingname   string   `json:"serviceofferingname"`
+	Size                  int64    `json:"size"`
+	State                 string   `json:"state"`
+	Templateid            string   `json:"templateid"`
+	Virtualmachines       []string `json:"virtualmachines"`
+	Zoneid                string   `json:"zoneid"`
+	Zonename              string   `json:"zonename"`
+}
diff --git a/cloudstack/KubernetesService_mock.go b/cloudstack/KubernetesService_mock.go
new file mode 100644
index 0000000..0f6d5a3
--- /dev/null
+++ b/cloudstack/KubernetesService_mock.go
@@ -0,0 +1,527 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+// Code generated by MockGen. DO NOT EDIT.
+// Source: ./cloudstack/KubernetesService.go
+
+// Package cloudstack is a generated GoMock package.
+package cloudstack
+
+import (
+	reflect "reflect"
+
+	gomock "github.com/golang/mock/gomock"
+)
+
+// MockKubernetesServiceIface is a mock of KubernetesServiceIface interface.
+type MockKubernetesServiceIface struct {
+	ctrl     *gomock.Controller
+	recorder *MockKubernetesServiceIfaceMockRecorder
+}
+
+// MockKubernetesServiceIfaceMockRecorder is the mock recorder for MockKubernetesServiceIface.
+type MockKubernetesServiceIfaceMockRecorder struct {
+	mock *MockKubernetesServiceIface
+}
+
+// NewMockKubernetesServiceIface creates a new mock instance.
+func NewMockKubernetesServiceIface(ctrl *gomock.Controller) *MockKubernetesServiceIface {
+	mock := &MockKubernetesServiceIface{ctrl: ctrl}
+	mock.recorder = &MockKubernetesServiceIfaceMockRecorder{mock}
+	return mock
+}
+
+// EXPECT returns an object that allows the caller to indicate expected use.
+func (m *MockKubernetesServiceIface) EXPECT() *MockKubernetesServiceIfaceMockRecorder {
+	return m.recorder
+}
+
+// AddKubernetesSupportedVersion mocks base method.
+func (m *MockKubernetesServiceIface) AddKubernetesSupportedVersion(p *AddKubernetesSupportedVersionParams) (*AddKubernetesSupportedVersionResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "AddKubernetesSupportedVersion", p)
+	ret0, _ := ret[0].(*AddKubernetesSupportedVersionResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// AddKubernetesSupportedVersion indicates an expected call of AddKubernetesSupportedVersion.
+func (mr *MockKubernetesServiceIfaceMockRecorder) AddKubernetesSupportedVersion(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddKubernetesSupportedVersion", reflect.TypeOf((*MockKubernetesServiceIface)(nil).AddKubernetesSupportedVersion), p)
+}
+
+// CreateKubernetesCluster mocks base method.
+func (m *MockKubernetesServiceIface) CreateKubernetesCluster(p *CreateKubernetesClusterParams) (*CreateKubernetesClusterResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateKubernetesCluster", p)
+	ret0, _ := ret[0].(*CreateKubernetesClusterResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CreateKubernetesCluster indicates an expected call of CreateKubernetesCluster.
+func (mr *MockKubernetesServiceIfaceMockRecorder) CreateKubernetesCluster(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateKubernetesCluster", reflect.TypeOf((*MockKubernetesServiceIface)(nil).CreateKubernetesCluster), p)
+}
+
+// DeleteKubernetesCluster mocks base method.
+func (m *MockKubernetesServiceIface) DeleteKubernetesCluster(p *DeleteKubernetesClusterParams) (*DeleteKubernetesClusterResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "DeleteKubernetesCluster", p)
+	ret0, _ := ret[0].(*DeleteKubernetesClusterResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// DeleteKubernetesCluster indicates an expected call of DeleteKubernetesCluster.
+func (mr *MockKubernetesServiceIfaceMockRecorder) DeleteKubernetesCluster(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteKubernetesCluster", reflect.TypeOf((*MockKubernetesServiceIface)(nil).DeleteKubernetesCluster), p)
+}
+
+// DeleteKubernetesSupportedVersion mocks base method.
+func (m *MockKubernetesServiceIface) DeleteKubernetesSupportedVersion(p *DeleteKubernetesSupportedVersionParams) (*DeleteKubernetesSupportedVersionResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "DeleteKubernetesSupportedVersion", p)
+	ret0, _ := ret[0].(*DeleteKubernetesSupportedVersionResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// DeleteKubernetesSupportedVersion indicates an expected call of DeleteKubernetesSupportedVersion.
+func (mr *MockKubernetesServiceIfaceMockRecorder) DeleteKubernetesSupportedVersion(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteKubernetesSupportedVersion", reflect.TypeOf((*MockKubernetesServiceIface)(nil).DeleteKubernetesSupportedVersion), p)
+}
+
+// GetKubernetesClusterByID mocks base method.
+func (m *MockKubernetesServiceIface) GetKubernetesClusterByID(id string, opts ...OptionFunc) (*KubernetesCluster, int, error) {
+	m.ctrl.T.Helper()
+	varargs := []interface{}{id}
+	for _, a := range opts {
+		varargs = append(varargs, a)
+	}
+	ret := m.ctrl.Call(m, "GetKubernetesClusterByID", varargs...)
+	ret0, _ := ret[0].(*KubernetesCluster)
+	ret1, _ := ret[1].(int)
+	ret2, _ := ret[2].(error)
+	return ret0, ret1, ret2
+}
+
+// GetKubernetesClusterByID indicates an expected call of GetKubernetesClusterByID.
+func (mr *MockKubernetesServiceIfaceMockRecorder) GetKubernetesClusterByID(id interface{}, opts ...interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	varargs := append([]interface{}{id}, opts...)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetKubernetesClusterByID", reflect.TypeOf((*MockKubernetesServiceIface)(nil).GetKubernetesClusterByID), varargs...)
+}
+
+// GetKubernetesClusterByName mocks base method.
+func (m *MockKubernetesServiceIface) GetKubernetesClusterByName(name string, opts ...OptionFunc) (*KubernetesCluster, int, error) {
+	m.ctrl.T.Helper()
+	varargs := []interface{}{name}
+	for _, a := range opts {
+		varargs = append(varargs, a)
+	}
+	ret := m.ctrl.Call(m, "GetKubernetesClusterByName", varargs...)
+	ret0, _ := ret[0].(*KubernetesCluster)
+	ret1, _ := ret[1].(int)
+	ret2, _ := ret[2].(error)
+	return ret0, ret1, ret2
+}
+
+// GetKubernetesClusterByName indicates an expected call of GetKubernetesClusterByName.
+func (mr *MockKubernetesServiceIfaceMockRecorder) GetKubernetesClusterByName(name interface{}, opts ...interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	varargs := append([]interface{}{name}, opts...)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetKubernetesClusterByName", reflect.TypeOf((*MockKubernetesServiceIface)(nil).GetKubernetesClusterByName), varargs...)
+}
+
+// GetKubernetesClusterConfig mocks base method.
+func (m *MockKubernetesServiceIface) GetKubernetesClusterConfig(p *GetKubernetesClusterConfigParams) (*GetKubernetesClusterConfigResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "GetKubernetesClusterConfig", p)
+	ret0, _ := ret[0].(*GetKubernetesClusterConfigResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// GetKubernetesClusterConfig indicates an expected call of GetKubernetesClusterConfig.
+func (mr *MockKubernetesServiceIfaceMockRecorder) GetKubernetesClusterConfig(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetKubernetesClusterConfig", reflect.TypeOf((*MockKubernetesServiceIface)(nil).GetKubernetesClusterConfig), p)
+}
+
+// GetKubernetesClusterID mocks base method.
+func (m *MockKubernetesServiceIface) GetKubernetesClusterID(name string, opts ...OptionFunc) (string, int, error) {
+	m.ctrl.T.Helper()
+	varargs := []interface{}{name}
+	for _, a := range opts {
+		varargs = append(varargs, a)
+	}
+	ret := m.ctrl.Call(m, "GetKubernetesClusterID", varargs...)
+	ret0, _ := ret[0].(string)
+	ret1, _ := ret[1].(int)
+	ret2, _ := ret[2].(error)
+	return ret0, ret1, ret2
+}
+
+// GetKubernetesClusterID indicates an expected call of GetKubernetesClusterID.
+func (mr *MockKubernetesServiceIfaceMockRecorder) GetKubernetesClusterID(name interface{}, opts ...interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	varargs := append([]interface{}{name}, opts...)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetKubernetesClusterID", reflect.TypeOf((*MockKubernetesServiceIface)(nil).GetKubernetesClusterID), varargs...)
+}
+
+// GetKubernetesSupportedVersionByID mocks base method.
+func (m *MockKubernetesServiceIface) GetKubernetesSupportedVersionByID(id string, opts ...OptionFunc) (*KubernetesSupportedVersion, int, error) {
+	m.ctrl.T.Helper()
+	varargs := []interface{}{id}
+	for _, a := range opts {
+		varargs = append(varargs, a)
+	}
+	ret := m.ctrl.Call(m, "GetKubernetesSupportedVersionByID", varargs...)
+	ret0, _ := ret[0].(*KubernetesSupportedVersion)
+	ret1, _ := ret[1].(int)
+	ret2, _ := ret[2].(error)
+	return ret0, ret1, ret2
+}
+
+// GetKubernetesSupportedVersionByID indicates an expected call of GetKubernetesSupportedVersionByID.
+func (mr *MockKubernetesServiceIfaceMockRecorder) GetKubernetesSupportedVersionByID(id interface{}, opts ...interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	varargs := append([]interface{}{id}, opts...)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetKubernetesSupportedVersionByID", reflect.TypeOf((*MockKubernetesServiceIface)(nil).GetKubernetesSupportedVersionByID), varargs...)
+}
+
+// GetKubernetesSupportedVersionByName mocks base method.
+func (m *MockKubernetesServiceIface) GetKubernetesSupportedVersionByName(name string, opts ...OptionFunc) (*KubernetesSupportedVersion, int, error) {
+	m.ctrl.T.Helper()
+	varargs := []interface{}{name}
+	for _, a := range opts {
+		varargs = append(varargs, a)
+	}
+	ret := m.ctrl.Call(m, "GetKubernetesSupportedVersionByName", varargs...)
+	ret0, _ := ret[0].(*KubernetesSupportedVersion)
+	ret1, _ := ret[1].(int)
+	ret2, _ := ret[2].(error)
+	return ret0, ret1, ret2
+}
+
+// GetKubernetesSupportedVersionByName indicates an expected call of GetKubernetesSupportedVersionByName.
+func (mr *MockKubernetesServiceIfaceMockRecorder) GetKubernetesSupportedVersionByName(name interface{}, opts ...interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	varargs := append([]interface{}{name}, opts...)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetKubernetesSupportedVersionByName", reflect.TypeOf((*MockKubernetesServiceIface)(nil).GetKubernetesSupportedVersionByName), varargs...)
+}
+
+// GetKubernetesSupportedVersionID mocks base method.
+func (m *MockKubernetesServiceIface) GetKubernetesSupportedVersionID(keyword string, opts ...OptionFunc) (string, int, error) {
+	m.ctrl.T.Helper()
+	varargs := []interface{}{keyword}
+	for _, a := range opts {
+		varargs = append(varargs, a)
+	}
+	ret := m.ctrl.Call(m, "GetKubernetesSupportedVersionID", varargs...)
+	ret0, _ := ret[0].(string)
+	ret1, _ := ret[1].(int)
+	ret2, _ := ret[2].(error)
+	return ret0, ret1, ret2
+}
+
+// GetKubernetesSupportedVersionID indicates an expected call of GetKubernetesSupportedVersionID.
+func (mr *MockKubernetesServiceIfaceMockRecorder) GetKubernetesSupportedVersionID(keyword interface{}, opts ...interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	varargs := append([]interface{}{keyword}, opts...)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetKubernetesSupportedVersionID", reflect.TypeOf((*MockKubernetesServiceIface)(nil).GetKubernetesSupportedVersionID), varargs...)
+}
+
+// ListKubernetesClusters mocks base method.
+func (m *MockKubernetesServiceIface) ListKubernetesClusters(p *ListKubernetesClustersParams) (*ListKubernetesClustersResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "ListKubernetesClusters", p)
+	ret0, _ := ret[0].(*ListKubernetesClustersResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// ListKubernetesClusters indicates an expected call of ListKubernetesClusters.
+func (mr *MockKubernetesServiceIfaceMockRecorder) ListKubernetesClusters(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListKubernetesClusters", reflect.TypeOf((*MockKubernetesServiceIface)(nil).ListKubernetesClusters), p)
+}
+
+// ListKubernetesSupportedVersions mocks base method.
+func (m *MockKubernetesServiceIface) ListKubernetesSupportedVersions(p *ListKubernetesSupportedVersionsParams) (*ListKubernetesSupportedVersionsResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "ListKubernetesSupportedVersions", p)
+	ret0, _ := ret[0].(*ListKubernetesSupportedVersionsResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// ListKubernetesSupportedVersions indicates an expected call of ListKubernetesSupportedVersions.
+func (mr *MockKubernetesServiceIfaceMockRecorder) ListKubernetesSupportedVersions(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListKubernetesSupportedVersions", reflect.TypeOf((*MockKubernetesServiceIface)(nil).ListKubernetesSupportedVersions), p)
+}
+
+// NewAddKubernetesSupportedVersionParams mocks base method.
+func (m *MockKubernetesServiceIface) NewAddKubernetesSupportedVersionParams(mincpunumber, minmemory int, semanticversion string) *AddKubernetesSupportedVersionParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewAddKubernetesSupportedVersionParams", mincpunumber, minmemory, semanticversion)
+	ret0, _ := ret[0].(*AddKubernetesSupportedVersionParams)
+	return ret0
+}
+
+// NewAddKubernetesSupportedVersionParams indicates an expected call of NewAddKubernetesSupportedVersionParams.
+func (mr *MockKubernetesServiceIfaceMockRecorder) NewAddKubernetesSupportedVersionParams(mincpunumber, minmemory, semanticversion interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewAddKubernetesSupportedVersionParams", reflect.TypeOf((*MockKubernetesServiceIface)(nil).NewAddKubernetesSupportedVersionParams), mincpunumber, minmemory, semanticversion)
+}
+
+// NewCreateKubernetesClusterParams mocks base method.
+func (m *MockKubernetesServiceIface) NewCreateKubernetesClusterParams(description, kubernetesversionid, name, serviceofferingid string, size int64, zoneid string) *CreateKubernetesClusterParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewCreateKubernetesClusterParams", description, kubernetesversionid, name, serviceofferingid, size, zoneid)
+	ret0, _ := ret[0].(*CreateKubernetesClusterParams)
+	return ret0
+}
+
+// NewCreateKubernetesClusterParams indicates an expected call of NewCreateKubernetesClusterParams.
+func (mr *MockKubernetesServiceIfaceMockRecorder) NewCreateKubernetesClusterParams(description, kubernetesversionid, name, serviceofferingid, size, zoneid interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewCreateKubernetesClusterParams", reflect.TypeOf((*MockKubernetesServiceIface)(nil).NewCreateKubernetesClusterParams), description, kubernetesversionid, name, serviceofferingid, size, zoneid)
+}
+
+// NewDeleteKubernetesClusterParams mocks base method.
+func (m *MockKubernetesServiceIface) NewDeleteKubernetesClusterParams(id string) *DeleteKubernetesClusterParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewDeleteKubernetesClusterParams", id)
+	ret0, _ := ret[0].(*DeleteKubernetesClusterParams)
+	return ret0
+}
+
+// NewDeleteKubernetesClusterParams indicates an expected call of NewDeleteKubernetesClusterParams.
+func (mr *MockKubernetesServiceIfaceMockRecorder) NewDeleteKubernetesClusterParams(id interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewDeleteKubernetesClusterParams", reflect.TypeOf((*MockKubernetesServiceIface)(nil).NewDeleteKubernetesClusterParams), id)
+}
+
+// NewDeleteKubernetesSupportedVersionParams mocks base method.
+func (m *MockKubernetesServiceIface) NewDeleteKubernetesSupportedVersionParams(id string) *DeleteKubernetesSupportedVersionParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewDeleteKubernetesSupportedVersionParams", id)
+	ret0, _ := ret[0].(*DeleteKubernetesSupportedVersionParams)
+	return ret0
+}
+
+// NewDeleteKubernetesSupportedVersionParams indicates an expected call of NewDeleteKubernetesSupportedVersionParams.
+func (mr *MockKubernetesServiceIfaceMockRecorder) NewDeleteKubernetesSupportedVersionParams(id interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewDeleteKubernetesSupportedVersionParams", reflect.TypeOf((*MockKubernetesServiceIface)(nil).NewDeleteKubernetesSupportedVersionParams), id)
+}
+
+// NewGetKubernetesClusterConfigParams mocks base method.
+func (m *MockKubernetesServiceIface) NewGetKubernetesClusterConfigParams() *GetKubernetesClusterConfigParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewGetKubernetesClusterConfigParams")
+	ret0, _ := ret[0].(*GetKubernetesClusterConfigParams)
+	return ret0
+}
+
+// NewGetKubernetesClusterConfigParams indicates an expected call of NewGetKubernetesClusterConfigParams.
+func (mr *MockKubernetesServiceIfaceMockRecorder) NewGetKubernetesClusterConfigParams() *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewGetKubernetesClusterConfigParams", reflect.TypeOf((*MockKubernetesServiceIface)(nil).NewGetKubernetesClusterConfigParams))
+}
+
+// NewListKubernetesClustersParams mocks base method.
+func (m *MockKubernetesServiceIface) NewListKubernetesClustersParams() *ListKubernetesClustersParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewListKubernetesClustersParams")
+	ret0, _ := ret[0].(*ListKubernetesClustersParams)
+	return ret0
+}
+
+// NewListKubernetesClustersParams indicates an expected call of NewListKubernetesClustersParams.
+func (mr *MockKubernetesServiceIfaceMockRecorder) NewListKubernetesClustersParams() *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewListKubernetesClustersParams", reflect.TypeOf((*MockKubernetesServiceIface)(nil).NewListKubernetesClustersParams))
+}
+
+// NewListKubernetesSupportedVersionsParams mocks base method.
+func (m *MockKubernetesServiceIface) NewListKubernetesSupportedVersionsParams() *ListKubernetesSupportedVersionsParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewListKubernetesSupportedVersionsParams")
+	ret0, _ := ret[0].(*ListKubernetesSupportedVersionsParams)
+	return ret0
+}
+
+// NewListKubernetesSupportedVersionsParams indicates an expected call of NewListKubernetesSupportedVersionsParams.
+func (mr *MockKubernetesServiceIfaceMockRecorder) NewListKubernetesSupportedVersionsParams() *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewListKubernetesSupportedVersionsParams", reflect.TypeOf((*MockKubernetesServiceIface)(nil).NewListKubernetesSupportedVersionsParams))
+}
+
+// NewScaleKubernetesClusterParams mocks base method.
+func (m *MockKubernetesServiceIface) NewScaleKubernetesClusterParams(id string) *ScaleKubernetesClusterParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewScaleKubernetesClusterParams", id)
+	ret0, _ := ret[0].(*ScaleKubernetesClusterParams)
+	return ret0
+}
+
+// NewScaleKubernetesClusterParams indicates an expected call of NewScaleKubernetesClusterParams.
+func (mr *MockKubernetesServiceIfaceMockRecorder) NewScaleKubernetesClusterParams(id interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewScaleKubernetesClusterParams", reflect.TypeOf((*MockKubernetesServiceIface)(nil).NewScaleKubernetesClusterParams), id)
+}
+
+// NewStartKubernetesClusterParams mocks base method.
+func (m *MockKubernetesServiceIface) NewStartKubernetesClusterParams(id string) *StartKubernetesClusterParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewStartKubernetesClusterParams", id)
+	ret0, _ := ret[0].(*StartKubernetesClusterParams)
+	return ret0
+}
+
+// NewStartKubernetesClusterParams indicates an expected call of NewStartKubernetesClusterParams.
+func (mr *MockKubernetesServiceIfaceMockRecorder) NewStartKubernetesClusterParams(id interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewStartKubernetesClusterParams", reflect.TypeOf((*MockKubernetesServiceIface)(nil).NewStartKubernetesClusterParams), id)
+}
+
+// NewStopKubernetesClusterParams mocks base method.
+func (m *MockKubernetesServiceIface) NewStopKubernetesClusterParams(id string) *StopKubernetesClusterParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewStopKubernetesClusterParams", id)
+	ret0, _ := ret[0].(*StopKubernetesClusterParams)
+	return ret0
+}
+
+// NewStopKubernetesClusterParams indicates an expected call of NewStopKubernetesClusterParams.
+func (mr *MockKubernetesServiceIfaceMockRecorder) NewStopKubernetesClusterParams(id interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewStopKubernetesClusterParams", reflect.TypeOf((*MockKubernetesServiceIface)(nil).NewStopKubernetesClusterParams), id)
+}
+
+// NewUpdateKubernetesSupportedVersionParams mocks base method.
+func (m *MockKubernetesServiceIface) NewUpdateKubernetesSupportedVersionParams(id, state string) *UpdateKubernetesSupportedVersionParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewUpdateKubernetesSupportedVersionParams", id, state)
+	ret0, _ := ret[0].(*UpdateKubernetesSupportedVersionParams)
+	return ret0
+}
+
+// NewUpdateKubernetesSupportedVersionParams indicates an expected call of NewUpdateKubernetesSupportedVersionParams.
+func (mr *MockKubernetesServiceIfaceMockRecorder) NewUpdateKubernetesSupportedVersionParams(id, state interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewUpdateKubernetesSupportedVersionParams", reflect.TypeOf((*MockKubernetesServiceIface)(nil).NewUpdateKubernetesSupportedVersionParams), id, state)
+}
+
+// NewUpgradeKubernetesClusterParams mocks base method.
+func (m *MockKubernetesServiceIface) NewUpgradeKubernetesClusterParams(id, kubernetesversionid string) *UpgradeKubernetesClusterParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewUpgradeKubernetesClusterParams", id, kubernetesversionid)
+	ret0, _ := ret[0].(*UpgradeKubernetesClusterParams)
+	return ret0
+}
+
+// NewUpgradeKubernetesClusterParams indicates an expected call of NewUpgradeKubernetesClusterParams.
+func (mr *MockKubernetesServiceIfaceMockRecorder) NewUpgradeKubernetesClusterParams(id, kubernetesversionid interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewUpgradeKubernetesClusterParams", reflect.TypeOf((*MockKubernetesServiceIface)(nil).NewUpgradeKubernetesClusterParams), id, kubernetesversionid)
+}
+
+// ScaleKubernetesCluster mocks base method.
+func (m *MockKubernetesServiceIface) ScaleKubernetesCluster(p *ScaleKubernetesClusterParams) (*ScaleKubernetesClusterResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "ScaleKubernetesCluster", p)
+	ret0, _ := ret[0].(*ScaleKubernetesClusterResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// ScaleKubernetesCluster indicates an expected call of ScaleKubernetesCluster.
+func (mr *MockKubernetesServiceIfaceMockRecorder) ScaleKubernetesCluster(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ScaleKubernetesCluster", reflect.TypeOf((*MockKubernetesServiceIface)(nil).ScaleKubernetesCluster), p)
+}
+
+// StartKubernetesCluster mocks base method.
+func (m *MockKubernetesServiceIface) StartKubernetesCluster(p *StartKubernetesClusterParams) (*StartKubernetesClusterResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "StartKubernetesCluster", p)
+	ret0, _ := ret[0].(*StartKubernetesClusterResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// StartKubernetesCluster indicates an expected call of StartKubernetesCluster.
+func (mr *MockKubernetesServiceIfaceMockRecorder) StartKubernetesCluster(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StartKubernetesCluster", reflect.TypeOf((*MockKubernetesServiceIface)(nil).StartKubernetesCluster), p)
+}
+
+// StopKubernetesCluster mocks base method.
+func (m *MockKubernetesServiceIface) StopKubernetesCluster(p *StopKubernetesClusterParams) (*StopKubernetesClusterResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "StopKubernetesCluster", p)
+	ret0, _ := ret[0].(*StopKubernetesClusterResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// StopKubernetesCluster indicates an expected call of StopKubernetesCluster.
+func (mr *MockKubernetesServiceIfaceMockRecorder) StopKubernetesCluster(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StopKubernetesCluster", reflect.TypeOf((*MockKubernetesServiceIface)(nil).StopKubernetesCluster), p)
+}
+
+// UpdateKubernetesSupportedVersion mocks base method.
+func (m *MockKubernetesServiceIface) UpdateKubernetesSupportedVersion(p *UpdateKubernetesSupportedVersionParams) (*UpdateKubernetesSupportedVersionResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "UpdateKubernetesSupportedVersion", p)
+	ret0, _ := ret[0].(*UpdateKubernetesSupportedVersionResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// UpdateKubernetesSupportedVersion indicates an expected call of UpdateKubernetesSupportedVersion.
+func (mr *MockKubernetesServiceIfaceMockRecorder) UpdateKubernetesSupportedVersion(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateKubernetesSupportedVersion", reflect.TypeOf((*MockKubernetesServiceIface)(nil).UpdateKubernetesSupportedVersion), p)
+}
+
+// UpgradeKubernetesCluster mocks base method.
+func (m *MockKubernetesServiceIface) UpgradeKubernetesCluster(p *UpgradeKubernetesClusterParams) (*UpgradeKubernetesClusterResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "UpgradeKubernetesCluster", p)
+	ret0, _ := ret[0].(*UpgradeKubernetesClusterResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// UpgradeKubernetesCluster indicates an expected call of UpgradeKubernetesCluster.
+func (mr *MockKubernetesServiceIfaceMockRecorder) UpgradeKubernetesCluster(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpgradeKubernetesCluster", reflect.TypeOf((*MockKubernetesServiceIface)(nil).UpgradeKubernetesCluster), p)
+}
diff --git a/cloudstack/cloudstack.go b/cloudstack/cloudstack.go
index 4933845..c3e5587 100644
--- a/cloudstack/cloudstack.go
+++ b/cloudstack/cloudstack.go
@@ -125,6 +125,7 @@ type CloudStackClient struct {
 	ISO                 ISOServiceIface
 	ImageStore          ImageStoreServiceIface
 	InternalLB          InternalLBServiceIface
+	Kubernetes          KubernetesServiceIface
 	LDAP                LDAPServiceIface
 	Limit               LimitServiceIface
 	LoadBalancer        LoadBalancerServiceIface
@@ -228,6 +229,7 @@ func newClient(apiurl string, apikey string, secret string, async bool, verifyss
 	cs.ISO = NewISOService(cs)
 	cs.ImageStore = NewImageStoreService(cs)
 	cs.InternalLB = NewInternalLBService(cs)
+	cs.Kubernetes = NewKubernetesService(cs)
 	cs.LDAP = NewLDAPService(cs)
 	cs.Limit = NewLimitService(cs)
 	cs.LoadBalancer = NewLoadBalancerService(cs)
@@ -304,6 +306,7 @@ func newMockClient(ctrl *gomock.Controller) *CloudStackClient {
 	cs.ISO = NewMockISOServiceIface(ctrl)
 	cs.ImageStore = NewMockImageStoreServiceIface(ctrl)
 	cs.InternalLB = NewMockInternalLBServiceIface(ctrl)
+	cs.Kubernetes = NewMockKubernetesServiceIface(ctrl)
 	cs.LDAP = NewMockLDAPServiceIface(ctrl)
 	cs.Limit = NewMockLimitServiceIface(ctrl)
 	cs.LoadBalancer = NewMockLoadBalancerServiceIface(ctrl)
@@ -901,6 +904,14 @@ func NewInternalLBService(cs *CloudStackClient) InternalLBServiceIface {
 	return &InternalLBService{cs: cs}
 }
 
+type KubernetesService struct {
+	cs *CloudStackClient
+}
+
+func NewKubernetesService(cs *CloudStackClient) KubernetesServiceIface {
+	return &KubernetesService{cs: cs}
+}
+
 type LDAPService struct {
 	cs *CloudStackClient
 }
diff --git a/generate/layout.go b/generate/layout.go
index 6697420..a497372 100644
--- a/generate/layout.go
+++ b/generate/layout.go
@@ -110,6 +110,20 @@ var layout = apiInfo{
 		"updateDefaultNicForVirtualMachine",
 		"updateVirtualMachine",
 	},
+	"KubernetesService": {
+		"addKubernetesSupportedVersion",
+		"createKubernetesCluster",
+		"deleteKubernetesCluster",
+		"deleteKubernetesSupportedVersion",
+		"getKubernetesClusterConfig",
+		"listKubernetesClusters",
+		"listKubernetesSupportedVersions",
+		"scaleKubernetesCluster",
+		"startKubernetesCluster",
+		"stopKubernetesCluster",
+		"updateKubernetesSupportedVersion",
+		"upgradeKubernetesCluster",
+	},
 	"VPNService": {
 		"addVpnUser",
 		"createRemoteAccessVpn",
diff --git a/generate/listApis.json b/generate/listApis.json
index 6081aac..cdfeb7b 100644
--- a/generate/listApis.json
+++ b/generate/listApis.json
@@ -24,11 +24,6 @@
       "response": [
         {},
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
-          "type": "string"
-        },
-        {
           "description": "resource type",
           "name": "resourcetype",
           "type": "resourceobjecttype"
@@ -40,14 +35,19 @@
           "type": "string"
         },
         {
-          "description": "id of the resource",
-          "name": "resourceid",
-          "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": "id of the resource",
+          "name": "resourceid",
+          "type": "string"
         }
       ],
       "since": "4.16.0.0"
@@ -66,29 +66,37 @@
           "type": "map"
         },
         {
-          "description": "set to true if the offering is to be enabled during creation. Default is false",
+          "description": "the name of the vpc offering",
           "length": 255,
-          "name": "enable",
-          "required": false,
-          "since": "4.16",
-          "type": "boolean"
+          "name": "name",
+          "required": true,
+          "type": "string"
         },
         {
-          "description": "the ID of the service offering for the VPC router appliance",
+          "description": "the ID of the containing zone(s), null for public offerings",
           "length": 255,
-          "name": "serviceofferingid",
-          "related": "createServiceOffering,updateServiceOffering,listServiceOfferings",
+          "name": "zoneid",
+          "related": "createZone,updateZone,listZones,listZones",
           "required": false,
-          "type": "uuid"
+          "since": "4.13",
+          "type": "list"
         },
         {
-          "description": "the name of the vpc offering",
+          "description": "the display text of the vpc offering",
           "length": 255,
-          "name": "name",
+          "name": "displaytext",
           "required": true,
           "type": "string"
         },
         {
+          "description": "the ID of the service offering for the VPC router appliance",
+          "length": 255,
+          "name": "serviceofferingid",
+          "related": "createServiceOffering,updateServiceOffering,listServiceOfferings",
+          "required": false,
+          "type": "uuid"
+        },
+        {
           "description": "the ID of the containing domain(s), null for public offerings",
           "length": 255,
           "name": "domainid",
@@ -97,19 +105,18 @@
           "type": "list"
         },
         {
-          "description": "services supported by the vpc offering",
+          "description": "set to true if the offering is to be enabled during creation. Default is false",
           "length": 255,
-          "name": "supportedservices",
-          "required": true,
-          "type": "list"
+          "name": "enable",
+          "required": false,
+          "since": "4.16",
+          "type": "boolean"
         },
         {
-          "description": "the ID of the containing zone(s), null for public offerings",
+          "description": "services supported by the vpc offering",
           "length": 255,
-          "name": "zoneid",
-          "related": "createZone,updateZone,listZones,listZones",
-          "required": false,
-          "since": "4.13",
+          "name": "supportedservices",
+          "required": true,
           "type": "list"
         },
         {
@@ -118,13 +125,6 @@
           "name": "serviceproviderlist",
           "required": false,
           "type": "map"
-        },
-        {
-          "description": "the display text of the vpc offering",
-          "length": 255,
-          "name": "displaytext",
-          "required": true,
-          "type": "string"
         }
       ],
       "related": "updateVPCOffering,listVPCOfferings",
@@ -135,23 +135,18 @@
           "type": "string"
         },
         {
-          "description": "the domain ID(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
-          "name": "domainid",
-          "type": "string"
-        },
-        {
-          "description": "the zone name(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
-          "name": "zone",
-          "type": "string"
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
         },
         {
-          "description": "the id of the vpc offering",
-          "name": "id",
-          "type": "string"
+          "description": " indicates if the vpc offering supports distributed router for one-hop forwarding",
+          "name": "distributedvpcrouter",
+          "type": "boolean"
         },
         {
-          "description": "the domain name(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
-          "name": "domain",
+          "description": "the domain ID(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
+          "name": "domainid",
           "type": "string"
         },
         {
@@ -159,23 +154,6 @@
           "name": "state",
           "type": "string"
         },
-        {},
-        {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
-        },
-        {},
-        {
-          "description": "the name of the vpc offering",
-          "name": "name",
-          "type": "string"
-        },
-        {
-          "description": "true if vpc offering is default, false otherwise",
-          "name": "isdefault",
-          "type": "boolean"
-        },
         {
           "description": "the list of supported services",
           "name": "service",
@@ -185,13 +163,13 @@
               "name": "capability",
               "response": [
                 {
-                  "description": "the capability value",
-                  "name": "value",
+                  "description": "the capability name",
+                  "name": "name",
                   "type": "string"
                 },
                 {
-                  "description": "the capability name",
-                  "name": "name",
+                  "description": "the capability value",
+                  "name": "value",
                   "type": "string"
                 },
                 {
@@ -207,13 +185,18 @@
               "name": "provider",
               "response": [
                 {
-                  "description": "true if individual services can be enabled/disabled",
-                  "name": "canenableindividualservice",
-                  "type": "boolean"
+                  "description": "state of the network provider",
+                  "name": "state",
+                  "type": "string"
                 },
                 {
-                  "description": "the physical network this belongs to",
-                  "name": "physicalnetworkid",
+                  "description": "uuid of the network provider",
+                  "name": "id",
+                  "type": "string"
+                },
+                {
+                  "description": "the destination physical network",
+                  "name": "destinationphysicalnetworkid",
                   "type": "string"
                 },
                 {
@@ -227,19 +210,14 @@
                   "type": "string"
                 },
                 {
-                  "description": "state of the network provider",
-                  "name": "state",
-                  "type": "string"
-                },
-                {
-                  "description": "uuid of the network provider",
-                  "name": "id",
+                  "description": "the physical network this belongs to",
+                  "name": "physicalnetworkid",
                   "type": "string"
                 },
                 {
-                  "description": "the destination physical network",
-                  "name": "destinationphysicalnetworkid",
-                  "type": "string"
+                  "description": "true if individual services can be enabled/disabled",
+                  "name": "canenableindividualservice",
+                  "type": "boolean"
                 }
               ],
               "type": "list"
@@ -253,11 +231,6 @@
           "type": "list"
         },
         {
-          "description": " indicates if the vpc offering supports distributed router for one-hop forwarding",
-          "name": "distributedvpcrouter",
-          "type": "boolean"
-        },
-        {
           "description": " indicated if the offering can support region level vpc",
           "name": "supportsregionLevelvpc",
           "type": "boolean"
@@ -267,15 +240,42 @@
           "name": "jobid",
           "type": "string"
         },
+        {},
+        {},
+        {
+          "description": "the name of the vpc offering",
+          "name": "name",
+          "type": "string"
+        },
+        {
+          "description": "true if vpc offering is default, false otherwise",
+          "name": "isdefault",
+          "type": "boolean"
+        },
         {
           "description": "the date this vpc offering was created",
           "name": "created",
           "type": "date"
         },
         {
+          "description": "the zone name(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
+          "name": "zone",
+          "type": "string"
+        },
+        {
+          "description": "the domain name(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
+          "name": "domain",
+          "type": "string"
+        },
+        {
           "description": "the zone ID(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
           "name": "zoneid",
           "type": "string"
+        },
+        {
+          "description": "the id of the vpc offering",
+          "name": "id",
+          "type": "string"
         }
       ]
     },
@@ -285,11 +285,12 @@
       "name": "createPod",
       "params": [
         {
-          "description": "the name of the Pod",
+          "description": "the Zone ID in which the Pod will be created",
           "length": 255,
-          "name": "name",
+          "name": "zoneid",
+          "related": "createZone,updateZone,listZones,listZones",
           "required": true,
-          "type": "string"
+          "type": "uuid"
         },
         {
           "description": "the ending IP address for the Pod",
@@ -299,47 +300,51 @@
           "type": "string"
         },
         {
-          "description": "the netmask for the Pod",
+          "description": "the gateway for the Pod",
           "length": 255,
-          "name": "netmask",
+          "name": "gateway",
           "required": true,
           "type": "string"
         },
         {
-          "description": "Allocation state of this Pod for allocation of new resources",
+          "description": "the starting IP address for the Pod",
           "length": 255,
-          "name": "allocationstate",
-          "required": false,
+          "name": "startip",
+          "required": true,
           "type": "string"
         },
         {
-          "description": "the gateway for the Pod",
+          "description": "Allocation state of this Pod for allocation of new resources",
           "length": 255,
-          "name": "gateway",
-          "required": true,
+          "name": "allocationstate",
+          "required": false,
           "type": "string"
         },
         {
-          "description": "the starting IP address for the Pod",
+          "description": "the name of the Pod",
           "length": 255,
-          "name": "startip",
+          "name": "name",
           "required": true,
           "type": "string"
         },
         {
-          "description": "the Zone ID in which the Pod will be created",
+          "description": "the netmask for the Pod",
           "length": 255,
-          "name": "zoneid",
-          "related": "createZone,updateZone,listZones,listZones",
+          "name": "netmask",
           "required": true,
-          "type": "uuid"
+          "type": "string"
         }
       ],
       "related": "listPods,updatePod,createManagementNetworkIpRange",
       "response": [
         {
-          "description": "the Zone ID of the Pod",
-          "name": "zoneid",
+          "description": "true if the entity/resource has annotations",
+          "name": "hasannotations",
+          "type": "boolean"
+        },
+        {
+          "description": "the ID of the Pod",
+          "name": "id",
           "type": "string"
         },
         {
@@ -348,14 +353,9 @@
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
-        },
-        {
-          "description": "the gateway of the Pod",
-          "name": "gateway",
-          "type": "string"
+          "description": "the ending IP for the Pod. This parameter is deprecated, please use 'endip' from ipranges parameter.",
+          "name": "endip",
+          "type": "list"
         },
         {
           "description": "indicates if range is dedicated for CPVM and SSVM. This parameter is deprecated, please use 'forsystemvms' from ipranges parameter.",
@@ -363,108 +363,62 @@
           "type": "list"
         },
         {
-          "description": "true if the entity/resource has annotations",
-          "name": "hasannotations",
-          "type": "boolean"
-        },
-        {},
-        {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
+          "description": "the Zone name of the Pod",
+          "name": "zonename",
           "type": "string"
         },
         {
-          "description": "the capacity of the Pod",
-          "name": "capacity",
+          "description": "the IP ranges for the Pod",
+          "name": "ipranges",
           "response": [
             {
-              "description": "the capacity type",
-              "name": "type",
-              "type": "short"
-            },
-            {
-              "description": "the Cluster name",
-              "name": "clustername",
-              "type": "string"
-            },
-            {
-              "description": "the capacity name",
-              "name": "name",
-              "type": "string"
-            },
-            {
-              "description": "the capacity currently in allocated",
-              "name": "capacityallocated",
-              "type": "long"
-            },
-            {
-              "description": "the Pod name",
-              "name": "podname",
-              "type": "string"
-            },
-            {
-              "description": "the Zone name",
-              "name": "zonename",
-              "type": "string"
-            },
-            {
-              "description": "the Zone ID",
-              "name": "zoneid",
+              "description": "the ending IP for the range",
+              "name": "endip",
               "type": "string"
             },
             {
-              "description": "the capacity currently in use",
-              "name": "capacityused",
-              "type": "long"
-            },
-            {
-              "description": "the percentage of capacity currently in use",
-              "name": "percentused",
+              "description": "indicates if range is dedicated for CPVM and SSVM",
+              "name": "forsystemvms",
               "type": "string"
             },
             {
-              "description": "the Pod ID",
-              "name": "podid",
+              "description": "the starting IP for the range",
+              "name": "startip",
               "type": "string"
             },
             {
-              "description": "the Cluster ID",
-              "name": "clusterid",
+              "description": "indicates Vlan ID for the range",
+              "name": "vlanid",
               "type": "string"
-            },
-            {
-              "description": "the total capacity available",
-              "name": "capacitytotal",
-              "type": "long"
             }
           ],
           "type": "list"
         },
         {
-          "description": "the name of the Pod",
-          "name": "name",
+          "description": "the gateway of the Pod",
+          "name": "gateway",
           "type": "string"
         },
         {
-          "description": "the ID of the Pod",
-          "name": "id",
+          "description": "the Zone ID of the Pod",
+          "name": "zoneid",
           "type": "string"
         },
         {
-          "description": "the Zone name of the Pod",
-          "name": "zonename",
+          "description": "the name of the Pod",
+          "name": "name",
           "type": "string"
         },
         {},
         {
-          "description": "the allocation state of the Pod",
-          "name": "allocationstate",
-          "type": "string"
+          "description": "indicates Vlan ID for the range. This parameter is deprecated, please use 'vlanid' from ipranges parameter.",
+          "name": "vlanid",
+          "type": "list"
         },
         {
-          "description": "the ending IP for the Pod. This parameter is deprecated, please use 'endip' from ipranges parameter.",
-          "name": "endip",
-          "type": "list"
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
         },
         {
           "description": "the starting IP for the Pod. This parameter is deprecated, please use 'startip' from ipranges parameter.",
@@ -472,36 +426,82 @@
           "type": "list"
         },
         {
-          "description": "the IP ranges for the Pod",
-          "name": "ipranges",
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
+          "type": "string"
+        },
+        {
+          "description": "the allocation state of the Pod",
+          "name": "allocationstate",
+          "type": "string"
+        },
+        {},
+        {
+          "description": "the capacity of the Pod",
+          "name": "capacity",
           "response": [
             {
-              "description": "the starting IP for the range",
-              "name": "startip",
+              "description": "the Cluster ID",
+              "name": "clusterid",
               "type": "string"
             },
             {
-              "description": "indicates if range is dedicated for CPVM and SSVM",
-              "name": "forsystemvms",
+              "description": "the percentage of capacity currently in use",
+              "name": "percentused",
               "type": "string"
             },
             {
-              "description": "indicates Vlan ID for the range",
-              "name": "vlanid",
+              "description": "the Zone ID",
+              "name": "zoneid",
               "type": "string"
             },
             {
-              "description": "the ending IP for the range",
-              "name": "endip",
+              "description": "the Cluster name",
+              "name": "clustername",
+              "type": "string"
+            },
+            {
+              "description": "the Pod ID",
+              "name": "podid",
+              "type": "string"
+            },
+            {
+              "description": "the Pod name",
+              "name": "podname",
+              "type": "string"
+            },
+            {
+              "description": "the total capacity available",
+              "name": "capacitytotal",
+              "type": "long"
+            },
+            {
+              "description": "the capacity type",
+              "name": "type",
+              "type": "short"
+            },
+            {
+              "description": "the capacity currently in use",
+              "name": "capacityused",
+              "type": "long"
+            },
+            {
+              "description": "the capacity name",
+              "name": "name",
+              "type": "string"
+            },
+            {
+              "description": "the Zone name",
+              "name": "zonename",
               "type": "string"
+            },
+            {
+              "description": "the capacity currently in allocated",
+              "name": "capacityallocated",
+              "type": "long"
             }
           ],
           "type": "list"
-        },
-        {
-          "description": "indicates Vlan ID for the range. This parameter is deprecated, please use 'vlanid' from ipranges parameter.",
-          "name": "vlanid",
-          "type": "list"
         }
       ]
     },
@@ -511,60 +511,59 @@
       "name": "ldapCreateAccount",
       "params": [
         {
-          "description": "Network domain for the account's networks",
+          "description": "Type of the account. Specify 0 for user, 1 for root admin, and 2 for domain admin",
           "length": 255,
-          "name": "networkdomain",
+          "name": "accounttype",
           "required": false,
-          "type": "string"
+          "type": "short"
         },
         {
-          "description": "User UUID, required for adding account from external provisioning system",
+          "description": "Creates the user under the specified account. If no account is specified, the username will be used as the account name.",
           "length": 255,
-          "name": "userid",
+          "name": "account",
           "required": false,
           "type": "string"
         },
         {
-          "description": "Creates the account under the specified role.",
+          "description": "Unique username.",
           "length": 255,
-          "name": "roleid",
-          "related": "createRole,importRole,listRoles,updateRole",
-          "required": false,
-          "type": "uuid"
+          "name": "username",
+          "required": true,
+          "type": "string"
         },
         {
-          "description": "Creates the user under the specified domain.",
+          "description": "Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.",
           "length": 255,
-          "name": "domainid",
-          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
+          "name": "timezone",
           "required": false,
-          "type": "uuid"
+          "type": "string"
         },
         {
-          "description": "Type of the account. Specify 0 for user, 1 for root admin, and 2 for domain admin",
+          "description": "Network domain for the account's networks",
           "length": 255,
-          "name": "accounttype",
+          "name": "networkdomain",
           "required": false,
-          "type": "short"
+          "type": "string"
         },
         {
-          "description": "Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.",
+          "description": "Creates the user under the specified domain.",
           "length": 255,
-          "name": "timezone",
+          "name": "domainid",
+          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
           "required": false,
-          "type": "string"
+          "type": "uuid"
         },
         {
-          "description": "Account UUID, required for adding account from external provisioning system",
+          "description": "User UUID, required for adding account from external provisioning system",
           "length": 255,
-          "name": "accountid",
+          "name": "userid",
           "required": false,
           "type": "string"
         },
         {
-          "description": "Creates the user under the specified account. If no account is specified, the username will be used as the account name.",
+          "description": "Account UUID, required for adding account from external provisioning system",
           "length": 255,
-          "name": "account",
+          "name": "accountid",
           "required": false,
           "type": "string"
         },
@@ -576,67 +575,119 @@
           "type": "map"
         },
         {
-          "description": "Unique username.",
+          "description": "Creates the account under the specified role.",
           "length": 255,
-          "name": "username",
-          "required": true,
-          "type": "string"
+          "name": "roleid",
+          "related": "createRole,importRole,listRoles,updateRole",
+          "required": false,
+          "type": "uuid"
         }
       ],
       "related": "createAccount,disableAccount,enableAccount,lockAccount,updateAccount,markDefaultZoneForAccount,listAccounts,listAccounts",
       "response": [
         {
-          "description": "the total number of network traffic bytes sent",
-          "name": "sentbytes",
+          "description": "the total number of network traffic bytes received",
+          "name": "receivedbytes",
           "type": "long"
         },
         {
-          "description": "the total secondary storage space (in GiB) owned by account",
-          "name": "secondarystoragetotal",
-          "type": "float"
+          "description": "the total secondary storage space (in GiB) the account can own",
+          "name": "secondarystoragelimit",
+          "type": "string"
         },
         {
-          "description": "the total primary storage space (in GiB) available to be used for this account",
-          "name": "primarystorageavailable",
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
+        },
+        {
+          "description": "the total number of virtual machines stopped for this account",
+          "name": "vmstopped",
+          "type": "integer"
+        },
+        {
+          "description": "the total secondary storage space (in GiB) available to be used for this account",
+          "name": "secondarystorageavailable",
           "type": "string"
         },
         {
-          "description": "the network domain",
-          "name": "networkdomain",
+          "description": "the total number of templates which have been created by this account",
+          "name": "templatetotal",
+          "type": "long"
+        },
+        {
+          "description": "the total number of networks owned by account",
+          "name": "networktotal",
+          "type": "long"
+        },
+        {
+          "description": "the total primary storage space (in GiB) the account can own",
+          "name": "primarystoragelimit",
           "type": "string"
         },
         {
-          "description": "the list of users associated with account",
-          "name": "user",
-          "response": [
-            {
-              "description": "Base64 string representation of the resource icon",
-              "name": "icon",
-              "type": "resourceiconresponse"
-            },
-            {
-              "description": "the domain name of the user",
-              "name": "domain",
-              "type": "string"
+          "description": "the total primary storage space (in GiB) owned by account",
+          "name": "primarystoragetotal",
+          "type": "long"
+        },
+        {},
+        {
+          "description": "the total number of public ip addresses available for this account to acquire",
+          "name": "ipavailable",
+          "type": "string"
+        },
+        {
+          "description": "the total volume available for this account",
+          "name": "volumeavailable",
+          "type": "string"
+        },
+        {
+          "description": "true if the account requires cleanup",
+          "name": "iscleanuprequired",
+          "type": "boolean"
+        },
+        {
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
+          "type": "string"
+        },
+        {
+          "description": "the ID of the role",
+          "name": "roleid",
+          "type": "string"
+        },
+        {
+          "description": "id of the Domain the account belongs to",
+          "name": "domainid",
+          "type": "string"
+        },
+        {
+          "description": "the list of users associated with account",
+          "name": "user",
+          "response": [
+            {
+              "description": "the source type of the user in lowercase, such as native, ldap, saml2",
+              "name": "usersource",
+              "type": "string"
             },
             {
-              "description": "the ID of the role",
-              "name": "roleid",
+              "description": "the domain name of the user",
+              "name": "domain",
               "type": "string"
             },
             {
-              "description": "the timezone user was created in",
-              "name": "timezone",
+              "description": "the api key of the user",
+              "name": "apikey",
               "type": "string"
             },
             {
-              "description": "the user state",
-              "name": "state",
+              "description": "the timezone user was created in",
+              "name": "timezone",
               "type": "string"
             },
             {
-              "description": "the user email address",
-              "name": "email",
+              "description": "the secret key of the user",
+              "name": "secretkey",
               "type": "string"
             },
             {
@@ -645,19 +696,19 @@
               "type": "string"
             },
             {
-              "description": "the api key of the user",
-              "name": "apikey",
-              "type": "string"
+              "description": "the boolean value representing if the updating target is in caller's child domain",
+              "name": "iscallerchilddomain",
+              "type": "boolean"
             },
             {
-              "description": "the user ID",
-              "name": "id",
+              "description": "the user firstname",
+              "name": "firstname",
               "type": "string"
             },
             {
-              "description": "the date and time the user account was created",
-              "name": "created",
-              "type": "date"
+              "description": "the user email address",
+              "name": "email",
+              "type": "string"
             },
             {
               "description": "the user name",
@@ -665,82 +716,82 @@
               "type": "string"
             },
             {
-              "description": "the account name of the user",
-              "name": "account",
-              "type": "string"
+              "description": "true if user is default, false otherwise",
+              "name": "isdefault",
+              "type": "boolean"
             },
             {
-              "description": "the secret key of the user",
-              "name": "secretkey",
-              "type": "string"
+              "description": "the date and time the user account was created",
+              "name": "created",
+              "type": "date"
             },
             {
-              "description": "the source type of the user in lowercase, such as native, ldap, saml2",
-              "name": "usersource",
+              "description": "the ID of the role",
+              "name": "roleid",
               "type": "string"
             },
             {
-              "description": "true if user is default, false otherwise",
-              "name": "isdefault",
-              "type": "boolean"
+              "description": "the type of the role",
+              "name": "roletype",
+              "type": "string"
             },
             {
-              "description": "the user lastname",
-              "name": "lastname",
+              "description": "the user state",
+              "name": "state",
               "type": "string"
             },
             {
-              "description": "the boolean value representing if the updating target is in caller's child domain",
-              "name": "iscallerchilddomain",
-              "type": "boolean"
+              "description": "Base64 string representation of the resource icon",
+              "name": "icon",
+              "type": "resourceiconresponse"
             },
             {
-              "description": "the account type of the user",
-              "name": "accounttype",
-              "type": "short"
+              "description": "the name of the role",
+              "name": "rolename",
+              "type": "string"
             },
             {
-              "description": "the type of the role",
-              "name": "roletype",
+              "description": "the account ID of the user",
+              "name": "accountid",
               "type": "string"
             },
             {
-              "description": "the name of the role",
-              "name": "rolename",
+              "description": "the user ID",
+              "name": "id",
               "type": "string"
             },
             {
-              "description": "the account ID of the user",
-              "name": "accountid",
+              "description": "the account type of the user",
+              "name": "accounttype",
+              "type": "short"
+            },
+            {
+              "description": "the user lastname",
+              "name": "lastname",
               "type": "string"
             },
             {
-              "description": "the user firstname",
-              "name": "firstname",
+              "description": "the account name of the user",
+              "name": "account",
               "type": "string"
             }
           ],
           "type": "list"
         },
         {
-          "description": "the total number of networks owned by account",
-          "name": "networktotal",
-          "type": "long"
-        },
-        {
-          "description": "the total number of networks the account can own",
-          "name": "networklimit",
+          "description": "the total number of virtual machines available for this account to acquire",
+          "name": "vmavailable",
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
+          "description": "the default zone of the account",
+          "name": "defaultzoneid",
+          "type": "string"
         },
         {
-          "description": "the total number of virtual machines deployed by this account",
-          "name": "vmtotal",
-          "type": "long"
+          "description": "the total volume which can be used by this account",
+          "name": "volumelimit",
+          "type": "string"
         },
         {
           "description": "the total number of vpcs the account can own",
@@ -748,18 +799,23 @@
           "type": "string"
         },
         {
-          "description": "the total number of cpu cores owned by account",
-          "name": "cputotal",
-          "type": "long"
+          "description": "Base64 string representation of the resource icon",
+          "name": "icon",
+          "type": "resourceiconresponse"
         },
         {
-          "description": "the total number of virtual machines that can be deployed by this account",
-          "name": "vmlimit",
+          "description": "the total number of cpu cores available to be created for this account",
+          "name": "cpuavailable",
           "type": "string"
         },
         {
-          "description": "name of the Domain the account belongs to",
-          "name": "domain",
+          "description": "the total number of virtual machines running for this account",
+          "name": "vmrunning",
+          "type": "integer"
+        },
+        {
+          "description": "the total number of networks available to be created for this account",
+          "name": "networkavailable",
           "type": "string"
         },
         {
@@ -767,39 +823,35 @@
           "name": "rolename",
           "type": "string"
         },
+        {},
         {
-          "description": "the total number of vpcs owned by account",
-          "name": "vpctotal",
-          "type": "long"
+          "description": "the total number of snapshots which can be stored by this account",
+          "name": "snapshotlimit",
+          "type": "string"
         },
         {
-          "description": "the total memory (in MB) owned by account",
-          "name": "memorytotal",
+          "description": "the total number of projects being administrated by this account",
+          "name": "projecttotal",
           "type": "long"
         },
         {
-          "description": "the total primary storage space (in GiB) the account can own",
-          "name": "primarystoragelimit",
+          "description": "the total number of projects the account can own",
+          "name": "projectlimit",
           "type": "string"
         },
         {
-          "description": "true if account is default, false otherwise",
-          "name": "isdefault",
-          "type": "boolean"
-        },
-        {
-          "description": "path of the Domain the account belongs to",
-          "name": "domainpath",
-          "type": "string"
+          "description": "the total number of virtual machines deployed by this account",
+          "name": "vmtotal",
+          "type": "long"
         },
         {
-          "description": "the total number of projects the account can own",
-          "name": "projectlimit",
-          "type": "string"
+          "description": "the total secondary storage space (in GiB) owned by account",
+          "name": "secondarystoragetotal",
+          "type": "float"
         },
         {
-          "description": "the type of the role (Admin, ResourceAdmin, DomainAdmin, User)",
-          "name": "roletype",
+          "description": "the state of the account",
+          "name": "state",
           "type": "string"
         },
         {
@@ -808,29 +860,29 @@
           "type": "string"
         },
         {
-          "description": "the date when this account was created",
-          "name": "created",
-          "type": "date"
+          "description": "the network domain",
+          "name": "networkdomain",
+          "type": "string"
         },
         {
-          "description": "the state of the account",
-          "name": "state",
+          "description": "the total memory (in MB) the account can own",
+          "name": "memorylimit",
           "type": "string"
         },
         {
-          "description": "details for the account",
-          "name": "accountdetails",
-          "type": "map"
+          "description": "the total number of snapshots available for this account",
+          "name": "snapshotavailable",
+          "type": "string"
         },
         {
-          "description": "the total volume which can be used by this account",
-          "name": "volumelimit",
+          "description": "the total number of cpu cores the account can own",
+          "name": "cpulimit",
           "type": "string"
         },
         {
-          "description": "the id of the account",
-          "name": "id",
-          "type": "string"
+          "description": "the total number of vpcs owned by account",
+          "name": "vpctotal",
+          "type": "long"
         },
         {
           "description": "the list of acl groups that account belongs to",
@@ -838,89 +890,64 @@
           "type": "list"
         },
         {
-          "description": "the total volume available for this account",
-          "name": "volumeavailable",
-          "type": "string"
-        },
-        {
-          "description": "the total primary storage space (in GiB) owned by account",
-          "name": "primarystoragetotal",
+          "description": "the total memory (in MB) owned by account",
+          "name": "memorytotal",
           "type": "long"
         },
         {
-          "description": "the total number of public ip addresses available for this account to acquire",
-          "name": "ipavailable",
-          "type": "string"
-        },
-        {
-          "description": "the total number of virtual machines running for this account",
-          "name": "vmrunning",
-          "type": "integer"
-        },
-        {
-          "description": "the total number of templates which can be created by this account",
-          "name": "templatelimit",
-          "type": "string"
-        },
-        {
-          "description": "the total secondary storage space (in GiB) available to be used for this account",
-          "name": "secondarystorageavailable",
+          "description": "the total number of public ip addresses this account can acquire",
+          "name": "iplimit",
           "type": "string"
         },
         {
-          "description": "the total number of network traffic bytes received",
-          "name": "receivedbytes",
+          "description": "the total number of public ip addresses allocated for this account",
+          "name": "iptotal",
           "type": "long"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
-          "type": "string"
-        },
-        {
-          "description": "the total number of projects being administrated by this account",
-          "name": "projecttotal",
+          "description": "the total number of network traffic bytes sent",
+          "name": "sentbytes",
           "type": "long"
         },
         {
-          "description": "the total number of snapshots available for this account",
-          "name": "snapshotavailable",
+          "description": "the total number of templates which can be created by this account",
+          "name": "templatelimit",
           "type": "string"
         },
         {
-          "description": "the total number of snapshots stored by this account",
-          "name": "snapshottotal",
-          "type": "long"
+          "description": "the type of the role (Admin, ResourceAdmin, DomainAdmin, User)",
+          "name": "roletype",
+          "type": "string"
         },
         {
-          "description": "the total volume being used by this account",
-          "name": "volumetotal",
-          "type": "long"
+          "description": "the total number of virtual machines that can be deployed by this account",
+          "name": "vmlimit",
+          "type": "string"
         },
         {
-          "description": "the ID of the role",
-          "name": "roleid",
+          "description": "path of the Domain the account belongs to",
+          "name": "domainpath",
           "type": "string"
         },
         {
-          "description": "the name of the account",
-          "name": "name",
-          "type": "string"
+          "description": "true if account is default, false otherwise",
+          "name": "isdefault",
+          "type": "boolean"
         },
         {
-          "description": "the total number of virtual machines available for this account to acquire",
-          "name": "vmavailable",
+          "description": "the id of the account",
+          "name": "id",
           "type": "string"
         },
         {
-          "description": "the total secondary storage space (in GiB) the account can own",
-          "name": "secondarystoragelimit",
+          "description": "the total number of networks the account can own",
+          "name": "networklimit",
           "type": "string"
         },
         {
-          "description": "Base64 string representation of the resource icon",
-          "name": "icon",
-          "type": "resourceiconresponse"
+          "description": "details for the account",
+          "name": "accountdetails",
+          "type": "map"
         },
         {
           "description": "account type (admin, domain-admin, user)",
@@ -928,19 +955,19 @@
           "type": "short"
         },
         {
-          "description": "the total number of public ip addresses allocated for this account",
-          "name": "iptotal",
-          "type": "long"
+          "description": "name of the Domain the account belongs to",
+          "name": "domain",
+          "type": "string"
         },
         {
-          "description": "the total number of snapshots which can be stored by this account",
-          "name": "snapshotlimit",
-          "type": "string"
+          "description": "the date when this account was created",
+          "name": "created",
+          "type": "date"
         },
         {
-          "description": "the total number of templates available to be created by this account",
-          "name": "templateavailable",
-          "type": "string"
+          "description": "the total number of cpu cores owned by account",
+          "name": "cputotal",
+          "type": "long"
         },
         {
           "description": "the total memory (in MB) available to be created for this account",
@@ -948,18 +975,13 @@
           "type": "string"
         },
         {
-          "description": "the total number of cpu cores the account can own",
-          "name": "cpulimit",
-          "type": "string"
-        },
-        {
-          "description": "the total number of public ip addresses this account can acquire",
-          "name": "iplimit",
-          "type": "string"
+          "description": "the total number of snapshots stored by this account",
+          "name": "snapshottotal",
+          "type": "long"
         },
         {
-          "description": "the total number of templates which have been created by this account",
-          "name": "templatetotal",
+          "description": "the total volume being used by this account",
+          "name": "volumetotal",
           "type": "long"
         },
         {
@@ -968,40 +990,18 @@
           "type": "string"
         },
         {
-          "description": "the total number of cpu cores available to be created for this account",
-          "name": "cpuavailable",
-          "type": "string"
-        },
-        {
-          "description": "the total number of networks available to be created for this account",
-          "name": "networkavailable",
-          "type": "string"
-        },
-        {
-          "description": "the total memory (in MB) the account can own",
-          "name": "memorylimit",
+          "description": "the total primary storage space (in GiB) available to be used for this account",
+          "name": "primarystorageavailable",
           "type": "string"
         },
         {
-          "description": "the total number of virtual machines stopped for this account",
-          "name": "vmstopped",
-          "type": "integer"
-        },
-        {
-          "description": "true if the account requires cleanup",
-          "name": "iscleanuprequired",
-          "type": "boolean"
-        },
-        {},
-        {
-          "description": "id of the Domain the account belongs to",
-          "name": "domainid",
+          "description": "the name of the account",
+          "name": "name",
           "type": "string"
         },
-        {},
         {
-          "description": "the default zone of the account",
-          "name": "defaultzoneid",
+          "description": "the total number of templates available to be created by this account",
+          "name": "templateavailable",
           "type": "string"
         }
       ],
@@ -1023,11 +1023,10 @@
       "response": [
         {},
         {
-          "description": "true if operation is executed successfully",
-          "name": "success",
-          "type": "boolean"
+          "description": "any text associated with the success or failure",
+          "name": "displaytext",
+          "type": "string"
         },
-        {},
         {
           "description": "the UUID of the latest async job acting on this object",
           "name": "jobid",
@@ -1038,10 +1037,11 @@
           "name": "jobstatus",
           "type": "integer"
         },
+        {},
         {
-          "description": "any text associated with the success or failure",
-          "name": "displaytext",
-          "type": "string"
+          "description": "true if operation is executed successfully",
+          "name": "success",
+          "type": "boolean"
         }
       ],
       "since": "4.6.0"
@@ -1087,182 +1087,181 @@
       "related": "prepareTemplate,listIsos,registerIso,updateIso,copyTemplate,createTemplate,listTemplates,registerTemplate,updateTemplate,listTemplates,createTemplate,copyTemplate,registerTemplate,registerIso,copyIso,listIsos",
       "response": [
         {
-          "description": "true if the entity/resource has annotations",
-          "name": "hasannotations",
-          "type": "boolean"
+          "description": "the template name",
+          "name": "name",
+          "type": "string"
         },
         {
-          "description": "the size of the template",
-          "name": "size",
-          "type": "long"
+          "description": "checksum of the template",
+          "name": "checksum",
+          "type": "string"
         },
         {
-          "description": "the date this template was created",
-          "name": "created",
-          "type": "date"
+          "description": "the project name of the template",
+          "name": "project",
+          "type": "string"
+        },
+        {
+          "description": "the hypervisor on which the template runs",
+          "name": "hypervisor",
+          "type": "string"
+        },
+        {
+          "description": "true if the ISO is bootable, false otherwise",
+          "name": "bootable",
+          "type": "boolean"
         },
         {
           "description": "the list of resource tags associated",
           "name": "tags",
           "response": [
             {
-              "description": "the account associated with the tag",
-              "name": "account",
+              "description": "id of the resource",
+              "name": "resourceid",
               "type": "string"
             },
             {
-              "description": "customer associated with the tag",
-              "name": "customer",
+              "description": "the ID of the domain associated with the tag",
+              "name": "domainid",
               "type": "string"
             },
             {
-              "description": "id of the resource",
-              "name": "resourceid",
+              "description": "the project name where tag belongs to",
+              "name": "project",
               "type": "string"
             },
             {
-              "description": "the project id the tag belongs to",
-              "name": "projectid",
+              "description": "customer associated with the tag",
+              "name": "customer",
               "type": "string"
             },
             {
-              "description": "the ID of the domain associated with the tag",
-              "name": "domainid",
+              "description": "tag value",
+              "name": "value",
               "type": "string"
             },
             {
-              "description": "resource type",
-              "name": "resourcetype",
+              "description": "the account associated with the tag",
+              "name": "account",
               "type": "string"
             },
             {
-              "description": "the domain associated with the tag",
-              "name": "domain",
+              "description": "resource type",
+              "name": "resourcetype",
               "type": "string"
             },
             {
-              "description": "tag value",
-              "name": "value",
+              "description": "the project id the tag belongs to",
+              "name": "projectid",
               "type": "string"
             },
             {
-              "description": "the project name where tag belongs to",
-              "name": "project",
+              "description": "tag key name",
+              "name": "key",
               "type": "string"
             },
             {
-              "description": "tag key name",
-              "name": "key",
+              "description": "the domain associated with the tag",
+              "name": "domain",
               "type": "string"
             }
           ],
           "type": "set"
         },
         {
-          "description": "the name of the secondary storage host for the template",
-          "name": "hostname",
-          "type": "string"
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
         },
         {
-          "description": "the name of the OS type for this template.",
-          "name": "ostypename",
-          "type": "string"
+          "description": "if root disk template, then ids of the datas disk templates this template owns",
+          "name": "childtemplates",
+          "type": "set"
         },
+        {},
         {
-          "description": "checksum of the template",
-          "name": "checksum",
-          "type": "string"
+          "description": "true if template contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory",
+          "name": "isdynamicallyscalable",
+          "type": "boolean"
         },
         {
-          "description": "the status of the template",
-          "name": "status",
+          "description": "the URL which the template/iso is registered from",
+          "name": "url",
           "type": "string"
         },
         {
-          "description": "the format of the template.",
-          "name": "format",
-          "type": "imageformat"
+          "description": "true if the entity/resource has annotations",
+          "name": "hasannotations",
+          "type": "boolean"
         },
         {
-          "description": "the tag of this template",
-          "name": "templatetag",
-          "type": "string"
+          "description": "the size of the template",
+          "name": "size",
+          "type": "long"
         },
-        {},
         {
-          "description": "the project id of the template",
-          "name": "projectid",
+          "description": "the ID of the OS type for this template.",
+          "name": "ostypeid",
           "type": "string"
         },
         {
-          "description": "the type of the template",
-          "name": "templatetype",
-          "type": "string"
+          "description": "true if this template is a public template, false otherwise",
+          "name": "ispublic",
+          "type": "boolean"
         },
         {
-          "description": "VMware only: true if template is deployed without orchestrating disks and networks but \"as-is\" defined in the template.",
-          "name": "deployasis",
-          "type": "boolean"
+          "description": "the tag of this template",
+          "name": "templatetag",
+          "type": "string"
         },
         {
-          "description": "if Datadisk template, then id of the root disk template this template belongs to",
-          "name": "parenttemplateid",
+          "description": "the account name to which the template belongs",
+          "name": "account",
           "type": "string"
         },
         {
-          "description": "true if the template is managed across all Zones, false otherwise",
-          "name": "crossZones",
+          "description": "true if the template is extractable, false otherwise",
+          "name": "isextractable",
           "type": "boolean"
         },
         {
-          "description": "true if the template is extractable, false otherwise",
-          "name": "isextractable",
+          "description": "true if template is sshkey enabled, false otherwise",
+          "name": "sshkeyenabled",
           "type": "boolean"
         },
-        {},
         {
           "description": "the account id to which the template belongs",
           "name": "accountid",
           "type": "string"
         },
         {
-          "description": "true if the template is ready to be deployed from, false otherwise.",
-          "name": "isready",
-          "type": "boolean"
-        },
-        {
-          "description": "Lists the download progress of a template across all secondary storages",
-          "name": "downloaddetails",
-          "type": "list"
-        },
-        {
-          "description": "the ID of the domain to which the template belongs",
-          "name": "domainid",
+          "description": "the name of the zone for this template",
+          "name": "zonename",
           "type": "string"
         },
         {
-          "description": "the physical size of the template",
-          "name": "physicalsize",
-          "type": "long"
+          "description": "if Datadisk template, then id of the root disk template this template belongs to",
+          "name": "parenttemplateid",
+          "type": "string"
         },
         {
-          "description": "KVM Only: true if template is directly downloaded to Primary Storage bypassing Secondary Storage",
-          "name": "directdownload",
-          "type": "boolean"
+          "description": "VMware only: additional key/value details tied with deploy-as-is template",
+          "name": "deployasisdetails",
+          "type": "map"
         },
         {
-          "description": "true if template is sshkey enabled, false otherwise",
-          "name": "sshkeyenabled",
-          "type": "boolean"
+          "description": "the processor bit size",
+          "name": "bits",
+          "type": "int"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
+          "description": "the ID of the zone for this template",
+          "name": "zoneid",
+          "type": "string"
         },
         {
-          "description": "the template name",
-          "name": "name",
+          "description": "the status of the template",
+          "name": "status",
           "type": "string"
         },
         {
@@ -1270,35 +1269,41 @@
           "name": "id",
           "type": "string"
         },
+        {},
         {
-          "description": "the template display text",
-          "name": "displaytext",
-          "type": "string"
+          "description": "true if template requires HVM enabled, false otherwise",
+          "name": "requireshvm",
+          "type": "boolean"
         },
         {
-          "description": "the template ID of the parent template if present",
-          "name": "sourcetemplateid",
+          "description": "the name of the secondary storage host for the template",
+          "name": "hostname",
           "type": "string"
         },
         {
-          "description": "true if this template is a public template, false otherwise",
-          "name": "ispublic",
-          "type": "boolean"
+          "description": "the type of the template",
+          "name": "templatetype",
+          "type": "string"
         },
         {
-          "description": "the account name to which the template belongs",
-          "name": "account",
+          "description": "the ID of the domain to which the template belongs",
+          "name": "domainid",
           "type": "string"
         },
         {
-          "description": "additional key/value details tied with template",
-          "name": "details",
-          "type": "map"
+          "description": "Base64 string representation of the resource icon",
+          "name": "icon",
+          "type": "resourceiconresponse"
         },
         {
-          "description": "true if the reset password feature is enabled, false otherwise",
-          "name": "passwordenabled",
-          "type": "boolean"
+          "description": "the template ID of the parent template if present",
+          "name": "sourcetemplateid",
+          "type": "string"
+        },
+        {
+          "description": "the format of the template.",
+          "name": "format",
+          "type": "imageformat"
         },
         {
           "description": "the UUID of the latest async job acting on this object",
@@ -1306,89 +1311,84 @@
           "type": "string"
         },
         {
-          "description": "true if this template is a featured template, false otherwise",
-          "name": "isfeatured",
-          "type": "boolean"
+          "description": "the physical size of the template",
+          "name": "physicalsize",
+          "type": "long"
         },
         {
-          "description": "the name of the domain to which the template belongs",
-          "name": "domain",
+          "description": "the ID of the secondary storage host for the template",
+          "name": "hostid",
           "type": "string"
         },
         {
-          "description": "the hypervisor on which the template runs",
-          "name": "hypervisor",
+          "description": "the date this template was created",
+          "name": "created",
+          "type": "date"
+        },
+        {
+          "description": "the project id of the template",
+          "name": "projectid",
           "type": "string"
         },
         {
-          "description": "true if template requires HVM enabled, false otherwise",
-          "name": "requireshvm",
+          "description": "VMware only: true if template is deployed without orchestrating disks and networks but \"as-is\" defined in the template.",
+          "name": "deployasis",
+          "type": "boolean"
+        },
+        {
+          "description": "true if this template is a featured template, false otherwise",
+          "name": "isfeatured",
           "type": "boolean"
         },
         {
+          "description": "Lists the download progress of a template across all secondary storages",
+          "name": "downloaddetails",
+          "type": "list"
+        },
+        {
           "description": "the date this template was removed",
           "name": "removed",
           "type": "date"
         },
         {
-          "description": "the processor bit size",
-          "name": "bits",
-          "type": "int"
+          "description": "KVM Only: true if template is directly downloaded to Primary Storage bypassing Secondary Storage",
+          "name": "directdownload",
+          "type": "boolean"
         },
         {
-          "description": "the ID of the zone for this template",
-          "name": "zoneid",
+          "description": "the template display text",
+          "name": "displaytext",
           "type": "string"
         },
         {
-          "description": "the ID of the OS type for this template.",
-          "name": "ostypeid",
+          "description": "the name of the domain to which the template belongs",
+          "name": "domain",
           "type": "string"
         },
         {
-          "description": "true if template contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory",
-          "name": "isdynamicallyscalable",
+          "description": "true if the template is managed across all Zones, false otherwise",
+          "name": "crossZones",
           "type": "boolean"
         },
         {
-          "description": "Base64 string representation of the resource icon",
-          "name": "icon",
-          "type": "resourceiconresponse"
-        },
-        {
-          "description": "the project name of the template",
-          "name": "project",
+          "description": "the name of the OS type for this template.",
+          "name": "ostypename",
           "type": "string"
         },
         {
-          "description": "VMware only: additional key/value details tied with deploy-as-is template",
-          "name": "deployasisdetails",
+          "description": "additional key/value details tied with template",
+          "name": "details",
           "type": "map"
         },
         {
-          "description": "true if the ISO is bootable, false otherwise",
-          "name": "bootable",
+          "description": "true if the template is ready to be deployed from, false otherwise.",
+          "name": "isready",
           "type": "boolean"
         },
         {
-          "description": "if root disk template, then ids of the datas disk templates this template owns",
-          "name": "childtemplates",
-          "type": "set"
-        },
-        {
-          "description": "the ID of the secondary storage host for the template",
-          "name": "hostid",
-          "type": "string"
-        },
-        {
-          "description": "the name of the zone for this template",
-          "name": "zonename",
-          "type": "string"
-        },
-        {
-          "description": "the URL which the template/iso is registered from",
-          "name": "url",
-          "type": "string"
+          "description": "true if the reset password feature is enabled, false otherwise",
+          "name": "passwordenabled",
+          "type": "boolean"
         }
       ]
     },
@@ -1408,27 +1408,27 @@
       ],
       "response": [
         {
-          "description": "true if operation is executed successfully",
-          "name": "success",
-          "type": "boolean"
+          "description": "any text associated with the success or failure",
+          "name": "displaytext",
+          "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": "true if operation is executed successfully",
+          "name": "success",
+          "type": "boolean"
         },
         {
-          "description": "any text associated with the success or failure",
-          "name": "displaytext",
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
           "type": "string"
-        },
-        {}
+        }
       ]
     },
     {
@@ -1437,13 +1437,6 @@
       "name": "provisionCertificate",
       "params": [
         {
-          "description": "Whether to attempt reconnection with host/agent after successful deployment of certificate. When option is not provided, configured global setting is used",
-          "length": 255,
-          "name": "reconnect",
-          "required": false,
-          "type": "boolean"
-        },
-        {
           "description": "The host/agent uuid to which the certificate has to be provisioned (issued and propagated)",
           "length": 255,
           "name": "hostid",
@@ -1452,6 +1445,13 @@
           "type": "uuid"
         },
         {
+          "description": "Whether to attempt reconnection with host/agent after successful deployment of certificate. When option is not provided, configured global setting is used",
+          "length": 255,
+          "name": "reconnect",
+          "required": false,
+          "type": "boolean"
+        },
+        {
           "description": "Name of the CA service provider, otherwise the default configured provider plugin will be used",
           "length": 255,
           "name": "provider",
@@ -1460,17 +1460,15 @@
         }
       ],
       "response": [
-        {},
-        {},
         {
           "description": "true if operation is executed successfully",
           "name": "success",
           "type": "boolean"
         },
         {
-          "description": "any text associated with the success or failure",
-          "name": "displaytext",
-          "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",
@@ -1478,10 +1476,12 @@
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
-        }
+          "description": "any text associated with the success or failure",
+          "name": "displaytext",
+          "type": "string"
+        },
+        {},
+        {}
       ],
       "since": "4.11.0"
     },
@@ -1491,13 +1491,6 @@
       "name": "addExternalFirewall",
       "params": [
         {
-          "description": "Password of the external firewall appliance.",
-          "length": 255,
-          "name": "password",
-          "required": true,
-          "type": "string"
-        },
-        {
           "description": "Username of the external firewall appliance.",
           "length": 255,
           "name": "username",
@@ -1518,82 +1511,89 @@
           "name": "url",
           "required": true,
           "type": "string"
+        },
+        {
+          "description": "Password of the external firewall appliance.",
+          "length": 255,
+          "name": "password",
+          "required": true,
+          "type": "string"
         }
       ],
       "related": "listExternalFirewalls",
       "response": [
         {
-          "description": "the usage interface of the external firewall",
-          "name": "usageinterface",
+          "description": "the public interface of the external firewall",
+          "name": "publicinterface",
           "type": "string"
         },
         {
-          "description": "the private interface of the external firewall",
-          "name": "privateinterface",
-          "type": "string"
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
         },
         {
-          "description": "the timeout (in seconds) for requests to the external firewall",
-          "name": "timeout",
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
           "type": "string"
         },
         {
-          "description": "the public security zone of the external firewall",
-          "name": "publiczone",
+          "description": "the ID of the external firewall",
+          "name": "id",
           "type": "string"
         },
         {
-          "description": "the number of times to retry requests to the external firewall",
-          "name": "numretries",
+          "description": "the private interface of the external firewall",
+          "name": "privateinterface",
           "type": "string"
         },
-        {},
         {
-          "description": "the ID of the network device",
-          "name": "id",
+          "description": "the timeout (in seconds) for requests to the external firewall",
+          "name": "timeout",
           "type": "string"
         },
-        {},
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
+          "description": "the zone ID of the external firewall",
+          "name": "zoneid",
           "type": "string"
         },
         {
-          "description": "the public interface of the external firewall",
-          "name": "publicinterface",
+          "description": "the ID of the network device",
+          "name": "id",
           "type": "string"
         },
         {
-          "description": "the management IP address of the external firewall",
-          "name": "ipaddress",
+          "description": "the usage interface of the external firewall",
+          "name": "usageinterface",
           "type": "string"
         },
         {
-          "description": "the private security zone of the external firewall",
-          "name": "privatezone",
+          "description": "the username that's used to log in to the external firewall",
+          "name": "username",
           "type": "string"
         },
         {
-          "description": "the username that's used to log in to the external firewall",
-          "name": "username",
+          "description": "the number of times to retry requests to the external firewall",
+          "name": "numretries",
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
+          "description": "the management IP address of the external firewall",
+          "name": "ipaddress",
+          "type": "string"
         },
         {
-          "description": "the ID of the external firewall",
-          "name": "id",
+          "description": "the public security zone of the external firewall",
+          "name": "publiczone",
           "type": "string"
         },
+        {},
         {
-          "description": "the zone ID of the external firewall",
-          "name": "zoneid",
+          "description": "the private security zone of the external firewall",
+          "name": "privatezone",
           "type": "string"
-        }
+        },
+        {}
       ]
     },
     {
@@ -1641,53 +1641,27 @@
       "name": "listVirtualMachinesMetrics",
       "params": [
         {
-          "description": "list vms by vpc",
-          "length": 255,
-          "name": "vpcid",
-          "related": "createVPC,listVPCs,updateVPC,createVPC,listVPCs,updateVPC,migrateVPC",
-          "required": false,
-          "type": "uuid"
-        },
-        {
-          "description": "list only resources belonging to the domain specified",
+          "description": "list vms by iso",
           "length": 255,
-          "name": "domainid",
-          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
+          "name": "isoid",
           "required": false,
           "type": "uuid"
         },
         {
-          "description": "list resources by display flag; only ROOT admin is eligible to pass this parameter",
+          "description": "defaults to false, but if true, lists all resources from the parent specified by the domainId till leaves.",
           "length": 255,
-          "name": "displayvm",
+          "name": "isrecursive",
           "required": false,
-          "since": "4.4",
           "type": "boolean"
         },
         {
-          "description": "the pod ID",
-          "length": 255,
-          "name": "podid",
-          "related": "listPods,updatePod,createManagementNetworkIpRange",
-          "required": false,
-          "type": "uuid"
-        },
-        {
-          "description": "the security group ID",
-          "length": 255,
-          "name": "securitygroupid",
-          "related": "createSecurityGroup,listSecurityGroups,updateSecurityGroup",
-          "required": false,
-          "since": "4.15",
-          "type": "uuid"
-        },
-        {
-          "description": "the storage ID where vm's volumes belong to",
+          "description": "the IDs of the virtual machines, mutually exclusive with id",
           "length": 255,
-          "name": "storageid",
-          "related": "cancelStorageMaintenance,createStoragePool,listStoragePools,findStoragePoolsForMigration,enableStorageMaintenance,updateStoragePool,syncStoragePool,updateStorageCapabilities,listVsphereStoragePolicyCompatiblePools",
+          "name": "ids",
+          "related": "assignVirtualMachine,migrateVirtualMachine,migrateVirtualMachineWithVolume,recoverVirtualMachine,attachIso,detachIso,addNicToVirtualMachine,deployVirtualMachine,destroyVirtualMachine,listVirtualMachines,scaleVirtualMachine,rebootVirtualMachine,removeNicFromVirtualMachine,resetPasswordForVirtualMachine,resetSSHKeyForVirtualMachine,restoreVirtualMachine,startVirtualMachine,stopVirtualMachine,updateDefaultNicForVirtualMachine,updateVirtualMachine,changeServiceForVirtua [...]
           "required": false,
-          "type": "uuid"
+          "since": "4.4",
+          "type": "list"
         },
         {
           "description": "List by keyword",
@@ -1697,51 +1671,39 @@
           "type": "string"
         },
         {
-          "description": "the group ID",
+          "description": "list resources by display flag; only ROOT admin is eligible to pass this parameter",
           "length": 255,
-          "name": "groupid",
-          "related": "createInstanceGroup,listInstanceGroups,updateInstanceGroup",
+          "name": "displayvm",
           "required": false,
-          "type": "uuid"
+          "since": "4.4",
+          "type": "boolean"
         },
         {
-          "description": "list vms by ssh keypair name",
+          "description": "flag to display the resource icon for VMs",
           "length": 255,
-          "name": "keypair",
+          "name": "showicon",
           "required": false,
-          "type": "string"
+          "since": "4.16.0.0",
+          "type": "boolean"
         },
         {
-          "description": "the availability zone ID",
+          "description": "list by the service offering",
           "length": 255,
-          "name": "zoneid",
-          "related": "createZone,updateZone,listZones,listZones",
+          "name": "serviceofferingid",
+          "related": "createServiceOffering,updateServiceOffering,listServiceOfferings",
           "required": false,
+          "since": "4.4",
           "type": "uuid"
         },
         {
-          "description": "list vms by template",
+          "description": "list vms by vpc",
           "length": 255,
-          "name": "templateid",
-          "related": "prepareTemplate,listIsos,registerIso,updateIso,copyTemplate,createTemplate,listTemplates,registerTemplate,updateTemplate,listTemplates,createTemplate,copyTemplate,registerTemplate,registerIso,copyIso,listIsos",
+          "name": "vpcid",
+          "related": "createVPC,listVPCs,updateVPC,createVPC,listVPCs,updateVPC,migrateVPC",
           "required": false,
           "type": "uuid"
         },
         {
-          "description": "comma separated list of host details requested, value can be a list of [all, group, nics, stats, secgrp, tmpl, servoff, diskoff, iso, volume, min, affgrp]. If no parameter is passed in, the details will be defaulted to all",
-          "length": 255,
-          "name": "details",
-          "required": false,
-          "type": "list"
-        },
-        {
-          "description": "",
-          "length": 255,
-          "name": "pagesize",
-          "required": false,
-          "type": "integer"
-        },
-        {
           "description": "name of the virtual machine (a substring match is made against the parameter value, data for all matching VMs will be returned)",
           "length": 255,
           "name": "name",
@@ -1749,26 +1711,17 @@
           "type": "string"
         },
         {
-          "description": "the IDs of the virtual machines, mutually exclusive with id",
-          "length": 255,
-          "name": "ids",
-          "related": "assignVirtualMachine,migrateVirtualMachine,migrateVirtualMachineWithVolume,recoverVirtualMachine,attachIso,detachIso,addNicToVirtualMachine,deployVirtualMachine,destroyVirtualMachine,listVirtualMachines,scaleVirtualMachine,rebootVirtualMachine,removeNicFromVirtualMachine,resetPasswordForVirtualMachine,resetSSHKeyForVirtualMachine,restoreVirtualMachine,startVirtualMachine,stopVirtualMachine,updateDefaultNicForVirtualMachine,updateVirtualMachine,changeServiceForVirtua [...]
-          "required": false,
-          "since": "4.4",
-          "type": "list"
-        },
-        {
-          "description": "the target hypervisor for the template",
+          "description": "List resources by tags (key/value pairs)",
           "length": 255,
-          "name": "hypervisor",
+          "name": "tags",
           "required": false,
-          "type": "string"
+          "type": "map"
         },
         {
-          "description": "list objects by project",
+          "description": "list by network id",
           "length": 255,
-          "name": "projectid",
-          "related": "listProjectAccounts,activateProject,createProject,listProjects,suspendProject,updateProject",
+          "name": "networkid",
+          "related": "createNetwork,listNetworks,updateNetwork,createNetwork,updateNetwork,listNetworks,migrateNetwork,listF5LoadBalancerNetworks,listNetscalerLoadBalancerNetworks,listNiciraNvpDeviceNetworks,listPaloAltoFirewallNetworks,listSrxFirewallNetworks,listBrocadeVcsDeviceNetworks",
           "required": false,
           "type": "uuid"
         },
@@ -1781,32 +1734,32 @@
           "type": "uuid"
         },
         {
-          "description": "list by the High Availability offering; true if filtering VMs with HA enabled; false for VMs with HA disabled",
+          "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": "haenable",
+          "name": "listall",
           "required": false,
-          "since": "4.15",
           "type": "boolean"
         },
         {
-          "description": "List resources by tags (key/value pairs)",
+          "description": "the group ID",
           "length": 255,
-          "name": "tags",
+          "name": "groupid",
+          "related": "createInstanceGroup,listInstanceGroups,updateInstanceGroup",
           "required": false,
-          "type": "map"
+          "type": "uuid"
         },
         {
-          "description": "the host ID",
+          "description": "the target hypervisor for the template",
           "length": 255,
-          "name": "hostid",
-          "related": "addHost,cancelHostMaintenance,cancelHostAsDegraded,declareHostAsDegraded,listHosts,prepareHostForMaintenance,reconnectHost,updateHost,addBaremetalHost,listExternalLoadBalancers",
+          "name": "hypervisor",
           "required": false,
-          "type": "uuid"
+          "type": "string"
         },
         {
-          "description": "list vms by iso",
+          "description": "list objects by project",
           "length": 255,
-          "name": "isoid",
+          "name": "projectid",
+          "related": "listProjectAccounts,activateProject,createProject,listProjects,suspendProject,updateProject",
           "required": false,
           "type": "uuid"
         },
@@ -1818,34 +1771,34 @@
           "type": "string"
         },
         {
-          "description": "the user ID that created the VM and is under the account that owns the VM",
+          "description": "the storage ID where vm's volumes belong to",
           "length": 255,
-          "name": "userid",
-          "related": "createUser,disableUser,enableUser,getUser,listUsers,lockUser,updateUser",
+          "name": "storageid",
+          "related": "cancelStorageMaintenance,createStoragePool,listStoragePools,findStoragePoolsForMigration,enableStorageMaintenance,updateStoragePool,syncStoragePool,updateStorageCapabilities,listVsphereStoragePolicyCompatiblePools",
           "required": false,
           "type": "uuid"
         },
         {
-          "description": "",
+          "description": "list by network type; true if need to list vms using Virtual Network, false otherwise",
           "length": 255,
-          "name": "page",
+          "name": "forvirtualnetwork",
           "required": false,
-          "type": "integer"
+          "type": "boolean"
         },
         {
-          "description": "flag to display the resource icon for VMs",
+          "description": "list only resources belonging to the domain specified",
           "length": 255,
-          "name": "showicon",
+          "name": "domainid",
+          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
           "required": false,
-          "since": "4.16.0.0",
-          "type": "boolean"
+          "type": "uuid"
         },
         {
-          "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",
+          "description": "list vms by ssh keypair name",
           "length": 255,
-          "name": "listall",
+          "name": "keypair",
           "required": false,
-          "type": "boolean"
+          "type": "string"
         },
         {
           "description": "list resources by account. Must be used with the domainId parameter.",
@@ -1855,35 +1808,36 @@
           "type": "string"
         },
         {
-          "description": "defaults to false, but if true, lists all resources from the parent specified by the domainId till leaves.",
+          "description": "the availability zone ID",
           "length": 255,
-          "name": "isrecursive",
+          "name": "zoneid",
+          "related": "createZone,updateZone,listZones,listZones",
           "required": false,
-          "type": "boolean"
+          "type": "uuid"
         },
         {
-          "description": "list by network id",
+          "description": "list vms by template",
           "length": 255,
-          "name": "networkid",
-          "related": "createNetwork,listNetworks,updateNetwork,createNetwork,updateNetwork,listNetworks,migrateNetwork,listF5LoadBalancerNetworks,listNetscalerLoadBalancerNetworks,listNiciraNvpDeviceNetworks,listPaloAltoFirewallNetworks,listSrxFirewallNetworks,listBrocadeVcsDeviceNetworks",
+          "name": "templateid",
+          "related": "prepareTemplate,listIsos,registerIso,updateIso,copyTemplate,createTemplate,listTemplates,registerTemplate,updateTemplate,listTemplates,createTemplate,copyTemplate,registerTemplate,registerIso,copyIso,listIsos",
           "required": false,
           "type": "uuid"
         },
         {
-          "description": "list by the service offering",
+          "description": "",
           "length": 255,
-          "name": "serviceofferingid",
-          "related": "createServiceOffering,updateServiceOffering,listServiceOfferings",
+          "name": "page",
           "required": false,
-          "since": "4.4",
-          "type": "uuid"
+          "type": "integer"
         },
         {
-          "description": "list by network type; true if need to list vms using Virtual Network, false otherwise",
+          "description": "the security group ID",
           "length": 255,
-          "name": "forvirtualnetwork",
+          "name": "securitygroupid",
+          "related": "createSecurityGroup,listSecurityGroups,updateSecurityGroup",
           "required": false,
-          "type": "boolean"
+          "since": "4.15",
+          "type": "uuid"
         },
         {
           "description": "the ID of the virtual machine",
@@ -1892,405 +1846,173 @@
           "related": "assignVirtualMachine,migrateVirtualMachine,migrateVirtualMachineWithVolume,recoverVirtualMachine,attachIso,detachIso,addNicToVirtualMachine,deployVirtualMachine,destroyVirtualMachine,listVirtualMachines,scaleVirtualMachine,rebootVirtualMachine,removeNicFromVirtualMachine,resetPasswordForVirtualMachine,resetSSHKeyForVirtualMachine,restoreVirtualMachine,startVirtualMachine,stopVirtualMachine,updateDefaultNicForVirtualMachine,updateVirtualMachine,changeServiceForVirtua [...]
           "required": false,
           "type": "uuid"
-        }
-      ],
-      "related": "",
-      "response": [
-        {
-          "description": "the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.",
-          "name": "templateid",
-          "type": "string"
-        },
-        {
-          "description": "the pool type of the virtual machine",
-          "name": "pooltype",
-          "type": "string"
-        },
-        {
-          "description": "the hypervisor on which the template runs",
-          "name": "hypervisor",
-          "type": "string"
-        },
-        {
-          "description": "the write (io) of disk on the vm",
-          "name": "diskiowrite",
-          "type": "long"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
+          "description": "",
+          "length": 255,
+          "name": "pagesize",
+          "required": false,
           "type": "integer"
         },
         {
-          "description": "instance name of the user vm; this parameter is returned to the ROOT admin only",
-          "name": "instancename",
-          "type": "string"
-        },
-        {
-          "description": "the date when this virtual machine was created",
-          "name": "created",
-          "type": "date"
-        },
-        {
-          "description": "the name of the virtual machine",
-          "name": "name",
-          "type": "string"
-        },
-        {
-          "description": "the read (io) of disk on the vm",
-          "name": "diskioread",
-          "type": "long"
-        },
-        {
-          "description": "ssh key-pair",
-          "name": "keypair",
-          "type": "string"
-        },
-        {
-          "description": "the ID of the availablility zone for the virtual machine",
-          "name": "zoneid",
-          "type": "string"
+          "description": "the host ID",
+          "length": 255,
+          "name": "hostid",
+          "related": "addHost,cancelHostMaintenance,cancelHostAsDegraded,declareHostAsDegraded,listHosts,prepareHostForMaintenance,reconnectHost,updateHost,addBaremetalHost,listExternalLoadBalancers",
+          "required": false,
+          "type": "uuid"
         },
         {
-          "description": "the vgpu type used by the virtual machine",
-          "name": "vgpu",
-          "type": "string"
+          "description": "comma separated list of host details requested, value can be a list of [all, group, nics, stats, secgrp, tmpl, servoff, diskoff, iso, volume, min, affgrp]. If no parameter is passed in, the details will be defaulted to all",
+          "length": 255,
+          "name": "details",
+          "required": false,
+          "type": "list"
         },
         {
-          "description": "the ID of the service offering of the virtual machine",
-          "name": "serviceofferingid",
-          "type": "string"
+          "description": "the pod ID",
+          "length": 255,
+          "name": "podid",
+          "related": "listPods,updatePod,createManagementNetworkIpRange",
+          "required": false,
+          "type": "uuid"
         },
-        {},
         {
-          "description": "the amount of the vm's CPU currently used",
-          "name": "cpuused",
-          "type": "string"
+          "description": "list by the High Availability offering; true if filtering VMs with HA enabled; false for VMs with HA disabled",
+          "length": 255,
+          "name": "haenable",
+          "required": false,
+          "since": "4.15",
+          "type": "boolean"
         },
         {
-          "description": "the user's ID who deployed the virtual machine",
+          "description": "the user ID that created the VM and is under the account that owns the VM",
+          "length": 255,
           "name": "userid",
-          "type": "string"
-        },
-        {
-          "description": "the total cpu capacity in Ghz",
-          "name": "cputotal",
-          "type": "string"
-        },
-        {
-          "description": "device type of the root volume",
-          "name": "rootdevicetype",
-          "type": "string"
-        },
-        {
-          "description": "the project name of the vm",
-          "name": "project",
-          "type": "string"
-        },
-        {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
-          "type": "string"
-        },
-        {
-          "description": "Guest vm Boot Type",
-          "name": "boottype",
-          "type": "string"
-        },
-        {
-          "description": "State of the Service from LB rule",
-          "name": "servicestate",
-          "type": "string"
-        },
-        {
-          "description": "the name of the backup offering of the virtual machine",
-          "name": "backupofferingname",
-          "type": "string"
-        },
+          "related": "createUser,disableUser,enableUser,getUser,listUsers,lockUser,updateUser",
+          "required": false,
+          "type": "uuid"
+        }
+      ],
+      "related": "",
+      "response": [
         {
           "description": "the password (if exists) of the virtual machine",
           "name": "password",
           "type": "string"
         },
         {
-          "description": "the ID of the backup offering of the virtual machine",
-          "name": "backupofferingid",
-          "type": "string"
-        },
-        {
-          "description": " an alternate display text of the template for the virtual machine",
-          "name": "templatedisplaytext",
-          "type": "string"
-        },
-        {
-          "description": "OS type id of the vm",
-          "name": "ostypeid",
-          "type": "string"
-        },
-        {
-          "description": "the name of the host for the virtual machine",
-          "name": "hostname",
-          "type": "string"
-        },
-        {
-          "description": "the speed of each cpu",
-          "name": "cpuspeed",
-          "type": "integer"
-        },
-        {
-          "description": "the total disk iops",
-          "name": "diskiopstotal",
-          "type": "long"
-        },
-        {
-          "description": "true if the entity/resource has annotations",
-          "name": "hasannotations",
-          "type": "boolean"
-        },
-        {
-          "description": "true if high-availability is enabled, false otherwise",
-          "name": "haenable",
-          "type": "boolean"
-        },
-        {
-          "description": "the total memory capacity in GiB",
-          "name": "memorytotal",
-          "type": "string"
-        },
-        {
-          "description": "the total number of network traffic bytes sent",
-          "name": "sentbytes",
-          "type": "long"
-        },
-        {
-          "description": "Guest vm Boot Mode",
-          "name": "bootmode",
-          "type": "string"
-        },
-        {
-          "description": "the ID of the disk offering of the virtual machine",
-          "name": "diskofferingid",
-          "type": "string"
-        },
-        {
-          "description": "OS name of the vm",
-          "name": "osdisplayname",
-          "type": "string"
-        },
-        {
-          "description": "network write in MiB",
-          "name": "networkwrite",
+          "description": "the vgpu type used by the virtual machine",
+          "name": "vgpu",
           "type": "string"
         },
         {
-          "description": "the account associated with the virtual machine",
-          "name": "account",
+          "description": "disk write in MiB",
+          "name": "diskwrite",
           "type": "string"
         },
         {
-          "description": "true if the password rest feature is enabled, false otherwise",
-          "name": "passwordenabled",
-          "type": "boolean"
-        },
-        {
           "description": "the VM's primary IP address",
           "name": "ipaddress",
           "type": "string"
         },
         {
-          "description": "the number of cpu this virtual machine is running with",
-          "name": "cpunumber",
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
           "type": "integer"
         },
         {
-          "description": "the name of the availability zone for the virtual machine",
-          "name": "zonename",
-          "type": "string"
-        },
-        {
-          "description": "network read in MiB",
-          "name": "networkread",
-          "type": "string"
+          "description": "the internal memory that's free in vm or zero if it can not be calculated",
+          "name": "memoryintfreekbs",
+          "type": "long"
         },
         {
-          "description": "the list of resource tags associated",
-          "name": "tags",
+          "description": "the list of nics associated with vm",
+          "name": "nic",
           "response": [
             {
-              "description": "customer associated with the tag",
-              "name": "customer",
-              "type": "string"
-            },
-            {
-              "description": "tag value",
-              "name": "value",
-              "type": "string"
-            },
-            {
-              "description": "the account associated with the tag",
-              "name": "account",
-              "type": "string"
-            },
-            {
-              "description": "id of the resource",
-              "name": "resourceid",
+              "description": "the name of the corresponding network",
+              "name": "networkname",
               "type": "string"
             },
             {
-              "description": "the project name where tag belongs to",
-              "name": "project",
+              "description": "the gateway of the nic",
+              "name": "gateway",
               "type": "string"
             },
             {
-              "description": "the ID of the domain associated with the tag",
-              "name": "domainid",
+              "description": "the traffic type of the nic",
+              "name": "traffictype",
               "type": "string"
             },
             {
-              "description": "the project id the tag belongs to",
-              "name": "projectid",
+              "description": "the type of the nic",
+              "name": "type",
               "type": "string"
             },
             {
-              "description": "the domain associated with the tag",
-              "name": "domain",
+              "description": "the broadcast uri of the nic",
+              "name": "broadcasturi",
               "type": "string"
             },
             {
-              "description": "tag key name",
-              "name": "key",
+              "description": "the gateway of IPv6 network",
+              "name": "ip6gateway",
               "type": "string"
             },
             {
-              "description": "resource type",
-              "name": "resourcetype",
-              "type": "string"
-            }
-          ],
-          "type": "set"
-        },
-        {
-          "description": "the date when this virtual machine was updated last time",
-          "name": "lastupdated",
-          "type": "date"
-        },
-        {
-          "description": "user generated name. The name of the virtual machine is returned if no displayname exists.",
-          "name": "displayname",
-          "type": "string"
-        },
-        {
-          "description": "Base64 string representation of the resource icon",
-          "name": "icon",
-          "type": "resourceiconresponse"
-        },
-        {
-          "description": "the ID of the domain in which the virtual machine exists",
-          "name": "domainid",
-          "type": "string"
-        },
-        {
-          "description": "List of read-only Vm details as comma separated string.",
-          "name": "readonlydetails",
-          "type": "string"
-        },
-        {
-          "description": "the virtual network for the service offering",
-          "name": "forvirtualnetwork",
-          "type": "boolean"
-        },
-        {
-          "description": "the memory allocated for the virtual machine",
-          "name": "memory",
-          "type": "integer"
-        },
-        {
-          "description": "the list of nics associated with vm",
-          "name": "nic",
-          "response": [
-            {
-              "description": "the Secondary ipv4 addr of nic",
-              "name": "secondaryip",
+              "description": "IP addresses associated with NIC found for unmanaged VM",
+              "name": "ipaddresses",
               "type": "list"
             },
             {
-              "description": "the isolation uri of the nic",
-              "name": "isolationuri",
-              "type": "string"
-            },
-            {
-              "description": "the traffic type of the nic",
-              "name": "traffictype",
-              "type": "string"
-            },
-            {
-              "description": "Id of the vm to which the nic belongs",
-              "name": "virtualmachineid",
-              "type": "string"
-            },
-            {
-              "description": "the name of the corresponding network",
-              "name": "networkname",
+              "description": "the netmask of the nic",
+              "name": "netmask",
               "type": "string"
             },
             {
-              "description": "the type of the nic",
-              "name": "type",
+              "description": "the cidr of IPv6 network",
+              "name": "ip6cidr",
               "type": "string"
             },
             {
-              "description": "the ip address of the nic",
-              "name": "ipaddress",
+              "description": "Type of adapter if available",
+              "name": "adaptertype",
               "type": "string"
             },
             {
-              "description": "true if nic is default, false otherwise",
-              "name": "isdefault",
-              "type": "boolean"
-            },
-            {
               "description": "the ID of the corresponding network",
               "name": "networkid",
               "type": "string"
             },
             {
-              "description": "the gateway of the nic",
-              "name": "gateway",
-              "type": "string"
-            },
-            {
-              "description": "the isolated private VLAN type if available",
-              "name": "isolatedpvlantype",
+              "description": "the IPv6 address of network",
+              "name": "ip6address",
               "type": "string"
             },
             {
-              "description": "Id of the NSX Logical Switch (if NSX based), null otherwise",
-              "name": "nsxlogicalswitch",
-              "type": "string"
+              "description": "the extra dhcp options on the nic",
+              "name": "extradhcpoption",
+              "type": "list"
             },
             {
-              "description": "IP addresses associated with NIC found for unmanaged VM",
-              "name": "ipaddresses",
+              "description": "the Secondary ipv4 addr of nic",
+              "name": "secondaryip",
               "type": "list"
             },
             {
-              "description": "Id of the NSX Logical Switch Port (if NSX based), null otherwise",
-              "name": "nsxlogicalswitchport",
+              "description": "device id for the network when plugged into the virtual machine",
+              "name": "deviceid",
               "type": "string"
             },
             {
-              "description": "ID of the VLAN/VNI if available",
-              "name": "vlanid",
-              "type": "integer"
-            },
-            {
-              "description": "the netmask of the nic",
-              "name": "netmask",
-              "type": "string"
+              "description": "true if nic is default, false otherwise",
+              "name": "isdefault",
+              "type": "boolean"
             },
             {
-              "description": "Type of adapter if available",
-              "name": "adaptertype",
+              "description": "the ip address of the nic",
+              "name": "ipaddress",
               "type": "string"
             },
             {
@@ -2299,13 +2021,8 @@
               "type": "string"
             },
             {
-              "description": "the extra dhcp options on the nic",
-              "name": "extradhcpoption",
-              "type": "list"
-            },
-            {
-              "description": "the gateway of IPv6 network",
-              "name": "ip6gateway",
+              "description": "the ID of the nic",
+              "name": "id",
               "type": "string"
             },
             {
@@ -2314,184 +2031,167 @@
               "type": "integer"
             },
             {
-              "description": "the broadcast uri of the nic",
-              "name": "broadcasturi",
+              "description": "ID of the VLAN/VNI if available",
+              "name": "vlanid",
+              "type": "integer"
+            },
+            {
+              "description": "the isolated private VLAN type if available",
+              "name": "isolatedpvlantype",
               "type": "string"
             },
             {
-              "description": "the IPv6 address of network",
-              "name": "ip6address",
+              "description": "Id of the vm to which the nic belongs",
+              "name": "virtualmachineid",
               "type": "string"
             },
             {
-              "description": "the cidr of IPv6 network",
-              "name": "ip6cidr",
+              "description": "the isolation uri of the nic",
+              "name": "isolationuri",
               "type": "string"
             },
             {
-              "description": "device id for the network when plugged into the virtual machine",
-              "name": "deviceid",
+              "description": "Id of the NSX Logical Switch Port (if NSX based), null otherwise",
+              "name": "nsxlogicalswitchport",
               "type": "string"
             },
             {
-              "description": "the ID of the nic",
-              "name": "id",
+              "description": "Id of the NSX Logical Switch (if NSX based), null otherwise",
+              "name": "nsxlogicalswitch",
               "type": "string"
             }
           ],
           "type": "set"
         },
         {
+          "description": "the name of the disk offering of the virtual machine",
+          "name": "diskofferingname",
+          "type": "string"
+        },
+        {
+          "description": "disk read in MiB",
+          "name": "diskread",
+          "type": "string"
+        },
+        {
+          "description": "the total number of network traffic bytes received",
+          "name": "receivedbytes",
+          "type": "long"
+        },
+        {
           "description": "the name of the domain in which the virtual machine exists",
           "name": "domain",
           "type": "string"
         },
-        {},
         {
-          "description": "the outgoing network traffic on the host",
-          "name": "networkkbswrite",
-          "type": "long"
+          "description": "the name of the virtual machine",
+          "name": "name",
+          "type": "string"
         },
         {
-          "description": "the name of the disk offering of the virtual machine",
-          "name": "diskofferingname",
+          "description": "the name of the backup offering of the virtual machine",
+          "name": "backupofferingname",
           "type": "string"
         },
         {
-          "description": "the state of the virtual machine",
-          "name": "state",
+          "description": "the ID of the host for the virtual machine",
+          "name": "hostid",
           "type": "string"
         },
         {
           "description": "public IP address id associated with vm via Static nat rule",
-          "name": "publicip",
+          "name": "publicipid",
           "type": "string"
         },
         {
-          "description": "disk read in MiB",
-          "name": "diskread",
-          "type": "string"
+          "description": "the target memory in vm",
+          "name": "memorytargetkbs",
+          "type": "long"
         },
         {
-          "description": "disk write in MiB",
-          "name": "diskwrite",
+          "description": "the group name of the virtual machine",
+          "name": "group",
           "type": "string"
         },
         {
-          "description": "the user's name who deployed the virtual machine",
-          "name": "username",
+          "description": "the read (bytes) of disk on the vm",
+          "name": "diskkbsread",
+          "type": "long"
+        },
+        {
+          "description": "Vm details in key/value pairs.",
+          "name": "details",
+          "type": "map"
+        },
+        {
+          "description": "user generated name. The name of the virtual machine is returned if no displayname exists.",
+          "name": "displayname",
           "type": "string"
         },
         {
-          "description": "the name of the template for the virtual machine",
-          "name": "templatename",
+          "description": "Base64 string representation of the resource icon",
+          "name": "icon",
+          "type": "resourceiconresponse"
+        },
+        {
+          "description": "OS name of the vm",
+          "name": "osdisplayname",
           "type": "string"
         },
         {
-          "description": "public IP address id associated with vm via Static nat rule",
-          "name": "publicipid",
+          "description": "the ID of the domain in which the virtual machine exists",
+          "name": "domainid",
           "type": "string"
         },
         {
-          "description": "the name of the service offering of the virtual machine",
-          "name": "serviceofferingname",
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
           "type": "string"
         },
         {
-          "description": "the name of the ISO attached to the virtual machine",
-          "name": "isoname",
+          "description": "network read in MiB",
+          "name": "networkread",
           "type": "string"
         },
         {
-          "description": "the read (bytes) of disk on the vm",
-          "name": "diskkbsread",
-          "type": "long"
+          "description": "public IP address id associated with vm via Static nat rule",
+          "name": "publicip",
+          "type": "string"
         },
         {
           "description": "the memory used by the vm",
           "name": "memorykbs",
           "type": "long"
         },
+        {},
         {
-          "description": "the group ID of the virtual machine",
-          "name": "groupid",
+          "description": "the pool type of the virtual machine",
+          "name": "pooltype",
           "type": "string"
         },
         {
-          "description": "Vm details in key/value pairs.",
-          "name": "details",
-          "type": "map"
+          "description": " an alternate display text of the template for the virtual machine",
+          "name": "templatedisplaytext",
+          "type": "string"
         },
         {
-          "description": "list of affinity groups associated with the virtual machine",
-          "name": "affinitygroup",
-          "response": [
-            {
-              "description": "the name of the affinity group",
-              "name": "name",
-              "type": "string"
-            },
-            {
-              "description": "the account owning the affinity group",
-              "name": "account",
-              "type": "string"
-            },
-            {
-              "description": "the domain ID of the affinity group",
-              "name": "domainid",
-              "type": "string"
-            },
-            {
-              "description": "the project name of the affinity group",
-              "name": "project",
-              "type": "string"
-            },
-            {
-              "description": "the description of the affinity group",
-              "name": "description",
-              "type": "string"
-            },
-            {
-              "description": "the ID of the affinity group",
-              "name": "id",
-              "type": "string"
-            },
-            {
-              "description": "virtual machine IDs associated with this affinity group",
-              "name": "virtualmachineIds",
-              "type": "list"
-            },
-            {
-              "description": "the domain name of the affinity group",
-              "name": "domain",
-              "type": "string"
-            },
-            {
-              "description": "the project ID of the affinity group",
-              "name": "projectid",
-              "type": "string"
-            },
-            {
-              "description": "the type of the affinity group",
-              "name": "type",
-              "type": "string"
-            }
-          ],
-          "type": "set"
+          "description": "the group ID of the virtual machine",
+          "name": "groupid",
+          "type": "string"
         },
         {
-          "description": "the internal memory that's free in vm or zero if it can not be calculated",
-          "name": "memoryintfreekbs",
-          "type": "long"
+          "description": "the name of the ISO attached to the virtual machine",
+          "name": "isoname",
+          "type": "string"
         },
         {
-          "description": "the total number of network traffic bytes received",
-          "name": "receivedbytes",
-          "type": "long"
+          "description": "OS type id of the vm",
+          "name": "ostypeid",
+          "type": "string"
         },
         {
-          "description": "the ID of the ISO attached to the virtual machine",
-          "name": "isoid",
+          "description": "network write in MiB",
+          "name": "networkwrite",
           "type": "string"
         },
         {
@@ -2500,134 +2200,95 @@
           "type": "string"
         },
         {
+          "description": "List of read-only Vm details as comma separated string.",
+          "name": "readonlydetails",
+          "type": "string"
+        },
+        {
+          "description": "an optional field whether to the display the vm to the end user or not.",
+          "name": "displayvm",
+          "type": "boolean"
+        },
+        {
+          "description": "the read (io) of disk on the vm",
+          "name": "diskioread",
+          "type": "long"
+        },
+        {
+          "description": "the name of the host for the virtual machine",
+          "name": "hostname",
+          "type": "string"
+        },
+        {
+          "description": "the ID of the service offering of the virtual machine",
+          "name": "serviceofferingid",
+          "type": "string"
+        },
+        {
+          "description": "the name of the template for the virtual machine",
+          "name": "templatename",
+          "type": "string"
+        },
+        {
+          "description": "the incoming network traffic on the vm",
+          "name": "networkkbsread",
+          "type": "long"
+        },
+        {
           "description": "device ID of the root volume",
           "name": "rootdeviceid",
           "type": "long"
         },
         {
-          "description": "the target memory in vm",
-          "name": "memorytargetkbs",
+          "description": "Guest vm Boot Mode",
+          "name": "bootmode",
+          "type": "string"
+        },
+        {
+          "description": "the ID of the ISO attached to the virtual machine",
+          "name": "isoid",
+          "type": "string"
+        },
+        {
+          "description": "State of the Service from LB rule",
+          "name": "servicestate",
+          "type": "string"
+        },
+        {
+          "description": "the ID of the disk offering of the virtual machine",
+          "name": "diskofferingid",
+          "type": "string"
+        },
+        {
+          "description": "the user's name who deployed the virtual machine",
+          "name": "username",
+          "type": "string"
+        },
+        {
+          "description": "the outgoing network traffic on the host",
+          "name": "networkkbswrite",
           "type": "long"
         },
         {
+          "description": "Os type ID of the virtual machine",
+          "name": "guestosid",
+          "type": "string"
+        },
+        {
+          "description": "an alternate display text of the ISO attached to the virtual machine",
+          "name": "isodisplaytext",
+          "type": "string"
+        },
+        {
           "description": "list of security groups associated with the virtual machine",
           "name": "securitygroup",
           "response": [
             {
-              "description": "the name of the security group",
-              "name": "name",
+              "description": "the project id of the group",
+              "name": "projectid",
               "type": "string"
             },
             {
-              "description": "the list of egress rules associated with the security group",
-              "name": "egressrule",
-              "response": [
-                {
-                  "description": "the list of resource tags associated with the rule",
-                  "name": "tags",
-                  "response": [
-                    {
-                      "description": "the account associated with the tag",
-                      "name": "account",
-                      "type": "string"
-                    },
-                    {
-                      "description": "id of the resource",
-                      "name": "resourceid",
-                      "type": "string"
-                    },
-                    {
-                      "description": "the domain associated with the tag",
-                      "name": "domain",
-                      "type": "string"
-                    },
-                    {
-                      "description": "customer associated with the tag",
-                      "name": "customer",
-                      "type": "string"
-                    },
-                    {
-                      "description": "the project id the tag belongs to",
-                      "name": "projectid",
-                      "type": "string"
-                    },
-                    {
-                      "description": "the ID of the domain associated with the tag",
-                      "name": "domainid",
-                      "type": "string"
-                    },
-                    {
-                      "description": "tag key name",
-                      "name": "key",
-                      "type": "string"
-                    },
-                    {
-                      "description": "the project name where tag belongs to",
-                      "name": "project",
-                      "type": "string"
-                    },
-                    {
-                      "description": "tag value",
-                      "name": "value",
-                      "type": "string"
-                    },
-                    {
-                      "description": "resource type",
-                      "name": "resourcetype",
-                      "type": "string"
-                    }
-                  ],
-                  "type": "set"
-                },
-                {
-                  "description": "the protocol of the security group rule",
-                  "name": "protocol",
-                  "type": "string"
-                },
-                {
-                  "description": "the type of the ICMP message response",
-                  "name": "icmptype",
-                  "type": "integer"
-                },
-                {
-                  "description": "the id of the security group rule",
-                  "name": "ruleid",
-                  "type": "string"
-                },
-                {
-                  "description": "the code for the ICMP message response",
-                  "name": "icmpcode",
-                  "type": "integer"
-                },
-                {
-                  "description": "the CIDR notation for the base IP address of the security group rule",
-                  "name": "cidr",
-                  "type": "string"
-                },
-                {
-                  "description": "security group name",
-                  "name": "securitygroupname",
-                  "type": "string"
-                },
-                {
-                  "description": "the ending IP of the security group rule ",
-                  "name": "endport",
-                  "type": "integer"
-                },
-                {
-                  "description": "the starting IP of the security group rule",
-                  "name": "startport",
-                  "type": "integer"
-                },
-                {
-                  "description": "account owning the security group rule",
-                  "name": "account",
-                  "type": "string"
-                }
-              ],
-              "type": "set"
-            },
-            {
               "description": "the description of the security group",
               "name": "description",
               "type": "string"
@@ -2642,6 +2303,11 @@
                   "type": "string"
                 },
                 {
+                  "description": "tag key name",
+                  "name": "key",
+                  "type": "string"
+                },
+                {
                   "description": "the project id the tag belongs to",
                   "name": "projectid",
                   "type": "string"
@@ -2652,8 +2318,8 @@
                   "type": "string"
                 },
                 {
-                  "description": "tag key name",
-                  "name": "key",
+                  "description": "the account associated with the tag",
+                  "name": "account",
                   "type": "string"
                 },
                 {
@@ -2662,8 +2328,8 @@
                   "type": "string"
                 },
                 {
-                  "description": "id of the resource",
-                  "name": "resourceid",
+                  "description": "customer associated with the tag",
+                  "name": "customer",
                   "type": "string"
                 },
                 {
@@ -2672,13 +2338,8 @@
                   "type": "string"
                 },
                 {
-                  "description": "customer associated with the tag",
-                  "name": "customer",
-                  "type": "string"
-                },
-                {
-                  "description": "the account associated with the tag",
-                  "name": "account",
+                  "description": "id of the resource",
+                  "name": "resourceid",
                   "type": "string"
                 },
                 {
@@ -2690,68 +2351,48 @@
               "type": "set"
             },
             {
-              "description": "the domain name of the security group",
-              "name": "domain",
-              "type": "string"
-            },
-            {
-              "description": "the number of virtualmachines associated with this securitygroup",
-              "name": "virtualmachinecount",
-              "type": "integer"
-            },
-            {
-              "description": "the project name of the group",
-              "name": "project",
-              "type": "string"
-            },
-            {
-              "description": "the project id of the group",
-              "name": "projectid",
-              "type": "string"
-            },
-            {
-              "description": "the account owning the security group",
-              "name": "account",
-              "type": "string"
-            },
-            {
-              "description": "the domain ID of the security group",
-              "name": "domainid",
-              "type": "string"
-            },
-            {
               "description": "the list of ingress rules associated with the security group",
               "name": "ingressrule",
               "response": [
                 {
-                  "description": "the protocol of the security group rule",
-                  "name": "protocol",
+                  "description": "the CIDR notation for the base IP address of the security group rule",
+                  "name": "cidr",
                   "type": "string"
                 },
                 {
-                  "description": "the type of the ICMP message response",
-                  "name": "icmptype",
+                  "description": "the id of the security group rule",
+                  "name": "ruleid",
+                  "type": "string"
+                },
+                {
+                  "description": "the code for the ICMP message response",
+                  "name": "icmpcode",
                   "type": "integer"
                 },
                 {
+                  "description": "account owning the security group rule",
+                  "name": "account",
+                  "type": "string"
+                },
+                {
                   "description": "security group name",
                   "name": "securitygroupname",
                   "type": "string"
                 },
                 {
-                  "description": "the id of the security group rule",
-                  "name": "ruleid",
+                  "description": "the protocol of the security group rule",
+                  "name": "protocol",
                   "type": "string"
                 },
                 {
-                  "description": "the code for the ICMP message response",
-                  "name": "icmpcode",
+                  "description": "the type of the ICMP message response",
+                  "name": "icmptype",
                   "type": "integer"
                 },
                 {
-                  "description": "account owning the security group rule",
-                  "name": "account",
-                  "type": "string"
+                  "description": "the ending IP of the security group rule ",
+                  "name": "endport",
+                  "type": "integer"
                 },
                 {
                   "description": "the starting IP of the security group rule",
@@ -2759,17 +2400,17 @@
                   "type": "integer"
                 },
                 {
-                  "description": "the CIDR notation for the base IP address of the security group rule",
-                  "name": "cidr",
-                  "type": "string"
-                },
-                {
                   "description": "the list of resource tags associated with the rule",
                   "name": "tags",
                   "response": [
                     {
-                      "description": "resource type",
-                      "name": "resourcetype",
+                      "description": "the project name where tag belongs to",
+                      "name": "project",
+                      "type": "string"
+                    },
+                    {
+                      "description": "customer associated with the tag",
+                      "name": "customer",
                       "type": "string"
                     },
                     {
@@ -2778,23 +2419,23 @@
                       "type": "string"
                     },
                     {
-                      "description": "the project name where tag belongs to",
-                      "name": "project",
+                      "description": "the project id the tag belongs to",
+                      "name": "projectid",
                       "type": "string"
                     },
                     {
-                      "description": "tag value",
-                      "name": "value",
+                      "description": "resource type",
+                      "name": "resourcetype",
                       "type": "string"
                     },
                     {
-                      "description": "customer associated with the tag",
-                      "name": "customer",
+                      "description": "the account associated with the tag",
+                      "name": "account",
                       "type": "string"
                     },
                     {
-                      "description": "the project id the tag belongs to",
-                      "name": "projectid",
+                      "description": "tag value",
+                      "name": "value",
                       "type": "string"
                     },
                     {
@@ -2803,11 +2444,6 @@
                       "type": "string"
                     },
                     {
-                      "description": "the account associated with the tag",
-                      "name": "account",
-                      "type": "string"
-                    },
-                    {
                       "description": "the domain associated with the tag",
                       "name": "domain",
                       "type": "string"
@@ -2819,11 +2455,6 @@
                     }
                   ],
                   "type": "set"
-                },
-                {
-                  "description": "the ending IP of the security group rule ",
-                  "name": "endport",
-                  "type": "integer"
                 }
               ],
               "type": "set"
@@ -2834,625 +2465,525 @@
               "type": "set"
             },
             {
+              "description": "the project name of the group",
+              "name": "project",
+              "type": "string"
+            },
+            {
+              "description": "the domain name of the security group",
+              "name": "domain",
+              "type": "string"
+            },
+            {
               "description": "the ID of the security group",
               "name": "id",
               "type": "string"
-            }
-          ],
-          "type": "set"
-        },
-        {},
-        {
-          "description": "an alternate display text of the ISO attached to the virtual machine",
-          "name": "isodisplaytext",
-          "type": "string"
-        },
-        {
-          "description": "the ID of the virtual machine",
-          "name": "id",
-          "type": "string"
-        },
-        {
-          "description": "the ID of the host for the virtual machine",
-          "name": "hostid",
-          "type": "string"
-        },
-        {
-          "description": "the group name of the virtual machine",
-          "name": "group",
-          "type": "string"
-        },
-        {
-          "description": "an optional field whether to the display the vm to the end user or not.",
-          "name": "displayvm",
-          "type": "boolean"
-        },
-        {
-          "description": "the incoming network traffic on the vm",
-          "name": "networkkbsread",
-          "type": "long"
-        },
-        {
-          "description": "the write (bytes) of disk on the vm",
-          "name": "diskkbswrite",
-          "type": "long"
-        },
-        {
-          "description": "true if vm contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory.",
-          "name": "isdynamicallyscalable",
-          "type": "boolean"
-        },
-        {
-          "description": "Os type ID of the virtual machine",
-          "name": "guestosid",
-          "type": "string"
-        }
-      ],
-      "since": "4.9.3"
-    },
-    {
-      "description": "Lists hosts.",
-      "isasync": false,
-      "name": "listHosts",
-      "params": [
-        {
-          "description": "lists hosts existing in particular cluster",
-          "length": 255,
-          "name": "clusterid",
-          "related": "addCluster,listClusters,updateCluster",
-          "required": false,
-          "type": "uuid"
-        },
-        {
-          "description": "list hosts for which out-of-band management is enabled",
-          "length": 255,
-          "name": "outofbandmanagementenabled",
-          "required": false,
-          "type": "boolean"
-        },
-        {
-          "description": "",
-          "length": 255,
-          "name": "page",
-          "required": false,
-          "type": "integer"
-        },
-        {
-          "description": "comma separated list of host details requested, value can be a list of [ min, all, capacity, events, stats]",
-          "length": 255,
-          "name": "details",
-          "required": false,
-          "type": "list"
-        },
-        {
-          "description": "list hosts by resource state. Resource state represents current state determined by admin of host, value can be one of [Enabled, Disabled, Unmanaged, PrepareForMaintenance, ErrorInMaintenance, Maintenance, Error]",
-          "length": 255,
-          "name": "resourcestate",
-          "required": false,
-          "type": "string"
-        },
-        {
-          "description": "",
-          "length": 255,
-          "name": "pagesize",
-          "required": false,
-          "type": "integer"
-        },
-        {
-          "description": "the host type",
-          "length": 255,
-          "name": "type",
-          "required": false,
-          "type": "string"
-        },
-        {
-          "description": "the id of the host",
-          "length": 255,
-          "name": "id",
-          "related": "addHost,cancelHostMaintenance,cancelHostAsDegraded,declareHostAsDegraded,listHosts,prepareHostForMaintenance,reconnectHost,updateHost,addBaremetalHost,listExternalLoadBalancers",
-          "required": false,
-          "type": "uuid"
-        },
-        {
-          "description": "the Zone ID for the host",
-          "length": 255,
-          "name": "zoneid",
-          "related": "createZone,updateZone,listZones,listZones",
-          "required": false,
-          "type": "uuid"
-        },
-        {
-          "description": "the Pod ID for the host",
-          "length": 255,
-          "name": "podid",
-          "related": "listPods,updatePod,createManagementNetworkIpRange",
-          "required": false,
-          "type": "uuid"
-        },
-        {
-          "description": "if true, list only hosts dedicated to HA",
-          "length": 255,
-          "name": "hahost",
-          "required": false,
-          "type": "boolean"
-        },
-        {
-          "description": "the state of the host",
-          "length": 255,
-          "name": "state",
-          "required": false,
-          "type": "string"
-        },
-        {
-          "description": "lists hosts in the same cluster as this VM and flag hosts with enough CPU/RAm to host this VM",
-          "length": 255,
-          "name": "virtualmachineid",
-          "related": "assignVirtualMachine,migrateVirtualMachine,migrateVirtualMachineWithVolume,recoverVirtualMachine,attachIso,detachIso,addNicToVirtualMachine,deployVirtualMachine,destroyVirtualMachine,listVirtualMachines,scaleVirtualMachine,rebootVirtualMachine,removeNicFromVirtualMachine,resetPasswordForVirtualMachine,resetSSHKeyForVirtualMachine,restoreVirtualMachine,startVirtualMachine,stopVirtualMachine,updateDefaultNicForVirtualMachine,updateVirtualMachine,changeServiceForVirtua [...]
-          "required": false,
-          "type": "uuid"
-        },
-        {
-          "description": "list hosts by its out-of-band management interface's power state. Its value can be one of [On, Off, Unknown]",
-          "length": 255,
-          "name": "outofbandmanagementpowerstate",
-          "required": false,
-          "type": "string"
+            },
+            {
+              "description": "the name of the security group",
+              "name": "name",
+              "type": "string"
+            },
+            {
+              "description": "the account owning the security group",
+              "name": "account",
+              "type": "string"
+            },
+            {
+              "description": "the domain ID of the security group",
+              "name": "domainid",
+              "type": "string"
+            },
+            {
+              "description": "the number of virtualmachines associated with this securitygroup",
+              "name": "virtualmachinecount",
+              "type": "integer"
+            },
+            {
+              "description": "the list of egress rules associated with the security group",
+              "name": "egressrule",
+              "response": [
+                {
+                  "description": "the starting IP of the security group rule",
+                  "name": "startport",
+                  "type": "integer"
+                },
+                {
+                  "description": "the list of resource tags associated with the rule",
+                  "name": "tags",
+                  "response": [
+                    {
+                      "description": "resource type",
+                      "name": "resourcetype",
+                      "type": "string"
+                    },
+                    {
+                      "description": "the project name where tag belongs to",
+                      "name": "project",
+                      "type": "string"
+                    },
+                    {
+                      "description": "the ID of the domain associated with the tag",
+                      "name": "domainid",
+                      "type": "string"
+                    },
+                    {
+                      "description": "id of the resource",
+                      "name": "resourceid",
+                      "type": "string"
+                    },
+                    {
+                      "description": "customer associated with the tag",
+                      "name": "customer",
+                      "type": "string"
+                    },
+                    {
+                      "description": "the account associated with the tag",
+                      "name": "account",
+                      "type": "string"
+                    },
+                    {
+                      "description": "the domain associated with the tag",
+                      "name": "domain",
+                      "type": "string"
+                    },
+                    {
+                      "description": "tag key name",
+                      "name": "key",
+                      "type": "string"
+                    },
+                    {
+                      "description": "tag value",
+                      "name": "value",
+                      "type": "string"
+                    },
+                    {
+                      "description": "the project id the tag belongs to",
+                      "name": "projectid",
+                      "type": "string"
+                    }
+                  ],
+                  "type": "set"
+                },
+                {
+                  "description": "security group name",
+                  "name": "securitygroupname",
+                  "type": "string"
+                },
+                {
+                  "description": "account owning the security group rule",
+                  "name": "account",
+                  "type": "string"
+                },
+                {
+                  "description": "the type of the ICMP message response",
+                  "name": "icmptype",
+                  "type": "integer"
+                },
+                {
+                  "description": "the code for the ICMP message response",
+                  "name": "icmpcode",
+                  "type": "integer"
+                },
+                {
+                  "description": "the id of the security group rule",
+                  "name": "ruleid",
+                  "type": "string"
+                },
+                {
+                  "description": "the CIDR notation for the base IP address of the security group rule",
+                  "name": "cidr",
+                  "type": "string"
+                },
+                {
+                  "description": "the protocol of the security group rule",
+                  "name": "protocol",
+                  "type": "string"
+                },
+                {
+                  "description": "the ending IP of the security group rule ",
+                  "name": "endport",
+                  "type": "integer"
+                }
+              ],
+              "type": "set"
+            }
+          ],
+          "type": "set"
         },
         {
-          "description": "hypervisor type of host: XenServer,KVM,VMware,Hyperv,BareMetal,Simulator",
-          "length": 255,
-          "name": "hypervisor",
-          "required": false,
+          "description": "ssh key-pair",
+          "name": "keypair",
           "type": "string"
         },
         {
-          "description": "the name of the host",
-          "length": 255,
-          "name": "name",
-          "required": false,
+          "description": "the account associated with the virtual machine",
+          "name": "account",
           "type": "string"
         },
         {
-          "description": "List by keyword",
-          "length": 255,
-          "name": "keyword",
-          "required": false,
-          "type": "string"
-        }
-      ],
-      "related": "addHost,cancelHostMaintenance,cancelHostAsDegraded,declareHostAsDegraded,prepareHostForMaintenance,reconnectHost,updateHost,addBaremetalHost,listExternalLoadBalancers",
-      "response": [
-        {
-          "description": "true if the host is Ha host (dedicated to vms started by HA process; false otherwise",
-          "name": "hahost",
+          "description": "true if the entity/resource has annotations",
+          "name": "hasannotations",
           "type": "boolean"
         },
         {
-          "description": "the IP address of the host",
-          "name": "ipaddress",
-          "type": "string"
-        },
-        {
-          "description": "the CPU number of the host",
-          "name": "cpunumber",
+          "description": "the memory allocated for the virtual machine",
+          "name": "memory",
           "type": "integer"
         },
         {
-          "description": "the host hypervisor",
-          "name": "hypervisor",
-          "type": "hypervisortype"
-        },
-        {
-          "description": "true if the host is disconnected. False otherwise.",
-          "name": "disconnected",
-          "type": "date"
-        },
-        {
-          "description": "the amount of the host's memory currently allocated in percentage",
-          "name": "memoryallocatedpercentage",
+          "description": "the total cpu capacity in Ghz",
+          "name": "cputotal",
           "type": "string"
         },
         {
-          "description": "the amount of the host's CPU currently allocated",
-          "name": "cpuallocated",
+          "description": "the state of the virtual machine",
+          "name": "state",
           "type": "string"
         },
         {
-          "description": "the Zone ID of the host",
+          "description": "the ID of the availablility zone for the virtual machine",
           "name": "zoneid",
           "type": "string"
         },
         {
-          "description": "the date and time the host was created",
-          "name": "created",
-          "type": "date"
+          "description": "true if high-availability is enabled, false otherwise",
+          "name": "haenable",
+          "type": "boolean"
         },
         {
-          "description": "the number of CPU sockets on the host",
-          "name": "cpusockets",
-          "type": "integer"
+          "description": "Guest vm Boot Type",
+          "name": "boottype",
+          "type": "string"
         },
         {
-          "description": "the Pod name of the host",
-          "name": "podname",
-          "type": "string"
+          "description": "the virtual network for the service offering",
+          "name": "forvirtualnetwork",
+          "type": "boolean"
         },
         {
-          "description": "the hypervisor version",
-          "name": "hypervisorversion",
+          "description": "device type of the root volume",
+          "name": "rootdevicetype",
           "type": "string"
         },
         {
-          "description": "the memory total of the host, this parameter is deprecated use memorywithoverprovisioning",
-          "name": "memorytotal",
+          "description": "the total number of network traffic bytes sent",
+          "name": "sentbytes",
           "type": "long"
         },
         {
-          "description": "the resource state of the host",
-          "name": "resourcestate",
-          "type": "string"
-        },
-        {
-          "description": "the amount of the host's CPU after applying the cpu.overprovisioning.factor",
-          "name": "cpuwithoverprovisioning",
+          "description": "the amount of the vm's CPU currently used",
+          "name": "cpuused",
           "type": "string"
         },
         {
-          "description": "the name of the host",
-          "name": "name",
+          "description": "instance name of the user vm; this parameter is returned to the ROOT admin only",
+          "name": "instancename",
           "type": "string"
         },
         {
-          "description": "the host type",
-          "name": "type",
-          "type": "type"
-        },
-        {
-          "description": "the amount of the host's CPU currently allocated in MHz",
-          "name": "cpuallocatedvalue",
-          "type": "long"
-        },
-        {
-          "description": "the host version",
-          "name": "version",
+          "description": "the ID of the backup offering of the virtual machine",
+          "name": "backupofferingid",
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
-        },
-        {
-          "description": "events available for the host",
-          "name": "events",
+          "description": "the user's ID who deployed the virtual machine",
+          "name": "userid",
           "type": "string"
         },
         {
-          "description": "the incoming network traffic on the host",
-          "name": "networkkbsread",
-          "type": "long"
+          "description": "true if the password rest feature is enabled, false otherwise",
+          "name": "passwordenabled",
+          "type": "boolean"
         },
         {
-          "description": "the amount of the host's memory currently allocated",
-          "name": "memoryallocated",
-          "type": "long"
+          "description": "true if vm contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory.",
+          "name": "isdynamicallyscalable",
+          "type": "boolean"
         },
         {
-          "description": "the admin that annotated this host",
-          "name": "username",
-          "type": "string"
+          "description": "the date when this virtual machine was updated last time",
+          "name": "lastupdated",
+          "type": "date"
         },
         {
-          "description": "the Pod ID of the host",
-          "name": "podid",
+          "description": "the ID of the virtual machine",
+          "name": "id",
           "type": "string"
         },
         {
-          "description": "GPU cards present in the host",
-          "name": "gpugroup",
+          "description": "the list of resource tags associated",
+          "name": "tags",
           "response": [
             {
-              "description": "the list of enabled vGPUs",
-              "name": "vgpu",
-              "response": [
-                {
-                  "description": "Video RAM for this vGPU type",
-                  "name": "videoram",
-                  "type": "long"
-                },
-                {
-                  "description": "Maximum X resolution per display",
-                  "name": "maxresolutionx",
-                  "type": "long"
-                },
-                {
-                  "description": "Remaining capacity in terms of no. of more VMs that can be deployped with this vGPU type",
-                  "name": "remainingcapacity",
-                  "type": "long"
-                },
-                {
-                  "description": "Maximum no. of vgpu per gpu card (pgpu)",
-                  "name": "maxvgpuperpgpu",
-                  "type": "long"
-                },
-                {
-                  "description": "Model Name of vGPU",
-                  "name": "vgputype",
-                  "type": "string"
-                },
-                {
-                  "description": "Maximum displays per user",
-                  "name": "maxheads",
-                  "type": "long"
-                },
-                {
-                  "description": "Maximum vgpu can be created with this vgpu type on the given gpu group",
-                  "name": "maxcapacity",
-                  "type": "long"
-                },
-                {
-                  "description": "Maximum Y resolution per display",
-                  "name": "maxresolutiony",
-                  "type": "long"
-                }
-              ],
-              "type": "list"
+              "description": "the domain associated with the tag",
+              "name": "domain",
+              "type": "string"
             },
             {
-              "description": "GPU cards present in the host",
-              "name": "gpugroupname",
+              "description": "the project id the tag belongs to",
+              "name": "projectid",
+              "type": "string"
+            },
+            {
+              "description": "id of the resource",
+              "name": "resourceid",
+              "type": "string"
+            },
+            {
+              "description": "customer associated with the tag",
+              "name": "customer",
+              "type": "string"
+            },
+            {
+              "description": "tag value",
+              "name": "value",
+              "type": "string"
+            },
+            {
+              "description": "resource type",
+              "name": "resourcetype",
+              "type": "string"
+            },
+            {
+              "description": "the account associated with the tag",
+              "name": "account",
+              "type": "string"
+            },
+            {
+              "description": "the ID of the domain associated with the tag",
+              "name": "domainid",
+              "type": "string"
+            },
+            {
+              "description": "the project name where tag belongs to",
+              "name": "project",
+              "type": "string"
+            },
+            {
+              "description": "tag key name",
+              "name": "key",
               "type": "string"
             }
           ],
-          "type": "list"
+          "type": "set"
         },
         {
-          "description": "the OS category name of the host",
-          "name": "oscategoryname",
+          "description": "the total memory capacity in GiB",
+          "name": "memorytotal",
           "type": "string"
         },
         {
-          "description": "the amount of the host's CPU currently allocated after applying the cpu.overprovisioning.factor",
-          "name": "cpuallocatedwithoverprovisioning",
+          "description": "the hypervisor on which the template runs",
+          "name": "hypervisor",
           "type": "string"
         },
-        {
-          "description": "the host's currently allocated disk size",
-          "name": "disksizeallocated",
-          "type": "long"
-        },
-        {
-          "description": "the cpu average load on the host",
-          "name": "cpuloadaverage",
-          "type": "double"
-        },
-        {
-          "description": "the host out-of-band management information",
-          "name": "outofbandmanagement",
-          "type": "outofbandmanagementresponse"
-        },
         {},
         {
-          "description": "the last time this host was annotated",
-          "name": "lastannotated",
-          "type": "date"
-        },
-        {
-          "description": "the management server ID of the host",
-          "name": "managementserverid",
+          "description": "the project name of the vm",
+          "name": "project",
           "type": "string"
         },
         {
-          "description": "true if this host has enough CPU and RAM capacity to migrate a VM to it, false otherwise",
-          "name": "hasenoughcapacity",
-          "type": "boolean"
-        },
-        {
-          "description": "the total disk size of the host",
-          "name": "disksizetotal",
-          "type": "long"
-        },
-        {
-          "description": "true if the entity/resource has annotations",
-          "name": "hasannotations",
-          "type": "boolean"
-        },
-        {
-          "description": "true if local storage is active, false otherwise",
-          "name": "islocalstorageactive",
-          "type": "boolean"
-        },
-        {
-          "description": "true if this host is suitable(has enough capacity and satisfies all conditions like hosttags, max guests vm limit etc) to migrate a VM to it , false otherwise",
-          "name": "suitableformigration",
-          "type": "boolean"
+          "description": "the speed of each cpu",
+          "name": "cpuspeed",
+          "type": "integer"
         },
+        {},
         {
-          "description": "the cluster ID of the host",
-          "name": "clusterid",
+          "description": "the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.",
+          "name": "templateid",
           "type": "string"
         },
         {
-          "description": "the outgoing network traffic on the host",
-          "name": "networkkbswrite",
+          "description": "the write (bytes) of disk on the vm",
+          "name": "diskkbswrite",
           "type": "long"
         },
         {
-          "description": "the host HA information information",
-          "name": "hostha",
-          "type": "hostharesponse"
+          "description": "the date when this virtual machine was created",
+          "name": "created",
+          "type": "date"
         },
         {
-          "description": "the Zone name of the host",
+          "description": "the name of the availability zone for the virtual machine",
           "name": "zonename",
           "type": "string"
         },
         {
-          "description": "the date and time the host was last pinged",
-          "name": "lastpinged",
-          "type": "date"
-        },
-        {
-          "description": "the amount of the host's memory currently allocated in bytes",
-          "name": "memoryallocatedbytes",
+          "description": "the total disk iops",
+          "name": "diskiopstotal",
           "type": "long"
         },
         {
-          "description": "capabilities of the host",
-          "name": "capabilities",
-          "type": "string"
+          "description": "the write (io) of disk on the vm",
+          "name": "diskiowrite",
+          "type": "long"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
-          "type": "string"
-        },
-        {
-          "description": "Host details in key/value pairs.",
-          "name": "details",
-          "type": "map"
+          "description": "list of affinity groups associated with the virtual machine",
+          "name": "affinitygroup",
+          "response": [
+            {
+              "description": "the account owning the affinity group",
+              "name": "account",
+              "type": "string"
+            },
+            {
+              "description": "virtual machine IDs associated with this affinity group",
+              "name": "virtualmachineIds",
+              "type": "list"
+            },
+            {
+              "description": "the project ID of the affinity group",
+              "name": "projectid",
+              "type": "string"
+            },
+            {
+              "description": "the name of the affinity group",
+              "name": "name",
+              "type": "string"
+            },
+            {
+              "description": "the domain ID of the affinity group",
+              "name": "domainid",
+              "type": "string"
+            },
+            {
+              "description": "the domain name of the affinity group",
+              "name": "domain",
+              "type": "string"
+            },
+            {
+              "description": "the ID of the affinity group",
+              "name": "id",
+              "type": "string"
+            },
+            {
+              "description": "the description of the affinity group",
+              "name": "description",
+              "type": "string"
+            },
+            {
+              "description": "the project name of the affinity group",
+              "name": "project",
+              "type": "string"
+            },
+            {
+              "description": "the type of the affinity group",
+              "name": "type",
+              "type": "string"
+            }
+          ],
+          "type": "set"
         },
         {
-          "description": "the amount of the host's memory currently used",
-          "name": "memoryused",
-          "type": "long"
+          "description": "the number of cpu this virtual machine is running with",
+          "name": "cpunumber",
+          "type": "integer"
         },
         {
-          "description": "the cluster name of the host",
-          "name": "clustername",
+          "description": "the name of the service offering of the virtual machine",
+          "name": "serviceofferingname",
           "type": "string"
-        },
+        }
+      ],
+      "since": "4.9.3"
+    },
+    {
+      "description": "Lists hosts.",
+      "isasync": false,
+      "name": "listHosts",
+      "params": [
         {
-          "description": "the OS category ID of the host",
-          "name": "oscategoryid",
-          "type": "string"
+          "description": "comma separated list of host details requested, value can be a list of [ min, all, capacity, events, stats]",
+          "length": 255,
+          "name": "details",
+          "required": false,
+          "type": "list"
         },
         {
-          "description": "the ID of the host",
-          "name": "id",
-          "type": "string"
+          "description": "",
+          "length": 255,
+          "name": "pagesize",
+          "required": false,
+          "type": "integer"
         },
         {
           "description": "the state of the host",
+          "length": 255,
           "name": "state",
-          "type": "status"
-        },
-        {
-          "description": "the CPU speed of the host",
-          "name": "cpuspeed",
-          "type": "long"
-        },
-        {
-          "description": "true if the host has capability to support UEFI boot",
-          "name": "ueficapability",
-          "type": "boolean"
-        },
-        {
-          "description": "the amount of the host's CPU currently used",
-          "name": "cpuused",
-          "type": "string"
-        },
-        {
-          "description": "comma-separated list of tags for the host",
-          "name": "hosttags",
-          "type": "string"
-        },
-        {
-          "description": "the amount of the host's CPU currently allocated in percentage",
-          "name": "cpuallocatedpercentage",
+          "required": false,
           "type": "string"
         },
         {
-          "description": "the amount of the host's memory after applying the mem.overprovisioning.factor",
-          "name": "memorywithoverprovisioning",
-          "type": "string"
+          "description": "lists hosts existing in particular cluster",
+          "length": 255,
+          "name": "clusterid",
+          "related": "addCluster,listClusters,updateCluster",
+          "required": false,
+          "type": "uuid"
         },
         {
-          "description": "the date and time the host was removed",
-          "name": "removed",
-          "type": "date"
+          "description": "the Pod ID for the host",
+          "length": 255,
+          "name": "podid",
+          "related": "listPods,updatePod,createManagementNetworkIpRange",
+          "required": false,
+          "type": "uuid"
         },
         {
-          "description": "the cluster type of the cluster that host belongs to",
-          "name": "clustertype",
+          "description": "the host type",
+          "length": 255,
+          "name": "type",
+          "required": false,
           "type": "string"
         },
-        {},
-        {
-          "description": "the last annotation set on this host by an admin",
-          "name": "annotation",
-          "type": "string"
-        }
-      ]
-    },
-    {
-      "description": "Deletes a storage pool.",
-      "isasync": false,
-      "name": "deleteStoragePool",
-      "params": [
         {
-          "description": "Storage pool id",
+          "description": "the name of the host",
           "length": 255,
-          "name": "id",
-          "related": "cancelStorageMaintenance,createStoragePool,listStoragePools,findStoragePoolsForMigration,enableStorageMaintenance,updateStoragePool,syncStoragePool,updateStorageCapabilities,listVsphereStoragePolicyCompatiblePools",
-          "required": true,
-          "type": "uuid"
+          "name": "name",
+          "required": false,
+          "type": "string"
         },
         {
-          "description": "Force destroy storage pool (force expunge volumes in Destroyed state as a part of pool removal)",
+          "description": "list hosts by its out-of-band management interface's power state. Its value can be one of [On, Off, Unknown]",
           "length": 255,
-          "name": "forced",
+          "name": "outofbandmanagementpowerstate",
           "required": false,
-          "type": "boolean"
-        }
-      ],
-      "response": [
-        {
-          "description": "any text associated with the success or failure",
-          "name": "displaytext",
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
+          "description": "",
+          "length": 255,
+          "name": "page",
+          "required": false,
           "type": "integer"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
+          "description": "hypervisor type of host: XenServer,KVM,VMware,Hyperv,BareMetal,Simulator",
+          "length": 255,
+          "name": "hypervisor",
+          "required": false,
           "type": "string"
         },
-        {},
-        {},
-        {
-          "description": "true if operation is executed successfully",
-          "name": "success",
-          "type": "boolean"
-        }
-      ]
-    },
-    {
-      "description": "List storage pools compatible with a vSphere storage policy",
-      "isasync": false,
-      "name": "listVsphereStoragePolicyCompatiblePools",
-      "params": [
         {
-          "description": "ID of the storage policy",
+          "description": "if true, list only hosts dedicated to HA",
           "length": 255,
-          "name": "policyid",
-          "related": "importVsphereStoragePolicies,listVsphereStoragePolicies",
+          "name": "hahost",
           "required": false,
-          "type": "uuid"
+          "type": "boolean"
         },
         {
-          "description": "",
+          "description": "the id of the host",
           "length": 255,
-          "name": "pagesize",
+          "name": "id",
+          "related": "addHost,cancelHostMaintenance,cancelHostAsDegraded,declareHostAsDegraded,listHosts,prepareHostForMaintenance,reconnectHost,updateHost,addBaremetalHost,listExternalLoadBalancers",
           "required": false,
-          "type": "integer"
+          "type": "uuid"
         },
         {
-          "description": "ID of the zone",
+          "description": "the Zone ID for the host",
           "length": 255,
           "name": "zoneid",
           "related": "createZone,updateZone,listZones,listZones",
@@ -3460,6 +2991,13 @@
           "type": "uuid"
         },
         {
+          "description": "list hosts by resource state. Resource state represents current state determined by admin of host, value can be one of [Enabled, Disabled, Unmanaged, PrepareForMaintenance, ErrorInMaintenance, Maintenance, Error]",
+          "length": 255,
+          "name": "resourcestate",
+          "required": false,
+          "type": "string"
+        },
+        {
           "description": "List by keyword",
           "length": 255,
           "name": "keyword",
@@ -3467,461 +3005,506 @@
           "type": "string"
         },
         {
-          "description": "",
+          "description": "lists hosts in the same cluster as this VM and flag hosts with enough CPU/RAm to host this VM",
           "length": 255,
-          "name": "page",
+          "name": "virtualmachineid",
+          "related": "assignVirtualMachine,migrateVirtualMachine,migrateVirtualMachineWithVolume,recoverVirtualMachine,attachIso,detachIso,addNicToVirtualMachine,deployVirtualMachine,destroyVirtualMachine,listVirtualMachines,scaleVirtualMachine,rebootVirtualMachine,removeNicFromVirtualMachine,resetPasswordForVirtualMachine,resetSSHKeyForVirtualMachine,restoreVirtualMachine,startVirtualMachine,stopVirtualMachine,updateDefaultNicForVirtualMachine,updateVirtualMachine,changeServiceForVirtua [...]
           "required": false,
-          "type": "integer"
+          "type": "uuid"
+        },
+        {
+          "description": "list hosts for which out-of-band management is enabled",
+          "length": 255,
+          "name": "outofbandmanagementenabled",
+          "required": false,
+          "type": "boolean"
         }
       ],
-      "related": "cancelStorageMaintenance,createStoragePool,listStoragePools,findStoragePoolsForMigration,enableStorageMaintenance,updateStoragePool,syncStoragePool,updateStorageCapabilities",
+      "related": "addHost,cancelHostMaintenance,cancelHostAsDegraded,declareHostAsDegraded,prepareHostForMaintenance,reconnectHost,updateHost,addBaremetalHost,listExternalLoadBalancers",
       "response": [
         {
-          "description": "the host's currently allocated disk size",
-          "name": "disksizeallocated",
-          "type": "long"
-        },
-        {
-          "description": "the storage pool path",
-          "name": "path",
+          "description": "the amount of the host's memory after applying the mem.overprovisioning.factor",
+          "name": "memorywithoverprovisioning",
           "type": "string"
         },
         {
-          "description": "the Pod name of the storage pool",
-          "name": "podname",
+          "description": "capabilities of the host",
+          "name": "capabilities",
           "type": "string"
         },
         {
-          "description": "the storage pool capabilities",
-          "name": "storagecapabilities",
-          "type": "map"
+          "description": "the amount of the host's memory currently allocated in bytes",
+          "name": "memoryallocatedbytes",
+          "type": "long"
         },
         {
-          "description": "the storage pool type",
-          "name": "type",
+          "description": "the Pod name of the host",
+          "name": "podname",
           "type": "string"
         },
         {
-          "description": "the Pod ID of the storage pool",
-          "name": "podid",
+          "description": "the last annotation set on this host by an admin",
+          "name": "annotation",
           "type": "string"
         },
         {
-          "description": "the ID of the storage pool",
-          "name": "id",
-          "type": "string"
+          "description": "true if this host is suitable(has enough capacity and satisfies all conditions like hosttags, max guests vm limit etc) to migrate a VM to it , false otherwise",
+          "name": "suitableformigration",
+          "type": "boolean"
         },
         {
-          "description": "Storage provider for this pool",
-          "name": "provider",
+          "description": "the amount of the host's CPU currently allocated after applying the cpu.overprovisioning.factor",
+          "name": "cpuallocatedwithoverprovisioning",
           "type": "string"
         },
-        {},
         {
-          "description": "the tags for the storage pool",
-          "name": "tags",
+          "description": "the cluster type of the cluster that host belongs to",
+          "name": "clustertype",
           "type": "string"
         },
         {
-          "description": "IOPS CloudStack can provision from this storage pool",
-          "name": "capacityiops",
+          "description": "the incoming network traffic on the host",
+          "name": "networkkbsread",
           "type": "long"
         },
         {
-          "description": "the date and time the storage pool was created",
-          "name": "created",
-          "type": "date"
-        },
-        {
-          "description": "total min IOPS currently in use by volumes",
-          "name": "allocatediops",
+          "description": "the host's currently allocated disk size",
+          "name": "disksizeallocated",
           "type": "long"
         },
         {
-          "description": "the overprovisionfactor for the storage pool",
-          "name": "overprovisionfactor",
+          "description": "the host version",
+          "name": "version",
           "type": "string"
         },
         {
-          "description": "the scope of the storage pool",
-          "name": "scope",
-          "type": "string"
+          "description": "true if local storage is active, false otherwise",
+          "name": "islocalstorageactive",
+          "type": "boolean"
         },
-        {},
         {
-          "description": "the host's currently used disk size",
-          "name": "disksizeused",
-          "type": "long"
+          "description": "true if this host has enough CPU and RAM capacity to migrate a VM to it, false otherwise",
+          "name": "hasenoughcapacity",
+          "type": "boolean"
         },
         {
-          "description": "the state of the storage pool",
+          "description": "the state of the host",
           "name": "state",
-          "type": "storagepoolstatus"
+          "type": "status"
         },
         {
-          "description": "the hypervisor type of the storage pool",
-          "name": "hypervisor",
+          "description": "the IP address of the host",
+          "name": "ipaddress",
           "type": "string"
         },
         {
-          "description": "the name of the cluster for the storage pool",
-          "name": "clustername",
-          "type": "string"
+          "description": "the amount of the host's memory currently allocated",
+          "name": "memoryallocated",
+          "type": "long"
         },
         {
-          "description": "the name of the storage pool",
-          "name": "name",
+          "description": "the amount of the host's CPU currently allocated",
+          "name": "cpuallocated",
           "type": "string"
         },
         {
-          "description": "true if the entity/resource has annotations",
-          "name": "hasannotations",
-          "type": "boolean"
+          "description": "the amount of the host's CPU currently allocated in MHz",
+          "name": "cpuallocatedvalue",
+          "type": "long"
         },
         {
-          "description": "the total disk size of the storage pool",
-          "name": "disksizetotal",
-          "type": "long"
+          "description": "true if the host is Ha host (dedicated to vms started by HA process; false otherwise",
+          "name": "hahost",
+          "type": "boolean"
         },
+        {},
         {
-          "description": "the IP address of the storage pool",
-          "name": "ipaddress",
+          "description": "the OS category name of the host",
+          "name": "oscategoryname",
           "type": "string"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
+          "description": "the OS category ID of the host",
+          "name": "oscategoryid",
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
+          "description": "the CPU number of the host",
+          "name": "cpunumber",
           "type": "integer"
         },
         {
-          "description": "the Zone name of the storage pool",
-          "name": "zonename",
+          "description": "events available for the host",
+          "name": "events",
           "type": "string"
         },
         {
-          "description": "true if this pool is suitable to migrate a volume, false otherwise",
-          "name": "suitableformigration",
-          "type": "boolean"
+          "description": "the admin that annotated this host",
+          "name": "username",
+          "type": "string"
         },
         {
-          "description": "the ID of the cluster for the storage pool",
-          "name": "clusterid",
+          "description": "the amount of the host's CPU currently used",
+          "name": "cpuused",
           "type": "string"
         },
         {
-          "description": "the Zone ID of the storage pool",
-          "name": "zoneid",
-          "type": "string"
-        }
-      ]
-    },
-    {
-      "description": "Updates a storage pool.",
-      "isasync": false,
-      "name": "updateStoragePool",
-      "params": [
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
+        },
         {
-          "description": "comma-separated list of tags for the storage pool",
-          "length": 255,
-          "name": "tags",
-          "required": false,
-          "type": "list"
+          "description": "the cluster name of the host",
+          "name": "clustername",
+          "type": "string"
         },
         {
-          "description": "IOPS CloudStack can provision from this storage pool",
-          "length": 255,
-          "name": "capacityiops",
-          "required": false,
-          "type": "long"
+          "description": "the resource state of the host",
+          "name": "resourcestate",
+          "type": "string"
         },
         {
-          "description": "false to disable the pool for allocation of new volumes, true to enable it back.",
-          "length": 255,
-          "name": "enabled",
-          "required": false,
+          "description": "true if the entity/resource has annotations",
+          "name": "hasannotations",
           "type": "boolean"
         },
         {
-          "description": "the Id of the storage pool",
-          "length": 255,
-          "name": "id",
-          "related": "cancelStorageMaintenance,createStoragePool,listStoragePools,findStoragePoolsForMigration,enableStorageMaintenance,updateStoragePool,syncStoragePool,updateStorageCapabilities",
-          "required": true,
-          "type": "uuid"
+          "description": "true if the host has capability to support UEFI boot",
+          "name": "ueficapability",
+          "type": "boolean"
         },
         {
-          "description": "Change the name of the storage pool",
-          "length": 255,
+          "description": "the name of the host",
           "name": "name",
-          "related": "cancelStorageMaintenance,createStoragePool,listStoragePools,findStoragePoolsForMigration,enableStorageMaintenance,updateStoragePool,syncStoragePool,updateStorageCapabilities",
-          "required": false,
-          "since": "4.15",
           "type": "string"
         },
         {
-          "description": "bytes CloudStack can provision from this storage pool",
-          "length": 255,
-          "name": "capacitybytes",
-          "required": false,
-          "type": "long"
-        }
-      ],
-      "related": "cancelStorageMaintenance,createStoragePool,listStoragePools,findStoragePoolsForMigration,enableStorageMaintenance,syncStoragePool,updateStorageCapabilities",
-      "response": [
-        {
-          "description": "the tags for the storage pool",
-          "name": "tags",
-          "type": "string"
+          "description": "true if the host is disconnected. False otherwise.",
+          "name": "disconnected",
+          "type": "date"
         },
         {
-          "description": "the name of the storage pool",
-          "name": "name",
+          "description": "the hypervisor version",
+          "name": "hypervisorversion",
           "type": "string"
         },
         {
-          "description": "the ID of the storage pool",
-          "name": "id",
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
           "type": "string"
         },
         {
-          "description": "the hypervisor type of the storage pool",
-          "name": "hypervisor",
-          "type": "string"
+          "description": "the host HA information information",
+          "name": "hostha",
+          "type": "hostharesponse"
         },
         {
-          "description": "the host's currently used disk size",
-          "name": "disksizeused",
-          "type": "long"
+          "description": "the last time this host was annotated",
+          "name": "lastannotated",
+          "type": "date"
         },
         {
-          "description": "total min IOPS currently in use by volumes",
-          "name": "allocatediops",
-          "type": "long"
+          "description": "the amount of the host's CPU currently allocated in percentage",
+          "name": "cpuallocatedpercentage",
+          "type": "string"
         },
         {
-          "description": "true if this pool is suitable to migrate a volume, false otherwise",
-          "name": "suitableformigration",
-          "type": "boolean"
+          "description": "the host type",
+          "name": "type",
+          "type": "type"
         },
         {
-          "description": "the storage pool capabilities",
-          "name": "storagecapabilities",
+          "description": "Host details in key/value pairs.",
+          "name": "details",
           "type": "map"
         },
         {
-          "description": "Storage provider for this pool",
-          "name": "provider",
-          "type": "string"
-        },
-        {
-          "description": "the Zone name of the storage pool",
+          "description": "the Zone name of the host",
           "name": "zonename",
           "type": "string"
         },
-        {},
-        {
-          "description": "the Zone ID of the storage pool",
-          "name": "zoneid",
-          "type": "string"
-        },
-        {
-          "description": "the scope of the storage pool",
-          "name": "scope",
-          "type": "string"
-        },
-        {
-          "description": "the state of the storage pool",
-          "name": "state",
-          "type": "storagepoolstatus"
-        },
-        {
-          "description": "the IP address of the storage pool",
-          "name": "ipaddress",
-          "type": "string"
-        },
-        {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
-        },
         {
-          "description": "the Pod ID of the storage pool",
-          "name": "podid",
-          "type": "string"
+          "description": "GPU cards present in the host",
+          "name": "gpugroup",
+          "response": [
+            {
+              "description": "GPU cards present in the host",
+              "name": "gpugroupname",
+              "type": "string"
+            },
+            {
+              "description": "the list of enabled vGPUs",
+              "name": "vgpu",
+              "response": [
+                {
+                  "description": "Video RAM for this vGPU type",
+                  "name": "videoram",
+                  "type": "long"
+                },
+                {
+                  "description": "Remaining capacity in terms of no. of more VMs that can be deployped with this vGPU type",
+                  "name": "remainingcapacity",
+                  "type": "long"
+                },
+                {
+                  "description": "Maximum Y resolution per display",
+                  "name": "maxresolutiony",
+                  "type": "long"
+                },
+                {
+                  "description": "Model Name of vGPU",
+                  "name": "vgputype",
+                  "type": "string"
+                },
+                {
+                  "description": "Maximum displays per user",
+                  "name": "maxheads",
+                  "type": "long"
+                },
+                {
+                  "description": "Maximum X resolution per display",
+                  "name": "maxresolutionx",
+                  "type": "long"
+                },
+                {
+                  "description": "Maximum no. of vgpu per gpu card (pgpu)",
+                  "name": "maxvgpuperpgpu",
+                  "type": "long"
+                },
+                {
+                  "description": "Maximum vgpu can be created with this vgpu type on the given gpu group",
+                  "name": "maxcapacity",
+                  "type": "long"
+                }
+              ],
+              "type": "list"
+            }
+          ],
+          "type": "list"
         },
-        {},
         {
-          "description": "the Pod name of the storage pool",
-          "name": "podname",
+          "description": "the Pod ID of the host",
+          "name": "podid",
           "type": "string"
         },
         {
-          "description": "the total disk size of the storage pool",
-          "name": "disksizetotal",
+          "description": "the host hypervisor",
+          "name": "hypervisor",
+          "type": "hypervisortype"
+        },
+        {
+          "description": "the CPU speed of the host",
+          "name": "cpuspeed",
           "type": "long"
         },
         {
-          "description": "IOPS CloudStack can provision from this storage pool",
-          "name": "capacityiops",
+          "description": "the date and time the host was last pinged",
+          "name": "lastpinged",
+          "type": "date"
+        },
+        {
+          "description": "the memory total of the host, this parameter is deprecated use memorywithoverprovisioning",
+          "name": "memorytotal",
           "type": "long"
         },
         {
-          "description": "the ID of the cluster for the storage pool",
-          "name": "clusterid",
+          "description": "the total disk size of the host",
+          "name": "disksizetotal",
+          "type": "long"
+        },
+        {
+          "description": "the Zone ID of the host",
+          "name": "zoneid",
           "type": "string"
         },
         {
-          "description": "true if the entity/resource has annotations",
-          "name": "hasannotations",
-          "type": "boolean"
+          "description": "comma-separated list of tags for the host",
+          "name": "hosttags",
+          "type": "string"
         },
         {
-          "description": "the overprovisionfactor for the storage pool",
-          "name": "overprovisionfactor",
+          "description": "the cpu average load on the host",
+          "name": "cpuloadaverage",
+          "type": "double"
+        },
+        {
+          "description": "the management server ID of the host",
+          "name": "managementserverid",
           "type": "string"
         },
         {
-          "description": "the name of the cluster for the storage pool",
-          "name": "clustername",
+          "description": "the amount of the host's CPU after applying the cpu.overprovisioning.factor",
+          "name": "cpuwithoverprovisioning",
           "type": "string"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
+          "description": "the cluster ID of the host",
+          "name": "clusterid",
           "type": "string"
         },
         {
-          "description": "the date and time the storage pool was created",
+          "description": "the date and time the host was created",
           "name": "created",
           "type": "date"
         },
         {
-          "description": "the host's currently allocated disk size",
-          "name": "disksizeallocated",
-          "type": "long"
+          "description": "the number of CPU sockets on the host",
+          "name": "cpusockets",
+          "type": "integer"
         },
         {
-          "description": "the storage pool path",
-          "name": "path",
+          "description": "the host out-of-band management information",
+          "name": "outofbandmanagement",
+          "type": "outofbandmanagementresponse"
+        },
+        {},
+        {
+          "description": "the amount of the host's memory currently allocated in percentage",
+          "name": "memoryallocatedpercentage",
           "type": "string"
         },
         {
-          "description": "the storage pool type",
-          "name": "type",
+          "description": "the ID of the host",
+          "name": "id",
           "type": "string"
+        },
+        {
+          "description": "the amount of the host's memory currently used",
+          "name": "memoryused",
+          "type": "long"
+        },
+        {
+          "description": "the date and time the host was removed",
+          "name": "removed",
+          "type": "date"
+        },
+        {
+          "description": "the outgoing network traffic on the host",
+          "name": "networkkbswrite",
+          "type": "long"
         }
-      ],
-      "since": "3.0.0"
+      ]
     },
     {
-      "description": "Reboots a system VM.",
-      "isasync": true,
-      "name": "rebootSystemVm",
+      "description": "Deletes a storage pool.",
+      "isasync": false,
+      "name": "deleteStoragePool",
       "params": [
         {
-          "description": "Force reboot the system VM (System VM is Stopped and then Started)",
-          "length": 255,
-          "name": "forced",
-          "required": false,
-          "since": "4.16.0",
-          "type": "boolean"
-        },
-        {
-          "description": "The ID of the system virtual machine",
+          "description": "Storage pool id",
           "length": 255,
           "name": "id",
-          "related": "destroySystemVm,listSystemVms,migrateSystemVm,rebootSystemVm,startSystemVm,stopSystemVm,changeServiceForSystemVm,scaleSystemVm",
+          "related": "cancelStorageMaintenance,createStoragePool,listStoragePools,findStoragePoolsForMigration,enableStorageMaintenance,updateStoragePool,syncStoragePool,updateStorageCapabilities,listVsphereStoragePolicyCompatiblePools",
           "required": true,
           "type": "uuid"
+        },
+        {
+          "description": "Force destroy storage pool (force expunge volumes in Destroyed state as a part of pool removal)",
+          "length": 255,
+          "name": "forced",
+          "required": false,
+          "type": "boolean"
         }
       ],
-      "related": "destroySystemVm,listSystemVms,migrateSystemVm,startSystemVm,stopSystemVm,changeServiceForSystemVm,scaleSystemVm",
       "response": [
+        {},
+        {},
         {
-          "description": "the Pod name for the system VM",
-          "name": "podname",
+          "description": "any text associated with the success or failure",
+          "name": "displaytext",
           "type": "string"
         },
         {
-          "description": "the system VM type",
-          "name": "systemvmtype",
-          "type": "string"
+          "description": "true if operation is executed successfully",
+          "name": "success",
+          "type": "boolean"
         },
         {
-          "description": "the date and time the system VM was created",
-          "name": "created",
-          "type": "date"
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
         },
         {
-          "description": "the public IP address for the system VM",
-          "name": "publicip",
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
           "type": "string"
-        },
+        }
+      ]
+    },
+    {
+      "description": "List storage pools compatible with a vSphere storage policy",
+      "isasync": false,
+      "name": "listVsphereStoragePolicyCompatiblePools",
+      "params": [
         {
-          "description": "the number of active console sessions for the console proxy system vm",
-          "name": "activeviewersessions",
+          "description": "",
+          "length": 255,
+          "name": "page",
+          "required": false,
           "type": "integer"
         },
         {
-          "description": "the Pod ID for the system VM",
-          "name": "podid",
-          "type": "string"
-        },
-        {
-          "description": "the public MAC address for the system VM",
-          "name": "publicmacaddress",
-          "type": "string"
+          "description": "ID of the zone",
+          "length": 255,
+          "name": "zoneid",
+          "related": "createZone,updateZone,listZones,listZones",
+          "required": false,
+          "type": "uuid"
         },
         {
-          "description": "the last disconnected date of host",
-          "name": "disconnected",
-          "type": "date"
+          "description": "",
+          "length": 255,
+          "name": "pagesize",
+          "required": false,
+          "type": "integer"
         },
         {
-          "description": "the link local MAC address for the system vm",
-          "name": "linklocalmacaddress",
+          "description": "List by keyword",
+          "length": 255,
+          "name": "keyword",
+          "required": false,
           "type": "string"
         },
         {
-          "description": "the network domain for the system VM",
-          "name": "networkdomain",
-          "type": "string"
-        },
+          "description": "ID of the storage policy",
+          "length": 255,
+          "name": "policyid",
+          "related": "importVsphereStoragePolicies,listVsphereStoragePolicies",
+          "required": false,
+          "type": "uuid"
+        }
+      ],
+      "related": "cancelStorageMaintenance,createStoragePool,listStoragePools,findStoragePoolsForMigration,enableStorageMaintenance,updateStoragePool,syncStoragePool,updateStorageCapabilities",
+      "response": [
         {
-          "description": "the second DNS for the system VM",
-          "name": "dns2",
+          "description": "the ID of the storage pool",
+          "name": "id",
           "type": "string"
         },
-        {},
         {
-          "description": "the link local IP address for the system vm",
-          "name": "linklocalip",
+          "description": "the name of the storage pool",
+          "name": "name",
           "type": "string"
         },
         {
-          "description": "the link local netmask for the system vm",
-          "name": "linklocalnetmask",
+          "description": "the Pod name of the storage pool",
+          "name": "podname",
           "type": "string"
         },
         {
-          "description": "the private IP address for the system VM",
-          "name": "privateip",
-          "type": "string"
+          "description": "the host's currently used disk size",
+          "name": "disksizeused",
+          "type": "long"
         },
         {
-          "description": "the template name for the system VM",
-          "name": "templatename",
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
           "type": "string"
         },
         {
-          "description": "public vlan range",
-          "name": "publicvlan",
-          "type": "list"
+          "description": "the name of the cluster for the storage pool",
+          "name": "clustername",
+          "type": "string"
         },
         {
           "description": "the current status of the latest async job acting on this object",
@@ -3929,1314 +3512,1304 @@
           "type": "integer"
         },
         {
-          "description": "guest vlan range",
-          "name": "guestvlan",
+          "description": "the tags for the storage pool",
+          "name": "tags",
           "type": "string"
         },
+        {},
         {
-          "description": "the private netmask for the system VM",
-          "name": "privatenetmask",
+          "description": "the ID of the cluster for the storage pool",
+          "name": "clusterid",
           "type": "string"
         },
         {
-          "description": "the private MAC address for the system VM",
-          "name": "privatemacaddress",
+          "description": "the overprovisionfactor for the storage pool",
+          "name": "overprovisionfactor",
           "type": "string"
         },
         {
-          "description": "the template ID for the system VM",
-          "name": "templateid",
-          "type": "string"
+          "description": "true if the entity/resource has annotations",
+          "name": "hasannotations",
+          "type": "boolean"
         },
         {
-          "description": "the job status associated with the system VM.  This is only displayed if the router listed is part of a currently running asynchronous job.",
-          "name": "jobstatus",
-          "type": "integer"
+          "description": "the date and time the storage pool was created",
+          "name": "created",
+          "type": "date"
         },
         {
-          "description": "the job ID associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.",
-          "name": "jobid",
-          "type": "string"
+          "description": "the storage pool capabilities",
+          "name": "storagecapabilities",
+          "type": "map"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
-          "type": "string"
+          "description": "IOPS CloudStack can provision from this storage pool",
+          "name": "capacityiops",
+          "type": "long"
         },
         {
-          "description": "the ID of the system VM",
-          "name": "id",
+          "description": "the scope of the storage pool",
+          "name": "scope",
           "type": "string"
         },
         {
-          "description": "the Zone ID for the system VM",
-          "name": "zoneid",
+          "description": "the Zone name of the storage pool",
+          "name": "zonename",
           "type": "string"
         },
-        {
-          "description": "true if the entity/resource has annotations",
-          "name": "hasannotations",
-          "type": "boolean"
-        },
         {},
         {
-          "description": "the first DNS for the system VM",
-          "name": "dns1",
-          "type": "string"
+          "description": "true if this pool is suitable to migrate a volume, false otherwise",
+          "name": "suitableformigration",
+          "type": "boolean"
         },
         {
-          "description": "the agent state of the system VM",
-          "name": "agentstate",
+          "description": "the Zone ID of the storage pool",
+          "name": "zoneid",
           "type": "string"
         },
         {
-          "description": "the Zone name for the system VM",
-          "name": "zonename",
+          "description": "the hypervisor type of the storage pool",
+          "name": "hypervisor",
           "type": "string"
         },
         {
-          "description": "the gateway for the system VM",
-          "name": "gateway",
-          "type": "string"
+          "description": "total min IOPS currently in use by volumes",
+          "name": "allocatediops",
+          "type": "long"
         },
         {
-          "description": "true if vm contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory.",
-          "name": "isdynamicallyscalable",
-          "type": "boolean"
+          "description": "the host's currently allocated disk size",
+          "name": "disksizeallocated",
+          "type": "long"
         },
         {
-          "description": "the hypervisor on which the template runs",
-          "name": "hypervisor",
+          "description": "the IP address of the storage pool",
+          "name": "ipaddress",
           "type": "string"
         },
         {
-          "description": "the hostname for the system VM",
-          "name": "hostname",
-          "type": "string"
+          "description": "the total disk size of the storage pool",
+          "name": "disksizetotal",
+          "type": "long"
         },
         {
-          "description": "the public netmask for the system VM",
-          "name": "publicnetmask",
-          "type": "string"
+          "description": "the state of the storage pool",
+          "name": "state",
+          "type": "storagepoolstatus"
         },
         {
-          "description": "the systemvm agent version",
-          "name": "version",
+          "description": "Storage provider for this pool",
+          "name": "provider",
           "type": "string"
         },
         {
-          "description": "the host ID for the system VM",
-          "name": "hostid",
+          "description": "the storage pool path",
+          "name": "path",
           "type": "string"
         },
         {
-          "description": "the name of the system VM",
-          "name": "name",
+          "description": "the storage pool type",
+          "name": "type",
           "type": "string"
         },
         {
-          "description": "the state of the system VM",
-          "name": "state",
+          "description": "the Pod ID of the storage pool",
+          "name": "podid",
           "type": "string"
         }
       ]
     },
     {
-      "description": "Import LDAP users",
+      "description": "Updates a storage pool.",
       "isasync": false,
-      "name": "importLdapUsers",
+      "name": "updateStoragePool",
       "params": [
         {
-          "description": "details for account used to store specific parameters",
+          "description": "IOPS CloudStack can provision from this storage pool",
           "length": 255,
-          "name": "accountdetails",
+          "name": "capacityiops",
           "required": false,
-          "type": "map"
+          "type": "long"
         },
         {
-          "description": "Specifies the domain to which the ldap users are to be imported. If no domain is specified, a domain will created using group parameter. If the group is also not specified, a domain name based on the OU information will be created. If no OU hierarchy exists, will be defaulted to ROOT domain",
+          "description": "Change the name of the storage pool",
           "length": 255,
-          "name": "domainid",
-          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
+          "name": "name",
+          "related": "cancelStorageMaintenance,createStoragePool,listStoragePools,findStoragePoolsForMigration,enableStorageMaintenance,updateStoragePool,syncStoragePool,updateStorageCapabilities",
           "required": false,
-          "type": "uuid"
+          "since": "4.15",
+          "type": "string"
         },
         {
-          "description": "Creates the account under the specified role.",
+          "description": "false to disable the pool for allocation of new volumes, true to enable it back.",
           "length": 255,
-          "name": "roleid",
-          "related": "createRole,importRole,listRoles,updateRole",
+          "name": "enabled",
           "required": false,
-          "type": "uuid"
+          "type": "boolean"
         },
         {
-          "description": "Creates the user under the specified account. If no account is specified, the username will be used as the account name.",
+          "description": "comma-separated list of tags for the storage pool",
           "length": 255,
-          "name": "account",
+          "name": "tags",
           "required": false,
-          "type": "string"
+          "type": "list"
         },
         {
-          "description": "",
+          "description": "bytes CloudStack can provision from this storage pool",
           "length": 255,
-          "name": "pagesize",
+          "name": "capacitybytes",
           "required": false,
-          "type": "integer"
+          "type": "long"
         },
         {
-          "description": "Specifies the group name from which the ldap users are to be imported. If no group is specified, all the users will be imported.",
+          "description": "the Id of the storage pool",
           "length": 255,
-          "name": "group",
-          "required": false,
+          "name": "id",
+          "related": "cancelStorageMaintenance,createStoragePool,listStoragePools,findStoragePoolsForMigration,enableStorageMaintenance,updateStoragePool,syncStoragePool,updateStorageCapabilities",
+          "required": true,
+          "type": "uuid"
+        }
+      ],
+      "related": "cancelStorageMaintenance,createStoragePool,listStoragePools,findStoragePoolsForMigration,enableStorageMaintenance,syncStoragePool,updateStorageCapabilities",
+      "response": [
+        {
+          "description": "the IP address of the storage pool",
+          "name": "ipaddress",
           "type": "string"
         },
         {
-          "description": "",
-          "length": 255,
-          "name": "page",
-          "required": false,
-          "type": "integer"
+          "description": "the host's currently allocated disk size",
+          "name": "disksizeallocated",
+          "type": "long"
         },
         {
-          "description": "List by keyword",
-          "length": 255,
-          "name": "keyword",
-          "required": false,
-          "type": "string"
+          "description": "the total disk size of the storage pool",
+          "name": "disksizetotal",
+          "type": "long"
         },
         {
-          "description": "Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.",
-          "length": 255,
-          "name": "timezone",
-          "required": false,
-          "type": "string"
+          "description": "true if this pool is suitable to migrate a volume, false otherwise",
+          "name": "suitableformigration",
+          "type": "boolean"
         },
+        {},
         {
-          "description": "Type of the account.  Specify 0 for user, 1 for root admin, and 2 for domain admin",
-          "length": 255,
-          "name": "accounttype",
-          "required": false,
-          "type": "short"
-        }
-      ],
-      "related": "searchLdap,listLdapUsers",
-      "response": [
-        {
-          "description": "The authentication source for this user as known to the system or empty if the user is not yet in cloudstack.",
-          "name": "conflictingusersource",
+          "description": "the scope of the storage pool",
+          "name": "scope",
           "type": "string"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
-          "type": "string"
+          "description": "the host's currently used disk size",
+          "name": "disksizeused",
+          "type": "long"
         },
         {
-          "description": "The user's firstname",
-          "name": "firstname",
+          "description": "the storage pool type",
+          "name": "type",
           "type": "string"
         },
         {
-          "description": "The user's email",
-          "name": "email",
+          "description": "the Pod ID of the storage pool",
+          "name": "podid",
           "type": "string"
         },
         {
-          "description": "The user's domain",
-          "name": "domain",
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
           "type": "string"
         },
         {
-          "description": "The user's principle",
-          "name": "principal",
-          "type": "string"
+          "description": "true if the entity/resource has annotations",
+          "name": "hasannotations",
+          "type": "boolean"
         },
         {},
-        {},
         {
-          "description": "The user's lastname",
-          "name": "lastname",
-          "type": "string"
+          "description": "the state of the storage pool",
+          "name": "state",
+          "type": "storagepoolstatus"
         },
         {
-          "description": "The user's username",
-          "name": "username",
+          "description": "the name of the cluster for the storage pool",
+          "name": "clustername",
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
-        }
-      ],
-      "since": "4.3.0"
-    },
-    {
-      "description": "Lists all available networks.",
-      "isasync": false,
-      "name": "listNetworks",
-      "params": [
-        {
-          "description": "",
-          "length": 255,
-          "name": "page",
-          "required": false,
-          "type": "integer"
+          "description": "the name of the storage pool",
+          "name": "name",
+          "type": "string"
         },
         {
-          "description": "true if network is system, false otherwise",
-          "length": 255,
-          "name": "issystem",
-          "required": false,
-          "type": "boolean"
+          "description": "IOPS CloudStack can provision from this storage pool",
+          "name": "capacityiops",
+          "type": "long"
         },
         {
-          "description": "flag to display the resource icon for networks",
-          "length": 255,
-          "name": "showicon",
-          "required": false,
-          "type": "boolean"
+          "description": "the ID of the cluster for the storage pool",
+          "name": "clusterid",
+          "type": "string"
         },
         {
-          "description": "list resources by display flag; only ROOT admin is eligible to pass this parameter",
-          "length": 255,
-          "name": "displaynetwork",
-          "required": false,
-          "since": "4.4",
-          "type": "boolean"
+          "description": "the tags for the storage pool",
+          "name": "tags",
+          "type": "string"
         },
         {
-          "description": "true if need to list only networks which support specifying IP ranges",
-          "length": 255,
-          "name": "specifyipranges",
-          "required": false,
-          "type": "boolean"
+          "description": "the Zone name of the storage pool",
+          "name": "zonename",
+          "type": "string"
         },
         {
-          "description": "list networks by ID",
-          "length": 255,
+          "description": "the ID of the storage pool",
           "name": "id",
-          "related": "createNetwork,listNetworks,updateNetwork,createNetwork,updateNetwork,listNetworks,migrateNetwork,listF5LoadBalancerNetworks,listNetscalerLoadBalancerNetworks,listNiciraNvpDeviceNetworks,listPaloAltoFirewallNetworks,listSrxFirewallNetworks,listBrocadeVcsDeviceNetworks",
-          "required": false,
-          "type": "uuid"
+          "type": "string"
         },
         {
-          "description": "List networks by VPC",
-          "length": 255,
-          "name": "vpcid",
-          "related": "createVPC,listVPCs,updateVPC,createVPC,listVPCs,updateVPC,migrateVPC",
-          "required": false,
-          "type": "uuid"
+          "description": "the storage pool path",
+          "name": "path",
+          "type": "string"
         },
         {
-          "description": "list networks supporting certain services",
-          "length": 255,
-          "name": "supportedservices",
-          "required": false,
-          "type": "list"
+          "description": "the Pod name of the storage pool",
+          "name": "podname",
+          "type": "string"
         },
         {
-          "description": "List by keyword",
-          "length": 255,
-          "name": "keyword",
-          "required": false,
+          "description": "Storage provider for this pool",
+          "name": "provider",
           "type": "string"
         },
         {
-          "description": "list networks by restartRequired",
-          "length": 255,
-          "name": "restartrequired",
-          "required": false,
-          "type": "boolean"
+          "description": "the date and time the storage pool was created",
+          "name": "created",
+          "type": "date"
         },
         {
-          "description": "list resources by account. Must be used with the domainId parameter.",
-          "length": 255,
-          "name": "account",
-          "required": false,
+          "description": "total min IOPS currently in use by volumes",
+          "name": "allocatediops",
+          "type": "long"
+        },
+        {
+          "description": "the hypervisor type of the storage pool",
+          "name": "hypervisor",
           "type": "string"
         },
         {
-          "description": "list networks by ACL (access control list) type. Supported values are account and domain",
-          "length": 255,
-          "name": "acltype",
-          "required": false,
+          "description": "the Zone ID of the storage pool",
+          "name": "zoneid",
           "type": "string"
         },
         {
-          "description": "",
-          "length": 255,
-          "name": "pagesize",
-          "required": false,
+          "description": "the storage pool capabilities",
+          "name": "storagecapabilities",
+          "type": "map"
+        },
+        {
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
           "type": "integer"
         },
         {
-          "description": "list networks available for VM deployment",
+          "description": "the overprovisionfactor for the storage pool",
+          "name": "overprovisionfactor",
+          "type": "string"
+        }
+      ],
+      "since": "3.0.0"
+    },
+    {
+      "description": "Reboots a system VM.",
+      "isasync": true,
+      "name": "rebootSystemVm",
+      "params": [
+        {
+          "description": "Force reboot the system VM (System VM is Stopped and then Started)",
           "length": 255,
-          "name": "canusefordeploy",
+          "name": "forced",
           "required": false,
+          "since": "4.16.0",
           "type": "boolean"
         },
         {
-          "description": "the type of the network. Supported values are: isolated, l2, shared and all",
+          "description": "The ID of the system virtual machine",
           "length": 255,
-          "name": "type",
-          "required": false,
+          "name": "id",
+          "related": "destroySystemVm,listSystemVms,migrateSystemVm,rebootSystemVm,startSystemVm,stopSystemVm,changeServiceForSystemVm,scaleSystemVm",
+          "required": true,
+          "type": "uuid"
+        }
+      ],
+      "related": "destroySystemVm,listSystemVms,migrateSystemVm,startSystemVm,stopSystemVm,changeServiceForSystemVm,scaleSystemVm",
+      "response": [
+        {
+          "description": "the Zone name for the system VM",
+          "name": "zonename",
           "type": "string"
         },
+        {},
         {
-          "description": "list only resources belonging to the domain specified",
-          "length": 255,
-          "name": "domainid",
-          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
-          "required": false,
-          "type": "uuid"
+          "description": "the Zone ID for the system VM",
+          "name": "zoneid",
+          "type": "string"
         },
         {
-          "description": "list networks by network offering ID",
-          "length": 255,
-          "name": "networkofferingid",
-          "related": "createNetworkOffering,updateNetworkOffering,listNetworkOfferings",
-          "required": false,
-          "type": "uuid"
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
+          "type": "string"
         },
         {
-          "description": "the network belongs to VPC",
-          "length": 255,
-          "name": "forvpc",
-          "required": false,
-          "type": "boolean"
+          "description": "the template name for the system VM",
+          "name": "templatename",
+          "type": "string"
         },
         {
-          "description": "list networks by physical network id",
-          "length": 255,
-          "name": "physicalnetworkid",
-          "related": "createPhysicalNetwork,listPhysicalNetworks,updatePhysicalNetwork",
-          "required": false,
-          "type": "uuid"
+          "description": "the Pod name for the system VM",
+          "name": "podname",
+          "type": "string"
         },
         {
-          "description": "List resources by tags (key/value pairs)",
-          "length": 255,
-          "name": "tags",
-          "required": false,
-          "type": "map"
+          "description": "the first DNS for the system VM",
+          "name": "dns1",
+          "type": "string"
         },
         {
-          "description": "the zone ID of the network",
-          "length": 255,
-          "name": "zoneid",
-          "related": "createZone,updateZone,listZones,listZones",
-          "required": false,
-          "type": "uuid"
+          "description": "the public MAC address for the system VM",
+          "name": "publicmacaddress",
+          "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,
+          "description": "true if vm contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory.",
+          "name": "isdynamicallyscalable",
           "type": "boolean"
         },
         {
-          "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"
+          "description": "the state of the system VM",
+          "name": "state",
+          "type": "string"
         },
         {
-          "description": "type of the traffic",
-          "length": 255,
-          "name": "traffictype",
-          "required": false,
+          "description": "the public netmask for the system VM",
+          "name": "publicnetmask",
           "type": "string"
         },
         {
-          "description": "list objects by project",
-          "length": 255,
-          "name": "projectid",
-          "related": "listProjectAccounts,activateProject,createProject,listProjects,suspendProject,updateProject",
-          "required": false,
-          "type": "uuid"
-        }
-      ],
-      "related": "createNetwork,updateNetwork,createNetwork,updateNetwork,listNetworks,migrateNetwork,listF5LoadBalancerNetworks,listNetscalerLoadBalancerNetworks,listNiciraNvpDeviceNetworks,listPaloAltoFirewallNetworks,listSrxFirewallNetworks,listBrocadeVcsDeviceNetworks",
-      "response": [
+          "description": "the link local IP address for the system vm",
+          "name": "linklocalip",
+          "type": "string"
+        },
         {
-          "description": "the network's netmask",
-          "name": "netmask",
+          "description": "the hostname for the system VM",
+          "name": "hostname",
           "type": "string"
         },
         {
-          "description": "list networks available for vm deployment",
-          "name": "canusefordeploy",
-          "type": "boolean"
+          "description": "the private netmask for the system VM",
+          "name": "privatenetmask",
+          "type": "string"
         },
         {
-          "description": "Broadcast domain type of the network",
-          "name": "broadcastdomaintype",
+          "description": "the second DNS for the system VM",
+          "name": "dns2",
           "type": "string"
         },
         {
-          "description": "true if network can span multiple zones",
-          "name": "strechedl2subnet",
-          "type": "boolean"
+          "description": "the job ID associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.",
+          "name": "jobid",
+          "type": "string"
         },
         {
-          "description": "the list of resource tags associated with network",
-          "name": "tags",
-          "response": [
-            {
-              "description": "resource type",
-              "name": "resourcetype",
-              "type": "string"
-            },
-            {
-              "description": "tag key name",
-              "name": "key",
-              "type": "string"
-            },
-            {
-              "description": "the domain associated with the tag",
-              "name": "domain",
-              "type": "string"
-            },
-            {
-              "description": "the project name where tag belongs to",
-              "name": "project",
-              "type": "string"
-            },
-            {
-              "description": "id of the resource",
-              "name": "resourceid",
-              "type": "string"
-            },
-            {
-              "description": "the project id the tag belongs to",
-              "name": "projectid",
-              "type": "string"
-            },
-            {
-              "description": "tag value",
-              "name": "value",
-              "type": "string"
-            },
-            {
-              "description": "the account associated with the tag",
-              "name": "account",
-              "type": "string"
-            },
-            {
-              "description": "the ID of the domain associated with the tag",
-              "name": "domainid",
-              "type": "string"
-            },
-            {
-              "description": "customer associated with the tag",
-              "name": "customer",
-              "type": "string"
-            }
-          ],
-          "type": "list"
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
         },
-        {},
         {
-          "description": "the project name of the address",
-          "name": "project",
+          "description": "the system VM type",
+          "name": "systemvmtype",
           "type": "string"
         },
         {
-          "description": "availability of the network offering the network is created from",
-          "name": "networkofferingavailability",
+          "description": "the agent state of the system VM",
+          "name": "agentstate",
           "type": "string"
         },
         {
-          "description": "display text of the network offering the network is created from",
-          "name": "networkofferingdisplaytext",
+          "description": "the Pod ID for the system VM",
+          "name": "podid",
           "type": "string"
         },
         {
-          "description": "the first DNS for the network",
-          "name": "dns1",
+          "description": "the private MAC address for the system VM",
+          "name": "privatemacaddress",
           "type": "string"
         },
         {
-          "description": "Base64 string representation of the resource icon",
-          "name": "icon",
-          "type": "resourceiconresponse"
+          "description": "the hypervisor on which the template runs",
+          "name": "hypervisor",
+          "type": "string"
         },
         {
-          "description": "If the network has redundant routers enabled",
-          "name": "redundantrouter",
-          "type": "boolean"
+          "description": "the link local MAC address for the system vm",
+          "name": "linklocalmacaddress",
+          "type": "string"
+        },
+        {
+          "description": "the date and time the system VM was created",
+          "name": "created",
+          "type": "date"
+        },
+        {
+          "description": "the template ID for the system VM",
+          "name": "templateid",
+          "type": "string"
+        },
+        {
+          "description": "the job status associated with the system VM.  This is only displayed if the router listed is part of a currently running asynchronous job.",
+          "name": "jobstatus",
+          "type": "integer"
         },
         {},
         {
-          "description": "The external id of the network",
-          "name": "externalid",
+          "description": "the network domain for the system VM",
+          "name": "networkdomain",
           "type": "string"
         },
         {
-          "description": "true if network offering is ip conserve mode enabled",
-          "name": "networkofferingconservemode",
-          "type": "boolean"
+          "description": "the ID of the system VM",
+          "name": "id",
+          "type": "string"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
+          "description": "the private IP address for the system VM",
+          "name": "privateip",
           "type": "string"
         },
         {
-          "description": "the network's gateway",
+          "description": "the last disconnected date of host",
+          "name": "disconnected",
+          "type": "date"
+        },
+        {
+          "description": "the gateway for the system VM",
           "name": "gateway",
           "type": "string"
         },
         {
-          "description": "the name of the zone the network belongs to",
-          "name": "zonename",
+          "description": "the host ID for the system VM",
+          "name": "hostid",
           "type": "string"
         },
         {
-          "description": "related to what other network configuration",
-          "name": "related",
+          "description": "guest vlan range",
+          "name": "guestvlan",
           "type": "string"
         },
         {
-          "description": "the domain name of the network owner",
-          "name": "domain",
+          "description": "the name of the system VM",
+          "name": "name",
           "type": "string"
         },
         {
-          "description": "true if network is default, false otherwise",
-          "name": "isdefault",
-          "type": "boolean"
+          "description": "the number of active console sessions for the console proxy system vm",
+          "name": "activeviewersessions",
+          "type": "integer"
         },
         {
-          "description": "network offering id the network is created from",
-          "name": "networkofferingid",
+          "description": "the link local netmask for the system vm",
+          "name": "linklocalnetmask",
           "type": "string"
         },
         {
-          "description": "true if users from subdomains can access the domain level network",
-          "name": "subdomainaccess",
-          "type": "boolean"
+          "description": "the public IP address for the system VM",
+          "name": "publicip",
+          "type": "string"
+        },
+        {
+          "description": "public vlan range",
+          "name": "publicvlan",
+          "type": "list"
+        },
+        {
+          "description": "the systemvm agent version",
+          "name": "version",
+          "type": "string"
         },
         {
           "description": "true if the entity/resource has annotations",
           "name": "hasannotations",
           "type": "boolean"
-        },
+        }
+      ]
+    },
+    {
+      "description": "Import LDAP users",
+      "isasync": false,
+      "name": "importLdapUsers",
+      "params": [
         {
-          "description": "The vlan of the network. This parameter is visible to ROOT admins only",
-          "name": "vlan",
+          "description": "Creates the user under the specified account. If no account is specified, the username will be used as the account name.",
+          "length": 255,
+          "name": "account",
+          "required": false,
           "type": "string"
         },
         {
-          "description": "the displaytext of the network",
-          "name": "displaytext",
+          "description": "List by keyword",
+          "length": 255,
+          "name": "keyword",
+          "required": false,
           "type": "string"
         },
         {
-          "description": "the type of the network",
-          "name": "type",
+          "description": "Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.",
+          "length": 255,
+          "name": "timezone",
+          "required": false,
           "type": "string"
         },
         {
-          "description": "the total number of network traffic bytes received",
-          "name": "receivedbytes",
-          "type": "long"
+          "description": "Type of the account.  Specify 0 for user, 1 for root admin, and 2 for domain admin",
+          "length": 255,
+          "name": "accounttype",
+          "required": false,
+          "type": "short"
         },
         {
-          "description": "the physical network id",
-          "name": "physicalnetworkid",
-          "type": "string"
+          "description": "",
+          "length": 255,
+          "name": "page",
+          "required": false,
+          "type": "integer"
         },
         {
-          "description": "the id of the network",
-          "name": "id",
+          "description": "Specifies the group name from which the ldap users are to be imported. If no group is specified, all the users will be imported.",
+          "length": 255,
+          "name": "group",
+          "required": false,
           "type": "string"
         },
         {
-          "description": "state of the network",
-          "name": "state",
-          "type": "string"
+          "description": "Specifies the domain to which the ldap users are to be imported. If no domain is specified, a domain will created using group parameter. If the group is also not specified, a domain name based on the OU information will be created. If no OU hierarchy exists, will be defaulted to ROOT domain",
+          "length": 255,
+          "name": "domainid",
+          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
+          "required": false,
+          "type": "uuid"
         },
         {
-          "description": "acl type - access type to the network",
-          "name": "acltype",
-          "type": "string"
+          "description": "",
+          "length": 255,
+          "name": "pagesize",
+          "required": false,
+          "type": "integer"
         },
         {
-          "description": "the name of the network",
-          "name": "name",
-          "type": "string"
+          "description": "Creates the account under the specified role.",
+          "length": 255,
+          "name": "roleid",
+          "related": "createRole,importRole,listRoles,updateRole",
+          "required": false,
+          "type": "uuid"
         },
         {
-          "description": "the list of services",
-          "name": "service",
-          "response": [
-            {
-              "description": "the service provider name",
-              "name": "provider",
-              "response": [
-                {
-                  "description": "the provider name",
-                  "name": "name",
-                  "type": "string"
-                },
-                {
-                  "description": "services for this provider",
-                  "name": "servicelist",
-                  "type": "list"
-                },
-                {
-                  "description": "uuid of the network provider",
-                  "name": "id",
-                  "type": "string"
-                },
-                {
-                  "description": "state of the network provider",
-                  "name": "state",
-                  "type": "string"
-                },
-                {
-                  "description": "the destination physical network",
-                  "name": "destinationphysicalnetworkid",
-                  "type": "string"
-                },
-                {
-                  "description": "true if individual services can be enabled/disabled",
-                  "name": "canenableindividualservice",
-                  "type": "boolean"
-                },
-                {
-                  "description": "the physical network this belongs to",
-                  "name": "physicalnetworkid",
-                  "type": "string"
-                }
-              ],
-              "type": "list"
-            },
-            {
-              "description": "the service name",
-              "name": "name",
-              "type": "string"
-            },
-            {
-              "description": "the list of capabilities",
-              "name": "capability",
-              "response": [
-                {
-                  "description": "the capability name",
-                  "name": "name",
-                  "type": "string"
-                },
-                {
-                  "description": "the capability value",
-                  "name": "value",
-                  "type": "string"
-                },
-                {
-                  "description": "can this service capability value can be choosable while creatine network offerings",
-                  "name": "canchooseservicecapability",
-                  "type": "boolean"
-                }
-              ],
-              "type": "list"
-            }
-          ],
-          "type": "list"
-        },
+          "description": "details for account used to store specific parameters",
+          "length": 255,
+          "name": "accountdetails",
+          "required": false,
+          "type": "map"
+        }
+      ],
+      "related": "searchLdap,listLdapUsers",
+      "response": [
         {
-          "description": "Name of the VPC to which this network belongs",
-          "name": "vpcname",
+          "description": "The user's email",
+          "name": "email",
           "type": "string"
         },
         {
-          "description": "the second DNS for the network",
-          "name": "dns2",
+          "description": "The user's username",
+          "name": "username",
           "type": "string"
         },
         {
-          "description": "true if network supports specifying ip ranges, false otherwise",
-          "name": "specifyipranges",
-          "type": "boolean"
-        },
-        {
-          "description": "name of the network offering the network is created from",
-          "name": "networkofferingname",
+          "description": "The user's firstname",
+          "name": "firstname",
           "type": "string"
         },
+        {},
         {
-          "description": "zone id of the network",
-          "name": "zoneid",
+          "description": "The authentication source for this user as known to the system or empty if the user is not yet in cloudstack.",
+          "name": "conflictingusersource",
           "type": "string"
         },
         {
-          "description": "the gateway of IPv6 network",
-          "name": "ip6gateway",
+          "description": "The user's domain",
+          "name": "domain",
           "type": "string"
         },
         {
-          "description": "the network's IP range not to be used by CloudStack guest VMs and can be used for non CloudStack purposes",
-          "name": "reservediprange",
+          "description": "The user's lastname",
+          "name": "lastname",
           "type": "string"
         },
         {
-          "description": "an optional field, whether to the display the network to the end user or not.",
-          "name": "displaynetwork",
-          "type": "boolean"
-        },
-        {
-          "description": "the domain id of the network owner",
-          "name": "domainid",
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
           "type": "string"
         },
         {
-          "description": "the traffic type of the network",
-          "name": "traffictype",
+          "description": "The user's principle",
+          "name": "principal",
           "type": "string"
         },
+        {},
         {
-          "description": "the network CIDR of the guest network configured with IP reservation. It is the summation of CIDR and RESERVED_IP_RANGE",
-          "name": "networkcidr",
-          "type": "string"
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
+        }
+      ],
+      "since": "4.3.0"
+    },
+    {
+      "description": "Lists all available networks.",
+      "isasync": false,
+      "name": "listNetworks",
+      "params": [
+        {
+          "description": "true if network is system, false otherwise",
+          "length": 255,
+          "name": "issystem",
+          "required": false,
+          "type": "boolean"
         },
         {
-          "description": "the cidr of IPv6 network",
-          "name": "ip6cidr",
-          "type": "string"
+          "description": "",
+          "length": 255,
+          "name": "pagesize",
+          "required": false,
+          "type": "integer"
         },
         {
-          "description": "the project id of the ipaddress",
-          "name": "projectid",
-          "type": "string"
+          "description": "true if need to list only networks which support specifying IP ranges",
+          "length": 255,
+          "name": "specifyipranges",
+          "required": false,
+          "type": "boolean"
         },
         {
-          "description": "ACL Id associated with the VPC network",
-          "name": "aclid",
+          "description": "the type of the network. Supported values are: isolated, l2, shared and all",
+          "length": 255,
+          "name": "type",
+          "required": false,
           "type": "string"
         },
         {
-          "description": "broadcast uri of the network. This parameter is visible to ROOT admins only",
-          "name": "broadcasturi",
+          "description": "type of the traffic",
+          "length": 255,
+          "name": "traffictype",
+          "required": false,
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
+          "description": "list only resources belonging to the domain specified",
+          "length": 255,
+          "name": "domainid",
+          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
+          "required": false,
+          "type": "uuid"
         },
         {
-          "description": "true network requires restart",
-          "name": "restartrequired",
-          "type": "boolean"
+          "description": "list networks by network offering ID",
+          "length": 255,
+          "name": "networkofferingid",
+          "related": "createNetworkOffering,updateNetworkOffering,listNetworkOfferings",
+          "required": false,
+          "type": "uuid"
         },
         {
-          "description": "Cloudstack managed address space, all CloudStack managed VMs get IP address from CIDR",
-          "name": "cidr",
-          "type": "string"
+          "description": "list networks supporting certain services",
+          "length": 255,
+          "name": "supportedservices",
+          "required": false,
+          "type": "list"
         },
         {
-          "description": "true if network is system, false otherwise",
-          "name": "issystem",
+          "description": "list resources by display flag; only ROOT admin is eligible to pass this parameter",
+          "length": 255,
+          "name": "displaynetwork",
+          "required": false,
+          "since": "4.4",
           "type": "boolean"
         },
         {
-          "description": "ACL name associated with the VPC network",
-          "name": "aclname",
-          "type": "string"
+          "description": "List networks by VPC",
+          "length": 255,
+          "name": "vpcid",
+          "related": "createVPC,listVPCs,updateVPC,createVPC,listVPCs,updateVPC,migrateVPC",
+          "required": false,
+          "type": "uuid"
         },
         {
-          "description": "the network domain",
-          "name": "networkdomain",
-          "type": "string"
+          "description": "list networks by ID",
+          "length": 255,
+          "name": "id",
+          "related": "createNetwork,listNetworks,updateNetwork,createNetwork,updateNetwork,listNetworks,migrateNetwork,listF5LoadBalancerNetworks,listNetscalerLoadBalancerNetworks,listNiciraNvpDeviceNetworks,listPaloAltoFirewallNetworks,listSrxFirewallNetworks,listBrocadeVcsDeviceNetworks",
+          "required": false,
+          "type": "uuid"
         },
         {
-          "description": "the details of the network",
-          "name": "details",
-          "type": "map"
+          "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": "VPC the network belongs to",
-          "name": "vpcid",
-          "type": "string"
+          "description": "list networks available for VM deployment",
+          "length": 255,
+          "name": "canusefordeploy",
+          "required": false,
+          "type": "boolean"
         },
         {
-          "description": "the date this network was created",
-          "name": "created",
-          "type": "date"
+          "description": "List resources by tags (key/value pairs)",
+          "length": 255,
+          "name": "tags",
+          "required": false,
+          "type": "map"
         },
         {
-          "description": "list networks that are persistent",
-          "name": "ispersistent",
+          "description": "list networks by restartRequired",
+          "length": 255,
+          "name": "restartrequired",
+          "required": false,
           "type": "boolean"
         },
         {
-          "description": "If a network is enabled for 'streched l2 subnet' then represents zones on which network currently spans",
-          "name": "zonesnetworkspans",
-          "type": "set"
+          "description": "the zone ID of the network",
+          "length": 255,
+          "name": "zoneid",
+          "related": "createZone,updateZone,listZones,listZones",
+          "required": false,
+          "type": "uuid"
         },
         {
-          "description": "the owner of the network",
-          "name": "account",
-          "type": "string"
+          "description": "flag to display the resource icon for networks",
+          "length": 255,
+          "name": "showicon",
+          "required": false,
+          "type": "boolean"
         },
         {
-          "description": "the total number of network traffic bytes sent",
-          "name": "sentbytes",
-          "type": "long"
-        }
-      ]
-    },
-    {
-      "description": "List dedicated zones.",
-      "isasync": false,
-      "name": "listDedicatedZones",
-      "params": [
+          "description": "the network belongs to VPC",
+          "length": 255,
+          "name": "forvpc",
+          "required": false,
+          "type": "boolean"
+        },
         {
           "description": "",
           "length": 255,
-          "name": "pagesize",
+          "name": "page",
           "required": false,
           "type": "integer"
         },
         {
-          "description": "the ID of the domain associated with the zone",
+          "description": "defaults to false, but if true, lists all resources from the parent specified by the domainId till leaves.",
           "length": 255,
-          "name": "domainid",
-          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain",
+          "name": "isrecursive",
           "required": false,
-          "type": "uuid"
+          "type": "boolean"
         },
         {
-          "description": "List by keyword",
+          "description": "list networks by physical network id",
           "length": 255,
-          "name": "keyword",
+          "name": "physicalnetworkid",
+          "related": "createPhysicalNetwork,listPhysicalNetworks,updatePhysicalNetwork",
           "required": false,
-          "type": "string"
+          "type": "uuid"
         },
         {
-          "description": "the name of the account associated with the zone. Must be used with domainId.",
+          "description": "list resources by account. Must be used with the domainId parameter.",
           "length": 255,
           "name": "account",
           "required": false,
           "type": "string"
         },
         {
-          "description": "",
+          "description": "list objects by project",
           "length": 255,
-          "name": "page",
+          "name": "projectid",
+          "related": "listProjectAccounts,activateProject,createProject,listProjects,suspendProject,updateProject",
           "required": false,
-          "type": "integer"
+          "type": "uuid"
         },
         {
-          "description": "list dedicated zones by affinity group",
+          "description": "list networks by ACL (access control list) type. Supported values are account and domain",
           "length": 255,
-          "name": "affinitygroupid",
-          "related": "createAffinityGroup,listAffinityGroups",
+          "name": "acltype",
           "required": false,
-          "type": "uuid"
+          "type": "string"
         },
         {
-          "description": "the ID of the Zone",
+          "description": "List by keyword",
           "length": 255,
-          "name": "zoneid",
-          "related": "createZone,updateZone,listZones,listZones",
+          "name": "keyword",
           "required": false,
-          "type": "uuid"
+          "type": "string"
         }
       ],
-      "related": "dedicateZone",
+      "related": "createNetwork,updateNetwork,createNetwork,updateNetwork,listNetworks,migrateNetwork,listF5LoadBalancerNetworks,listNetscalerLoadBalancerNetworks,listNiciraNvpDeviceNetworks,listPaloAltoFirewallNetworks,listSrxFirewallNetworks,listBrocadeVcsDeviceNetworks",
       "response": [
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
-          "type": "string"
+          "description": "true network requires restart",
+          "name": "restartrequired",
+          "type": "boolean"
         },
-        {},
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
+          "description": "true if network is default, false otherwise",
+          "name": "isdefault",
+          "type": "boolean"
         },
         {
-          "description": "the Account Id to which the Zone is dedicated",
-          "name": "accountid",
-          "type": "string"
+          "description": "the details of the network",
+          "name": "details",
+          "type": "map"
         },
-        {},
         {
-          "description": "the ID of the Zone",
-          "name": "zoneid",
+          "description": "the project name of the address",
+          "name": "project",
           "type": "string"
         },
         {
-          "description": "the Name of the Zone",
-          "name": "zonename",
-          "type": "string"
+          "description": "true if network is system, false otherwise",
+          "name": "issystem",
+          "type": "boolean"
         },
         {
-          "description": "the Dedication Affinity Group ID of the zone",
-          "name": "affinitygroupid",
-          "type": "string"
+          "description": "an optional field, whether to the display the network to the end user or not.",
+          "name": "displaynetwork",
+          "type": "boolean"
         },
         {
-          "description": "the domain ID to which the Zone is dedicated",
-          "name": "domainid",
+          "description": "the gateway of IPv6 network",
+          "name": "ip6gateway",
           "type": "string"
         },
         {
-          "description": "the ID of the dedicated resource",
-          "name": "id",
+          "description": "the network's gateway",
+          "name": "gateway",
           "type": "string"
-        }
-      ]
-    },
-    {
-      "description": "Lists the pools of elastistor",
-      "isasync": false,
-      "name": "listElastistorPool",
-      "params": [
+        },
         {
-          "description": "the ID of the Pool",
-          "length": 255,
-          "name": "id",
-          "required": false,
-          "type": "long"
-        }
-      ],
-      "related": "",
-      "response": [
+          "description": "Cloudstack managed address space, all CloudStack managed VMs get IP address from CIDR",
+          "name": "cidr",
+          "type": "string"
+        },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
+          "description": "the network's IP range not to be used by CloudStack guest VMs and can be used for non CloudStack purposes",
+          "name": "reservediprange",
           "type": "string"
         },
         {
-          "description": "the name of the storage pool",
-          "name": "name",
+          "description": "Broadcast domain type of the network",
+          "name": "broadcastdomaintype",
           "type": "string"
         },
         {
-          "description": "the ID of the storage pool",
-          "name": "id",
+          "description": "Name of the VPC to which this network belongs",
+          "name": "vpcname",
           "type": "string"
         },
         {
-          "description": "the state of the storage pool",
-          "name": "state",
+          "description": "the network domain",
+          "name": "networkdomain",
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
+          "description": "the name of the network",
+          "name": "name",
+          "type": "string"
         },
         {
-          "description": "available iops of the pool",
-          "name": "maxiops",
+          "description": "the total number of network traffic bytes sent",
+          "name": "sentbytes",
           "type": "long"
         },
-        {},
         {
-          "description": "the current available space of the pool",
-          "name": "size",
-          "type": "long"
+          "description": "true if the entity/resource has annotations",
+          "name": "hasannotations",
+          "type": "boolean"
         },
         {
-          "description": "default gateway of the pool",
-          "name": "gateway",
+          "description": "The vlan of the network. This parameter is visible to ROOT admins only",
+          "name": "vlan",
           "type": "string"
         },
         {
-          "description": "controller of the pool",
-          "name": "controllerid",
+          "description": "the domain id of the network owner",
+          "name": "domainid",
           "type": "string"
         },
-        {}
-      ]
-    },
-    {
-      "description": "Updates a management network IP range. Only allowed when no IPs are allocated.",
-      "isasync": true,
-      "name": "updatePodManagementNetworkIpRange",
-      "params": [
         {
-          "description": "The new ending IP address.",
-          "length": 255,
-          "name": "newendip",
-          "required": false,
+          "description": "the traffic type of the network",
+          "name": "traffictype",
           "type": "string"
         },
         {
-          "description": "The current starting IP address.",
-          "length": 255,
-          "name": "currentstartip",
-          "related": "listPods,updatePod,createManagementNetworkIpRange",
-          "required": true,
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
           "type": "string"
         },
         {
-          "description": "The new starting IP address.",
-          "length": 255,
-          "name": "newstartip",
-          "required": false,
+          "description": "the date this network was created",
+          "name": "created",
+          "type": "date"
+        },
+        {},
+        {
+          "description": "the physical network id",
+          "name": "physicalnetworkid",
           "type": "string"
         },
         {
-          "description": "UUID of POD, where the IP range belongs to.",
-          "length": 255,
-          "name": "podid",
-          "related": "listPods,updatePod,createManagementNetworkIpRange",
-          "required": true,
-          "type": "uuid"
+          "description": "The external id of the network",
+          "name": "externalid",
+          "type": "string"
         },
         {
-          "description": "The current ending IP address.",
-          "length": 255,
-          "name": "currentendip",
-          "related": "listPods,updatePod,createManagementNetworkIpRange",
-          "required": true,
+          "description": "network offering id the network is created from",
+          "name": "networkofferingid",
           "type": "string"
-        }
-      ],
-      "response": [
-        {},
+        },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
+          "description": "state of the network",
+          "name": "state",
+          "type": "string"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
+          "description": "the second DNS for the network",
+          "name": "dns2",
           "type": "string"
         },
         {
-          "description": "true if operation is executed successfully",
-          "name": "success",
-          "type": "boolean"
+          "description": "ACL Id associated with the VPC network",
+          "name": "aclid",
+          "type": "string"
         },
         {
-          "description": "any text associated with the success or failure",
-          "name": "displaytext",
+          "description": "availability of the network offering the network is created from",
+          "name": "networkofferingavailability",
           "type": "string"
         },
-        {}
-      ],
-      "since": "4.16.0.0"
-    },
-    {
-      "description": "Updates firewall rule ",
-      "isasync": true,
-      "name": "updateFirewallRule",
-      "params": [
         {
-          "description": "the ID of the firewall rule",
-          "length": 255,
+          "description": "the id of the network",
           "name": "id",
-          "related": "createPortForwardingRule,listPortForwardingRules,updatePortForwardingRule,createIpForwardingRule,listIpForwardingRules",
-          "required": true,
-          "type": "uuid"
+          "type": "string"
         },
         {
-          "description": "an optional field, whether to the display the rule to the end user or not",
-          "length": 255,
-          "name": "fordisplay",
-          "required": false,
-          "since": "4.4",
-          "type": "boolean"
+          "description": "name of the network offering the network is created from",
+          "name": "networkofferingname",
+          "type": "string"
         },
         {
-          "description": "an optional field, in case you want to set a custom id to the resource. Allowed to Root Admins only",
-          "length": 255,
-          "name": "customid",
-          "required": false,
-          "since": "4.4",
+          "description": "related to what other network configuration",
+          "name": "related",
           "type": "string"
-        }
-      ],
-      "related": "createEgressFirewallRule,createFirewallRule,listEgressFirewallRules,listFirewallRules,updateEgressFirewallRule",
-      "response": [
-        {
-          "description": "the ending port of firewall rule's port range",
-          "name": "endport",
-          "type": "integer"
         },
-        {},
         {
-          "description": "the public ip address for the firewall rule",
-          "name": "ipaddress",
+          "description": "the name of the zone the network belongs to",
+          "name": "zonename",
           "type": "string"
         },
         {
-          "description": "the cidr list to forward traffic from. Multiple entries are separated by a single comma character (,).",
-          "name": "cidrlist",
+          "description": "zone id of the network",
+          "name": "zoneid",
           "type": "string"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
+          "description": "acl type - access type to the network",
+          "name": "acltype",
           "type": "string"
         },
         {
-          "description": "the network id of the firewall rule",
-          "name": "networkid",
+          "description": "the network's netmask",
+          "name": "netmask",
           "type": "string"
         },
         {
-          "description": "type of the icmp message being sent",
-          "name": "icmptype",
-          "type": "integer"
+          "description": "true if users from subdomains can access the domain level network",
+          "name": "subdomainaccess",
+          "type": "boolean"
         },
         {
-          "description": "the cidr list to forward traffic to. Multiple entries are separated by a single comma character (,).",
-          "name": "destcidrlist",
-          "type": "string"
+          "description": "If the network has redundant routers enabled",
+          "name": "redundantrouter",
+          "type": "boolean"
         },
         {
-          "description": "error code for this icmp message",
-          "name": "icmpcode",
+          "description": "list networks that are persistent",
+          "name": "ispersistent",
+          "type": "boolean"
+        },
+        {
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
           "type": "integer"
         },
-        {},
         {
-          "description": "the state of the rule",
-          "name": "state",
+          "description": "the cidr of IPv6 network",
+          "name": "ip6cidr",
           "type": "string"
         },
+        {},
         {
-          "description": "the protocol of the firewall rule",
-          "name": "protocol",
+          "description": "the owner of the network",
+          "name": "account",
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
+          "description": "the network CIDR of the guest network configured with IP reservation. It is the summation of CIDR and RESERVED_IP_RANGE",
+          "name": "networkcidr",
+          "type": "string"
         },
         {
... 158512 lines suppressed ...