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:23 UTC

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

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 ...