You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by pe...@apache.org on 2025/09/22 20:26:16 UTC

(cloudstack-go) 01/01: Update listApis with 4.21 APIs

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

pearl11594 pushed a commit to branch release-4.21
in repository https://gitbox.apache.org/repos/asf/cloudstack-go.git

commit ee4d301d22466b8ce252ffeb7b1ca7943f504864
Author: Pearl Dsilva <pe...@gmail.com>
AuthorDate: Mon Sep 22 16:26:01 2025 -0400

    Update listApis with 4.21 APIs
---
 cloudstack/AccountService.go                      |    120 +
 cloudstack/AddressService.go                      |     29 +
 cloudstack/AffinityGroupService.go                |     12 +
 cloudstack/AsyncjobService.go                     |     70 +-
 cloudstack/AuthenticationService.go               |     74 +-
 cloudstack/ClusterService.go                      |    287 +-
 cloudstack/ConfigurationService.go                |      5 +
 cloudstack/DomainService.go                       |     75 +
 cloudstack/EventService.go                        |     24 +
 cloudstack/GuestOSService.go                      |    183 +-
 cloudstack/HostService.go                         |    340 +
 cloudstack/ISOService.go                          |     85 +
 cloudstack/KubernetesService.go                   |    259 +
 cloudstack/LDAPService.go                         |     15 +
 cloudstack/ManagementService.go                   |     79 +-
 cloudstack/ManagementService_mock.go              |      8 +-
 cloudstack/NetworkOfferingService.go              |     24 +
 cloudstack/NetworkService.go                      |      2 +-
 cloudstack/NicService.go                          |     12 +
 cloudstack/ObjectStoreService.go                  |      5 +-
 cloudstack/ObjectStoreService_mock.go             |      8 +-
 cloudstack/PodService.go                          |    185 +-
 cloudstack/PoolService.go                         |     58 +
 cloudstack/ProjectService.go                      |     75 +
 cloudstack/QuotaService.go                        |     13 +-
 cloudstack/SSHService.go                          |     12 +
 cloudstack/ServiceOfferingService.go              |    264 +
 cloudstack/SnapshotService.go                     |    171 +
 cloudstack/StoragePoolService.go                  |    137 +-
 cloudstack/TemplateService.go                     |    294 +
 cloudstack/UserService.go                         |     26 +-
 cloudstack/VLANService.go                         |     55 +-
 cloudstack/VPCService.go                          |    162 +-
 cloudstack/VPCService_mock.go                     |      8 +-
 cloudstack/VPNService.go                          |     24 +
 cloudstack/VirtualMachineService.go               |    607 +-
 cloudstack/VirtualMachineService_mock.go          |      8 +-
 cloudstack/VirtualNetworkFunctionsService.go      |    490 +-
 cloudstack/VirtualNetworkFunctionsService_mock.go |      8 +-
 cloudstack/ZoneService.go                         |     89 +
 generate/generate.go                              |      8 +
 generate/listApis.json                            | 157709 ++++++++++---------
 test/ManagementService_test.go                    |      2 +-
 test/ObjectStoreService_test.go                   |      2 +-
 test/VPCService_test.go                           |      2 +-
 test/VirtualMachineService_test.go                |      2 +-
 test/VirtualNetworkFunctionsService_test.go       |      2 +-
 47 files changed, 89396 insertions(+), 72733 deletions(-)

diff --git a/cloudstack/AccountService.go b/cloudstack/AccountService.go
index 189aa3a..be33678 100644
--- a/cloudstack/AccountService.go
+++ b/cloudstack/AccountService.go
@@ -444,6 +444,15 @@ type CreateAccountResponse struct {
 	Accountdetails            map[string]string           `json:"accountdetails"`
 	Accounttype               int                         `json:"accounttype"`
 	Apikeyaccess              string                      `json:"apikeyaccess"`
+	Backupavailable           string                      `json:"backupavailable"`
+	Backuplimit               string                      `json:"backuplimit"`
+	Backupstorageavailable    string                      `json:"backupstorageavailable"`
+	Backupstoragelimit        string                      `json:"backupstoragelimit"`
+	Backupstoragetotal        int64                       `json:"backupstoragetotal"`
+	Backuptotal               int64                       `json:"backuptotal"`
+	Bucketavailable           string                      `json:"bucketavailable"`
+	Bucketlimit               string                      `json:"bucketlimit"`
+	Buckettotal               int64                       `json:"buckettotal"`
 	Cpuavailable              string                      `json:"cpuavailable"`
 	Cpulimit                  string                      `json:"cpulimit"`
 	Cputotal                  int64                       `json:"cputotal"`
@@ -452,6 +461,9 @@ type CreateAccountResponse struct {
 	Domain                    string                      `json:"domain"`
 	Domainid                  string                      `json:"domainid"`
 	Domainpath                string                      `json:"domainpath"`
+	Gpuavailable              string                      `json:"gpuavailable"`
+	Gpulimit                  string                      `json:"gpulimit"`
+	Gputotal                  int64                       `json:"gputotal"`
 	Groups                    []string                    `json:"groups"`
 	Icon                      interface{}                 `json:"icon"`
 	Id                        string                      `json:"id"`
@@ -470,6 +482,9 @@ type CreateAccountResponse struct {
 	Networkdomain             string                      `json:"networkdomain"`
 	Networklimit              string                      `json:"networklimit"`
 	Networktotal              int64                       `json:"networktotal"`
+	Objectstorageavailable    string                      `json:"objectstorageavailable"`
+	Objectstoragelimit        string                      `json:"objectstoragelimit"`
+	Objectstoragetotal        int64                       `json:"objectstoragetotal"`
 	Primarystorageavailable   string                      `json:"primarystorageavailable"`
 	Primarystoragelimit       string                      `json:"primarystoragelimit"`
 	Primarystoragetotal       int64                       `json:"primarystoragetotal"`
@@ -773,6 +788,15 @@ type DisableAccountResponse struct {
 	Accountdetails            map[string]string            `json:"accountdetails"`
 	Accounttype               int                          `json:"accounttype"`
 	Apikeyaccess              string                       `json:"apikeyaccess"`
+	Backupavailable           string                       `json:"backupavailable"`
+	Backuplimit               string                       `json:"backuplimit"`
+	Backupstorageavailable    string                       `json:"backupstorageavailable"`
+	Backupstoragelimit        string                       `json:"backupstoragelimit"`
+	Backupstoragetotal        int64                        `json:"backupstoragetotal"`
+	Backuptotal               int64                        `json:"backuptotal"`
+	Bucketavailable           string                       `json:"bucketavailable"`
+	Bucketlimit               string                       `json:"bucketlimit"`
+	Buckettotal               int64                        `json:"buckettotal"`
 	Cpuavailable              string                       `json:"cpuavailable"`
 	Cpulimit                  string                       `json:"cpulimit"`
 	Cputotal                  int64                        `json:"cputotal"`
@@ -781,6 +805,9 @@ type DisableAccountResponse struct {
 	Domain                    string                       `json:"domain"`
 	Domainid                  string                       `json:"domainid"`
 	Domainpath                string                       `json:"domainpath"`
+	Gpuavailable              string                       `json:"gpuavailable"`
+	Gpulimit                  string                       `json:"gpulimit"`
+	Gputotal                  int64                        `json:"gputotal"`
 	Groups                    []string                     `json:"groups"`
 	Icon                      interface{}                  `json:"icon"`
 	Id                        string                       `json:"id"`
@@ -799,6 +826,9 @@ type DisableAccountResponse struct {
 	Networkdomain             string                       `json:"networkdomain"`
 	Networklimit              string                       `json:"networklimit"`
 	Networktotal              int64                        `json:"networktotal"`
+	Objectstorageavailable    string                       `json:"objectstorageavailable"`
+	Objectstoragelimit        string                       `json:"objectstoragelimit"`
+	Objectstoragetotal        int64                        `json:"objectstoragetotal"`
 	Primarystorageavailable   string                       `json:"primarystorageavailable"`
 	Primarystoragelimit       string                       `json:"primarystoragelimit"`
 	Primarystoragetotal       int64                        `json:"primarystoragetotal"`
@@ -974,6 +1004,15 @@ type EnableAccountResponse struct {
 	Accountdetails            map[string]string           `json:"accountdetails"`
 	Accounttype               int                         `json:"accounttype"`
 	Apikeyaccess              string                      `json:"apikeyaccess"`
+	Backupavailable           string                      `json:"backupavailable"`
+	Backuplimit               string                      `json:"backuplimit"`
+	Backupstorageavailable    string                      `json:"backupstorageavailable"`
+	Backupstoragelimit        string                      `json:"backupstoragelimit"`
+	Backupstoragetotal        int64                       `json:"backupstoragetotal"`
+	Backuptotal               int64                       `json:"backuptotal"`
+	Bucketavailable           string                      `json:"bucketavailable"`
+	Bucketlimit               string                      `json:"bucketlimit"`
+	Buckettotal               int64                       `json:"buckettotal"`
 	Cpuavailable              string                      `json:"cpuavailable"`
 	Cpulimit                  string                      `json:"cpulimit"`
 	Cputotal                  int64                       `json:"cputotal"`
@@ -982,6 +1021,9 @@ type EnableAccountResponse struct {
 	Domain                    string                      `json:"domain"`
 	Domainid                  string                      `json:"domainid"`
 	Domainpath                string                      `json:"domainpath"`
+	Gpuavailable              string                      `json:"gpuavailable"`
+	Gpulimit                  string                      `json:"gpulimit"`
+	Gputotal                  int64                       `json:"gputotal"`
 	Groups                    []string                    `json:"groups"`
 	Icon                      interface{}                 `json:"icon"`
 	Id                        string                      `json:"id"`
@@ -1000,6 +1042,9 @@ type EnableAccountResponse struct {
 	Networkdomain             string                      `json:"networkdomain"`
 	Networklimit              string                      `json:"networklimit"`
 	Networktotal              int64                       `json:"networktotal"`
+	Objectstorageavailable    string                      `json:"objectstorageavailable"`
+	Objectstoragelimit        string                      `json:"objectstoragelimit"`
+	Objectstoragetotal        int64                       `json:"objectstoragetotal"`
 	Primarystorageavailable   string                      `json:"primarystorageavailable"`
 	Primarystoragelimit       string                      `json:"primarystoragelimit"`
 	Primarystoragetotal       int64                       `json:"primarystoragetotal"`
@@ -1843,6 +1888,15 @@ type Account struct {
 	Accountdetails            map[string]string `json:"accountdetails"`
 	Accounttype               int               `json:"accounttype"`
 	Apikeyaccess              string            `json:"apikeyaccess"`
+	Backupavailable           string            `json:"backupavailable"`
+	Backuplimit               string            `json:"backuplimit"`
+	Backupstorageavailable    string            `json:"backupstorageavailable"`
+	Backupstoragelimit        string            `json:"backupstoragelimit"`
+	Backupstoragetotal        int64             `json:"backupstoragetotal"`
+	Backuptotal               int64             `json:"backuptotal"`
+	Bucketavailable           string            `json:"bucketavailable"`
+	Bucketlimit               string            `json:"bucketlimit"`
+	Buckettotal               int64             `json:"buckettotal"`
 	Cpuavailable              string            `json:"cpuavailable"`
 	Cpulimit                  string            `json:"cpulimit"`
 	Cputotal                  int64             `json:"cputotal"`
@@ -1851,6 +1905,9 @@ type Account struct {
 	Domain                    string            `json:"domain"`
 	Domainid                  string            `json:"domainid"`
 	Domainpath                string            `json:"domainpath"`
+	Gpuavailable              string            `json:"gpuavailable"`
+	Gpulimit                  string            `json:"gpulimit"`
+	Gputotal                  int64             `json:"gputotal"`
 	Groups                    []string          `json:"groups"`
 	Icon                      interface{}       `json:"icon"`
 	Id                        string            `json:"id"`
@@ -1869,6 +1926,9 @@ type Account struct {
 	Networkdomain             string            `json:"networkdomain"`
 	Networklimit              string            `json:"networklimit"`
 	Networktotal              int64             `json:"networktotal"`
+	Objectstorageavailable    string            `json:"objectstorageavailable"`
+	Objectstoragelimit        string            `json:"objectstoragelimit"`
+	Objectstoragetotal        int64             `json:"objectstoragetotal"`
 	Primarystorageavailable   string            `json:"primarystorageavailable"`
 	Primarystoragelimit       string            `json:"primarystoragelimit"`
 	Primarystoragetotal       int64             `json:"primarystoragetotal"`
@@ -2206,6 +2266,15 @@ type ListProjectAccountsResponse struct {
 }
 
 type ProjectAccount struct {
+	Backupavailable           string              `json:"backupavailable"`
+	Backuplimit               string              `json:"backuplimit"`
+	Backupstorageavailable    string              `json:"backupstorageavailable"`
+	Backupstoragelimit        string              `json:"backupstoragelimit"`
+	Backupstoragetotal        int64               `json:"backupstoragetotal"`
+	Backuptotal               int64               `json:"backuptotal"`
+	Bucketavailable           string              `json:"bucketavailable"`
+	Bucketlimit               string              `json:"bucketlimit"`
+	Buckettotal               int64               `json:"buckettotal"`
 	Cpuavailable              string              `json:"cpuavailable"`
 	Cpulimit                  string              `json:"cpulimit"`
 	Cputotal                  int64               `json:"cputotal"`
@@ -2213,6 +2282,9 @@ type ProjectAccount struct {
 	Displaytext               string              `json:"displaytext"`
 	Domain                    string              `json:"domain"`
 	Domainid                  string              `json:"domainid"`
+	Gpuavailable              string              `json:"gpuavailable"`
+	Gpulimit                  string              `json:"gpulimit"`
+	Gputotal                  int64               `json:"gputotal"`
 	Icon                      interface{}         `json:"icon"`
 	Id                        string              `json:"id"`
 	Ipavailable               string              `json:"ipavailable"`
@@ -2227,6 +2299,9 @@ type ProjectAccount struct {
 	Networkavailable          string              `json:"networkavailable"`
 	Networklimit              string              `json:"networklimit"`
 	Networktotal              int64               `json:"networktotal"`
+	Objectstorageavailable    string              `json:"objectstorageavailable"`
+	Objectstoragelimit        string              `json:"objectstoragelimit"`
+	Objectstoragetotal        int64               `json:"objectstoragetotal"`
 	Owner                     []map[string]string `json:"owner"`
 	Primarystorageavailable   string              `json:"primarystorageavailable"`
 	Primarystoragelimit       string              `json:"primarystoragelimit"`
@@ -2360,6 +2435,15 @@ type LockAccountResponse struct {
 	Accountdetails            map[string]string         `json:"accountdetails"`
 	Accounttype               int                       `json:"accounttype"`
 	Apikeyaccess              string                    `json:"apikeyaccess"`
+	Backupavailable           string                    `json:"backupavailable"`
+	Backuplimit               string                    `json:"backuplimit"`
+	Backupstorageavailable    string                    `json:"backupstorageavailable"`
+	Backupstoragelimit        string                    `json:"backupstoragelimit"`
+	Backupstoragetotal        int64                     `json:"backupstoragetotal"`
+	Backuptotal               int64                     `json:"backuptotal"`
+	Bucketavailable           string                    `json:"bucketavailable"`
+	Bucketlimit               string                    `json:"bucketlimit"`
+	Buckettotal               int64                     `json:"buckettotal"`
 	Cpuavailable              string                    `json:"cpuavailable"`
 	Cpulimit                  string                    `json:"cpulimit"`
 	Cputotal                  int64                     `json:"cputotal"`
@@ -2368,6 +2452,9 @@ type LockAccountResponse struct {
 	Domain                    string                    `json:"domain"`
 	Domainid                  string                    `json:"domainid"`
 	Domainpath                string                    `json:"domainpath"`
+	Gpuavailable              string                    `json:"gpuavailable"`
+	Gpulimit                  string                    `json:"gpulimit"`
+	Gputotal                  int64                     `json:"gputotal"`
 	Groups                    []string                  `json:"groups"`
 	Icon                      interface{}               `json:"icon"`
 	Id                        string                    `json:"id"`
@@ -2386,6 +2473,9 @@ type LockAccountResponse struct {
 	Networkdomain             string                    `json:"networkdomain"`
 	Networklimit              string                    `json:"networklimit"`
 	Networktotal              int64                     `json:"networktotal"`
+	Objectstorageavailable    string                    `json:"objectstorageavailable"`
+	Objectstoragelimit        string                    `json:"objectstoragelimit"`
+	Objectstoragetotal        int64                     `json:"objectstoragetotal"`
 	Primarystorageavailable   string                    `json:"primarystorageavailable"`
 	Primarystoragelimit       string                    `json:"primarystoragelimit"`
 	Primarystoragetotal       int64                     `json:"primarystoragetotal"`
@@ -2584,6 +2674,15 @@ type MarkDefaultZoneForAccountResponse struct {
 	Accountdetails            map[string]string                       `json:"accountdetails"`
 	Accounttype               int                                     `json:"accounttype"`
 	Apikeyaccess              string                                  `json:"apikeyaccess"`
+	Backupavailable           string                                  `json:"backupavailable"`
+	Backuplimit               string                                  `json:"backuplimit"`
+	Backupstorageavailable    string                                  `json:"backupstorageavailable"`
+	Backupstoragelimit        string                                  `json:"backupstoragelimit"`
+	Backupstoragetotal        int64                                   `json:"backupstoragetotal"`
+	Backuptotal               int64                                   `json:"backuptotal"`
+	Bucketavailable           string                                  `json:"bucketavailable"`
+	Bucketlimit               string                                  `json:"bucketlimit"`
+	Buckettotal               int64                                   `json:"buckettotal"`
 	Cpuavailable              string                                  `json:"cpuavailable"`
 	Cpulimit                  string                                  `json:"cpulimit"`
 	Cputotal                  int64                                   `json:"cputotal"`
@@ -2592,6 +2691,9 @@ type MarkDefaultZoneForAccountResponse struct {
 	Domain                    string                                  `json:"domain"`
 	Domainid                  string                                  `json:"domainid"`
 	Domainpath                string                                  `json:"domainpath"`
+	Gpuavailable              string                                  `json:"gpuavailable"`
+	Gpulimit                  string                                  `json:"gpulimit"`
+	Gputotal                  int64                                   `json:"gputotal"`
 	Groups                    []string                                `json:"groups"`
 	Icon                      interface{}                             `json:"icon"`
 	Id                        string                                  `json:"id"`
@@ -2610,6 +2712,9 @@ type MarkDefaultZoneForAccountResponse struct {
 	Networkdomain             string                                  `json:"networkdomain"`
 	Networklimit              string                                  `json:"networklimit"`
 	Networktotal              int64                                   `json:"networktotal"`
+	Objectstorageavailable    string                                  `json:"objectstorageavailable"`
+	Objectstoragelimit        string                                  `json:"objectstoragelimit"`
+	Objectstoragetotal        int64                                   `json:"objectstoragetotal"`
 	Primarystorageavailable   string                                  `json:"primarystorageavailable"`
 	Primarystoragelimit       string                                  `json:"primarystoragelimit"`
 	Primarystoragetotal       int64                                   `json:"primarystoragetotal"`
@@ -2908,6 +3013,15 @@ type UpdateAccountResponse struct {
 	Accountdetails            map[string]string           `json:"accountdetails"`
 	Accounttype               int                         `json:"accounttype"`
 	Apikeyaccess              string                      `json:"apikeyaccess"`
+	Backupavailable           string                      `json:"backupavailable"`
+	Backuplimit               string                      `json:"backuplimit"`
+	Backupstorageavailable    string                      `json:"backupstorageavailable"`
+	Backupstoragelimit        string                      `json:"backupstoragelimit"`
+	Backupstoragetotal        int64                       `json:"backupstoragetotal"`
+	Backuptotal               int64                       `json:"backuptotal"`
+	Bucketavailable           string                      `json:"bucketavailable"`
+	Bucketlimit               string                      `json:"bucketlimit"`
+	Buckettotal               int64                       `json:"buckettotal"`
 	Cpuavailable              string                      `json:"cpuavailable"`
 	Cpulimit                  string                      `json:"cpulimit"`
 	Cputotal                  int64                       `json:"cputotal"`
@@ -2916,6 +3030,9 @@ type UpdateAccountResponse struct {
 	Domain                    string                      `json:"domain"`
 	Domainid                  string                      `json:"domainid"`
 	Domainpath                string                      `json:"domainpath"`
+	Gpuavailable              string                      `json:"gpuavailable"`
+	Gpulimit                  string                      `json:"gpulimit"`
+	Gputotal                  int64                       `json:"gputotal"`
 	Groups                    []string                    `json:"groups"`
 	Icon                      interface{}                 `json:"icon"`
 	Id                        string                      `json:"id"`
@@ -2934,6 +3051,9 @@ type UpdateAccountResponse struct {
 	Networkdomain             string                      `json:"networkdomain"`
 	Networklimit              string                      `json:"networklimit"`
 	Networktotal              int64                       `json:"networktotal"`
+	Objectstorageavailable    string                      `json:"objectstorageavailable"`
+	Objectstoragelimit        string                      `json:"objectstoragelimit"`
+	Objectstoragetotal        int64                       `json:"objectstoragetotal"`
 	Primarystorageavailable   string                      `json:"primarystorageavailable"`
 	Primarystoragelimit       string                      `json:"primarystoragelimit"`
 	Primarystoragetotal       int64                       `json:"primarystoragetotal"`
diff --git a/cloudstack/AddressService.go b/cloudstack/AddressService.go
index c17297b..98ce3aa 100644
--- a/cloudstack/AddressService.go
+++ b/cloudstack/AddressService.go
@@ -450,6 +450,7 @@ type AssociateIpAddressResponse struct {
 	Domainid                  string `json:"domainid"`
 	Domainpath                string `json:"domainpath"`
 	Fordisplay                bool   `json:"fordisplay"`
+	Forprovider               bool   `json:"forprovider"`
 	Forsystemvms              bool   `json:"forsystemvms"`
 	Forvirtualnetwork         bool   `json:"forvirtualnetwork"`
 	Hasannotations            bool   `json:"hasannotations"`
@@ -619,6 +620,10 @@ func (p *ListPublicIpAddressesParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("forloadbalancing", vv)
 	}
+	if v, found := p.p["forprovider"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("forprovider", vv)
+	}
 	if v, found := p.p["forsystemvms"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("forsystemvms", vv)
@@ -821,6 +826,27 @@ func (p *ListPublicIpAddressesParams) GetForloadbalancing() (bool, bool) {
 	return value, ok
 }
 
+func (p *ListPublicIpAddressesParams) SetForprovider(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["forprovider"] = v
+}
+
+func (p *ListPublicIpAddressesParams) ResetForprovider() {
+	if p.p != nil && p.p["forprovider"] != nil {
+		delete(p.p, "forprovider")
+	}
+}
+
+func (p *ListPublicIpAddressesParams) GetForprovider() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["forprovider"].(bool)
+	return value, ok
+}
+
 func (p *ListPublicIpAddressesParams) SetForsystemvms(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1311,6 +1337,7 @@ type PublicIpAddress struct {
 	Domainid                  string `json:"domainid"`
 	Domainpath                string `json:"domainpath"`
 	Fordisplay                bool   `json:"fordisplay"`
+	Forprovider               bool   `json:"forprovider"`
 	Forsystemvms              bool   `json:"forsystemvms"`
 	Forvirtualnetwork         bool   `json:"forvirtualnetwork"`
 	Hasannotations            bool   `json:"hasannotations"`
@@ -1482,6 +1509,7 @@ type UpdateIpAddressResponse struct {
 	Domainid                  string `json:"domainid"`
 	Domainpath                string `json:"domainpath"`
 	Fordisplay                bool   `json:"fordisplay"`
+	Forprovider               bool   `json:"forprovider"`
 	Forsystemvms              bool   `json:"forsystemvms"`
 	Forvirtualnetwork         bool   `json:"forvirtualnetwork"`
 	Hasannotations            bool   `json:"hasannotations"`
@@ -1870,6 +1898,7 @@ type ReserveIpAddressResponse struct {
 	Domainid                  string `json:"domainid"`
 	Domainpath                string `json:"domainpath"`
 	Fordisplay                bool   `json:"fordisplay"`
+	Forprovider               bool   `json:"forprovider"`
 	Forsystemvms              bool   `json:"forsystemvms"`
 	Forvirtualnetwork         bool   `json:"forvirtualnetwork"`
 	Hasannotations            bool   `json:"hasannotations"`
diff --git a/cloudstack/AffinityGroupService.go b/cloudstack/AffinityGroupService.go
index 04dcc7a..afd1767 100644
--- a/cloudstack/AffinityGroupService.go
+++ b/cloudstack/AffinityGroupService.go
@@ -1156,6 +1156,9 @@ type UpdateVMAffinityGroupResponse struct {
 	Domainid              string                                       `json:"domainid"`
 	Domainpath            string                                       `json:"domainpath"`
 	Forvirtualnetwork     bool                                         `json:"forvirtualnetwork"`
+	Gpucardid             string                                       `json:"gpucardid"`
+	Gpucardname           string                                       `json:"gpucardname"`
+	Gpucount              int                                          `json:"gpucount"`
 	Group                 string                                       `json:"group"`
 	Groupid               string                                       `json:"groupid"`
 	Guestosid             string                                       `json:"guestosid"`
@@ -1177,6 +1180,12 @@ type UpdateVMAffinityGroupResponse struct {
 	Jobstatus             int                                          `json:"jobstatus"`
 	Keypairs              string                                       `json:"keypairs"`
 	Lastupdated           string                                       `json:"lastupdated"`
+	Leaseduration         int                                          `json:"leaseduration"`
+	Leaseexpiryaction     string                                       `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                       `json:"leaseexpirydate"`
+	Maxheads              int64                                        `json:"maxheads"`
+	Maxresolutionx        int64                                        `json:"maxresolutionx"`
+	Maxresolutiony        int64                                        `json:"maxresolutiony"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
 	Memorykbs             int64                                        `json:"memorykbs"`
@@ -1218,6 +1227,9 @@ type UpdateVMAffinityGroupResponse struct {
 	Userid                string                                       `json:"userid"`
 	Username              string                                       `json:"username"`
 	Vgpu                  string                                       `json:"vgpu"`
+	Vgpuprofileid         string                                       `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                       `json:"vgpuprofilename"`
+	Videoram              int64                                        `json:"videoram"`
 	Vmtype                string                                       `json:"vmtype"`
 	Vnfdetails            map[string]string                            `json:"vnfdetails"`
 	Vnfnics               []string                                     `json:"vnfnics"`
diff --git a/cloudstack/AsyncjobService.go b/cloudstack/AsyncjobService.go
index 826b1e9..fe29bc4 100644
--- a/cloudstack/AsyncjobService.go
+++ b/cloudstack/AsyncjobService.go
@@ -294,23 +294,24 @@ type ListAsyncJobsResponse struct {
 }
 
 type AsyncJob struct {
-	Account            string          `json:"account"`
-	Accountid          string          `json:"accountid"`
-	Cmd                string          `json:"cmd"`
-	Completed          string          `json:"completed"`
-	Created            string          `json:"created"`
-	Domainid           string          `json:"domainid"`
-	Domainpath         string          `json:"domainpath"`
-	JobID              string          `json:"jobid"`
-	Jobinstanceid      string          `json:"jobinstanceid"`
-	Jobinstancetype    string          `json:"jobinstancetype"`
-	Jobprocstatus      int             `json:"jobprocstatus"`
-	Jobresult          json.RawMessage `json:"jobresult"`
-	Jobresultcode      int             `json:"jobresultcode"`
-	Jobresulttype      string          `json:"jobresulttype"`
-	Jobstatus          int             `json:"jobstatus"`
-	Managementserverid UUID            `json:"managementserverid"`
-	Userid             string          `json:"userid"`
+	Account              string          `json:"account"`
+	Accountid            string          `json:"accountid"`
+	Cmd                  string          `json:"cmd"`
+	Completed            string          `json:"completed"`
+	Created              string          `json:"created"`
+	Domainid             string          `json:"domainid"`
+	Domainpath           string          `json:"domainpath"`
+	JobID                string          `json:"jobid"`
+	Jobinstanceid        string          `json:"jobinstanceid"`
+	Jobinstancetype      string          `json:"jobinstancetype"`
+	Jobprocstatus        int             `json:"jobprocstatus"`
+	Jobresult            json.RawMessage `json:"jobresult"`
+	Jobresultcode        int             `json:"jobresultcode"`
+	Jobresulttype        string          `json:"jobresulttype"`
+	Jobstatus            int             `json:"jobstatus"`
+	Managementserverid   UUID            `json:"managementserverid"`
+	Managementservername string          `json:"managementservername"`
+	Userid               string          `json:"userid"`
 }
 
 type QueryAsyncJobResultParams struct {
@@ -384,21 +385,22 @@ func (s *AsyncjobService) QueryAsyncJobResult(p *QueryAsyncJobResultParams) (*Qu
 }
 
 type QueryAsyncJobResultResponse struct {
-	Account            string          `json:"account"`
-	Accountid          string          `json:"accountid"`
-	Cmd                string          `json:"cmd"`
-	Completed          string          `json:"completed"`
-	Created            string          `json:"created"`
-	Domainid           string          `json:"domainid"`
-	Domainpath         string          `json:"domainpath"`
-	JobID              string          `json:"jobid"`
-	Jobinstanceid      string          `json:"jobinstanceid"`
-	Jobinstancetype    string          `json:"jobinstancetype"`
-	Jobprocstatus      int             `json:"jobprocstatus"`
-	Jobresult          json.RawMessage `json:"jobresult"`
-	Jobresultcode      int             `json:"jobresultcode"`
-	Jobresulttype      string          `json:"jobresulttype"`
-	Jobstatus          int             `json:"jobstatus"`
-	Managementserverid UUID            `json:"managementserverid"`
-	Userid             string          `json:"userid"`
+	Account              string          `json:"account"`
+	Accountid            string          `json:"accountid"`
+	Cmd                  string          `json:"cmd"`
+	Completed            string          `json:"completed"`
+	Created              string          `json:"created"`
+	Domainid             string          `json:"domainid"`
+	Domainpath           string          `json:"domainpath"`
+	JobID                string          `json:"jobid"`
+	Jobinstanceid        string          `json:"jobinstanceid"`
+	Jobinstancetype      string          `json:"jobinstancetype"`
+	Jobprocstatus        int             `json:"jobprocstatus"`
+	Jobresult            json.RawMessage `json:"jobresult"`
+	Jobresultcode        int             `json:"jobresultcode"`
+	Jobresulttype        string          `json:"jobresulttype"`
+	Jobstatus            int             `json:"jobstatus"`
+	Managementserverid   UUID            `json:"managementserverid"`
+	Managementservername string          `json:"managementservername"`
+	Userid               string          `json:"userid"`
 }
diff --git a/cloudstack/AuthenticationService.go b/cloudstack/AuthenticationService.go
index be0d3a6..bf12f55 100644
--- a/cloudstack/AuthenticationService.go
+++ b/cloudstack/AuthenticationService.go
@@ -169,24 +169,25 @@ func (s *AuthenticationService) Login(p *LoginParams) (*LoginResponse, error) {
 }
 
 type LoginResponse struct {
-	Account        string `json:"account"`
-	Domainid       string `json:"domainid"`
-	Firstname      string `json:"firstname"`
-	Is2faenabled   string `json:"is2faenabled"`
-	Is2faverified  string `json:"is2faverified"`
-	Issuerfor2fa   string `json:"issuerfor2fa"`
-	JobID          string `json:"jobid"`
-	Jobstatus      int    `json:"jobstatus"`
-	Lastname       string `json:"lastname"`
-	Providerfor2fa string `json:"providerfor2fa"`
-	Registered     string `json:"registered"`
-	Sessionkey     string `json:"sessionkey"`
-	Timeout        int    `json:"timeout"`
-	Timezone       string `json:"timezone"`
-	Timezoneoffset string `json:"timezoneoffset"`
-	Type           string `json:"type"`
-	Userid         string `json:"userid"`
-	Username       string `json:"username"`
+	Account            string `json:"account"`
+	Domainid           string `json:"domainid"`
+	Firstname          string `json:"firstname"`
+	Is2faenabled       string `json:"is2faenabled"`
+	Is2faverified      string `json:"is2faverified"`
+	Issuerfor2fa       string `json:"issuerfor2fa"`
+	JobID              string `json:"jobid"`
+	Jobstatus          int    `json:"jobstatus"`
+	Lastname           string `json:"lastname"`
+	Managementserverid UUID   `json:"managementserverid"`
+	Providerfor2fa     string `json:"providerfor2fa"`
+	Registered         string `json:"registered"`
+	Sessionkey         string `json:"sessionkey"`
+	Timeout            int    `json:"timeout"`
+	Timezone           string `json:"timezone"`
+	Timezoneoffset     string `json:"timezoneoffset"`
+	Type               string `json:"type"`
+	Userid             string `json:"userid"`
+	Username           string `json:"username"`
 }
 
 type LogoutParams struct {
@@ -389,22 +390,23 @@ func (s *AuthenticationService) Oauthlogin(p *OauthloginParams) (*OauthloginResp
 }
 
 type OauthloginResponse struct {
-	Account        string `json:"account"`
-	Domainid       string `json:"domainid"`
-	Firstname      string `json:"firstname"`
-	Is2faenabled   string `json:"is2faenabled"`
-	Is2faverified  string `json:"is2faverified"`
-	Issuerfor2fa   string `json:"issuerfor2fa"`
-	JobID          string `json:"jobid"`
-	Jobstatus      int    `json:"jobstatus"`
-	Lastname       string `json:"lastname"`
-	Providerfor2fa string `json:"providerfor2fa"`
-	Registered     string `json:"registered"`
-	Sessionkey     string `json:"sessionkey"`
-	Timeout        int    `json:"timeout"`
-	Timezone       string `json:"timezone"`
-	Timezoneoffset string `json:"timezoneoffset"`
-	Type           string `json:"type"`
-	Userid         string `json:"userid"`
-	Username       string `json:"username"`
+	Account            string `json:"account"`
+	Domainid           string `json:"domainid"`
+	Firstname          string `json:"firstname"`
+	Is2faenabled       string `json:"is2faenabled"`
+	Is2faverified      string `json:"is2faverified"`
+	Issuerfor2fa       string `json:"issuerfor2fa"`
+	JobID              string `json:"jobid"`
+	Jobstatus          int    `json:"jobstatus"`
+	Lastname           string `json:"lastname"`
+	Managementserverid UUID   `json:"managementserverid"`
+	Providerfor2fa     string `json:"providerfor2fa"`
+	Registered         string `json:"registered"`
+	Sessionkey         string `json:"sessionkey"`
+	Timeout            int    `json:"timeout"`
+	Timezone           string `json:"timezone"`
+	Timezoneoffset     string `json:"timezoneoffset"`
+	Type               string `json:"type"`
+	Userid             string `json:"userid"`
+	Username           string `json:"username"`
 }
diff --git a/cloudstack/ClusterService.go b/cloudstack/ClusterService.go
index 4684382..1e10470 100644
--- a/cloudstack/ClusterService.go
+++ b/cloudstack/ClusterService.go
@@ -88,6 +88,16 @@ func (p *AddClusterParams) toURLValues() url.Values {
 	if v, found := p.p["clustertype"]; found {
 		u.Set("clustertype", v.(string))
 	}
+	if v, found := p.p["extensionid"]; found {
+		u.Set("extensionid", v.(string))
+	}
+	if v, found := p.p["externaldetails"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("externaldetails[%d].key", i), k)
+			u.Set(fmt.Sprintf("externaldetails[%d].value", i), m[k])
+		}
+	}
 	if v, found := p.p["guestvswitchname"]; found {
 		u.Set("guestvswitchname", v.(string))
 	}
@@ -118,6 +128,10 @@ func (p *AddClusterParams) toURLValues() url.Values {
 	if v, found := p.p["publicvswitchtype"]; found {
 		u.Set("publicvswitchtype", v.(string))
 	}
+	if v, found := p.p["storageaccessgroups"]; found {
+		vv := strings.Join(v.([]string), ",")
+		u.Set("storageaccessgroups", vv)
+	}
 	if v, found := p.p["url"]; found {
 		u.Set("url", v.(string))
 	}
@@ -223,6 +237,48 @@ func (p *AddClusterParams) GetClustertype() (string, bool) {
 	return value, ok
 }
 
+func (p *AddClusterParams) SetExtensionid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["extensionid"] = v
+}
+
+func (p *AddClusterParams) ResetExtensionid() {
+	if p.p != nil && p.p["extensionid"] != nil {
+		delete(p.p, "extensionid")
+	}
+}
+
+func (p *AddClusterParams) GetExtensionid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["extensionid"].(string)
+	return value, ok
+}
+
+func (p *AddClusterParams) SetExternaldetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["externaldetails"] = v
+}
+
+func (p *AddClusterParams) ResetExternaldetails() {
+	if p.p != nil && p.p["externaldetails"] != nil {
+		delete(p.p, "externaldetails")
+	}
+}
+
+func (p *AddClusterParams) GetExternaldetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["externaldetails"].(map[string]string)
+	return value, ok
+}
+
 func (p *AddClusterParams) SetGuestvswitchname(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -433,6 +489,27 @@ func (p *AddClusterParams) GetPublicvswitchtype() (string, bool) {
 	return value, ok
 }
 
+func (p *AddClusterParams) SetStorageaccessgroups(v []string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroups"] = v
+}
+
+func (p *AddClusterParams) ResetStorageaccessgroups() {
+	if p.p != nil && p.p["storageaccessgroups"] != nil {
+		delete(p.p, "storageaccessgroups")
+	}
+}
+
+func (p *AddClusterParams) GetStorageaccessgroups() ([]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroups"].([]string)
+	return value, ok
+}
+
 func (p *AddClusterParams) SetUrl(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -592,25 +669,30 @@ func (s *ClusterService) AddCluster(p *AddClusterParams) (*AddClusterResponse, e
 }
 
 type AddClusterResponse struct {
-	Allocationstate       string                       `json:"allocationstate"`
-	Arch                  string                       `json:"arch"`
-	Capacity              []AddClusterResponseCapacity `json:"capacity"`
-	Clustertype           string                       `json:"clustertype"`
-	Cpuovercommitratio    string                       `json:"cpuovercommitratio"`
-	Hasannotations        bool                         `json:"hasannotations"`
-	Hypervisortype        string                       `json:"hypervisortype"`
-	Id                    string                       `json:"id"`
-	JobID                 string                       `json:"jobid"`
-	Jobstatus             int                          `json:"jobstatus"`
-	Managedstate          string                       `json:"managedstate"`
-	Memoryovercommitratio string                       `json:"memoryovercommitratio"`
-	Name                  string                       `json:"name"`
-	Ovm3vip               string                       `json:"ovm3vip"`
-	Podid                 string                       `json:"podid"`
-	Podname               string                       `json:"podname"`
-	Resourcedetails       map[string]string            `json:"resourcedetails"`
-	Zoneid                string                       `json:"zoneid"`
-	Zonename              string                       `json:"zonename"`
+	Allocationstate         string                       `json:"allocationstate"`
+	Arch                    string                       `json:"arch"`
+	Capacity                []AddClusterResponseCapacity `json:"capacity"`
+	Clustertype             string                       `json:"clustertype"`
+	Cpuovercommitratio      string                       `json:"cpuovercommitratio"`
+	Extensionid             string                       `json:"extensionid"`
+	Extensionname           string                       `json:"extensionname"`
+	Hasannotations          bool                         `json:"hasannotations"`
+	Hypervisortype          string                       `json:"hypervisortype"`
+	Id                      string                       `json:"id"`
+	JobID                   string                       `json:"jobid"`
+	Jobstatus               int                          `json:"jobstatus"`
+	Managedstate            string                       `json:"managedstate"`
+	Memoryovercommitratio   string                       `json:"memoryovercommitratio"`
+	Name                    string                       `json:"name"`
+	Ovm3vip                 string                       `json:"ovm3vip"`
+	Podid                   string                       `json:"podid"`
+	Podname                 string                       `json:"podname"`
+	Podstorageaccessgroups  string                       `json:"podstorageaccessgroups"`
+	Resourcedetails         map[string]string            `json:"resourcedetails"`
+	Storageaccessgroups     string                       `json:"storageaccessgroups"`
+	Zoneid                  string                       `json:"zoneid"`
+	Zonename                string                       `json:"zonename"`
+	Zonestorageaccessgroups string                       `json:"zonestorageaccessgroups"`
 }
 
 type AddClusterResponseCapacity struct {
@@ -1482,6 +1564,9 @@ func (p *ListClustersParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("showcapacities", vv)
 	}
+	if v, found := p.p["storageaccessgroup"]; found {
+		u.Set("storageaccessgroup", v.(string))
+	}
 	if v, found := p.p["zoneid"]; found {
 		u.Set("zoneid", v.(string))
 	}
@@ -1740,6 +1825,27 @@ func (p *ListClustersParams) GetShowcapacities() (bool, bool) {
 	return value, ok
 }
 
+func (p *ListClustersParams) SetStorageaccessgroup(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroup"] = v
+}
+
+func (p *ListClustersParams) ResetStorageaccessgroup() {
+	if p.p != nil && p.p["storageaccessgroup"] != nil {
+		delete(p.p, "storageaccessgroup")
+	}
+}
+
+func (p *ListClustersParams) GetStorageaccessgroup() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroup"].(string)
+	return value, ok
+}
+
 func (p *ListClustersParams) SetZoneid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1873,25 +1979,30 @@ type ListClustersResponse struct {
 }
 
 type Cluster struct {
-	Allocationstate       string            `json:"allocationstate"`
-	Arch                  string            `json:"arch"`
-	Capacity              []ClusterCapacity `json:"capacity"`
-	Clustertype           string            `json:"clustertype"`
-	Cpuovercommitratio    string            `json:"cpuovercommitratio"`
-	Hasannotations        bool              `json:"hasannotations"`
-	Hypervisortype        string            `json:"hypervisortype"`
-	Id                    string            `json:"id"`
-	JobID                 string            `json:"jobid"`
-	Jobstatus             int               `json:"jobstatus"`
-	Managedstate          string            `json:"managedstate"`
-	Memoryovercommitratio string            `json:"memoryovercommitratio"`
-	Name                  string            `json:"name"`
-	Ovm3vip               string            `json:"ovm3vip"`
-	Podid                 string            `json:"podid"`
-	Podname               string            `json:"podname"`
-	Resourcedetails       map[string]string `json:"resourcedetails"`
-	Zoneid                string            `json:"zoneid"`
-	Zonename              string            `json:"zonename"`
+	Allocationstate         string            `json:"allocationstate"`
+	Arch                    string            `json:"arch"`
+	Capacity                []ClusterCapacity `json:"capacity"`
+	Clustertype             string            `json:"clustertype"`
+	Cpuovercommitratio      string            `json:"cpuovercommitratio"`
+	Extensionid             string            `json:"extensionid"`
+	Extensionname           string            `json:"extensionname"`
+	Hasannotations          bool              `json:"hasannotations"`
+	Hypervisortype          string            `json:"hypervisortype"`
+	Id                      string            `json:"id"`
+	JobID                   string            `json:"jobid"`
+	Jobstatus               int               `json:"jobstatus"`
+	Managedstate            string            `json:"managedstate"`
+	Memoryovercommitratio   string            `json:"memoryovercommitratio"`
+	Name                    string            `json:"name"`
+	Ovm3vip                 string            `json:"ovm3vip"`
+	Podid                   string            `json:"podid"`
+	Podname                 string            `json:"podname"`
+	Podstorageaccessgroups  string            `json:"podstorageaccessgroups"`
+	Resourcedetails         map[string]string `json:"resourcedetails"`
+	Storageaccessgroups     string            `json:"storageaccessgroups"`
+	Zoneid                  string            `json:"zoneid"`
+	Zonename                string            `json:"zonename"`
+	Zonestorageaccessgroups string            `json:"zonestorageaccessgroups"`
 }
 
 type ClusterCapacity struct {
@@ -2164,6 +2275,9 @@ func (p *ListClustersMetricsParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("showcapacities", vv)
 	}
+	if v, found := p.p["storageaccessgroup"]; found {
+		u.Set("storageaccessgroup", v.(string))
+	}
 	if v, found := p.p["zoneid"]; found {
 		u.Set("zoneid", v.(string))
 	}
@@ -2422,6 +2536,27 @@ func (p *ListClustersMetricsParams) GetShowcapacities() (bool, bool) {
 	return value, ok
 }
 
+func (p *ListClustersMetricsParams) SetStorageaccessgroup(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroup"] = v
+}
+
+func (p *ListClustersMetricsParams) ResetStorageaccessgroup() {
+	if p.p != nil && p.p["storageaccessgroup"] != nil {
+		delete(p.p, "storageaccessgroup")
+	}
+}
+
+func (p *ListClustersMetricsParams) GetStorageaccessgroup() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroup"].(string)
+	return value, ok
+}
+
 func (p *ListClustersMetricsParams) SetZoneid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2569,6 +2704,8 @@ type ClustersMetric struct {
 	Cputotal                        string                   `json:"cputotal"`
 	Cpuused                         string                   `json:"cpuused"`
 	Drsimbalance                    string                   `json:"drsimbalance"`
+	Extensionid                     string                   `json:"extensionid"`
+	Extensionname                   string                   `json:"extensionname"`
 	Hasannotations                  bool                     `json:"hasannotations"`
 	Hosts                           string                   `json:"hosts"`
 	Hypervisortype                  string                   `json:"hypervisortype"`
@@ -2589,10 +2726,13 @@ type ClustersMetric struct {
 	Ovm3vip                         string                   `json:"ovm3vip"`
 	Podid                           string                   `json:"podid"`
 	Podname                         string                   `json:"podname"`
+	Podstorageaccessgroups          string                   `json:"podstorageaccessgroups"`
 	Resourcedetails                 map[string]string        `json:"resourcedetails"`
 	State                           string                   `json:"state"`
+	Storageaccessgroups             string                   `json:"storageaccessgroups"`
 	Zoneid                          string                   `json:"zoneid"`
 	Zonename                        string                   `json:"zonename"`
+	Zonestorageaccessgroups         string                   `json:"zonestorageaccessgroups"`
 }
 
 type ClustersMetricCapacity struct {
@@ -2935,6 +3075,13 @@ func (p *UpdateClusterParams) toURLValues() url.Values {
 	if v, found := p.p["clustertype"]; found {
 		u.Set("clustertype", v.(string))
 	}
+	if v, found := p.p["externaldetails"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("externaldetails[%d].key", i), k)
+			u.Set(fmt.Sprintf("externaldetails[%d].value", i), m[k])
+		}
+	}
 	if v, found := p.p["hypervisor"]; found {
 		u.Set("hypervisor", v.(string))
 	}
@@ -3031,6 +3178,27 @@ func (p *UpdateClusterParams) GetClustertype() (string, bool) {
 	return value, ok
 }
 
+func (p *UpdateClusterParams) SetExternaldetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["externaldetails"] = v
+}
+
+func (p *UpdateClusterParams) ResetExternaldetails() {
+	if p.p != nil && p.p["externaldetails"] != nil {
+		delete(p.p, "externaldetails")
+	}
+}
+
+func (p *UpdateClusterParams) GetExternaldetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["externaldetails"].(map[string]string)
+	return value, ok
+}
+
 func (p *UpdateClusterParams) SetHypervisor(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3123,25 +3291,30 @@ func (s *ClusterService) UpdateCluster(p *UpdateClusterParams) (*UpdateClusterRe
 }
 
 type UpdateClusterResponse struct {
-	Allocationstate       string                          `json:"allocationstate"`
-	Arch                  string                          `json:"arch"`
-	Capacity              []UpdateClusterResponseCapacity `json:"capacity"`
-	Clustertype           string                          `json:"clustertype"`
-	Cpuovercommitratio    string                          `json:"cpuovercommitratio"`
-	Hasannotations        bool                            `json:"hasannotations"`
-	Hypervisortype        string                          `json:"hypervisortype"`
-	Id                    string                          `json:"id"`
-	JobID                 string                          `json:"jobid"`
-	Jobstatus             int                             `json:"jobstatus"`
-	Managedstate          string                          `json:"managedstate"`
-	Memoryovercommitratio string                          `json:"memoryovercommitratio"`
-	Name                  string                          `json:"name"`
-	Ovm3vip               string                          `json:"ovm3vip"`
-	Podid                 string                          `json:"podid"`
-	Podname               string                          `json:"podname"`
-	Resourcedetails       map[string]string               `json:"resourcedetails"`
-	Zoneid                string                          `json:"zoneid"`
-	Zonename              string                          `json:"zonename"`
+	Allocationstate         string                          `json:"allocationstate"`
+	Arch                    string                          `json:"arch"`
+	Capacity                []UpdateClusterResponseCapacity `json:"capacity"`
+	Clustertype             string                          `json:"clustertype"`
+	Cpuovercommitratio      string                          `json:"cpuovercommitratio"`
+	Extensionid             string                          `json:"extensionid"`
+	Extensionname           string                          `json:"extensionname"`
+	Hasannotations          bool                            `json:"hasannotations"`
+	Hypervisortype          string                          `json:"hypervisortype"`
+	Id                      string                          `json:"id"`
+	JobID                   string                          `json:"jobid"`
+	Jobstatus               int                             `json:"jobstatus"`
+	Managedstate            string                          `json:"managedstate"`
+	Memoryovercommitratio   string                          `json:"memoryovercommitratio"`
+	Name                    string                          `json:"name"`
+	Ovm3vip                 string                          `json:"ovm3vip"`
+	Podid                   string                          `json:"podid"`
+	Podname                 string                          `json:"podname"`
+	Podstorageaccessgroups  string                          `json:"podstorageaccessgroups"`
+	Resourcedetails         map[string]string               `json:"resourcedetails"`
+	Storageaccessgroups     string                          `json:"storageaccessgroups"`
+	Zoneid                  string                          `json:"zoneid"`
+	Zonename                string                          `json:"zonename"`
+	Zonestorageaccessgroups string                          `json:"zonestorageaccessgroups"`
 }
 
 type UpdateClusterResponseCapacity struct {
diff --git a/cloudstack/ConfigurationService.go b/cloudstack/ConfigurationService.go
index 1978a45..e5275c0 100644
--- a/cloudstack/ConfigurationService.go
+++ b/cloudstack/ConfigurationService.go
@@ -96,6 +96,9 @@ type Capability struct {
 	Customhypervisordisplayname                  string `json:"customhypervisordisplayname"`
 	Defaultuipagesize                            int64  `json:"defaultuipagesize"`
 	Dynamicrolesenabled                          bool   `json:"dynamicrolesenabled"`
+	Dynamicscalingenabled                        bool   `json:"dynamicscalingenabled"`
+	Extensionspath                               string `json:"extensionspath"`
+	Instanceleaseenabled                         bool   `json:"instanceleaseenabled"`
 	Instancesdisksstatsretentionenabled          bool   `json:"instancesdisksstatsretentionenabled"`
 	Instancesdisksstatsretentiontime             int    `json:"instancesdisksstatsretentiontime"`
 	Instancesstatsretentiontime                  int    `json:"instancesstatsretentiontime"`
@@ -1326,6 +1329,7 @@ type UpdateStorageCapabilitiesResponse struct {
 	Clusterid            string            `json:"clusterid"`
 	Clustername          string            `json:"clustername"`
 	Created              string            `json:"created"`
+	Details              map[string]string `json:"details"`
 	Disksizeallocated    int64             `json:"disksizeallocated"`
 	Disksizetotal        int64             `json:"disksizetotal"`
 	Disksizeused         int64             `json:"disksizeused"`
@@ -1346,6 +1350,7 @@ type UpdateStorageCapabilitiesResponse struct {
 	Provider             string            `json:"provider"`
 	Scope                string            `json:"scope"`
 	State                string            `json:"state"`
+	Storageaccessgroups  string            `json:"storageaccessgroups"`
 	Storagecapabilities  map[string]string `json:"storagecapabilities"`
 	Storagecustomstats   map[string]string `json:"storagecustomstats"`
 	Suitableformigration bool              `json:"suitableformigration"`
diff --git a/cloudstack/DomainService.go b/cloudstack/DomainService.go
index 1433118..473a219 100644
--- a/cloudstack/DomainService.go
+++ b/cloudstack/DomainService.go
@@ -185,11 +185,23 @@ func (s *DomainService) CreateDomain(p *CreateDomainParams) (*CreateDomainRespon
 }
 
 type CreateDomainResponse struct {
+	Backupavailable           string            `json:"backupavailable"`
+	Backuplimit               string            `json:"backuplimit"`
+	Backupstorageavailable    string            `json:"backupstorageavailable"`
+	Backupstoragelimit        string            `json:"backupstoragelimit"`
+	Backupstoragetotal        int64             `json:"backupstoragetotal"`
+	Backuptotal               int64             `json:"backuptotal"`
+	Bucketavailable           string            `json:"bucketavailable"`
+	Bucketlimit               string            `json:"bucketlimit"`
+	Buckettotal               int64             `json:"buckettotal"`
 	Cpuavailable              string            `json:"cpuavailable"`
 	Cpulimit                  string            `json:"cpulimit"`
 	Cputotal                  int64             `json:"cputotal"`
 	Created                   string            `json:"created"`
 	Domaindetails             map[string]string `json:"domaindetails"`
+	Gpuavailable              string            `json:"gpuavailable"`
+	Gpulimit                  string            `json:"gpulimit"`
+	Gputotal                  int64             `json:"gputotal"`
 	Hasannotations            bool              `json:"hasannotations"`
 	Haschild                  bool              `json:"haschild"`
 	Icon                      interface{}       `json:"icon"`
@@ -208,6 +220,9 @@ type CreateDomainResponse struct {
 	Networkdomain             string            `json:"networkdomain"`
 	Networklimit              string            `json:"networklimit"`
 	Networktotal              int64             `json:"networktotal"`
+	Objectstorageavailable    string            `json:"objectstorageavailable"`
+	Objectstoragelimit        string            `json:"objectstoragelimit"`
+	Objectstoragetotal        int64             `json:"objectstoragetotal"`
 	Parentdomainid            string            `json:"parentdomainid"`
 	Parentdomainname          string            `json:"parentdomainname"`
 	Path                      string            `json:"path"`
@@ -667,11 +682,23 @@ type ListDomainChildrenResponse struct {
 }
 
 type DomainChildren struct {
+	Backupavailable           string            `json:"backupavailable"`
+	Backuplimit               string            `json:"backuplimit"`
+	Backupstorageavailable    string            `json:"backupstorageavailable"`
+	Backupstoragelimit        string            `json:"backupstoragelimit"`
+	Backupstoragetotal        int64             `json:"backupstoragetotal"`
+	Backuptotal               int64             `json:"backuptotal"`
+	Bucketavailable           string            `json:"bucketavailable"`
+	Bucketlimit               string            `json:"bucketlimit"`
+	Buckettotal               int64             `json:"buckettotal"`
 	Cpuavailable              string            `json:"cpuavailable"`
 	Cpulimit                  string            `json:"cpulimit"`
 	Cputotal                  int64             `json:"cputotal"`
 	Created                   string            `json:"created"`
 	Domaindetails             map[string]string `json:"domaindetails"`
+	Gpuavailable              string            `json:"gpuavailable"`
+	Gpulimit                  string            `json:"gpulimit"`
+	Gputotal                  int64             `json:"gputotal"`
 	Hasannotations            bool              `json:"hasannotations"`
 	Haschild                  bool              `json:"haschild"`
 	Icon                      interface{}       `json:"icon"`
@@ -690,6 +717,9 @@ type DomainChildren struct {
 	Networkdomain             string            `json:"networkdomain"`
 	Networklimit              string            `json:"networklimit"`
 	Networktotal              int64             `json:"networktotal"`
+	Objectstorageavailable    string            `json:"objectstorageavailable"`
+	Objectstoragelimit        string            `json:"objectstoragelimit"`
+	Objectstoragetotal        int64             `json:"objectstoragetotal"`
 	Parentdomainid            string            `json:"parentdomainid"`
 	Parentdomainname          string            `json:"parentdomainname"`
 	Path                      string            `json:"path"`
@@ -1091,11 +1121,23 @@ type ListDomainsResponse struct {
 }
 
 type Domain struct {
+	Backupavailable           string            `json:"backupavailable"`
+	Backuplimit               string            `json:"backuplimit"`
+	Backupstorageavailable    string            `json:"backupstorageavailable"`
+	Backupstoragelimit        string            `json:"backupstoragelimit"`
+	Backupstoragetotal        int64             `json:"backupstoragetotal"`
+	Backuptotal               int64             `json:"backuptotal"`
+	Bucketavailable           string            `json:"bucketavailable"`
+	Bucketlimit               string            `json:"bucketlimit"`
+	Buckettotal               int64             `json:"buckettotal"`
 	Cpuavailable              string            `json:"cpuavailable"`
 	Cpulimit                  string            `json:"cpulimit"`
 	Cputotal                  int64             `json:"cputotal"`
 	Created                   string            `json:"created"`
 	Domaindetails             map[string]string `json:"domaindetails"`
+	Gpuavailable              string            `json:"gpuavailable"`
+	Gpulimit                  string            `json:"gpulimit"`
+	Gputotal                  int64             `json:"gputotal"`
 	Hasannotations            bool              `json:"hasannotations"`
 	Haschild                  bool              `json:"haschild"`
 	Icon                      interface{}       `json:"icon"`
@@ -1114,6 +1156,9 @@ type Domain struct {
 	Networkdomain             string            `json:"networkdomain"`
 	Networklimit              string            `json:"networklimit"`
 	Networktotal              int64             `json:"networktotal"`
+	Objectstorageavailable    string            `json:"objectstorageavailable"`
+	Objectstoragelimit        string            `json:"objectstoragelimit"`
+	Objectstoragetotal        int64             `json:"objectstoragetotal"`
 	Parentdomainid            string            `json:"parentdomainid"`
 	Parentdomainname          string            `json:"parentdomainname"`
 	Path                      string            `json:"path"`
@@ -1231,11 +1276,23 @@ func (s *DomainService) MoveDomain(p *MoveDomainParams) (*MoveDomainResponse, er
 }
 
 type MoveDomainResponse struct {
+	Backupavailable           string            `json:"backupavailable"`
+	Backuplimit               string            `json:"backuplimit"`
+	Backupstorageavailable    string            `json:"backupstorageavailable"`
+	Backupstoragelimit        string            `json:"backupstoragelimit"`
+	Backupstoragetotal        int64             `json:"backupstoragetotal"`
+	Backuptotal               int64             `json:"backuptotal"`
+	Bucketavailable           string            `json:"bucketavailable"`
+	Bucketlimit               string            `json:"bucketlimit"`
+	Buckettotal               int64             `json:"buckettotal"`
 	Cpuavailable              string            `json:"cpuavailable"`
 	Cpulimit                  string            `json:"cpulimit"`
 	Cputotal                  int64             `json:"cputotal"`
 	Created                   string            `json:"created"`
 	Domaindetails             map[string]string `json:"domaindetails"`
+	Gpuavailable              string            `json:"gpuavailable"`
+	Gpulimit                  string            `json:"gpulimit"`
+	Gputotal                  int64             `json:"gputotal"`
 	Hasannotations            bool              `json:"hasannotations"`
 	Haschild                  bool              `json:"haschild"`
 	Icon                      interface{}       `json:"icon"`
@@ -1254,6 +1311,9 @@ type MoveDomainResponse struct {
 	Networkdomain             string            `json:"networkdomain"`
 	Networklimit              string            `json:"networklimit"`
 	Networktotal              int64             `json:"networktotal"`
+	Objectstorageavailable    string            `json:"objectstorageavailable"`
+	Objectstoragelimit        string            `json:"objectstoragelimit"`
+	Objectstoragetotal        int64             `json:"objectstoragetotal"`
 	Parentdomainid            string            `json:"parentdomainid"`
 	Parentdomainname          string            `json:"parentdomainname"`
 	Path                      string            `json:"path"`
@@ -1398,11 +1458,23 @@ func (s *DomainService) UpdateDomain(p *UpdateDomainParams) (*UpdateDomainRespon
 }
 
 type UpdateDomainResponse struct {
+	Backupavailable           string            `json:"backupavailable"`
+	Backuplimit               string            `json:"backuplimit"`
+	Backupstorageavailable    string            `json:"backupstorageavailable"`
+	Backupstoragelimit        string            `json:"backupstoragelimit"`
+	Backupstoragetotal        int64             `json:"backupstoragetotal"`
+	Backuptotal               int64             `json:"backuptotal"`
+	Bucketavailable           string            `json:"bucketavailable"`
+	Bucketlimit               string            `json:"bucketlimit"`
+	Buckettotal               int64             `json:"buckettotal"`
 	Cpuavailable              string            `json:"cpuavailable"`
 	Cpulimit                  string            `json:"cpulimit"`
 	Cputotal                  int64             `json:"cputotal"`
 	Created                   string            `json:"created"`
 	Domaindetails             map[string]string `json:"domaindetails"`
+	Gpuavailable              string            `json:"gpuavailable"`
+	Gpulimit                  string            `json:"gpulimit"`
+	Gputotal                  int64             `json:"gputotal"`
 	Hasannotations            bool              `json:"hasannotations"`
 	Haschild                  bool              `json:"haschild"`
 	Icon                      interface{}       `json:"icon"`
@@ -1421,6 +1493,9 @@ type UpdateDomainResponse struct {
 	Networkdomain             string            `json:"networkdomain"`
 	Networklimit              string            `json:"networklimit"`
 	Networktotal              int64             `json:"networktotal"`
+	Objectstorageavailable    string            `json:"objectstorageavailable"`
+	Objectstoragelimit        string            `json:"objectstoragelimit"`
+	Objectstoragetotal        int64             `json:"objectstoragetotal"`
 	Parentdomainid            string            `json:"parentdomainid"`
 	Parentdomainname          string            `json:"parentdomainname"`
 	Path                      string            `json:"path"`
diff --git a/cloudstack/EventService.go b/cloudstack/EventService.go
index 288edea..bdf8365 100644
--- a/cloudstack/EventService.go
+++ b/cloudstack/EventService.go
@@ -487,6 +487,9 @@ func (p *ListEventsParams) toURLValues() url.Values {
 	if v, found := p.p["startid"]; found {
 		u.Set("startid", v.(string))
 	}
+	if v, found := p.p["state"]; found {
+		u.Set("state", v.(string))
+	}
 	if v, found := p.p["type"]; found {
 		u.Set("type", v.(string))
 	}
@@ -871,6 +874,27 @@ func (p *ListEventsParams) GetStartid() (string, bool) {
 	return value, ok
 }
 
+func (p *ListEventsParams) SetState(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["state"] = v
+}
+
+func (p *ListEventsParams) ResetState() {
+	if p.p != nil && p.p["state"] != nil {
+		delete(p.p, "state")
+	}
+}
+
+func (p *ListEventsParams) GetState() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["state"].(string)
+	return value, ok
+}
+
 func (p *ListEventsParams) SetType(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
diff --git a/cloudstack/GuestOSService.go b/cloudstack/GuestOSService.go
index a39a576..f7dd0c0 100644
--- a/cloudstack/GuestOSService.go
+++ b/cloudstack/GuestOSService.go
@@ -857,9 +857,24 @@ func (p *ListOsCategoriesParams) toURLValues() url.Values {
 	if p.p == nil {
 		return u
 	}
+	if v, found := p.p["arch"]; found {
+		u.Set("arch", v.(string))
+	}
 	if v, found := p.p["id"]; found {
 		u.Set("id", v.(string))
 	}
+	if v, found := p.p["isfeatured"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("isfeatured", vv)
+	}
+	if v, found := p.p["isiso"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("isiso", vv)
+	}
+	if v, found := p.p["isvnf"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("isvnf", vv)
+	}
 	if v, found := p.p["keyword"]; found {
 		u.Set("keyword", v.(string))
 	}
@@ -874,9 +889,37 @@ func (p *ListOsCategoriesParams) toURLValues() url.Values {
 		vv := strconv.Itoa(v.(int))
 		u.Set("pagesize", vv)
 	}
+	if v, found := p.p["showicon"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("showicon", vv)
+	}
+	if v, found := p.p["zoneid"]; found {
+		u.Set("zoneid", v.(string))
+	}
 	return u
 }
 
+func (p *ListOsCategoriesParams) SetArch(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["arch"] = v
+}
+
+func (p *ListOsCategoriesParams) ResetArch() {
+	if p.p != nil && p.p["arch"] != nil {
+		delete(p.p, "arch")
+	}
+}
+
+func (p *ListOsCategoriesParams) GetArch() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["arch"].(string)
+	return value, ok
+}
+
 func (p *ListOsCategoriesParams) SetId(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -898,6 +941,69 @@ func (p *ListOsCategoriesParams) GetId() (string, bool) {
 	return value, ok
 }
 
+func (p *ListOsCategoriesParams) SetIsfeatured(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["isfeatured"] = v
+}
+
+func (p *ListOsCategoriesParams) ResetIsfeatured() {
+	if p.p != nil && p.p["isfeatured"] != nil {
+		delete(p.p, "isfeatured")
+	}
+}
+
+func (p *ListOsCategoriesParams) GetIsfeatured() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["isfeatured"].(bool)
+	return value, ok
+}
+
+func (p *ListOsCategoriesParams) SetIsiso(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["isiso"] = v
+}
+
+func (p *ListOsCategoriesParams) ResetIsiso() {
+	if p.p != nil && p.p["isiso"] != nil {
+		delete(p.p, "isiso")
+	}
+}
+
+func (p *ListOsCategoriesParams) GetIsiso() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["isiso"].(bool)
+	return value, ok
+}
+
+func (p *ListOsCategoriesParams) SetIsvnf(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["isvnf"] = v
+}
+
+func (p *ListOsCategoriesParams) ResetIsvnf() {
+	if p.p != nil && p.p["isvnf"] != nil {
+		delete(p.p, "isvnf")
+	}
+}
+
+func (p *ListOsCategoriesParams) GetIsvnf() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["isvnf"].(bool)
+	return value, ok
+}
+
 func (p *ListOsCategoriesParams) SetKeyword(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -982,6 +1088,48 @@ func (p *ListOsCategoriesParams) GetPagesize() (int, bool) {
 	return value, ok
 }
 
+func (p *ListOsCategoriesParams) SetShowicon(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["showicon"] = v
+}
+
+func (p *ListOsCategoriesParams) ResetShowicon() {
+	if p.p != nil && p.p["showicon"] != nil {
+		delete(p.p, "showicon")
+	}
+}
+
+func (p *ListOsCategoriesParams) GetShowicon() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["showicon"].(bool)
+	return value, ok
+}
+
+func (p *ListOsCategoriesParams) SetZoneid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["zoneid"] = v
+}
+
+func (p *ListOsCategoriesParams) ResetZoneid() {
+	if p.p != nil && p.p["zoneid"] != nil {
+		delete(p.p, "zoneid")
+	}
+}
+
+func (p *ListOsCategoriesParams) 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 ListOsCategoriesParams instance,
 // as then you are sure you have configured all required params
 func (s *GuestOSService) NewListOsCategoriesParams() *ListOsCategoriesParams {
@@ -1094,10 +1242,13 @@ type ListOsCategoriesResponse struct {
 }
 
 type OsCategory struct {
-	Id        string `json:"id"`
-	JobID     string `json:"jobid"`
-	Jobstatus int    `json:"jobstatus"`
-	Name      string `json:"name"`
+	Created    string      `json:"created"`
+	Icon       interface{} `json:"icon"`
+	Id         string      `json:"id"`
+	Isfeatured bool        `json:"isfeatured"`
+	JobID      string      `json:"jobid"`
+	Jobstatus  int         `json:"jobstatus"`
+	Name       string      `json:"name"`
 }
 
 type ListOsTypesParams struct {
@@ -1593,6 +1744,9 @@ func (p *UpdateGuestOsParams) toURLValues() url.Values {
 	if v, found := p.p["id"]; found {
 		u.Set("id", v.(string))
 	}
+	if v, found := p.p["oscategoryid"]; found {
+		u.Set("oscategoryid", v.(string))
+	}
 	if v, found := p.p["osdisplayname"]; found {
 		u.Set("osdisplayname", v.(string))
 	}
@@ -1662,6 +1816,27 @@ func (p *UpdateGuestOsParams) GetId() (string, bool) {
 	return value, ok
 }
 
+func (p *UpdateGuestOsParams) SetOscategoryid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["oscategoryid"] = v
+}
+
+func (p *UpdateGuestOsParams) ResetOscategoryid() {
+	if p.p != nil && p.p["oscategoryid"] != nil {
+		delete(p.p, "oscategoryid")
+	}
+}
+
+func (p *UpdateGuestOsParams) GetOscategoryid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["oscategoryid"].(string)
+	return value, ok
+}
+
 func (p *UpdateGuestOsParams) SetOsdisplayname(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
diff --git a/cloudstack/HostService.go b/cloudstack/HostService.go
index d16aed5..78774b2 100644
--- a/cloudstack/HostService.go
+++ b/cloudstack/HostService.go
@@ -120,6 +120,13 @@ func (p *AddBaremetalHostParams) toURLValues() url.Values {
 	if v, found := p.p["clustername"]; found {
 		u.Set("clustername", v.(string))
 	}
+	if v, found := p.p["externaldetails"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("externaldetails[%d].key", i), k)
+			u.Set(fmt.Sprintf("externaldetails[%d].value", i), m[k])
+		}
+	}
 	if v, found := p.p["hosttags"]; found {
 		vv := strings.Join(v.([]string), ",")
 		u.Set("hosttags", vv)
@@ -136,6 +143,10 @@ func (p *AddBaremetalHostParams) toURLValues() url.Values {
 	if v, found := p.p["podid"]; found {
 		u.Set("podid", v.(string))
 	}
+	if v, found := p.p["storageaccessgroups"]; found {
+		vv := strings.Join(v.([]string), ",")
+		u.Set("storageaccessgroups", vv)
+	}
 	if v, found := p.p["url"]; found {
 		u.Set("url", v.(string))
 	}
@@ -211,6 +222,27 @@ func (p *AddBaremetalHostParams) GetClustername() (string, bool) {
 	return value, ok
 }
 
+func (p *AddBaremetalHostParams) SetExternaldetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["externaldetails"] = v
+}
+
+func (p *AddBaremetalHostParams) ResetExternaldetails() {
+	if p.p != nil && p.p["externaldetails"] != nil {
+		delete(p.p, "externaldetails")
+	}
+}
+
+func (p *AddBaremetalHostParams) GetExternaldetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["externaldetails"].(map[string]string)
+	return value, ok
+}
+
 func (p *AddBaremetalHostParams) SetHosttags(v []string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -316,6 +348,27 @@ func (p *AddBaremetalHostParams) GetPodid() (string, bool) {
 	return value, ok
 }
 
+func (p *AddBaremetalHostParams) SetStorageaccessgroups(v []string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroups"] = v
+}
+
+func (p *AddBaremetalHostParams) ResetStorageaccessgroups() {
+	if p.p != nil && p.p["storageaccessgroups"] != nil {
+		delete(p.p, "storageaccessgroups")
+	}
+}
+
+func (p *AddBaremetalHostParams) GetStorageaccessgroups() ([]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroups"].([]string)
+	return value, ok
+}
+
 func (p *AddBaremetalHostParams) SetUrl(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -412,6 +465,7 @@ type AddBaremetalHostResponse struct {
 	Capabilities                     string                             `json:"capabilities"`
 	Clusterid                        string                             `json:"clusterid"`
 	Clustername                      string                             `json:"clustername"`
+	Clusterstorageaccessgroups       string                             `json:"clusterstorageaccessgroups"`
 	Clustertype                      string                             `json:"clustertype"`
 	Cpuallocated                     string                             `json:"cpuallocated"`
 	Cpuallocatedpercentage           string                             `json:"cpuallocatedpercentage"`
@@ -431,7 +485,11 @@ type AddBaremetalHostResponse struct {
 	Encryptionsupported              bool                               `json:"encryptionsupported"`
 	Events                           string                             `json:"events"`
 	Explicithosttags                 string                             `json:"explicithosttags"`
+	Extensionid                      string                             `json:"extensionid"`
+	Extensionname                    string                             `json:"extensionname"`
 	Gpugroup                         []AddBaremetalHostResponseGpugroup `json:"gpugroup"`
+	Gputotal                         int64                              `json:"gputotal"`
+	Gpuused                          int64                              `json:"gpuused"`
 	Hahost                           bool                               `json:"hahost"`
 	Hasannotations                   bool                               `json:"hasannotations"`
 	Hasenoughcapacity                bool                               `json:"hasenoughcapacity"`
@@ -450,6 +508,7 @@ type AddBaremetalHostResponse struct {
 	Lastannotated                    string                             `json:"lastannotated"`
 	Lastpinged                       string                             `json:"lastpinged"`
 	Managementserverid               UUID                               `json:"managementserverid"`
+	Managementservername             string                             `json:"managementservername"`
 	Memoryallocated                  int64                              `json:"memoryallocated"`
 	Memoryallocatedbytes             int64                              `json:"memoryallocatedbytes"`
 	Memoryallocatedpercentage        string                             `json:"memoryallocatedpercentage"`
@@ -464,16 +523,20 @@ type AddBaremetalHostResponse struct {
 	Outofbandmanagement              OutOfBandManagementResponse        `json:"outofbandmanagement"`
 	Podid                            string                             `json:"podid"`
 	Podname                          string                             `json:"podname"`
+	Podstorageaccessgroups           string                             `json:"podstorageaccessgroups"`
 	Removed                          string                             `json:"removed"`
 	Resourcestate                    string                             `json:"resourcestate"`
 	State                            string                             `json:"state"`
+	Storageaccessgroups              string                             `json:"storageaccessgroups"`
 	Suitableformigration             bool                               `json:"suitableformigration"`
 	Type                             string                             `json:"type"`
 	Ueficapability                   bool                               `json:"ueficapability"`
 	Username                         string                             `json:"username"`
 	Version                          string                             `json:"version"`
+	Virtualmachineid                 string                             `json:"virtualmachineid"`
 	Zoneid                           string                             `json:"zoneid"`
 	Zonename                         string                             `json:"zonename"`
+	Zonestorageaccessgroups          string                             `json:"zonestorageaccessgroups"`
 }
 
 type AddBaremetalHostResponseGpugroup struct {
@@ -667,6 +730,13 @@ func (p *AddHostParams) toURLValues() url.Values {
 	if v, found := p.p["clustername"]; found {
 		u.Set("clustername", v.(string))
 	}
+	if v, found := p.p["externaldetails"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("externaldetails[%d].key", i), k)
+			u.Set(fmt.Sprintf("externaldetails[%d].value", i), m[k])
+		}
+	}
 	if v, found := p.p["hosttags"]; found {
 		vv := strings.Join(v.([]string), ",")
 		u.Set("hosttags", vv)
@@ -680,6 +750,10 @@ func (p *AddHostParams) toURLValues() url.Values {
 	if v, found := p.p["podid"]; found {
 		u.Set("podid", v.(string))
 	}
+	if v, found := p.p["storageaccessgroups"]; found {
+		vv := strings.Join(v.([]string), ",")
+		u.Set("storageaccessgroups", vv)
+	}
 	if v, found := p.p["url"]; found {
 		u.Set("url", v.(string))
 	}
@@ -755,6 +829,27 @@ func (p *AddHostParams) GetClustername() (string, bool) {
 	return value, ok
 }
 
+func (p *AddHostParams) SetExternaldetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["externaldetails"] = v
+}
+
+func (p *AddHostParams) ResetExternaldetails() {
+	if p.p != nil && p.p["externaldetails"] != nil {
+		delete(p.p, "externaldetails")
+	}
+}
+
+func (p *AddHostParams) GetExternaldetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["externaldetails"].(map[string]string)
+	return value, ok
+}
+
 func (p *AddHostParams) SetHosttags(v []string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -839,6 +934,27 @@ func (p *AddHostParams) GetPodid() (string, bool) {
 	return value, ok
 }
 
+func (p *AddHostParams) SetStorageaccessgroups(v []string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroups"] = v
+}
+
+func (p *AddHostParams) ResetStorageaccessgroups() {
+	if p.p != nil && p.p["storageaccessgroups"] != nil {
+		delete(p.p, "storageaccessgroups")
+	}
+}
+
+func (p *AddHostParams) GetStorageaccessgroups() ([]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroups"].([]string)
+	return value, ok
+}
+
 func (p *AddHostParams) SetUrl(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -939,6 +1055,7 @@ type AddHostResponse struct {
 	Capabilities                     string                      `json:"capabilities"`
 	Clusterid                        string                      `json:"clusterid"`
 	Clustername                      string                      `json:"clustername"`
+	Clusterstorageaccessgroups       string                      `json:"clusterstorageaccessgroups"`
 	Clustertype                      string                      `json:"clustertype"`
 	Cpuallocated                     string                      `json:"cpuallocated"`
 	Cpuallocatedpercentage           string                      `json:"cpuallocatedpercentage"`
@@ -958,7 +1075,11 @@ type AddHostResponse struct {
 	Encryptionsupported              bool                        `json:"encryptionsupported"`
 	Events                           string                      `json:"events"`
 	Explicithosttags                 string                      `json:"explicithosttags"`
+	Extensionid                      string                      `json:"extensionid"`
+	Extensionname                    string                      `json:"extensionname"`
 	Gpugroup                         []AddHostResponseGpugroup   `json:"gpugroup"`
+	Gputotal                         int64                       `json:"gputotal"`
+	Gpuused                          int64                       `json:"gpuused"`
 	Hahost                           bool                        `json:"hahost"`
 	Hasannotations                   bool                        `json:"hasannotations"`
 	Hasenoughcapacity                bool                        `json:"hasenoughcapacity"`
@@ -977,6 +1098,7 @@ type AddHostResponse struct {
 	Lastannotated                    string                      `json:"lastannotated"`
 	Lastpinged                       string                      `json:"lastpinged"`
 	Managementserverid               UUID                        `json:"managementserverid"`
+	Managementservername             string                      `json:"managementservername"`
 	Memoryallocated                  int64                       `json:"memoryallocated"`
 	Memoryallocatedbytes             int64                       `json:"memoryallocatedbytes"`
 	Memoryallocatedpercentage        string                      `json:"memoryallocatedpercentage"`
@@ -991,16 +1113,20 @@ type AddHostResponse struct {
 	Outofbandmanagement              OutOfBandManagementResponse `json:"outofbandmanagement"`
 	Podid                            string                      `json:"podid"`
 	Podname                          string                      `json:"podname"`
+	Podstorageaccessgroups           string                      `json:"podstorageaccessgroups"`
 	Removed                          string                      `json:"removed"`
 	Resourcestate                    string                      `json:"resourcestate"`
 	State                            string                      `json:"state"`
+	Storageaccessgroups              string                      `json:"storageaccessgroups"`
 	Suitableformigration             bool                        `json:"suitableformigration"`
 	Type                             string                      `json:"type"`
 	Ueficapability                   bool                        `json:"ueficapability"`
 	Username                         string                      `json:"username"`
 	Version                          string                      `json:"version"`
+	Virtualmachineid                 string                      `json:"virtualmachineid"`
 	Zoneid                           string                      `json:"zoneid"`
 	Zonename                         string                      `json:"zonename"`
+	Zonestorageaccessgroups          string                      `json:"zonestorageaccessgroups"`
 }
 
 type AddHostResponseGpugroup struct {
@@ -1206,6 +1332,7 @@ type CancelHostMaintenanceResponse struct {
 	Capabilities                     string                                  `json:"capabilities"`
 	Clusterid                        string                                  `json:"clusterid"`
 	Clustername                      string                                  `json:"clustername"`
+	Clusterstorageaccessgroups       string                                  `json:"clusterstorageaccessgroups"`
 	Clustertype                      string                                  `json:"clustertype"`
 	Cpuallocated                     string                                  `json:"cpuallocated"`
 	Cpuallocatedpercentage           string                                  `json:"cpuallocatedpercentage"`
@@ -1225,7 +1352,11 @@ type CancelHostMaintenanceResponse struct {
 	Encryptionsupported              bool                                    `json:"encryptionsupported"`
 	Events                           string                                  `json:"events"`
 	Explicithosttags                 string                                  `json:"explicithosttags"`
+	Extensionid                      string                                  `json:"extensionid"`
+	Extensionname                    string                                  `json:"extensionname"`
 	Gpugroup                         []CancelHostMaintenanceResponseGpugroup `json:"gpugroup"`
+	Gputotal                         int64                                   `json:"gputotal"`
+	Gpuused                          int64                                   `json:"gpuused"`
 	Hahost                           bool                                    `json:"hahost"`
 	Hasannotations                   bool                                    `json:"hasannotations"`
 	Hasenoughcapacity                bool                                    `json:"hasenoughcapacity"`
@@ -1244,6 +1375,7 @@ type CancelHostMaintenanceResponse struct {
 	Lastannotated                    string                                  `json:"lastannotated"`
 	Lastpinged                       string                                  `json:"lastpinged"`
 	Managementserverid               UUID                                    `json:"managementserverid"`
+	Managementservername             string                                  `json:"managementservername"`
 	Memoryallocated                  int64                                   `json:"memoryallocated"`
 	Memoryallocatedbytes             int64                                   `json:"memoryallocatedbytes"`
 	Memoryallocatedpercentage        string                                  `json:"memoryallocatedpercentage"`
@@ -1258,16 +1390,20 @@ type CancelHostMaintenanceResponse struct {
 	Outofbandmanagement              OutOfBandManagementResponse             `json:"outofbandmanagement"`
 	Podid                            string                                  `json:"podid"`
 	Podname                          string                                  `json:"podname"`
+	Podstorageaccessgroups           string                                  `json:"podstorageaccessgroups"`
 	Removed                          string                                  `json:"removed"`
 	Resourcestate                    string                                  `json:"resourcestate"`
 	State                            string                                  `json:"state"`
+	Storageaccessgroups              string                                  `json:"storageaccessgroups"`
 	Suitableformigration             bool                                    `json:"suitableformigration"`
 	Type                             string                                  `json:"type"`
 	Ueficapability                   bool                                    `json:"ueficapability"`
 	Username                         string                                  `json:"username"`
 	Version                          string                                  `json:"version"`
+	Virtualmachineid                 string                                  `json:"virtualmachineid"`
 	Zoneid                           string                                  `json:"zoneid"`
 	Zonename                         string                                  `json:"zonename"`
+	Zonestorageaccessgroups          string                                  `json:"zonestorageaccessgroups"`
 }
 
 type CancelHostMaintenanceResponseGpugroup struct {
@@ -2202,6 +2338,7 @@ type HostForMigration struct {
 	Capabilities                     string                      `json:"capabilities"`
 	Clusterid                        string                      `json:"clusterid"`
 	Clustername                      string                      `json:"clustername"`
+	Clusterstorageaccessgroups       string                      `json:"clusterstorageaccessgroups"`
 	Clustertype                      string                      `json:"clustertype"`
 	Cpuallocated                     string                      `json:"cpuallocated"`
 	Cpuallocatedpercentage           string                      `json:"cpuallocatedpercentage"`
@@ -2221,7 +2358,11 @@ type HostForMigration struct {
 	Encryptionsupported              bool                        `json:"encryptionsupported"`
 	Events                           string                      `json:"events"`
 	Explicithosttags                 string                      `json:"explicithosttags"`
+	Extensionid                      string                      `json:"extensionid"`
+	Extensionname                    string                      `json:"extensionname"`
 	Gpugroup                         []HostForMigrationGpugroup  `json:"gpugroup"`
+	Gputotal                         int64                       `json:"gputotal"`
+	Gpuused                          int64                       `json:"gpuused"`
 	Hahost                           bool                        `json:"hahost"`
 	Hasannotations                   bool                        `json:"hasannotations"`
 	Hasenoughcapacity                bool                        `json:"hasenoughcapacity"`
@@ -2240,6 +2381,7 @@ type HostForMigration struct {
 	Lastannotated                    string                      `json:"lastannotated"`
 	Lastpinged                       string                      `json:"lastpinged"`
 	Managementserverid               UUID                        `json:"managementserverid"`
+	Managementservername             string                      `json:"managementservername"`
 	Memoryallocated                  int64                       `json:"memoryallocated"`
 	Memoryallocatedbytes             int64                       `json:"memoryallocatedbytes"`
 	Memoryallocatedpercentage        string                      `json:"memoryallocatedpercentage"`
@@ -2254,17 +2396,21 @@ type HostForMigration struct {
 	Outofbandmanagement              OutOfBandManagementResponse `json:"outofbandmanagement"`
 	Podid                            string                      `json:"podid"`
 	Podname                          string                      `json:"podname"`
+	Podstorageaccessgroups           string                      `json:"podstorageaccessgroups"`
 	Removed                          string                      `json:"removed"`
 	RequiresStorageMotion            bool                        `json:"requiresStorageMotion"`
 	Resourcestate                    string                      `json:"resourcestate"`
 	State                            string                      `json:"state"`
+	Storageaccessgroups              string                      `json:"storageaccessgroups"`
 	Suitableformigration             bool                        `json:"suitableformigration"`
 	Type                             string                      `json:"type"`
 	Ueficapability                   bool                        `json:"ueficapability"`
 	Username                         string                      `json:"username"`
 	Version                          string                      `json:"version"`
+	Virtualmachineid                 string                      `json:"virtualmachineid"`
 	Zoneid                           string                      `json:"zoneid"`
 	Zonename                         string                      `json:"zonename"`
+	Zonestorageaccessgroups          string                      `json:"zonestorageaccessgroups"`
 }
 
 type HostForMigrationGpugroup struct {
@@ -2695,6 +2841,9 @@ func (p *ListHostsParams) toURLValues() url.Values {
 	if v, found := p.p["keyword"]; found {
 		u.Set("keyword", v.(string))
 	}
+	if v, found := p.p["managementserverid"]; found {
+		u.Set("managementserverid", v.(string))
+	}
 	if v, found := p.p["name"]; found {
 		u.Set("name", v.(string))
 	}
@@ -2722,6 +2871,9 @@ func (p *ListHostsParams) toURLValues() url.Values {
 	if v, found := p.p["state"]; found {
 		u.Set("state", v.(string))
 	}
+	if v, found := p.p["storageaccessgroup"]; found {
+		u.Set("storageaccessgroup", v.(string))
+	}
 	if v, found := p.p["type"]; found {
 		u.Set("type", v.(string))
 	}
@@ -2881,6 +3033,27 @@ func (p *ListHostsParams) GetKeyword() (string, bool) {
 	return value, ok
 }
 
+func (p *ListHostsParams) SetManagementserverid(v UUID) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["managementserverid"] = v
+}
+
+func (p *ListHostsParams) ResetManagementserverid() {
+	if p.p != nil && p.p["managementserverid"] != nil {
+		delete(p.p, "managementserverid")
+	}
+}
+
+func (p *ListHostsParams) GetManagementserverid() (UUID, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["managementserverid"].(UUID)
+	return value, ok
+}
+
 func (p *ListHostsParams) SetName(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3049,6 +3222,27 @@ func (p *ListHostsParams) GetState() (string, bool) {
 	return value, ok
 }
 
+func (p *ListHostsParams) SetStorageaccessgroup(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroup"] = v
+}
+
+func (p *ListHostsParams) ResetStorageaccessgroup() {
+	if p.p != nil && p.p["storageaccessgroup"] != nil {
+		delete(p.p, "storageaccessgroup")
+	}
+}
+
+func (p *ListHostsParams) GetStorageaccessgroup() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroup"].(string)
+	return value, ok
+}
+
 func (p *ListHostsParams) SetType(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3229,6 +3423,7 @@ type Host struct {
 	Capabilities                     string                      `json:"capabilities"`
 	Clusterid                        string                      `json:"clusterid"`
 	Clustername                      string                      `json:"clustername"`
+	Clusterstorageaccessgroups       string                      `json:"clusterstorageaccessgroups"`
 	Clustertype                      string                      `json:"clustertype"`
 	Cpuallocated                     string                      `json:"cpuallocated"`
 	Cpuallocatedpercentage           string                      `json:"cpuallocatedpercentage"`
@@ -3248,7 +3443,11 @@ type Host struct {
 	Encryptionsupported              bool                        `json:"encryptionsupported"`
 	Events                           string                      `json:"events"`
 	Explicithosttags                 string                      `json:"explicithosttags"`
+	Extensionid                      string                      `json:"extensionid"`
+	Extensionname                    string                      `json:"extensionname"`
 	Gpugroup                         []HostGpugroup              `json:"gpugroup"`
+	Gputotal                         int64                       `json:"gputotal"`
+	Gpuused                          int64                       `json:"gpuused"`
 	Hahost                           bool                        `json:"hahost"`
 	Hasannotations                   bool                        `json:"hasannotations"`
 	Hasenoughcapacity                bool                        `json:"hasenoughcapacity"`
@@ -3267,6 +3466,7 @@ type Host struct {
 	Lastannotated                    string                      `json:"lastannotated"`
 	Lastpinged                       string                      `json:"lastpinged"`
 	Managementserverid               UUID                        `json:"managementserverid"`
+	Managementservername             string                      `json:"managementservername"`
 	Memoryallocated                  int64                       `json:"memoryallocated"`
 	Memoryallocatedbytes             int64                       `json:"memoryallocatedbytes"`
 	Memoryallocatedpercentage        string                      `json:"memoryallocatedpercentage"`
@@ -3281,16 +3481,20 @@ type Host struct {
 	Outofbandmanagement              OutOfBandManagementResponse `json:"outofbandmanagement"`
 	Podid                            string                      `json:"podid"`
 	Podname                          string                      `json:"podname"`
+	Podstorageaccessgroups           string                      `json:"podstorageaccessgroups"`
 	Removed                          string                      `json:"removed"`
 	Resourcestate                    string                      `json:"resourcestate"`
 	State                            string                      `json:"state"`
+	Storageaccessgroups              string                      `json:"storageaccessgroups"`
 	Suitableformigration             bool                        `json:"suitableformigration"`
 	Type                             string                      `json:"type"`
 	Ueficapability                   bool                        `json:"ueficapability"`
 	Username                         string                      `json:"username"`
 	Version                          string                      `json:"version"`
+	Virtualmachineid                 string                      `json:"virtualmachineid"`
 	Zoneid                           string                      `json:"zoneid"`
 	Zonename                         string                      `json:"zonename"`
+	Zonestorageaccessgroups          string                      `json:"zonestorageaccessgroups"`
 }
 
 type HostGpugroup struct {
@@ -3341,6 +3545,9 @@ func (p *ListHostsMetricsParams) toURLValues() url.Values {
 	if v, found := p.p["keyword"]; found {
 		u.Set("keyword", v.(string))
 	}
+	if v, found := p.p["managementserverid"]; found {
+		u.Set("managementserverid", v.(string))
+	}
 	if v, found := p.p["name"]; found {
 		u.Set("name", v.(string))
 	}
@@ -3368,6 +3575,9 @@ func (p *ListHostsMetricsParams) toURLValues() url.Values {
 	if v, found := p.p["state"]; found {
 		u.Set("state", v.(string))
 	}
+	if v, found := p.p["storageaccessgroup"]; found {
+		u.Set("storageaccessgroup", v.(string))
+	}
 	if v, found := p.p["type"]; found {
 		u.Set("type", v.(string))
 	}
@@ -3527,6 +3737,27 @@ func (p *ListHostsMetricsParams) GetKeyword() (string, bool) {
 	return value, ok
 }
 
+func (p *ListHostsMetricsParams) SetManagementserverid(v UUID) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["managementserverid"] = v
+}
+
+func (p *ListHostsMetricsParams) ResetManagementserverid() {
+	if p.p != nil && p.p["managementserverid"] != nil {
+		delete(p.p, "managementserverid")
+	}
+}
+
+func (p *ListHostsMetricsParams) GetManagementserverid() (UUID, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["managementserverid"].(UUID)
+	return value, ok
+}
+
 func (p *ListHostsMetricsParams) SetName(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3695,6 +3926,27 @@ func (p *ListHostsMetricsParams) GetState() (string, bool) {
 	return value, ok
 }
 
+func (p *ListHostsMetricsParams) SetStorageaccessgroup(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroup"] = v
+}
+
+func (p *ListHostsMetricsParams) ResetStorageaccessgroup() {
+	if p.p != nil && p.p["storageaccessgroup"] != nil {
+		delete(p.p, "storageaccessgroup")
+	}
+}
+
+func (p *ListHostsMetricsParams) GetStorageaccessgroup() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroup"].(string)
+	return value, ok
+}
+
 func (p *ListHostsMetricsParams) SetType(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3875,6 +4127,7 @@ type HostsMetric struct {
 	Capabilities                     string                      `json:"capabilities"`
 	Clusterid                        string                      `json:"clusterid"`
 	Clustername                      string                      `json:"clustername"`
+	Clusterstorageaccessgroups       string                      `json:"clusterstorageaccessgroups"`
 	Clustertype                      string                      `json:"clustertype"`
 	Cpuallocated                     string                      `json:"cpuallocated"`
 	Cpuallocateddisablethreshold     bool                        `json:"cpuallocateddisablethreshold"`
@@ -3901,7 +4154,11 @@ type HostsMetric struct {
 	Encryptionsupported              bool                        `json:"encryptionsupported"`
 	Events                           string                      `json:"events"`
 	Explicithosttags                 string                      `json:"explicithosttags"`
+	Extensionid                      string                      `json:"extensionid"`
+	Extensionname                    string                      `json:"extensionname"`
 	Gpugroup                         []HostsMetricGpugroup       `json:"gpugroup"`
+	Gputotal                         int64                       `json:"gputotal"`
+	Gpuused                          int64                       `json:"gpuused"`
 	Hahost                           bool                        `json:"hahost"`
 	Hasannotations                   bool                        `json:"hasannotations"`
 	Hasenoughcapacity                bool                        `json:"hasenoughcapacity"`
@@ -3921,6 +4178,7 @@ type HostsMetric struct {
 	Lastannotated                    string                      `json:"lastannotated"`
 	Lastpinged                       string                      `json:"lastpinged"`
 	Managementserverid               UUID                        `json:"managementserverid"`
+	Managementservername             string                      `json:"managementservername"`
 	Memoryallocated                  int64                       `json:"memoryallocated"`
 	Memoryallocatedbytes             int64                       `json:"memoryallocatedbytes"`
 	Memoryallocateddisablethreshold  bool                        `json:"memoryallocateddisablethreshold"`
@@ -3944,18 +4202,22 @@ type HostsMetric struct {
 	Outofbandmanagement              OutOfBandManagementResponse `json:"outofbandmanagement"`
 	Podid                            string                      `json:"podid"`
 	Podname                          string                      `json:"podname"`
+	Podstorageaccessgroups           string                      `json:"podstorageaccessgroups"`
 	Powerstate                       string                      `json:"powerstate"`
 	Removed                          string                      `json:"removed"`
 	Resourcestate                    string                      `json:"resourcestate"`
 	State                            string                      `json:"state"`
+	Storageaccessgroups              string                      `json:"storageaccessgroups"`
 	Suitableformigration             bool                        `json:"suitableformigration"`
 	Systeminstances                  string                      `json:"systeminstances"`
 	Type                             string                      `json:"type"`
 	Ueficapability                   bool                        `json:"ueficapability"`
 	Username                         string                      `json:"username"`
 	Version                          string                      `json:"version"`
+	Virtualmachineid                 string                      `json:"virtualmachineid"`
 	Zoneid                           string                      `json:"zoneid"`
 	Zonename                         string                      `json:"zonename"`
+	Zonestorageaccessgroups          string                      `json:"zonestorageaccessgroups"`
 }
 
 type HostsMetricGpugroup struct {
@@ -4060,6 +4322,7 @@ type PrepareHostForMaintenanceResponse struct {
 	Capabilities                     string                                      `json:"capabilities"`
 	Clusterid                        string                                      `json:"clusterid"`
 	Clustername                      string                                      `json:"clustername"`
+	Clusterstorageaccessgroups       string                                      `json:"clusterstorageaccessgroups"`
 	Clustertype                      string                                      `json:"clustertype"`
 	Cpuallocated                     string                                      `json:"cpuallocated"`
 	Cpuallocatedpercentage           string                                      `json:"cpuallocatedpercentage"`
@@ -4079,7 +4342,11 @@ type PrepareHostForMaintenanceResponse struct {
 	Encryptionsupported              bool                                        `json:"encryptionsupported"`
 	Events                           string                                      `json:"events"`
 	Explicithosttags                 string                                      `json:"explicithosttags"`
+	Extensionid                      string                                      `json:"extensionid"`
+	Extensionname                    string                                      `json:"extensionname"`
 	Gpugroup                         []PrepareHostForMaintenanceResponseGpugroup `json:"gpugroup"`
+	Gputotal                         int64                                       `json:"gputotal"`
+	Gpuused                          int64                                       `json:"gpuused"`
 	Hahost                           bool                                        `json:"hahost"`
 	Hasannotations                   bool                                        `json:"hasannotations"`
 	Hasenoughcapacity                bool                                        `json:"hasenoughcapacity"`
@@ -4098,6 +4365,7 @@ type PrepareHostForMaintenanceResponse struct {
 	Lastannotated                    string                                      `json:"lastannotated"`
 	Lastpinged                       string                                      `json:"lastpinged"`
 	Managementserverid               UUID                                        `json:"managementserverid"`
+	Managementservername             string                                      `json:"managementservername"`
 	Memoryallocated                  int64                                       `json:"memoryallocated"`
 	Memoryallocatedbytes             int64                                       `json:"memoryallocatedbytes"`
 	Memoryallocatedpercentage        string                                      `json:"memoryallocatedpercentage"`
@@ -4112,16 +4380,20 @@ type PrepareHostForMaintenanceResponse struct {
 	Outofbandmanagement              OutOfBandManagementResponse                 `json:"outofbandmanagement"`
 	Podid                            string                                      `json:"podid"`
 	Podname                          string                                      `json:"podname"`
+	Podstorageaccessgroups           string                                      `json:"podstorageaccessgroups"`
 	Removed                          string                                      `json:"removed"`
 	Resourcestate                    string                                      `json:"resourcestate"`
 	State                            string                                      `json:"state"`
+	Storageaccessgroups              string                                      `json:"storageaccessgroups"`
 	Suitableformigration             bool                                        `json:"suitableformigration"`
 	Type                             string                                      `json:"type"`
 	Ueficapability                   bool                                        `json:"ueficapability"`
 	Username                         string                                      `json:"username"`
 	Version                          string                                      `json:"version"`
+	Virtualmachineid                 string                                      `json:"virtualmachineid"`
 	Zoneid                           string                                      `json:"zoneid"`
 	Zonename                         string                                      `json:"zonename"`
+	Zonestorageaccessgroups          string                                      `json:"zonestorageaccessgroups"`
 }
 
 type PrepareHostForMaintenanceResponseGpugroup struct {
@@ -4226,6 +4498,7 @@ type ReconnectHostResponse struct {
 	Capabilities                     string                          `json:"capabilities"`
 	Clusterid                        string                          `json:"clusterid"`
 	Clustername                      string                          `json:"clustername"`
+	Clusterstorageaccessgroups       string                          `json:"clusterstorageaccessgroups"`
 	Clustertype                      string                          `json:"clustertype"`
 	Cpuallocated                     string                          `json:"cpuallocated"`
 	Cpuallocatedpercentage           string                          `json:"cpuallocatedpercentage"`
@@ -4245,7 +4518,11 @@ type ReconnectHostResponse struct {
 	Encryptionsupported              bool                            `json:"encryptionsupported"`
 	Events                           string                          `json:"events"`
 	Explicithosttags                 string                          `json:"explicithosttags"`
+	Extensionid                      string                          `json:"extensionid"`
+	Extensionname                    string                          `json:"extensionname"`
 	Gpugroup                         []ReconnectHostResponseGpugroup `json:"gpugroup"`
+	Gputotal                         int64                           `json:"gputotal"`
+	Gpuused                          int64                           `json:"gpuused"`
 	Hahost                           bool                            `json:"hahost"`
 	Hasannotations                   bool                            `json:"hasannotations"`
 	Hasenoughcapacity                bool                            `json:"hasenoughcapacity"`
@@ -4264,6 +4541,7 @@ type ReconnectHostResponse struct {
 	Lastannotated                    string                          `json:"lastannotated"`
 	Lastpinged                       string                          `json:"lastpinged"`
 	Managementserverid               UUID                            `json:"managementserverid"`
+	Managementservername             string                          `json:"managementservername"`
 	Memoryallocated                  int64                           `json:"memoryallocated"`
 	Memoryallocatedbytes             int64                           `json:"memoryallocatedbytes"`
 	Memoryallocatedpercentage        string                          `json:"memoryallocatedpercentage"`
@@ -4278,16 +4556,20 @@ type ReconnectHostResponse struct {
 	Outofbandmanagement              OutOfBandManagementResponse     `json:"outofbandmanagement"`
 	Podid                            string                          `json:"podid"`
 	Podname                          string                          `json:"podname"`
+	Podstorageaccessgroups           string                          `json:"podstorageaccessgroups"`
 	Removed                          string                          `json:"removed"`
 	Resourcestate                    string                          `json:"resourcestate"`
 	State                            string                          `json:"state"`
+	Storageaccessgroups              string                          `json:"storageaccessgroups"`
 	Suitableformigration             bool                            `json:"suitableformigration"`
 	Type                             string                          `json:"type"`
 	Ueficapability                   bool                            `json:"ueficapability"`
 	Username                         string                          `json:"username"`
 	Version                          string                          `json:"version"`
+	Virtualmachineid                 string                          `json:"virtualmachineid"`
 	Zoneid                           string                          `json:"zoneid"`
 	Zonename                         string                          `json:"zonename"`
+	Zonestorageaccessgroups          string                          `json:"zonestorageaccessgroups"`
 }
 
 type ReconnectHostResponseGpugroup struct {
@@ -4485,6 +4767,13 @@ func (p *UpdateHostParams) toURLValues() url.Values {
 	if v, found := p.p["annotation"]; found {
 		u.Set("annotation", v.(string))
 	}
+	if v, found := p.p["externaldetails"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("externaldetails[%d].key", i), k)
+			u.Set(fmt.Sprintf("externaldetails[%d].value", i), m[k])
+		}
+	}
 	if v, found := p.p["hosttags"]; found {
 		vv := strings.Join(v.([]string), ",")
 		u.Set("hosttags", vv)
@@ -4550,6 +4839,27 @@ func (p *UpdateHostParams) GetAnnotation() (string, bool) {
 	return value, ok
 }
 
+func (p *UpdateHostParams) SetExternaldetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["externaldetails"] = v
+}
+
+func (p *UpdateHostParams) ResetExternaldetails() {
+	if p.p != nil && p.p["externaldetails"] != nil {
+		delete(p.p, "externaldetails")
+	}
+}
+
+func (p *UpdateHostParams) GetExternaldetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["externaldetails"].(map[string]string)
+	return value, ok
+}
+
 func (p *UpdateHostParams) SetHosttags(v []string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -4706,6 +5016,7 @@ type UpdateHostResponse struct {
 	Capabilities                     string                       `json:"capabilities"`
 	Clusterid                        string                       `json:"clusterid"`
 	Clustername                      string                       `json:"clustername"`
+	Clusterstorageaccessgroups       string                       `json:"clusterstorageaccessgroups"`
 	Clustertype                      string                       `json:"clustertype"`
 	Cpuallocated                     string                       `json:"cpuallocated"`
 	Cpuallocatedpercentage           string                       `json:"cpuallocatedpercentage"`
@@ -4725,7 +5036,11 @@ type UpdateHostResponse struct {
 	Encryptionsupported              bool                         `json:"encryptionsupported"`
 	Events                           string                       `json:"events"`
 	Explicithosttags                 string                       `json:"explicithosttags"`
+	Extensionid                      string                       `json:"extensionid"`
+	Extensionname                    string                       `json:"extensionname"`
 	Gpugroup                         []UpdateHostResponseGpugroup `json:"gpugroup"`
+	Gputotal                         int64                        `json:"gputotal"`
+	Gpuused                          int64                        `json:"gpuused"`
 	Hahost                           bool                         `json:"hahost"`
 	Hasannotations                   bool                         `json:"hasannotations"`
 	Hasenoughcapacity                bool                         `json:"hasenoughcapacity"`
@@ -4744,6 +5059,7 @@ type UpdateHostResponse struct {
 	Lastannotated                    string                       `json:"lastannotated"`
 	Lastpinged                       string                       `json:"lastpinged"`
 	Managementserverid               UUID                         `json:"managementserverid"`
+	Managementservername             string                       `json:"managementservername"`
 	Memoryallocated                  int64                        `json:"memoryallocated"`
 	Memoryallocatedbytes             int64                        `json:"memoryallocatedbytes"`
 	Memoryallocatedpercentage        string                       `json:"memoryallocatedpercentage"`
@@ -4758,16 +5074,20 @@ type UpdateHostResponse struct {
 	Outofbandmanagement              OutOfBandManagementResponse  `json:"outofbandmanagement"`
 	Podid                            string                       `json:"podid"`
 	Podname                          string                       `json:"podname"`
+	Podstorageaccessgroups           string                       `json:"podstorageaccessgroups"`
 	Removed                          string                       `json:"removed"`
 	Resourcestate                    string                       `json:"resourcestate"`
 	State                            string                       `json:"state"`
+	Storageaccessgroups              string                       `json:"storageaccessgroups"`
 	Suitableformigration             bool                         `json:"suitableformigration"`
 	Type                             string                       `json:"type"`
 	Ueficapability                   bool                         `json:"ueficapability"`
 	Username                         string                       `json:"username"`
 	Version                          string                       `json:"version"`
+	Virtualmachineid                 string                       `json:"virtualmachineid"`
 	Zoneid                           string                       `json:"zoneid"`
 	Zonename                         string                       `json:"zonename"`
+	Zonestorageaccessgroups          string                       `json:"zonestorageaccessgroups"`
 }
 
 type UpdateHostResponseGpugroup struct {
@@ -5202,6 +5522,7 @@ type CancelHostAsDegradedResponse struct {
 	Capabilities                     string                                 `json:"capabilities"`
 	Clusterid                        string                                 `json:"clusterid"`
 	Clustername                      string                                 `json:"clustername"`
+	Clusterstorageaccessgroups       string                                 `json:"clusterstorageaccessgroups"`
 	Clustertype                      string                                 `json:"clustertype"`
 	Cpuallocated                     string                                 `json:"cpuallocated"`
 	Cpuallocatedpercentage           string                                 `json:"cpuallocatedpercentage"`
@@ -5221,7 +5542,11 @@ type CancelHostAsDegradedResponse struct {
 	Encryptionsupported              bool                                   `json:"encryptionsupported"`
 	Events                           string                                 `json:"events"`
 	Explicithosttags                 string                                 `json:"explicithosttags"`
+	Extensionid                      string                                 `json:"extensionid"`
+	Extensionname                    string                                 `json:"extensionname"`
 	Gpugroup                         []CancelHostAsDegradedResponseGpugroup `json:"gpugroup"`
+	Gputotal                         int64                                  `json:"gputotal"`
+	Gpuused                          int64                                  `json:"gpuused"`
 	Hahost                           bool                                   `json:"hahost"`
 	Hasannotations                   bool                                   `json:"hasannotations"`
 	Hasenoughcapacity                bool                                   `json:"hasenoughcapacity"`
@@ -5240,6 +5565,7 @@ type CancelHostAsDegradedResponse struct {
 	Lastannotated                    string                                 `json:"lastannotated"`
 	Lastpinged                       string                                 `json:"lastpinged"`
 	Managementserverid               UUID                                   `json:"managementserverid"`
+	Managementservername             string                                 `json:"managementservername"`
 	Memoryallocated                  int64                                  `json:"memoryallocated"`
 	Memoryallocatedbytes             int64                                  `json:"memoryallocatedbytes"`
 	Memoryallocatedpercentage        string                                 `json:"memoryallocatedpercentage"`
@@ -5254,16 +5580,20 @@ type CancelHostAsDegradedResponse struct {
 	Outofbandmanagement              OutOfBandManagementResponse            `json:"outofbandmanagement"`
 	Podid                            string                                 `json:"podid"`
 	Podname                          string                                 `json:"podname"`
+	Podstorageaccessgroups           string                                 `json:"podstorageaccessgroups"`
 	Removed                          string                                 `json:"removed"`
 	Resourcestate                    string                                 `json:"resourcestate"`
 	State                            string                                 `json:"state"`
+	Storageaccessgroups              string                                 `json:"storageaccessgroups"`
 	Suitableformigration             bool                                   `json:"suitableformigration"`
 	Type                             string                                 `json:"type"`
 	Ueficapability                   bool                                   `json:"ueficapability"`
 	Username                         string                                 `json:"username"`
 	Version                          string                                 `json:"version"`
+	Virtualmachineid                 string                                 `json:"virtualmachineid"`
 	Zoneid                           string                                 `json:"zoneid"`
 	Zonename                         string                                 `json:"zonename"`
+	Zonestorageaccessgroups          string                                 `json:"zonestorageaccessgroups"`
 }
 
 type CancelHostAsDegradedResponseGpugroup struct {
@@ -6025,6 +6355,7 @@ type DeclareHostAsDegradedResponse struct {
 	Capabilities                     string                                  `json:"capabilities"`
 	Clusterid                        string                                  `json:"clusterid"`
 	Clustername                      string                                  `json:"clustername"`
+	Clusterstorageaccessgroups       string                                  `json:"clusterstorageaccessgroups"`
 	Clustertype                      string                                  `json:"clustertype"`
 	Cpuallocated                     string                                  `json:"cpuallocated"`
 	Cpuallocatedpercentage           string                                  `json:"cpuallocatedpercentage"`
@@ -6044,7 +6375,11 @@ type DeclareHostAsDegradedResponse struct {
 	Encryptionsupported              bool                                    `json:"encryptionsupported"`
 	Events                           string                                  `json:"events"`
 	Explicithosttags                 string                                  `json:"explicithosttags"`
+	Extensionid                      string                                  `json:"extensionid"`
+	Extensionname                    string                                  `json:"extensionname"`
 	Gpugroup                         []DeclareHostAsDegradedResponseGpugroup `json:"gpugroup"`
+	Gputotal                         int64                                   `json:"gputotal"`
+	Gpuused                          int64                                   `json:"gpuused"`
 	Hahost                           bool                                    `json:"hahost"`
 	Hasannotations                   bool                                    `json:"hasannotations"`
 	Hasenoughcapacity                bool                                    `json:"hasenoughcapacity"`
@@ -6063,6 +6398,7 @@ type DeclareHostAsDegradedResponse struct {
 	Lastannotated                    string                                  `json:"lastannotated"`
 	Lastpinged                       string                                  `json:"lastpinged"`
 	Managementserverid               UUID                                    `json:"managementserverid"`
+	Managementservername             string                                  `json:"managementservername"`
 	Memoryallocated                  int64                                   `json:"memoryallocated"`
 	Memoryallocatedbytes             int64                                   `json:"memoryallocatedbytes"`
 	Memoryallocatedpercentage        string                                  `json:"memoryallocatedpercentage"`
@@ -6077,16 +6413,20 @@ type DeclareHostAsDegradedResponse struct {
 	Outofbandmanagement              OutOfBandManagementResponse             `json:"outofbandmanagement"`
 	Podid                            string                                  `json:"podid"`
 	Podname                          string                                  `json:"podname"`
+	Podstorageaccessgroups           string                                  `json:"podstorageaccessgroups"`
 	Removed                          string                                  `json:"removed"`
 	Resourcestate                    string                                  `json:"resourcestate"`
 	State                            string                                  `json:"state"`
+	Storageaccessgroups              string                                  `json:"storageaccessgroups"`
 	Suitableformigration             bool                                    `json:"suitableformigration"`
 	Type                             string                                  `json:"type"`
 	Ueficapability                   bool                                    `json:"ueficapability"`
 	Username                         string                                  `json:"username"`
 	Version                          string                                  `json:"version"`
+	Virtualmachineid                 string                                  `json:"virtualmachineid"`
 	Zoneid                           string                                  `json:"zoneid"`
 	Zonename                         string                                  `json:"zonename"`
+	Zonestorageaccessgroups          string                                  `json:"zonestorageaccessgroups"`
 }
 
 type DeclareHostAsDegradedResponseGpugroup struct {
diff --git a/cloudstack/ISOService.go b/cloudstack/ISOService.go
index 1ceb395..5000bc5 100644
--- a/cloudstack/ISOService.go
+++ b/cloudstack/ISOService.go
@@ -214,6 +214,9 @@ type AttachIsoResponse struct {
 	Domainid              string                           `json:"domainid"`
 	Domainpath            string                           `json:"domainpath"`
 	Forvirtualnetwork     bool                             `json:"forvirtualnetwork"`
+	Gpucardid             string                           `json:"gpucardid"`
+	Gpucardname           string                           `json:"gpucardname"`
+	Gpucount              int                              `json:"gpucount"`
 	Group                 string                           `json:"group"`
 	Groupid               string                           `json:"groupid"`
 	Guestosid             string                           `json:"guestosid"`
@@ -235,6 +238,12 @@ type AttachIsoResponse struct {
 	Jobstatus             int                              `json:"jobstatus"`
 	Keypairs              string                           `json:"keypairs"`
 	Lastupdated           string                           `json:"lastupdated"`
+	Leaseduration         int                              `json:"leaseduration"`
+	Leaseexpiryaction     string                           `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                           `json:"leaseexpirydate"`
+	Maxheads              int64                            `json:"maxheads"`
+	Maxresolutionx        int64                            `json:"maxresolutionx"`
+	Maxresolutiony        int64                            `json:"maxresolutiony"`
 	Memory                int                              `json:"memory"`
 	Memoryintfreekbs      int64                            `json:"memoryintfreekbs"`
 	Memorykbs             int64                            `json:"memorykbs"`
@@ -276,6 +285,9 @@ type AttachIsoResponse struct {
 	Userid                string                           `json:"userid"`
 	Username              string                           `json:"username"`
 	Vgpu                  string                           `json:"vgpu"`
+	Vgpuprofileid         string                           `json:"vgpuprofileid"`
+	Vgpuprofilename       string                           `json:"vgpuprofilename"`
+	Videoram              int64                            `json:"videoram"`
 	Vmtype                string                           `json:"vmtype"`
 	Vnfdetails            map[string]string                `json:"vnfdetails"`
 	Vnfnics               []string                         `json:"vnfnics"`
@@ -527,6 +539,9 @@ type CopyIsoResponse struct {
 	Domainid              string              `json:"domainid"`
 	Domainpath            string              `json:"domainpath"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
+	Extensionid           string              `json:"extensionid"`
+	Extensionname         string              `json:"extensionname"`
+	Forcks                bool                `json:"forcks"`
 	Format                string              `json:"format"`
 	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
@@ -833,6 +848,9 @@ type DetachIsoResponse struct {
 	Domainid              string                           `json:"domainid"`
 	Domainpath            string                           `json:"domainpath"`
 	Forvirtualnetwork     bool                             `json:"forvirtualnetwork"`
+	Gpucardid             string                           `json:"gpucardid"`
+	Gpucardname           string                           `json:"gpucardname"`
+	Gpucount              int                              `json:"gpucount"`
 	Group                 string                           `json:"group"`
 	Groupid               string                           `json:"groupid"`
 	Guestosid             string                           `json:"guestosid"`
@@ -854,6 +872,12 @@ type DetachIsoResponse struct {
 	Jobstatus             int                              `json:"jobstatus"`
 	Keypairs              string                           `json:"keypairs"`
 	Lastupdated           string                           `json:"lastupdated"`
+	Leaseduration         int                              `json:"leaseduration"`
+	Leaseexpiryaction     string                           `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                           `json:"leaseexpirydate"`
+	Maxheads              int64                            `json:"maxheads"`
+	Maxresolutionx        int64                            `json:"maxresolutionx"`
+	Maxresolutiony        int64                            `json:"maxresolutiony"`
 	Memory                int                              `json:"memory"`
 	Memoryintfreekbs      int64                            `json:"memoryintfreekbs"`
 	Memorykbs             int64                            `json:"memorykbs"`
@@ -895,6 +919,9 @@ type DetachIsoResponse struct {
 	Userid                string                           `json:"userid"`
 	Username              string                           `json:"username"`
 	Vgpu                  string                           `json:"vgpu"`
+	Vgpuprofileid         string                           `json:"vgpuprofileid"`
+	Vgpuprofilename       string                           `json:"vgpuprofilename"`
+	Videoram              int64                            `json:"videoram"`
 	Vmtype                string                           `json:"vmtype"`
 	Vnfdetails            map[string]string                `json:"vnfdetails"`
 	Vnfnics               []string                         `json:"vnfnics"`
@@ -1674,6 +1701,9 @@ func (p *ListIsosParams) toURLValues() url.Values {
 	if v, found := p.p["name"]; found {
 		u.Set("name", v.(string))
 	}
+	if v, found := p.p["oscategoryid"]; found {
+		u.Set("oscategoryid", v.(string))
+	}
 	if v, found := p.p["page"]; found {
 		vv := strconv.Itoa(v.(int))
 		u.Set("page", vv)
@@ -2007,6 +2037,27 @@ func (p *ListIsosParams) GetName() (string, bool) {
 	return value, ok
 }
 
+func (p *ListIsosParams) SetOscategoryid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["oscategoryid"] = v
+}
+
+func (p *ListIsosParams) ResetOscategoryid() {
+	if p.p != nil && p.p["oscategoryid"] != nil {
+		delete(p.p, "oscategoryid")
+	}
+}
+
+func (p *ListIsosParams) GetOscategoryid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["oscategoryid"].(string)
+	return value, ok
+}
+
 func (p *ListIsosParams) SetPage(v int) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2328,6 +2379,9 @@ type Iso struct {
 	Domainid              string              `json:"domainid"`
 	Domainpath            string              `json:"domainpath"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
+	Extensionid           string              `json:"extensionid"`
+	Extensionname         string              `json:"extensionname"`
+	Forcks                bool                `json:"forcks"`
 	Format                string              `json:"format"`
 	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
@@ -2896,6 +2950,9 @@ type RegisterIsoResponse struct {
 	Domainid              string              `json:"domainid"`
 	Domainpath            string              `json:"domainpath"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
+	Extensionid           string              `json:"extensionid"`
+	Extensionname         string              `json:"extensionname"`
+	Forcks                bool                `json:"forcks"`
 	Format                string              `json:"format"`
 	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
@@ -2992,6 +3049,10 @@ func (p *UpdateIsoParams) toURLValues() url.Values {
 	if v, found := p.p["displaytext"]; found {
 		u.Set("displaytext", v.(string))
 	}
+	if v, found := p.p["forceupdateostype"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("forceupdateostype", vv)
+	}
 	if v, found := p.p["format"]; found {
 		u.Set("format", v.(string))
 	}
@@ -3136,6 +3197,27 @@ func (p *UpdateIsoParams) GetDisplaytext() (string, bool) {
 	return value, ok
 }
 
+func (p *UpdateIsoParams) SetForceupdateostype(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["forceupdateostype"] = v
+}
+
+func (p *UpdateIsoParams) ResetForceupdateostype() {
+	if p.p != nil && p.p["forceupdateostype"] != nil {
+		delete(p.p, "forceupdateostype")
+	}
+}
+
+func (p *UpdateIsoParams) GetForceupdateostype() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["forceupdateostype"].(bool)
+	return value, ok
+}
+
 func (p *UpdateIsoParams) SetFormat(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3389,6 +3471,9 @@ type UpdateIsoResponse struct {
 	Domainid              string              `json:"domainid"`
 	Domainpath            string              `json:"domainpath"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
+	Extensionid           string              `json:"extensionid"`
+	Extensionname         string              `json:"extensionname"`
+	Forcks                bool                `json:"forcks"`
 	Format                string              `json:"format"`
 	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
diff --git a/cloudstack/KubernetesService.go b/cloudstack/KubernetesService.go
index 426d410..35064e2 100644
--- a/cloudstack/KubernetesService.go
+++ b/cloudstack/KubernetesService.go
@@ -358,9 +358,22 @@ func (p *CreateKubernetesClusterParams) toURLValues() url.Values {
 	if v, found := p.p["account"]; found {
 		u.Set("account", v.(string))
 	}
+	if v, found := p.p["asnumber"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("asnumber", vv)
+	}
 	if v, found := p.p["clustertype"]; found {
 		u.Set("clustertype", v.(string))
 	}
+	if v, found := p.p["cniconfigdetails"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("cniconfigdetails[%d].%s", i, k), m[k])
+		}
+	}
+	if v, found := p.p["cniconfigurationid"]; found {
+		u.Set("cniconfigurationid", v.(string))
+	}
 	if v, found := p.p["controlnodes"]; found {
 		vv := strconv.FormatInt(v.(int64), 10)
 		u.Set("controlnodes", vv)
@@ -380,9 +393,16 @@ func (p *CreateKubernetesClusterParams) toURLValues() url.Values {
 	if v, found := p.p["domainid"]; found {
 		u.Set("domainid", v.(string))
 	}
+	if v, found := p.p["etcdnodes"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("etcdnodes", vv)
+	}
 	if v, found := p.p["externalloadbalanceripaddress"]; found {
 		u.Set("externalloadbalanceripaddress", v.(string))
 	}
+	if v, found := p.p["hypervisor"]; found {
+		u.Set("hypervisor", v.(string))
+	}
 	if v, found := p.p["keypair"]; found {
 		u.Set("keypair", v.(string))
 	}
@@ -399,10 +419,24 @@ func (p *CreateKubernetesClusterParams) toURLValues() url.Values {
 	if v, found := p.p["networkid"]; found {
 		u.Set("networkid", v.(string))
 	}
+	if v, found := p.p["nodeofferings"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("nodeofferings[%d].node", i), k)
+			u.Set(fmt.Sprintf("nodeofferings[%d].offering", i), m[k])
+		}
+	}
 	if v, found := p.p["noderootdisksize"]; found {
 		vv := strconv.FormatInt(v.(int64), 10)
 		u.Set("noderootdisksize", vv)
 	}
+	if v, found := p.p["nodetemplates"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("nodetemplates[%d].node", i), k)
+			u.Set(fmt.Sprintf("nodetemplates[%d].template", i), m[k])
+		}
+	}
 	if v, found := p.p["projectid"]; found {
 		u.Set("projectid", v.(string))
 	}
@@ -440,6 +474,27 @@ func (p *CreateKubernetesClusterParams) GetAccount() (string, bool) {
 	return value, ok
 }
 
+func (p *CreateKubernetesClusterParams) SetAsnumber(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["asnumber"] = v
+}
+
+func (p *CreateKubernetesClusterParams) ResetAsnumber() {
+	if p.p != nil && p.p["asnumber"] != nil {
+		delete(p.p, "asnumber")
+	}
+}
+
+func (p *CreateKubernetesClusterParams) GetAsnumber() (int64, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["asnumber"].(int64)
+	return value, ok
+}
+
 func (p *CreateKubernetesClusterParams) SetClustertype(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -461,6 +516,48 @@ func (p *CreateKubernetesClusterParams) GetClustertype() (string, bool) {
 	return value, ok
 }
 
+func (p *CreateKubernetesClusterParams) SetCniconfigdetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["cniconfigdetails"] = v
+}
+
+func (p *CreateKubernetesClusterParams) ResetCniconfigdetails() {
+	if p.p != nil && p.p["cniconfigdetails"] != nil {
+		delete(p.p, "cniconfigdetails")
+	}
+}
+
+func (p *CreateKubernetesClusterParams) GetCniconfigdetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["cniconfigdetails"].(map[string]string)
+	return value, ok
+}
+
+func (p *CreateKubernetesClusterParams) SetCniconfigurationid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["cniconfigurationid"] = v
+}
+
+func (p *CreateKubernetesClusterParams) ResetCniconfigurationid() {
+	if p.p != nil && p.p["cniconfigurationid"] != nil {
+		delete(p.p, "cniconfigurationid")
+	}
+}
+
+func (p *CreateKubernetesClusterParams) GetCniconfigurationid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["cniconfigurationid"].(string)
+	return value, ok
+}
+
 func (p *CreateKubernetesClusterParams) SetControlnodes(v int64) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -587,6 +684,27 @@ func (p *CreateKubernetesClusterParams) GetDomainid() (string, bool) {
 	return value, ok
 }
 
+func (p *CreateKubernetesClusterParams) SetEtcdnodes(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["etcdnodes"] = v
+}
+
+func (p *CreateKubernetesClusterParams) ResetEtcdnodes() {
+	if p.p != nil && p.p["etcdnodes"] != nil {
+		delete(p.p, "etcdnodes")
+	}
+}
+
+func (p *CreateKubernetesClusterParams) GetEtcdnodes() (int64, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["etcdnodes"].(int64)
+	return value, ok
+}
+
 func (p *CreateKubernetesClusterParams) SetExternalloadbalanceripaddress(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -608,6 +726,27 @@ func (p *CreateKubernetesClusterParams) GetExternalloadbalanceripaddress() (stri
 	return value, ok
 }
 
+func (p *CreateKubernetesClusterParams) SetHypervisor(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["hypervisor"] = v
+}
+
+func (p *CreateKubernetesClusterParams) ResetHypervisor() {
+	if p.p != nil && p.p["hypervisor"] != nil {
+		delete(p.p, "hypervisor")
+	}
+}
+
+func (p *CreateKubernetesClusterParams) GetHypervisor() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["hypervisor"].(string)
+	return value, ok
+}
+
 func (p *CreateKubernetesClusterParams) SetKeypair(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -713,6 +852,27 @@ func (p *CreateKubernetesClusterParams) GetNetworkid() (string, bool) {
 	return value, ok
 }
 
+func (p *CreateKubernetesClusterParams) SetNodeofferings(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["nodeofferings"] = v
+}
+
+func (p *CreateKubernetesClusterParams) ResetNodeofferings() {
+	if p.p != nil && p.p["nodeofferings"] != nil {
+		delete(p.p, "nodeofferings")
+	}
+}
+
+func (p *CreateKubernetesClusterParams) GetNodeofferings() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["nodeofferings"].(map[string]string)
+	return value, ok
+}
+
 func (p *CreateKubernetesClusterParams) SetNoderootdisksize(v int64) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -734,6 +894,27 @@ func (p *CreateKubernetesClusterParams) GetNoderootdisksize() (int64, bool) {
 	return value, ok
 }
 
+func (p *CreateKubernetesClusterParams) SetNodetemplates(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["nodetemplates"] = v
+}
+
+func (p *CreateKubernetesClusterParams) ResetNodetemplates() {
+	if p.p != nil && p.p["nodetemplates"] != nil {
+		delete(p.p, "nodetemplates")
+	}
+}
+
+func (p *CreateKubernetesClusterParams) GetNodetemplates() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["nodetemplates"].(map[string]string)
+	return value, ok
+}
+
 func (p *CreateKubernetesClusterParams) SetProjectid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -872,8 +1053,12 @@ type CreateKubernetesClusterResponse struct {
 	Associatednetworkname string            `json:"associatednetworkname"`
 	Autoscalingenabled    bool              `json:"autoscalingenabled"`
 	Clustertype           string            `json:"clustertype"`
+	Cniconfigname         string            `json:"cniconfigname"`
+	Cniconfigurationid    string            `json:"cniconfigurationid"`
 	Consoleendpoint       string            `json:"consoleendpoint"`
 	Controlnodes          int64             `json:"controlnodes"`
+	Controlofferingid     string            `json:"controlofferingid"`
+	Controlofferingname   string            `json:"controlofferingname"`
 	Cpunumber             string            `json:"cpunumber"`
 	Created               string            `json:"created"`
 	Description           string            `json:"description"`
@@ -881,6 +1066,10 @@ type CreateKubernetesClusterResponse struct {
 	Domainid              string            `json:"domainid"`
 	Domainpath            string            `json:"domainpath"`
 	Endpoint              string            `json:"endpoint"`
+	Etcdips               map[string]string `json:"etcdips"`
+	Etcdnodes             int64             `json:"etcdnodes"`
+	Etcdofferingid        string            `json:"etcdofferingid"`
+	Etcdofferingname      string            `json:"etcdofferingname"`
 	Hasannotations        bool              `json:"hasannotations"`
 	Id                    string            `json:"id"`
 	Ipaddress             string            `json:"ipaddress"`
@@ -904,6 +1093,8 @@ type CreateKubernetesClusterResponse struct {
 	State                 string            `json:"state"`
 	Templateid            string            `json:"templateid"`
 	Virtualmachines       []*VirtualMachine `json:"virtualmachines"`
+	Workerofferingid      string            `json:"workerofferingid"`
+	Workerofferingname    string            `json:"workerofferingname"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
@@ -1612,8 +1803,12 @@ type KubernetesCluster struct {
 	Associatednetworkname string            `json:"associatednetworkname"`
 	Autoscalingenabled    bool              `json:"autoscalingenabled"`
 	Clustertype           string            `json:"clustertype"`
+	Cniconfigname         string            `json:"cniconfigname"`
+	Cniconfigurationid    string            `json:"cniconfigurationid"`
 	Consoleendpoint       string            `json:"consoleendpoint"`
 	Controlnodes          int64             `json:"controlnodes"`
+	Controlofferingid     string            `json:"controlofferingid"`
+	Controlofferingname   string            `json:"controlofferingname"`
 	Cpunumber             string            `json:"cpunumber"`
 	Created               string            `json:"created"`
 	Description           string            `json:"description"`
@@ -1621,6 +1816,10 @@ type KubernetesCluster struct {
 	Domainid              string            `json:"domainid"`
 	Domainpath            string            `json:"domainpath"`
 	Endpoint              string            `json:"endpoint"`
+	Etcdips               map[string]string `json:"etcdips"`
+	Etcdnodes             int64             `json:"etcdnodes"`
+	Etcdofferingid        string            `json:"etcdofferingid"`
+	Etcdofferingname      string            `json:"etcdofferingname"`
 	Hasannotations        bool              `json:"hasannotations"`
 	Id                    string            `json:"id"`
 	Ipaddress             string            `json:"ipaddress"`
@@ -1644,6 +1843,8 @@ type KubernetesCluster struct {
 	State                 string            `json:"state"`
 	Templateid            string            `json:"templateid"`
 	Virtualmachines       []*VirtualMachine `json:"virtualmachines"`
+	Workerofferingid      string            `json:"workerofferingid"`
+	Workerofferingname    string            `json:"workerofferingname"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
@@ -2014,6 +2215,13 @@ func (p *ScaleKubernetesClusterParams) toURLValues() url.Values {
 		vv := strings.Join(v.([]string), ",")
 		u.Set("nodeids", vv)
 	}
+	if v, found := p.p["nodeofferings"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("nodeofferings[%d].node", i), k)
+			u.Set(fmt.Sprintf("nodeofferings[%d].offering", i), m[k])
+		}
+	}
 	if v, found := p.p["serviceofferingid"]; found {
 		u.Set("serviceofferingid", v.(string))
 	}
@@ -2129,6 +2337,27 @@ func (p *ScaleKubernetesClusterParams) GetNodeids() ([]string, bool) {
 	return value, ok
 }
 
+func (p *ScaleKubernetesClusterParams) SetNodeofferings(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["nodeofferings"] = v
+}
+
+func (p *ScaleKubernetesClusterParams) ResetNodeofferings() {
+	if p.p != nil && p.p["nodeofferings"] != nil {
+		delete(p.p, "nodeofferings")
+	}
+}
+
+func (p *ScaleKubernetesClusterParams) GetNodeofferings() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["nodeofferings"].(map[string]string)
+	return value, ok
+}
+
 func (p *ScaleKubernetesClusterParams) SetServiceofferingid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2220,8 +2449,12 @@ type ScaleKubernetesClusterResponse struct {
 	Associatednetworkname string            `json:"associatednetworkname"`
 	Autoscalingenabled    bool              `json:"autoscalingenabled"`
 	Clustertype           string            `json:"clustertype"`
+	Cniconfigname         string            `json:"cniconfigname"`
+	Cniconfigurationid    string            `json:"cniconfigurationid"`
 	Consoleendpoint       string            `json:"consoleendpoint"`
 	Controlnodes          int64             `json:"controlnodes"`
+	Controlofferingid     string            `json:"controlofferingid"`
+	Controlofferingname   string            `json:"controlofferingname"`
 	Cpunumber             string            `json:"cpunumber"`
 	Created               string            `json:"created"`
 	Description           string            `json:"description"`
@@ -2229,6 +2462,10 @@ type ScaleKubernetesClusterResponse struct {
 	Domainid              string            `json:"domainid"`
 	Domainpath            string            `json:"domainpath"`
 	Endpoint              string            `json:"endpoint"`
+	Etcdips               map[string]string `json:"etcdips"`
+	Etcdnodes             int64             `json:"etcdnodes"`
+	Etcdofferingid        string            `json:"etcdofferingid"`
+	Etcdofferingname      string            `json:"etcdofferingname"`
 	Hasannotations        bool              `json:"hasannotations"`
 	Id                    string            `json:"id"`
 	Ipaddress             string            `json:"ipaddress"`
@@ -2252,6 +2489,8 @@ type ScaleKubernetesClusterResponse struct {
 	State                 string            `json:"state"`
 	Templateid            string            `json:"templateid"`
 	Virtualmachines       []*VirtualMachine `json:"virtualmachines"`
+	Workerofferingid      string            `json:"workerofferingid"`
+	Workerofferingname    string            `json:"workerofferingname"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
@@ -2341,8 +2580,12 @@ type StartKubernetesClusterResponse struct {
 	Associatednetworkname string            `json:"associatednetworkname"`
 	Autoscalingenabled    bool              `json:"autoscalingenabled"`
 	Clustertype           string            `json:"clustertype"`
+	Cniconfigname         string            `json:"cniconfigname"`
+	Cniconfigurationid    string            `json:"cniconfigurationid"`
 	Consoleendpoint       string            `json:"consoleendpoint"`
 	Controlnodes          int64             `json:"controlnodes"`
+	Controlofferingid     string            `json:"controlofferingid"`
+	Controlofferingname   string            `json:"controlofferingname"`
 	Cpunumber             string            `json:"cpunumber"`
 	Created               string            `json:"created"`
 	Description           string            `json:"description"`
@@ -2350,6 +2593,10 @@ type StartKubernetesClusterResponse struct {
 	Domainid              string            `json:"domainid"`
 	Domainpath            string            `json:"domainpath"`
 	Endpoint              string            `json:"endpoint"`
+	Etcdips               map[string]string `json:"etcdips"`
+	Etcdnodes             int64             `json:"etcdnodes"`
+	Etcdofferingid        string            `json:"etcdofferingid"`
+	Etcdofferingname      string            `json:"etcdofferingname"`
 	Hasannotations        bool              `json:"hasannotations"`
 	Id                    string            `json:"id"`
 	Ipaddress             string            `json:"ipaddress"`
@@ -2373,6 +2620,8 @@ type StartKubernetesClusterResponse struct {
 	State                 string            `json:"state"`
 	Templateid            string            `json:"templateid"`
 	Virtualmachines       []*VirtualMachine `json:"virtualmachines"`
+	Workerofferingid      string            `json:"workerofferingid"`
+	Workerofferingname    string            `json:"workerofferingname"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
@@ -2675,8 +2924,12 @@ type UpgradeKubernetesClusterResponse struct {
 	Associatednetworkname string            `json:"associatednetworkname"`
 	Autoscalingenabled    bool              `json:"autoscalingenabled"`
 	Clustertype           string            `json:"clustertype"`
+	Cniconfigname         string            `json:"cniconfigname"`
+	Cniconfigurationid    string            `json:"cniconfigurationid"`
 	Consoleendpoint       string            `json:"consoleendpoint"`
 	Controlnodes          int64             `json:"controlnodes"`
+	Controlofferingid     string            `json:"controlofferingid"`
+	Controlofferingname   string            `json:"controlofferingname"`
 	Cpunumber             string            `json:"cpunumber"`
 	Created               string            `json:"created"`
 	Description           string            `json:"description"`
@@ -2684,6 +2937,10 @@ type UpgradeKubernetesClusterResponse struct {
 	Domainid              string            `json:"domainid"`
 	Domainpath            string            `json:"domainpath"`
 	Endpoint              string            `json:"endpoint"`
+	Etcdips               map[string]string `json:"etcdips"`
+	Etcdnodes             int64             `json:"etcdnodes"`
+	Etcdofferingid        string            `json:"etcdofferingid"`
+	Etcdofferingname      string            `json:"etcdofferingname"`
 	Hasannotations        bool              `json:"hasannotations"`
 	Id                    string            `json:"id"`
 	Ipaddress             string            `json:"ipaddress"`
@@ -2707,6 +2964,8 @@ type UpgradeKubernetesClusterResponse struct {
 	State                 string            `json:"state"`
 	Templateid            string            `json:"templateid"`
 	Virtualmachines       []*VirtualMachine `json:"virtualmachines"`
+	Workerofferingid      string            `json:"workerofferingid"`
+	Workerofferingname    string            `json:"workerofferingname"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
diff --git a/cloudstack/LDAPService.go b/cloudstack/LDAPService.go
index 5bfe100..cc8af48 100644
--- a/cloudstack/LDAPService.go
+++ b/cloudstack/LDAPService.go
@@ -1153,6 +1153,15 @@ type LdapCreateAccountResponse struct {
 	Accountdetails            map[string]string               `json:"accountdetails"`
 	Accounttype               int                             `json:"accounttype"`
 	Apikeyaccess              string                          `json:"apikeyaccess"`
+	Backupavailable           string                          `json:"backupavailable"`
+	Backuplimit               string                          `json:"backuplimit"`
+	Backupstorageavailable    string                          `json:"backupstorageavailable"`
+	Backupstoragelimit        string                          `json:"backupstoragelimit"`
+	Backupstoragetotal        int64                           `json:"backupstoragetotal"`
+	Backuptotal               int64                           `json:"backuptotal"`
+	Bucketavailable           string                          `json:"bucketavailable"`
+	Bucketlimit               string                          `json:"bucketlimit"`
+	Buckettotal               int64                           `json:"buckettotal"`
 	Cpuavailable              string                          `json:"cpuavailable"`
 	Cpulimit                  string                          `json:"cpulimit"`
 	Cputotal                  int64                           `json:"cputotal"`
@@ -1161,6 +1170,9 @@ type LdapCreateAccountResponse struct {
 	Domain                    string                          `json:"domain"`
 	Domainid                  string                          `json:"domainid"`
 	Domainpath                string                          `json:"domainpath"`
+	Gpuavailable              string                          `json:"gpuavailable"`
+	Gpulimit                  string                          `json:"gpulimit"`
+	Gputotal                  int64                           `json:"gputotal"`
 	Groups                    []string                        `json:"groups"`
 	Icon                      interface{}                     `json:"icon"`
 	Id                        string                          `json:"id"`
@@ -1179,6 +1191,9 @@ type LdapCreateAccountResponse struct {
 	Networkdomain             string                          `json:"networkdomain"`
 	Networklimit              string                          `json:"networklimit"`
 	Networktotal              int64                           `json:"networktotal"`
+	Objectstorageavailable    string                          `json:"objectstorageavailable"`
+	Objectstoragelimit        string                          `json:"objectstoragelimit"`
+	Objectstoragetotal        int64                           `json:"objectstoragetotal"`
 	Primarystorageavailable   string                          `json:"primarystorageavailable"`
 	Primarystoragelimit       string                          `json:"primarystoragelimit"`
 	Primarystoragetotal       int64                           `json:"primarystoragetotal"`
diff --git a/cloudstack/ManagementService.go b/cloudstack/ManagementService.go
index 3619c0f..a8370f2 100644
--- a/cloudstack/ManagementService.go
+++ b/cloudstack/ManagementService.go
@@ -43,7 +43,7 @@ type ManagementServiceIface interface {
 	PrepareForShutdown(p *PrepareForShutdownParams) (*PrepareForShutdownResponse, error)
 	NewPrepareForShutdownParams(managementserverid UUID) *PrepareForShutdownParams
 	ReadyForShutdown(p *ReadyForShutdownParams) (*ReadyForShutdownResponse, error)
-	NewReadyForShutdownParams() *ReadyForShutdownParams
+	NewReadyForShutdownParams(managementserverid UUID) *ReadyForShutdownParams
 	TriggerShutdown(p *TriggerShutdownParams) (*TriggerShutdownResponse, error)
 	NewTriggerShutdownParams(managementserverid UUID) *TriggerShutdownParams
 }
@@ -109,12 +109,16 @@ func (s *ManagementService) CancelShutdown(p *CancelShutdownParams) (*CancelShut
 }
 
 type CancelShutdownResponse struct {
-	JobID              string `json:"jobid"`
-	Jobstatus          int    `json:"jobstatus"`
-	Managementserverid UUID   `json:"managementserverid"`
-	Pendingjobscount   int64  `json:"pendingjobscount"`
-	Readyforshutdown   bool   `json:"readyforshutdown"`
-	Shutdowntriggered  bool   `json:"shutdowntriggered"`
+	Agents               []string `json:"agents"`
+	Agentscount          int64    `json:"agentscount"`
+	JobID                string   `json:"jobid"`
+	Jobstatus            int      `json:"jobstatus"`
+	Maintenanceinitiated bool     `json:"maintenanceinitiated"`
+	Managementserverid   UUID     `json:"managementserverid"`
+	Pendingjobscount     int64    `json:"pendingjobscount"`
+	Readyforshutdown     bool     `json:"readyforshutdown"`
+	Shutdowntriggered    bool     `json:"shutdowntriggered"`
+	State                string   `json:"state"`
 }
 
 type ListManagementServersParams struct {
@@ -388,6 +392,8 @@ type ListManagementServersResponse struct {
 }
 
 type ManagementServer struct {
+	Agents           []string `json:"agents"`
+	Agentscount      int64    `json:"agentscount"`
 	Id               string   `json:"id"`
 	Ipaddress        string   `json:"ipaddress"`
 	Javadistribution string   `json:"javadistribution"`
@@ -395,12 +401,14 @@ type ManagementServer struct {
 	JobID            string   `json:"jobid"`
 	Jobstatus        int      `json:"jobstatus"`
 	Kernelversion    string   `json:"kernelversion"`
+	Lastagents       []string `json:"lastagents"`
 	Lastboottime     string   `json:"lastboottime"`
 	Lastserverstart  string   `json:"lastserverstart"`
 	Lastserverstop   string   `json:"lastserverstop"`
 	Name             string   `json:"name"`
 	Osdistribution   string   `json:"osdistribution"`
 	Peers            []string `json:"peers"`
+	Pendingjobscount int64    `json:"pendingjobscount"`
 	Serviceip        string   `json:"serviceip"`
 	State            string   `json:"state"`
 	Version          string   `json:"version"`
@@ -703,6 +711,8 @@ type ListManagementServersMetricsResponse struct {
 
 type ManagementServersMetric struct {
 	Agentcount              int       `json:"agentcount"`
+	Agents                  []string  `json:"agents"`
+	Agentscount             int64     `json:"agentscount"`
 	Availableprocessors     int       `json:"availableprocessors"`
 	Collectiontime          string    `json:"collectiontime"`
 	Cpuload                 string    `json:"cpuload"`
@@ -716,6 +726,7 @@ type ManagementServersMetric struct {
 	JobID                   string    `json:"jobid"`
 	Jobstatus               int       `json:"jobstatus"`
 	Kernelversion           string    `json:"kernelversion"`
+	Lastagents              []string  `json:"lastagents"`
 	Lastboottime            string    `json:"lastboottime"`
 	Lastserverstart         string    `json:"lastserverstart"`
 	Lastserverstop          string    `json:"lastserverstop"`
@@ -723,6 +734,7 @@ type ManagementServersMetric struct {
 	Name                    string    `json:"name"`
 	Osdistribution          string    `json:"osdistribution"`
 	Peers                   []string  `json:"peers"`
+	Pendingjobscount        int64     `json:"pendingjobscount"`
 	Serviceip               string    `json:"serviceip"`
 	Sessions                int64     `json:"sessions"`
 	State                   string    `json:"state"`
@@ -804,12 +816,16 @@ func (s *ManagementService) PrepareForShutdown(p *PrepareForShutdownParams) (*Pr
 }
 
 type PrepareForShutdownResponse struct {
-	JobID              string `json:"jobid"`
-	Jobstatus          int    `json:"jobstatus"`
-	Managementserverid UUID   `json:"managementserverid"`
-	Pendingjobscount   int64  `json:"pendingjobscount"`
-	Readyforshutdown   bool   `json:"readyforshutdown"`
-	Shutdowntriggered  bool   `json:"shutdowntriggered"`
+	Agents               []string `json:"agents"`
+	Agentscount          int64    `json:"agentscount"`
+	JobID                string   `json:"jobid"`
+	Jobstatus            int      `json:"jobstatus"`
+	Maintenanceinitiated bool     `json:"maintenanceinitiated"`
+	Managementserverid   UUID     `json:"managementserverid"`
+	Pendingjobscount     int64    `json:"pendingjobscount"`
+	Readyforshutdown     bool     `json:"readyforshutdown"`
+	Shutdowntriggered    bool     `json:"shutdowntriggered"`
+	State                string   `json:"state"`
 }
 
 type ReadyForShutdownParams struct {
@@ -850,9 +866,10 @@ func (p *ReadyForShutdownParams) GetManagementserverid() (UUID, bool) {
 
 // You should always use this function to get a new ReadyForShutdownParams instance,
 // as then you are sure you have configured all required params
-func (s *ManagementService) NewReadyForShutdownParams() *ReadyForShutdownParams {
+func (s *ManagementService) NewReadyForShutdownParams(managementserverid UUID) *ReadyForShutdownParams {
 	p := &ReadyForShutdownParams{}
 	p.p = make(map[string]interface{})
+	p.p["managementserverid"] = managementserverid
 	return p
 }
 
@@ -875,12 +892,16 @@ func (s *ManagementService) ReadyForShutdown(p *ReadyForShutdownParams) (*ReadyF
 }
 
 type ReadyForShutdownResponse struct {
-	JobID              string `json:"jobid"`
-	Jobstatus          int    `json:"jobstatus"`
-	Managementserverid UUID   `json:"managementserverid"`
-	Pendingjobscount   int64  `json:"pendingjobscount"`
-	Readyforshutdown   bool   `json:"readyforshutdown"`
-	Shutdowntriggered  bool   `json:"shutdowntriggered"`
+	Agents               []string `json:"agents"`
+	Agentscount          int64    `json:"agentscount"`
+	JobID                string   `json:"jobid"`
+	Jobstatus            int      `json:"jobstatus"`
+	Maintenanceinitiated bool     `json:"maintenanceinitiated"`
+	Managementserverid   UUID     `json:"managementserverid"`
+	Pendingjobscount     int64    `json:"pendingjobscount"`
+	Readyforshutdown     bool     `json:"readyforshutdown"`
+	Shutdowntriggered    bool     `json:"shutdowntriggered"`
+	State                string   `json:"state"`
 }
 
 type TriggerShutdownParams struct {
@@ -928,7 +949,7 @@ func (s *ManagementService) NewTriggerShutdownParams(managementserverid UUID) *T
 	return p
 }
 
-// Triggers an automatic safe shutdown of CloudStack by not accepting new jobs and shutting down when all pending jobbs have been completed. Triggers an immediate shutdown if forced
+// Triggers an automatic safe shutdown of CloudStack by not accepting new jobs and shutting down when all pending jobs have been completed.
 func (s *ManagementService) TriggerShutdown(p *TriggerShutdownParams) (*TriggerShutdownResponse, error) {
 	resp, err := s.cs.newPostRequest("triggerShutdown", p.toURLValues())
 	if err != nil {
@@ -944,10 +965,14 @@ func (s *ManagementService) TriggerShutdown(p *TriggerShutdownParams) (*TriggerS
 }
 
 type TriggerShutdownResponse struct {
-	JobID              string `json:"jobid"`
-	Jobstatus          int    `json:"jobstatus"`
-	Managementserverid UUID   `json:"managementserverid"`
-	Pendingjobscount   int64  `json:"pendingjobscount"`
-	Readyforshutdown   bool   `json:"readyforshutdown"`
-	Shutdowntriggered  bool   `json:"shutdowntriggered"`
+	Agents               []string `json:"agents"`
+	Agentscount          int64    `json:"agentscount"`
+	JobID                string   `json:"jobid"`
+	Jobstatus            int      `json:"jobstatus"`
+	Maintenanceinitiated bool     `json:"maintenanceinitiated"`
+	Managementserverid   UUID     `json:"managementserverid"`
+	Pendingjobscount     int64    `json:"pendingjobscount"`
+	Readyforshutdown     bool     `json:"readyforshutdown"`
+	Shutdowntriggered    bool     `json:"shutdowntriggered"`
+	State                string   `json:"state"`
 }
diff --git a/cloudstack/ManagementService_mock.go b/cloudstack/ManagementService_mock.go
index 5a57d57..cf4bb98 100644
--- a/cloudstack/ManagementService_mock.go
+++ b/cloudstack/ManagementService_mock.go
@@ -286,17 +286,17 @@ func (mr *MockManagementServiceIfaceMockRecorder) NewPrepareForShutdownParams(ma
 }
 
 // NewReadyForShutdownParams mocks base method.
-func (m *MockManagementServiceIface) NewReadyForShutdownParams() *ReadyForShutdownParams {
+func (m *MockManagementServiceIface) NewReadyForShutdownParams(managementserverid UUID) *ReadyForShutdownParams {
 	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "NewReadyForShutdownParams")
+	ret := m.ctrl.Call(m, "NewReadyForShutdownParams", managementserverid)
 	ret0, _ := ret[0].(*ReadyForShutdownParams)
 	return ret0
 }
 
 // NewReadyForShutdownParams indicates an expected call of NewReadyForShutdownParams.
-func (mr *MockManagementServiceIfaceMockRecorder) NewReadyForShutdownParams() *gomock.Call {
+func (mr *MockManagementServiceIfaceMockRecorder) NewReadyForShutdownParams(managementserverid any) *gomock.Call {
 	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewReadyForShutdownParams", reflect.TypeOf((*MockManagementServiceIface)(nil).NewReadyForShutdownParams))
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewReadyForShutdownParams", reflect.TypeOf((*MockManagementServiceIface)(nil).NewReadyForShutdownParams), managementserverid)
 }
 
 // NewTriggerShutdownParams mocks base method.
diff --git a/cloudstack/NetworkOfferingService.go b/cloudstack/NetworkOfferingService.go
index 9fa2148..2d670bd 100644
--- a/cloudstack/NetworkOfferingService.go
+++ b/cloudstack/NetworkOfferingService.go
@@ -126,6 +126,9 @@ func (p *CreateNetworkOfferingParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("nsxsupportsinternallb", vv)
 	}
+	if v, found := p.p["provider"]; found {
+		u.Set("provider", v.(string))
+	}
 	if v, found := p.p["routingmode"]; found {
 		u.Set("routingmode", v.(string))
 	}
@@ -595,6 +598,27 @@ func (p *CreateNetworkOfferingParams) GetNsxsupportsinternallb() (bool, bool) {
 	return value, ok
 }
 
+func (p *CreateNetworkOfferingParams) SetProvider(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["provider"] = v
+}
+
+func (p *CreateNetworkOfferingParams) ResetProvider() {
+	if p.p != nil && p.p["provider"] != nil {
+		delete(p.p, "provider")
+	}
+}
+
+func (p *CreateNetworkOfferingParams) GetProvider() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["provider"].(string)
+	return value, ok
+}
+
 func (p *CreateNetworkOfferingParams) SetRoutingmode(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
diff --git a/cloudstack/NetworkService.go b/cloudstack/NetworkService.go
index 924f1f6..10b35bf 100644
--- a/cloudstack/NetworkService.go
+++ b/cloudstack/NetworkService.go
@@ -2807,7 +2807,6 @@ type DedicatePublicIpRangeResponse struct {
 	Domainpath        string `json:"domainpath"`
 	Endip             string `json:"endip"`
 	Endipv6           string `json:"endipv6"`
-	Fornsx            bool   `json:"fornsx"`
 	Forsystemvms      bool   `json:"forsystemvms"`
 	Forvirtualnetwork bool   `json:"forvirtualnetwork"`
 	Gateway           string `json:"gateway"`
@@ -2823,6 +2822,7 @@ type DedicatePublicIpRangeResponse struct {
 	Podname           string `json:"podname"`
 	Project           string `json:"project"`
 	Projectid         string `json:"projectid"`
+	Provider          string `json:"provider"`
 	Startip           string `json:"startip"`
 	Startipv6         string `json:"startipv6"`
 	Vlan              string `json:"vlan"`
diff --git a/cloudstack/NicService.go b/cloudstack/NicService.go
index 5c384fd..3fe8f33 100644
--- a/cloudstack/NicService.go
+++ b/cloudstack/NicService.go
@@ -619,6 +619,9 @@ type UpdateVmNicIpResponse struct {
 	Domainid              string                               `json:"domainid"`
 	Domainpath            string                               `json:"domainpath"`
 	Forvirtualnetwork     bool                                 `json:"forvirtualnetwork"`
+	Gpucardid             string                               `json:"gpucardid"`
+	Gpucardname           string                               `json:"gpucardname"`
+	Gpucount              int                                  `json:"gpucount"`
 	Group                 string                               `json:"group"`
 	Groupid               string                               `json:"groupid"`
 	Guestosid             string                               `json:"guestosid"`
@@ -640,6 +643,12 @@ type UpdateVmNicIpResponse struct {
 	Jobstatus             int                                  `json:"jobstatus"`
 	Keypairs              string                               `json:"keypairs"`
 	Lastupdated           string                               `json:"lastupdated"`
+	Leaseduration         int                                  `json:"leaseduration"`
+	Leaseexpiryaction     string                               `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                               `json:"leaseexpirydate"`
+	Maxheads              int64                                `json:"maxheads"`
+	Maxresolutionx        int64                                `json:"maxresolutionx"`
+	Maxresolutiony        int64                                `json:"maxresolutiony"`
 	Memory                int                                  `json:"memory"`
 	Memoryintfreekbs      int64                                `json:"memoryintfreekbs"`
 	Memorykbs             int64                                `json:"memorykbs"`
@@ -681,6 +690,9 @@ type UpdateVmNicIpResponse struct {
 	Userid                string                               `json:"userid"`
 	Username              string                               `json:"username"`
 	Vgpu                  string                               `json:"vgpu"`
+	Vgpuprofileid         string                               `json:"vgpuprofileid"`
+	Vgpuprofilename       string                               `json:"vgpuprofilename"`
+	Videoram              int64                                `json:"videoram"`
 	Vmtype                string                               `json:"vmtype"`
 	Vnfdetails            map[string]string                    `json:"vnfdetails"`
 	Vnfnics               []string                             `json:"vnfnics"`
diff --git a/cloudstack/ObjectStoreService.go b/cloudstack/ObjectStoreService.go
index a881797..2422e00 100644
--- a/cloudstack/ObjectStoreService.go
+++ b/cloudstack/ObjectStoreService.go
@@ -29,7 +29,7 @@ import (
 
 type ObjectStoreServiceIface interface {
 	CreateBucket(p *CreateBucketParams) (*CreateBucketResponse, error)
-	NewCreateBucketParams(name string, objectstorageid string) *CreateBucketParams
+	NewCreateBucketParams(name string, objectstorageid string, quota int) *CreateBucketParams
 	DeleteBucket(p *DeleteBucketParams) (*DeleteBucketResponse, error)
 	NewDeleteBucketParams(id string) *DeleteBucketParams
 	UpdateBucket(p *UpdateBucketParams) (*UpdateBucketResponse, error)
@@ -299,11 +299,12 @@ func (p *CreateBucketParams) GetVersioning() (bool, bool) {
 
 // You should always use this function to get a new CreateBucketParams instance,
 // as then you are sure you have configured all required params
-func (s *ObjectStoreService) NewCreateBucketParams(name string, objectstorageid string) *CreateBucketParams {
+func (s *ObjectStoreService) NewCreateBucketParams(name string, objectstorageid string, quota int) *CreateBucketParams {
 	p := &CreateBucketParams{}
 	p.p = make(map[string]interface{})
 	p.p["name"] = name
 	p.p["objectstorageid"] = objectstorageid
+	p.p["quota"] = quota
 	return p
 }
 
diff --git a/cloudstack/ObjectStoreService_mock.go b/cloudstack/ObjectStoreService_mock.go
index 41dfa4b..10dbaf6 100644
--- a/cloudstack/ObjectStoreService_mock.go
+++ b/cloudstack/ObjectStoreService_mock.go
@@ -167,17 +167,17 @@ func (mr *MockObjectStoreServiceIfaceMockRecorder) ListBuckets(p any) *gomock.Ca
 }
 
 // NewCreateBucketParams mocks base method.
-func (m *MockObjectStoreServiceIface) NewCreateBucketParams(name, objectstorageid string) *CreateBucketParams {
+func (m *MockObjectStoreServiceIface) NewCreateBucketParams(name, objectstorageid string, quota int) *CreateBucketParams {
 	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "NewCreateBucketParams", name, objectstorageid)
+	ret := m.ctrl.Call(m, "NewCreateBucketParams", name, objectstorageid, quota)
 	ret0, _ := ret[0].(*CreateBucketParams)
 	return ret0
 }
 
 // NewCreateBucketParams indicates an expected call of NewCreateBucketParams.
-func (mr *MockObjectStoreServiceIfaceMockRecorder) NewCreateBucketParams(name, objectstorageid any) *gomock.Call {
+func (mr *MockObjectStoreServiceIfaceMockRecorder) NewCreateBucketParams(name, objectstorageid, quota any) *gomock.Call {
 	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewCreateBucketParams", reflect.TypeOf((*MockObjectStoreServiceIface)(nil).NewCreateBucketParams), name, objectstorageid)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewCreateBucketParams", reflect.TypeOf((*MockObjectStoreServiceIface)(nil).NewCreateBucketParams), name, objectstorageid, quota)
 }
 
 // NewDeleteBucketParams mocks base method.
diff --git a/cloudstack/PodService.go b/cloudstack/PodService.go
index b1cbaa3..9bf7fb7 100644
--- a/cloudstack/PodService.go
+++ b/cloudstack/PodService.go
@@ -282,22 +282,24 @@ func (s *PodService) CreateManagementNetworkIpRange(p *CreateManagementNetworkIp
 }
 
 type CreateManagementNetworkIpRangeResponse struct {
-	Allocationstate string                                           `json:"allocationstate"`
-	Capacity        []CreateManagementNetworkIpRangeResponseCapacity `json:"capacity"`
-	Endip           []string                                         `json:"endip"`
-	Forsystemvms    []string                                         `json:"forsystemvms"`
-	Gateway         string                                           `json:"gateway"`
-	Hasannotations  bool                                             `json:"hasannotations"`
-	Id              string                                           `json:"id"`
-	Ipranges        []CreateManagementNetworkIpRangeResponseIpranges `json:"ipranges"`
-	JobID           string                                           `json:"jobid"`
-	Jobstatus       int                                              `json:"jobstatus"`
-	Name            string                                           `json:"name"`
-	Netmask         string                                           `json:"netmask"`
-	Startip         []string                                         `json:"startip"`
-	Vlanid          []string                                         `json:"vlanid"`
-	Zoneid          string                                           `json:"zoneid"`
-	Zonename        string                                           `json:"zonename"`
+	Allocationstate         string                                           `json:"allocationstate"`
+	Capacity                []CreateManagementNetworkIpRangeResponseCapacity `json:"capacity"`
+	Endip                   []string                                         `json:"endip"`
+	Forsystemvms            []string                                         `json:"forsystemvms"`
+	Gateway                 string                                           `json:"gateway"`
+	Hasannotations          bool                                             `json:"hasannotations"`
+	Id                      string                                           `json:"id"`
+	Ipranges                []CreateManagementNetworkIpRangeResponseIpranges `json:"ipranges"`
+	JobID                   string                                           `json:"jobid"`
+	Jobstatus               int                                              `json:"jobstatus"`
+	Name                    string                                           `json:"name"`
+	Netmask                 string                                           `json:"netmask"`
+	Startip                 []string                                         `json:"startip"`
+	Storageaccessgroups     string                                           `json:"storageaccessgroups"`
+	Vlanid                  []string                                         `json:"vlanid"`
+	Zoneid                  string                                           `json:"zoneid"`
+	Zonename                string                                           `json:"zonename"`
+	Zonestorageaccessgroups string                                           `json:"zonestorageaccessgroups"`
 }
 
 type CreateManagementNetworkIpRangeResponseIpranges struct {
@@ -352,6 +354,10 @@ func (p *CreatePodParams) toURLValues() url.Values {
 	if v, found := p.p["startip"]; found {
 		u.Set("startip", v.(string))
 	}
+	if v, found := p.p["storageaccessgroups"]; found {
+		vv := strings.Join(v.([]string), ",")
+		u.Set("storageaccessgroups", vv)
+	}
 	if v, found := p.p["zoneid"]; found {
 		u.Set("zoneid", v.(string))
 	}
@@ -484,6 +490,27 @@ func (p *CreatePodParams) GetStartip() (string, bool) {
 	return value, ok
 }
 
+func (p *CreatePodParams) SetStorageaccessgroups(v []string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroups"] = v
+}
+
+func (p *CreatePodParams) ResetStorageaccessgroups() {
+	if p.p != nil && p.p["storageaccessgroups"] != nil {
+		delete(p.p, "storageaccessgroups")
+	}
+}
+
+func (p *CreatePodParams) GetStorageaccessgroups() ([]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroups"].([]string)
+	return value, ok
+}
+
 func (p *CreatePodParams) SetZoneid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -535,22 +562,24 @@ func (s *PodService) CreatePod(p *CreatePodParams) (*CreatePodResponse, error) {
 }
 
 type CreatePodResponse struct {
-	Allocationstate string                      `json:"allocationstate"`
-	Capacity        []CreatePodResponseCapacity `json:"capacity"`
-	Endip           []string                    `json:"endip"`
-	Forsystemvms    []string                    `json:"forsystemvms"`
-	Gateway         string                      `json:"gateway"`
-	Hasannotations  bool                        `json:"hasannotations"`
-	Id              string                      `json:"id"`
-	Ipranges        []CreatePodResponseIpranges `json:"ipranges"`
-	JobID           string                      `json:"jobid"`
-	Jobstatus       int                         `json:"jobstatus"`
-	Name            string                      `json:"name"`
-	Netmask         string                      `json:"netmask"`
-	Startip         []string                    `json:"startip"`
-	Vlanid          []string                    `json:"vlanid"`
-	Zoneid          string                      `json:"zoneid"`
-	Zonename        string                      `json:"zonename"`
+	Allocationstate         string                      `json:"allocationstate"`
+	Capacity                []CreatePodResponseCapacity `json:"capacity"`
+	Endip                   []string                    `json:"endip"`
+	Forsystemvms            []string                    `json:"forsystemvms"`
+	Gateway                 string                      `json:"gateway"`
+	Hasannotations          bool                        `json:"hasannotations"`
+	Id                      string                      `json:"id"`
+	Ipranges                []CreatePodResponseIpranges `json:"ipranges"`
+	JobID                   string                      `json:"jobid"`
+	Jobstatus               int                         `json:"jobstatus"`
+	Name                    string                      `json:"name"`
+	Netmask                 string                      `json:"netmask"`
+	Startip                 []string                    `json:"startip"`
+	Storageaccessgroups     string                      `json:"storageaccessgroups"`
+	Vlanid                  []string                    `json:"vlanid"`
+	Zoneid                  string                      `json:"zoneid"`
+	Zonename                string                      `json:"zonename"`
+	Zonestorageaccessgroups string                      `json:"zonestorageaccessgroups"`
 }
 
 type CreatePodResponseIpranges struct {
@@ -1223,6 +1252,9 @@ func (p *ListPodsParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("showcapacities", vv)
 	}
+	if v, found := p.p["storageaccessgroup"]; found {
+		u.Set("storageaccessgroup", v.(string))
+	}
 	if v, found := p.p["zoneid"]; found {
 		u.Set("zoneid", v.(string))
 	}
@@ -1376,6 +1408,27 @@ func (p *ListPodsParams) GetShowcapacities() (bool, bool) {
 	return value, ok
 }
 
+func (p *ListPodsParams) SetStorageaccessgroup(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroup"] = v
+}
+
+func (p *ListPodsParams) ResetStorageaccessgroup() {
+	if p.p != nil && p.p["storageaccessgroup"] != nil {
+		delete(p.p, "storageaccessgroup")
+	}
+}
+
+func (p *ListPodsParams) GetStorageaccessgroup() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroup"].(string)
+	return value, ok
+}
+
 func (p *ListPodsParams) SetZoneid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1509,22 +1562,24 @@ type ListPodsResponse struct {
 }
 
 type Pod struct {
-	Allocationstate string        `json:"allocationstate"`
-	Capacity        []PodCapacity `json:"capacity"`
-	Endip           []string      `json:"endip"`
-	Forsystemvms    []string      `json:"forsystemvms"`
-	Gateway         string        `json:"gateway"`
-	Hasannotations  bool          `json:"hasannotations"`
-	Id              string        `json:"id"`
-	Ipranges        []PodIpranges `json:"ipranges"`
-	JobID           string        `json:"jobid"`
-	Jobstatus       int           `json:"jobstatus"`
-	Name            string        `json:"name"`
-	Netmask         string        `json:"netmask"`
-	Startip         []string      `json:"startip"`
-	Vlanid          []string      `json:"vlanid"`
-	Zoneid          string        `json:"zoneid"`
-	Zonename        string        `json:"zonename"`
+	Allocationstate         string        `json:"allocationstate"`
+	Capacity                []PodCapacity `json:"capacity"`
+	Endip                   []string      `json:"endip"`
+	Forsystemvms            []string      `json:"forsystemvms"`
+	Gateway                 string        `json:"gateway"`
+	Hasannotations          bool          `json:"hasannotations"`
+	Id                      string        `json:"id"`
+	Ipranges                []PodIpranges `json:"ipranges"`
+	JobID                   string        `json:"jobid"`
+	Jobstatus               int           `json:"jobstatus"`
+	Name                    string        `json:"name"`
+	Netmask                 string        `json:"netmask"`
+	Startip                 []string      `json:"startip"`
+	Storageaccessgroups     string        `json:"storageaccessgroups"`
+	Vlanid                  []string      `json:"vlanid"`
+	Zoneid                  string        `json:"zoneid"`
+	Zonename                string        `json:"zonename"`
+	Zonestorageaccessgroups string        `json:"zonestorageaccessgroups"`
 }
 
 type PodIpranges struct {
@@ -1843,22 +1898,24 @@ func (s *PodService) UpdatePod(p *UpdatePodParams) (*UpdatePodResponse, error) {
 }
 
 type UpdatePodResponse struct {
-	Allocationstate string                      `json:"allocationstate"`
-	Capacity        []UpdatePodResponseCapacity `json:"capacity"`
-	Endip           []string                    `json:"endip"`
-	Forsystemvms    []string                    `json:"forsystemvms"`
-	Gateway         string                      `json:"gateway"`
-	Hasannotations  bool                        `json:"hasannotations"`
-	Id              string                      `json:"id"`
-	Ipranges        []UpdatePodResponseIpranges `json:"ipranges"`
-	JobID           string                      `json:"jobid"`
-	Jobstatus       int                         `json:"jobstatus"`
-	Name            string                      `json:"name"`
-	Netmask         string                      `json:"netmask"`
-	Startip         []string                    `json:"startip"`
-	Vlanid          []string                    `json:"vlanid"`
-	Zoneid          string                      `json:"zoneid"`
-	Zonename        string                      `json:"zonename"`
+	Allocationstate         string                      `json:"allocationstate"`
+	Capacity                []UpdatePodResponseCapacity `json:"capacity"`
+	Endip                   []string                    `json:"endip"`
+	Forsystemvms            []string                    `json:"forsystemvms"`
+	Gateway                 string                      `json:"gateway"`
+	Hasannotations          bool                        `json:"hasannotations"`
+	Id                      string                      `json:"id"`
+	Ipranges                []UpdatePodResponseIpranges `json:"ipranges"`
+	JobID                   string                      `json:"jobid"`
+	Jobstatus               int                         `json:"jobstatus"`
+	Name                    string                      `json:"name"`
+	Netmask                 string                      `json:"netmask"`
+	Startip                 []string                    `json:"startip"`
+	Storageaccessgroups     string                      `json:"storageaccessgroups"`
+	Vlanid                  []string                    `json:"vlanid"`
+	Zoneid                  string                      `json:"zoneid"`
+	Zonename                string                      `json:"zonename"`
+	Zonestorageaccessgroups string                      `json:"zonestorageaccessgroups"`
 }
 
 type UpdatePodResponseIpranges struct {
diff --git a/cloudstack/PoolService.go b/cloudstack/PoolService.go
index d074b04..885a44c 100644
--- a/cloudstack/PoolService.go
+++ b/cloudstack/PoolService.go
@@ -96,6 +96,9 @@ func (p *CreateStoragePoolParams) toURLValues() url.Values {
 	if v, found := p.p["scope"]; found {
 		u.Set("scope", v.(string))
 	}
+	if v, found := p.p["storageaccessgroups"]; found {
+		u.Set("storageaccessgroups", v.(string))
+	}
 	if v, found := p.p["tags"]; found {
 		u.Set("tags", v.(string))
 	}
@@ -339,6 +342,27 @@ func (p *CreateStoragePoolParams) GetScope() (string, bool) {
 	return value, ok
 }
 
+func (p *CreateStoragePoolParams) SetStorageaccessgroups(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroups"] = v
+}
+
+func (p *CreateStoragePoolParams) ResetStorageaccessgroups() {
+	if p.p != nil && p.p["storageaccessgroups"] != nil {
+		delete(p.p, "storageaccessgroups")
+	}
+}
+
+func (p *CreateStoragePoolParams) GetStorageaccessgroups() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroups"].(string)
+	return value, ok
+}
+
 func (p *CreateStoragePoolParams) SetTags(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -438,6 +462,7 @@ type CreateStoragePoolResponse struct {
 	Clusterid            string            `json:"clusterid"`
 	Clustername          string            `json:"clustername"`
 	Created              string            `json:"created"`
+	Details              map[string]string `json:"details"`
 	Disksizeallocated    int64             `json:"disksizeallocated"`
 	Disksizetotal        int64             `json:"disksizetotal"`
 	Disksizeused         int64             `json:"disksizeused"`
@@ -458,6 +483,7 @@ type CreateStoragePoolResponse struct {
 	Provider             string            `json:"provider"`
 	Scope                string            `json:"scope"`
 	State                string            `json:"state"`
+	Storageaccessgroups  string            `json:"storageaccessgroups"`
 	Storagecapabilities  map[string]string `json:"storagecapabilities"`
 	Storagecustomstats   map[string]string `json:"storagecustomstats"`
 	Suitableformigration bool              `json:"suitableformigration"`
@@ -727,6 +753,7 @@ type FindStoragePoolsForMigrationResponse struct {
 	Clusterid            string            `json:"clusterid"`
 	Clustername          string            `json:"clustername"`
 	Created              string            `json:"created"`
+	Details              map[string]string `json:"details"`
 	Disksizeallocated    int64             `json:"disksizeallocated"`
 	Disksizetotal        int64             `json:"disksizetotal"`
 	Disksizeused         int64             `json:"disksizeused"`
@@ -747,6 +774,7 @@ type FindStoragePoolsForMigrationResponse struct {
 	Provider             string            `json:"provider"`
 	Scope                string            `json:"scope"`
 	State                string            `json:"state"`
+	Storageaccessgroups  string            `json:"storageaccessgroups"`
 	Storagecapabilities  map[string]string `json:"storagecapabilities"`
 	Storagecustomstats   map[string]string `json:"storagecustomstats"`
 	Suitableformigration bool              `json:"suitableformigration"`
@@ -881,6 +909,9 @@ func (p *ListStoragePoolsParams) toURLValues() url.Values {
 	if v, found := p.p["status"]; found {
 		u.Set("status", v.(string))
 	}
+	if v, found := p.p["storageaccessgroup"]; found {
+		u.Set("storageaccessgroup", v.(string))
+	}
 	if v, found := p.p["storagecustomstats"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("storagecustomstats", vv)
@@ -1143,6 +1174,27 @@ func (p *ListStoragePoolsParams) GetStatus() (string, bool) {
 	return value, ok
 }
 
+func (p *ListStoragePoolsParams) SetStorageaccessgroup(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroup"] = v
+}
+
+func (p *ListStoragePoolsParams) ResetStorageaccessgroup() {
+	if p.p != nil && p.p["storageaccessgroup"] != nil {
+		delete(p.p, "storageaccessgroup")
+	}
+}
+
+func (p *ListStoragePoolsParams) GetStorageaccessgroup() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroup"].(string)
+	return value, ok
+}
+
 func (p *ListStoragePoolsParams) SetStoragecustomstats(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1302,6 +1354,7 @@ type StoragePool struct {
 	Clusterid            string            `json:"clusterid"`
 	Clustername          string            `json:"clustername"`
 	Created              string            `json:"created"`
+	Details              map[string]string `json:"details"`
 	Disksizeallocated    int64             `json:"disksizeallocated"`
 	Disksizetotal        int64             `json:"disksizetotal"`
 	Disksizeused         int64             `json:"disksizeused"`
@@ -1322,6 +1375,7 @@ type StoragePool struct {
 	Provider             string            `json:"provider"`
 	Scope                string            `json:"scope"`
 	State                string            `json:"state"`
+	Storageaccessgroups  string            `json:"storageaccessgroups"`
 	Storagecapabilities  map[string]string `json:"storagecapabilities"`
 	Storagecustomstats   map[string]string `json:"storagecustomstats"`
 	Suitableformigration bool              `json:"suitableformigration"`
@@ -1418,6 +1472,7 @@ type SyncStoragePoolResponse struct {
 	Clusterid            string            `json:"clusterid"`
 	Clustername          string            `json:"clustername"`
 	Created              string            `json:"created"`
+	Details              map[string]string `json:"details"`
 	Disksizeallocated    int64             `json:"disksizeallocated"`
 	Disksizetotal        int64             `json:"disksizetotal"`
 	Disksizeused         int64             `json:"disksizeused"`
@@ -1438,6 +1493,7 @@ type SyncStoragePoolResponse struct {
 	Provider             string            `json:"provider"`
 	Scope                string            `json:"scope"`
 	State                string            `json:"state"`
+	Storageaccessgroups  string            `json:"storageaccessgroups"`
 	Storagecapabilities  map[string]string `json:"storagecapabilities"`
 	Storagecustomstats   map[string]string `json:"storagecustomstats"`
 	Suitableformigration bool              `json:"suitableformigration"`
@@ -1714,6 +1770,7 @@ type UpdateStoragePoolResponse struct {
 	Clusterid            string            `json:"clusterid"`
 	Clustername          string            `json:"clustername"`
 	Created              string            `json:"created"`
+	Details              map[string]string `json:"details"`
 	Disksizeallocated    int64             `json:"disksizeallocated"`
 	Disksizetotal        int64             `json:"disksizetotal"`
 	Disksizeused         int64             `json:"disksizeused"`
@@ -1734,6 +1791,7 @@ type UpdateStoragePoolResponse struct {
 	Provider             string            `json:"provider"`
 	Scope                string            `json:"scope"`
 	State                string            `json:"state"`
+	Storageaccessgroups  string            `json:"storageaccessgroups"`
 	Storagecapabilities  map[string]string `json:"storagecapabilities"`
 	Storagecustomstats   map[string]string `json:"storagecustomstats"`
 	Suitableformigration bool              `json:"suitableformigration"`
diff --git a/cloudstack/ProjectService.go b/cloudstack/ProjectService.go
index 8b2c75a..bbafee4 100644
--- a/cloudstack/ProjectService.go
+++ b/cloudstack/ProjectService.go
@@ -155,6 +155,15 @@ func (s *ProjectService) ActivateProject(p *ActivateProjectParams) (*ActivatePro
 }
 
 type ActivateProjectResponse struct {
+	Backupavailable           string              `json:"backupavailable"`
+	Backuplimit               string              `json:"backuplimit"`
+	Backupstorageavailable    string              `json:"backupstorageavailable"`
+	Backupstoragelimit        string              `json:"backupstoragelimit"`
+	Backupstoragetotal        int64               `json:"backupstoragetotal"`
+	Backuptotal               int64               `json:"backuptotal"`
+	Bucketavailable           string              `json:"bucketavailable"`
+	Bucketlimit               string              `json:"bucketlimit"`
+	Buckettotal               int64               `json:"buckettotal"`
 	Cpuavailable              string              `json:"cpuavailable"`
 	Cpulimit                  string              `json:"cpulimit"`
 	Cputotal                  int64               `json:"cputotal"`
@@ -162,6 +171,9 @@ type ActivateProjectResponse struct {
 	Displaytext               string              `json:"displaytext"`
 	Domain                    string              `json:"domain"`
 	Domainid                  string              `json:"domainid"`
+	Gpuavailable              string              `json:"gpuavailable"`
+	Gpulimit                  string              `json:"gpulimit"`
+	Gputotal                  int64               `json:"gputotal"`
 	Icon                      interface{}         `json:"icon"`
 	Id                        string              `json:"id"`
 	Ipavailable               string              `json:"ipavailable"`
@@ -176,6 +188,9 @@ type ActivateProjectResponse struct {
 	Networkavailable          string              `json:"networkavailable"`
 	Networklimit              string              `json:"networklimit"`
 	Networktotal              int64               `json:"networktotal"`
+	Objectstorageavailable    string              `json:"objectstorageavailable"`
+	Objectstoragelimit        string              `json:"objectstoragelimit"`
+	Objectstoragetotal        int64               `json:"objectstoragetotal"`
 	Owner                     []map[string]string `json:"owner"`
 	Primarystorageavailable   string              `json:"primarystorageavailable"`
 	Primarystoragelimit       string              `json:"primarystoragelimit"`
@@ -765,6 +780,15 @@ func (s *ProjectService) CreateProject(p *CreateProjectParams) (*CreateProjectRe
 }
 
 type CreateProjectResponse struct {
+	Backupavailable           string              `json:"backupavailable"`
+	Backuplimit               string              `json:"backuplimit"`
+	Backupstorageavailable    string              `json:"backupstorageavailable"`
+	Backupstoragelimit        string              `json:"backupstoragelimit"`
+	Backupstoragetotal        int64               `json:"backupstoragetotal"`
+	Backuptotal               int64               `json:"backuptotal"`
+	Bucketavailable           string              `json:"bucketavailable"`
+	Bucketlimit               string              `json:"bucketlimit"`
+	Buckettotal               int64               `json:"buckettotal"`
 	Cpuavailable              string              `json:"cpuavailable"`
 	Cpulimit                  string              `json:"cpulimit"`
 	Cputotal                  int64               `json:"cputotal"`
@@ -772,6 +796,9 @@ type CreateProjectResponse struct {
 	Displaytext               string              `json:"displaytext"`
 	Domain                    string              `json:"domain"`
 	Domainid                  string              `json:"domainid"`
+	Gpuavailable              string              `json:"gpuavailable"`
+	Gpulimit                  string              `json:"gpulimit"`
+	Gputotal                  int64               `json:"gputotal"`
 	Icon                      interface{}         `json:"icon"`
 	Id                        string              `json:"id"`
 	Ipavailable               string              `json:"ipavailable"`
@@ -786,6 +813,9 @@ type CreateProjectResponse struct {
 	Networkavailable          string              `json:"networkavailable"`
 	Networklimit              string              `json:"networklimit"`
 	Networktotal              int64               `json:"networktotal"`
+	Objectstorageavailable    string              `json:"objectstorageavailable"`
+	Objectstoragelimit        string              `json:"objectstoragelimit"`
+	Objectstoragetotal        int64               `json:"objectstoragetotal"`
 	Owner                     []map[string]string `json:"owner"`
 	Primarystorageavailable   string              `json:"primarystorageavailable"`
 	Primarystoragelimit       string              `json:"primarystoragelimit"`
@@ -2094,6 +2124,15 @@ type ListProjectsResponse struct {
 }
 
 type Project struct {
+	Backupavailable           string              `json:"backupavailable"`
+	Backuplimit               string              `json:"backuplimit"`
+	Backupstorageavailable    string              `json:"backupstorageavailable"`
+	Backupstoragelimit        string              `json:"backupstoragelimit"`
+	Backupstoragetotal        int64               `json:"backupstoragetotal"`
+	Backuptotal               int64               `json:"backuptotal"`
+	Bucketavailable           string              `json:"bucketavailable"`
+	Bucketlimit               string              `json:"bucketlimit"`
+	Buckettotal               int64               `json:"buckettotal"`
 	Cpuavailable              string              `json:"cpuavailable"`
 	Cpulimit                  string              `json:"cpulimit"`
 	Cputotal                  int64               `json:"cputotal"`
@@ -2101,6 +2140,9 @@ type Project struct {
 	Displaytext               string              `json:"displaytext"`
 	Domain                    string              `json:"domain"`
 	Domainid                  string              `json:"domainid"`
+	Gpuavailable              string              `json:"gpuavailable"`
+	Gpulimit                  string              `json:"gpulimit"`
+	Gputotal                  int64               `json:"gputotal"`
 	Icon                      interface{}         `json:"icon"`
 	Id                        string              `json:"id"`
 	Ipavailable               string              `json:"ipavailable"`
@@ -2115,6 +2157,9 @@ type Project struct {
 	Networkavailable          string              `json:"networkavailable"`
 	Networklimit              string              `json:"networklimit"`
 	Networktotal              int64               `json:"networktotal"`
+	Objectstorageavailable    string              `json:"objectstorageavailable"`
+	Objectstoragelimit        string              `json:"objectstoragelimit"`
+	Objectstoragetotal        int64               `json:"objectstoragetotal"`
 	Owner                     []map[string]string `json:"owner"`
 	Primarystorageavailable   string              `json:"primarystorageavailable"`
 	Primarystoragelimit       string              `json:"primarystoragelimit"`
@@ -2226,6 +2271,15 @@ func (s *ProjectService) SuspendProject(p *SuspendProjectParams) (*SuspendProjec
 }
 
 type SuspendProjectResponse struct {
+	Backupavailable           string              `json:"backupavailable"`
+	Backuplimit               string              `json:"backuplimit"`
+	Backupstorageavailable    string              `json:"backupstorageavailable"`
+	Backupstoragelimit        string              `json:"backupstoragelimit"`
+	Backupstoragetotal        int64               `json:"backupstoragetotal"`
+	Backuptotal               int64               `json:"backuptotal"`
+	Bucketavailable           string              `json:"bucketavailable"`
+	Bucketlimit               string              `json:"bucketlimit"`
+	Buckettotal               int64               `json:"buckettotal"`
 	Cpuavailable              string              `json:"cpuavailable"`
 	Cpulimit                  string              `json:"cpulimit"`
 	Cputotal                  int64               `json:"cputotal"`
@@ -2233,6 +2287,9 @@ type SuspendProjectResponse struct {
 	Displaytext               string              `json:"displaytext"`
 	Domain                    string              `json:"domain"`
 	Domainid                  string              `json:"domainid"`
+	Gpuavailable              string              `json:"gpuavailable"`
+	Gpulimit                  string              `json:"gpulimit"`
+	Gputotal                  int64               `json:"gputotal"`
 	Icon                      interface{}         `json:"icon"`
 	Id                        string              `json:"id"`
 	Ipavailable               string              `json:"ipavailable"`
@@ -2247,6 +2304,9 @@ type SuspendProjectResponse struct {
 	Networkavailable          string              `json:"networkavailable"`
 	Networklimit              string              `json:"networklimit"`
 	Networktotal              int64               `json:"networktotal"`
+	Objectstorageavailable    string              `json:"objectstorageavailable"`
+	Objectstoragelimit        string              `json:"objectstoragelimit"`
+	Objectstoragetotal        int64               `json:"objectstoragetotal"`
 	Owner                     []map[string]string `json:"owner"`
 	Primarystorageavailable   string              `json:"primarystorageavailable"`
 	Primarystoragelimit       string              `json:"primarystoragelimit"`
@@ -2503,6 +2563,15 @@ func (s *ProjectService) UpdateProject(p *UpdateProjectParams) (*UpdateProjectRe
 }
 
 type UpdateProjectResponse struct {
+	Backupavailable           string              `json:"backupavailable"`
+	Backuplimit               string              `json:"backuplimit"`
+	Backupstorageavailable    string              `json:"backupstorageavailable"`
+	Backupstoragelimit        string              `json:"backupstoragelimit"`
+	Backupstoragetotal        int64               `json:"backupstoragetotal"`
+	Backuptotal               int64               `json:"backuptotal"`
+	Bucketavailable           string              `json:"bucketavailable"`
+	Bucketlimit               string              `json:"bucketlimit"`
+	Buckettotal               int64               `json:"buckettotal"`
 	Cpuavailable              string              `json:"cpuavailable"`
 	Cpulimit                  string              `json:"cpulimit"`
 	Cputotal                  int64               `json:"cputotal"`
@@ -2510,6 +2579,9 @@ type UpdateProjectResponse struct {
 	Displaytext               string              `json:"displaytext"`
 	Domain                    string              `json:"domain"`
 	Domainid                  string              `json:"domainid"`
+	Gpuavailable              string              `json:"gpuavailable"`
+	Gpulimit                  string              `json:"gpulimit"`
+	Gputotal                  int64               `json:"gputotal"`
 	Icon                      interface{}         `json:"icon"`
 	Id                        string              `json:"id"`
 	Ipavailable               string              `json:"ipavailable"`
@@ -2524,6 +2596,9 @@ type UpdateProjectResponse struct {
 	Networkavailable          string              `json:"networkavailable"`
 	Networklimit              string              `json:"networklimit"`
 	Networktotal              int64               `json:"networktotal"`
+	Objectstorageavailable    string              `json:"objectstorageavailable"`
+	Objectstoragelimit        string              `json:"objectstoragelimit"`
+	Objectstoragetotal        int64               `json:"objectstoragetotal"`
 	Owner                     []map[string]string `json:"owner"`
 	Primarystorageavailable   string              `json:"primarystorageavailable"`
 	Primarystoragelimit       string              `json:"primarystoragelimit"`
diff --git a/cloudstack/QuotaService.go b/cloudstack/QuotaService.go
index fa4ba77..ac50a38 100644
--- a/cloudstack/QuotaService.go
+++ b/cloudstack/QuotaService.go
@@ -378,12 +378,13 @@ func (s *QuotaService) QuotaCredits(p *QuotaCreditsParams) (*QuotaCreditsRespons
 }
 
 type QuotaCreditsResponse struct {
-	Credits    float64 `json:"credits"`
-	Currency   string  `json:"currency"`
-	JobID      string  `json:"jobid"`
-	Jobstatus  int     `json:"jobstatus"`
-	Updated_by string  `json:"updated_by"`
-	Updated_on string  `json:"updated_on"`
+	Credit           float64 `json:"credit"`
+	Creditedon       string  `json:"creditedon"`
+	Creditoruserid   string  `json:"creditoruserid"`
+	Creditorusername string  `json:"creditorusername"`
+	Currency         string  `json:"currency"`
+	JobID            string  `json:"jobid"`
+	Jobstatus        int     `json:"jobstatus"`
 }
 
 type QuotaIsEnabledParams struct {
diff --git a/cloudstack/SSHService.go b/cloudstack/SSHService.go
index 03c2ec8..30038d4 100644
--- a/cloudstack/SSHService.go
+++ b/cloudstack/SSHService.go
@@ -1169,6 +1169,9 @@ type ResetSSHKeyForVirtualMachineResponse struct {
 	Domainid              string                                              `json:"domainid"`
 	Domainpath            string                                              `json:"domainpath"`
 	Forvirtualnetwork     bool                                                `json:"forvirtualnetwork"`
+	Gpucardid             string                                              `json:"gpucardid"`
+	Gpucardname           string                                              `json:"gpucardname"`
+	Gpucount              int                                                 `json:"gpucount"`
 	Group                 string                                              `json:"group"`
 	Groupid               string                                              `json:"groupid"`
 	Guestosid             string                                              `json:"guestosid"`
@@ -1190,6 +1193,12 @@ type ResetSSHKeyForVirtualMachineResponse struct {
 	Jobstatus             int                                                 `json:"jobstatus"`
 	Keypairs              string                                              `json:"keypairs"`
 	Lastupdated           string                                              `json:"lastupdated"`
+	Leaseduration         int                                                 `json:"leaseduration"`
+	Leaseexpiryaction     string                                              `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                              `json:"leaseexpirydate"`
+	Maxheads              int64                                               `json:"maxheads"`
+	Maxresolutionx        int64                                               `json:"maxresolutionx"`
+	Maxresolutiony        int64                                               `json:"maxresolutiony"`
 	Memory                int                                                 `json:"memory"`
 	Memoryintfreekbs      int64                                               `json:"memoryintfreekbs"`
 	Memorykbs             int64                                               `json:"memorykbs"`
@@ -1231,6 +1240,9 @@ type ResetSSHKeyForVirtualMachineResponse struct {
 	Userid                string                                              `json:"userid"`
 	Username              string                                              `json:"username"`
 	Vgpu                  string                                              `json:"vgpu"`
+	Vgpuprofileid         string                                              `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                              `json:"vgpuprofilename"`
+	Videoram              int64                                               `json:"videoram"`
 	Vmtype                string                                              `json:"vmtype"`
 	Vnfdetails            map[string]string                                   `json:"vnfdetails"`
 	Vnfnics               []string                                            `json:"vnfnics"`
diff --git a/cloudstack/ServiceOfferingService.go b/cloudstack/ServiceOfferingService.go
index d55a688..61238ab 100644
--- a/cloudstack/ServiceOfferingService.go
+++ b/cloudstack/ServiceOfferingService.go
@@ -118,6 +118,21 @@ func (p *CreateServiceOfferingParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("encryptroot", vv)
 	}
+	if v, found := p.p["externaldetails"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("externaldetails[%d].key", i), k)
+			u.Set(fmt.Sprintf("externaldetails[%d].value", i), m[k])
+		}
+	}
+	if v, found := p.p["gpucount"]; found {
+		vv := strconv.Itoa(v.(int))
+		u.Set("gpucount", vv)
+	}
+	if v, found := p.p["gpudisplay"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("gpudisplay", vv)
+	}
 	if v, found := p.p["hosttags"]; found {
 		u.Set("hosttags", v.(string))
 	}
@@ -157,6 +172,13 @@ func (p *CreateServiceOfferingParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("isvolatile", vv)
 	}
+	if v, found := p.p["leaseduration"]; found {
+		vv := strconv.Itoa(v.(int))
+		u.Set("leaseduration", vv)
+	}
+	if v, found := p.p["leaseexpiryaction"]; found {
+		u.Set("leaseexpiryaction", v.(string))
+	}
 	if v, found := p.p["limitcpuuse"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("limitcpuuse", vv)
@@ -230,6 +252,9 @@ func (p *CreateServiceOfferingParams) toURLValues() url.Values {
 	if v, found := p.p["tags"]; found {
 		u.Set("tags", v.(string))
 	}
+	if v, found := p.p["vgpuprofileid"]; found {
+		u.Set("vgpuprofileid", v.(string))
+	}
 	if v, found := p.p["zoneid"]; found {
 		vv := strings.Join(v.([]string), ",")
 		u.Set("zoneid", vv)
@@ -615,6 +640,69 @@ func (p *CreateServiceOfferingParams) GetEncryptroot() (bool, bool) {
 	return value, ok
 }
 
+func (p *CreateServiceOfferingParams) SetExternaldetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["externaldetails"] = v
+}
+
+func (p *CreateServiceOfferingParams) ResetExternaldetails() {
+	if p.p != nil && p.p["externaldetails"] != nil {
+		delete(p.p, "externaldetails")
+	}
+}
+
+func (p *CreateServiceOfferingParams) GetExternaldetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["externaldetails"].(map[string]string)
+	return value, ok
+}
+
+func (p *CreateServiceOfferingParams) SetGpucount(v int) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["gpucount"] = v
+}
+
+func (p *CreateServiceOfferingParams) ResetGpucount() {
+	if p.p != nil && p.p["gpucount"] != nil {
+		delete(p.p, "gpucount")
+	}
+}
+
+func (p *CreateServiceOfferingParams) GetGpucount() (int, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["gpucount"].(int)
+	return value, ok
+}
+
+func (p *CreateServiceOfferingParams) SetGpudisplay(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["gpudisplay"] = v
+}
+
+func (p *CreateServiceOfferingParams) ResetGpudisplay() {
+	if p.p != nil && p.p["gpudisplay"] != nil {
+		delete(p.p, "gpudisplay")
+	}
+}
+
+func (p *CreateServiceOfferingParams) GetGpudisplay() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["gpudisplay"].(bool)
+	return value, ok
+}
+
 func (p *CreateServiceOfferingParams) SetHosttags(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -825,6 +913,48 @@ func (p *CreateServiceOfferingParams) GetIsvolatile() (bool, bool) {
 	return value, ok
 }
 
+func (p *CreateServiceOfferingParams) SetLeaseduration(v int) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["leaseduration"] = v
+}
+
+func (p *CreateServiceOfferingParams) ResetLeaseduration() {
+	if p.p != nil && p.p["leaseduration"] != nil {
+		delete(p.p, "leaseduration")
+	}
+}
+
+func (p *CreateServiceOfferingParams) GetLeaseduration() (int, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["leaseduration"].(int)
+	return value, ok
+}
+
+func (p *CreateServiceOfferingParams) SetLeaseexpiryaction(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["leaseexpiryaction"] = v
+}
+
+func (p *CreateServiceOfferingParams) ResetLeaseexpiryaction() {
+	if p.p != nil && p.p["leaseexpiryaction"] != nil {
+		delete(p.p, "leaseexpiryaction")
+	}
+}
+
+func (p *CreateServiceOfferingParams) GetLeaseexpiryaction() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["leaseexpiryaction"].(string)
+	return value, ok
+}
+
 func (p *CreateServiceOfferingParams) SetLimitcpuuse(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1224,6 +1354,27 @@ func (p *CreateServiceOfferingParams) GetTags() (string, bool) {
 	return value, ok
 }
 
+func (p *CreateServiceOfferingParams) SetVgpuprofileid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["vgpuprofileid"] = v
+}
+
+func (p *CreateServiceOfferingParams) ResetVgpuprofileid() {
+	if p.p != nil && p.p["vgpuprofileid"] != nil {
+		delete(p.p, "vgpuprofileid")
+	}
+}
+
+func (p *CreateServiceOfferingParams) GetVgpuprofileid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["vgpuprofileid"].(string)
+	return value, ok
+}
+
 func (p *CreateServiceOfferingParams) SetZoneid(v []string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1302,6 +1453,10 @@ type CreateServiceOfferingResponse struct {
 	Domainid                    string            `json:"domainid"`
 	Dynamicscalingenabled       bool              `json:"dynamicscalingenabled"`
 	Encryptroot                 bool              `json:"encryptroot"`
+	Gpucardid                   string            `json:"gpucardid"`
+	Gpucardname                 string            `json:"gpucardname"`
+	Gpucount                    int               `json:"gpucount"`
+	Gpudisplay                  bool              `json:"gpudisplay"`
 	Hasannotations              bool              `json:"hasannotations"`
 	Hosttags                    string            `json:"hosttags"`
 	Hypervisorsnapshotreserve   int               `json:"hypervisorsnapshotreserve"`
@@ -1312,8 +1467,13 @@ type CreateServiceOfferingResponse struct {
 	Isvolatile                  bool              `json:"isvolatile"`
 	JobID                       string            `json:"jobid"`
 	Jobstatus                   int               `json:"jobstatus"`
+	Leaseduration               int               `json:"leaseduration"`
+	Leaseexpiryaction           string            `json:"leaseexpiryaction"`
 	Limitcpuuse                 bool              `json:"limitcpuuse"`
+	Maxheads                    int64             `json:"maxheads"`
 	Maxiops                     int64             `json:"maxiops"`
+	Maxresolutionx              int64             `json:"maxresolutionx"`
+	Maxresolutiony              int64             `json:"maxresolutiony"`
 	Memory                      int               `json:"memory"`
 	Miniops                     int64             `json:"miniops"`
 	Name                        string            `json:"name"`
@@ -1327,6 +1487,9 @@ type CreateServiceOfferingResponse struct {
 	Storagetags                 string            `json:"storagetags"`
 	Storagetype                 string            `json:"storagetype"`
 	Systemvmtype                string            `json:"systemvmtype"`
+	Vgpuprofileid               string            `json:"vgpuprofileid"`
+	Vgpuprofilename             string            `json:"vgpuprofilename"`
+	Videoram                    int64             `json:"videoram"`
 	Vspherestoragepolicy        string            `json:"vspherestoragepolicy"`
 	Zone                        string            `json:"zone"`
 	Zoneid                      string            `json:"zoneid"`
@@ -1453,6 +1616,10 @@ func (p *ListServiceOfferingsParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("encryptroot", vv)
 	}
+	if v, found := p.p["gpuenabled"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("gpuenabled", vv)
+	}
 	if v, found := p.p["id"]; found {
 		u.Set("id", v.(string))
 	}
@@ -1501,6 +1668,9 @@ func (p *ListServiceOfferingsParams) toURLValues() url.Values {
 	if v, found := p.p["templateid"]; found {
 		u.Set("templateid", v.(string))
 	}
+	if v, found := p.p["vgpuprofileid"]; found {
+		u.Set("vgpuprofileid", v.(string))
+	}
 	if v, found := p.p["virtualmachineid"]; found {
 		u.Set("virtualmachineid", v.(string))
 	}
@@ -1615,6 +1785,27 @@ func (p *ListServiceOfferingsParams) GetEncryptroot() (bool, bool) {
 	return value, ok
 }
 
+func (p *ListServiceOfferingsParams) SetGpuenabled(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["gpuenabled"] = v
+}
+
+func (p *ListServiceOfferingsParams) ResetGpuenabled() {
+	if p.p != nil && p.p["gpuenabled"] != nil {
+		delete(p.p, "gpuenabled")
+	}
+}
+
+func (p *ListServiceOfferingsParams) GetGpuenabled() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["gpuenabled"].(bool)
+	return value, ok
+}
+
 func (p *ListServiceOfferingsParams) SetId(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1909,6 +2100,27 @@ func (p *ListServiceOfferingsParams) GetTemplateid() (string, bool) {
 	return value, ok
 }
 
+func (p *ListServiceOfferingsParams) SetVgpuprofileid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["vgpuprofileid"] = v
+}
+
+func (p *ListServiceOfferingsParams) ResetVgpuprofileid() {
+	if p.p != nil && p.p["vgpuprofileid"] != nil {
+		delete(p.p, "vgpuprofileid")
+	}
+}
+
+func (p *ListServiceOfferingsParams) GetVgpuprofileid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["vgpuprofileid"].(string)
+	return value, ok
+}
+
 func (p *ListServiceOfferingsParams) SetVirtualmachineid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2090,6 +2302,10 @@ type ServiceOffering struct {
 	Domainid                    string            `json:"domainid"`
 	Dynamicscalingenabled       bool              `json:"dynamicscalingenabled"`
 	Encryptroot                 bool              `json:"encryptroot"`
+	Gpucardid                   string            `json:"gpucardid"`
+	Gpucardname                 string            `json:"gpucardname"`
+	Gpucount                    int               `json:"gpucount"`
+	Gpudisplay                  bool              `json:"gpudisplay"`
 	Hasannotations              bool              `json:"hasannotations"`
 	Hosttags                    string            `json:"hosttags"`
 	Hypervisorsnapshotreserve   int               `json:"hypervisorsnapshotreserve"`
@@ -2100,8 +2316,13 @@ type ServiceOffering struct {
 	Isvolatile                  bool              `json:"isvolatile"`
 	JobID                       string            `json:"jobid"`
 	Jobstatus                   int               `json:"jobstatus"`
+	Leaseduration               int               `json:"leaseduration"`
+	Leaseexpiryaction           string            `json:"leaseexpiryaction"`
 	Limitcpuuse                 bool              `json:"limitcpuuse"`
+	Maxheads                    int64             `json:"maxheads"`
 	Maxiops                     int64             `json:"maxiops"`
+	Maxresolutionx              int64             `json:"maxresolutionx"`
+	Maxresolutiony              int64             `json:"maxresolutiony"`
 	Memory                      int               `json:"memory"`
 	Miniops                     int64             `json:"miniops"`
 	Name                        string            `json:"name"`
@@ -2115,6 +2336,9 @@ type ServiceOffering struct {
 	Storagetags                 string            `json:"storagetags"`
 	Storagetype                 string            `json:"storagetype"`
 	Systemvmtype                string            `json:"systemvmtype"`
+	Vgpuprofileid               string            `json:"vgpuprofileid"`
+	Vgpuprofilename             string            `json:"vgpuprofilename"`
+	Videoram                    int64             `json:"videoram"`
 	Vspherestoragepolicy        string            `json:"vspherestoragepolicy"`
 	Zone                        string            `json:"zone"`
 	Zoneid                      string            `json:"zoneid"`
@@ -2135,6 +2359,13 @@ func (p *UpdateServiceOfferingParams) toURLValues() url.Values {
 	if v, found := p.p["domainid"]; found {
 		u.Set("domainid", v.(string))
 	}
+	if v, found := p.p["externaldetails"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("externaldetails[%d].key", i), k)
+			u.Set(fmt.Sprintf("externaldetails[%d].value", i), m[k])
+		}
+	}
 	if v, found := p.p["hosttags"]; found {
 		u.Set("hosttags", v.(string))
 	}
@@ -2206,6 +2437,27 @@ func (p *UpdateServiceOfferingParams) GetDomainid() (string, bool) {
 	return value, ok
 }
 
+func (p *UpdateServiceOfferingParams) SetExternaldetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["externaldetails"] = v
+}
+
+func (p *UpdateServiceOfferingParams) ResetExternaldetails() {
+	if p.p != nil && p.p["externaldetails"] != nil {
+		delete(p.p, "externaldetails")
+	}
+}
+
+func (p *UpdateServiceOfferingParams) GetExternaldetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["externaldetails"].(map[string]string)
+	return value, ok
+}
+
 func (p *UpdateServiceOfferingParams) SetHosttags(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2430,6 +2682,10 @@ type UpdateServiceOfferingResponse struct {
 	Domainid                    string            `json:"domainid"`
 	Dynamicscalingenabled       bool              `json:"dynamicscalingenabled"`
 	Encryptroot                 bool              `json:"encryptroot"`
+	Gpucardid                   string            `json:"gpucardid"`
+	Gpucardname                 string            `json:"gpucardname"`
+	Gpucount                    int               `json:"gpucount"`
+	Gpudisplay                  bool              `json:"gpudisplay"`
 	Hasannotations              bool              `json:"hasannotations"`
 	Hosttags                    string            `json:"hosttags"`
 	Hypervisorsnapshotreserve   int               `json:"hypervisorsnapshotreserve"`
@@ -2440,8 +2696,13 @@ type UpdateServiceOfferingResponse struct {
 	Isvolatile                  bool              `json:"isvolatile"`
 	JobID                       string            `json:"jobid"`
 	Jobstatus                   int               `json:"jobstatus"`
+	Leaseduration               int               `json:"leaseduration"`
+	Leaseexpiryaction           string            `json:"leaseexpiryaction"`
 	Limitcpuuse                 bool              `json:"limitcpuuse"`
+	Maxheads                    int64             `json:"maxheads"`
 	Maxiops                     int64             `json:"maxiops"`
+	Maxresolutionx              int64             `json:"maxresolutionx"`
+	Maxresolutiony              int64             `json:"maxresolutiony"`
 	Memory                      int               `json:"memory"`
 	Miniops                     int64             `json:"miniops"`
 	Name                        string            `json:"name"`
@@ -2455,6 +2716,9 @@ type UpdateServiceOfferingResponse struct {
 	Storagetags                 string            `json:"storagetags"`
 	Storagetype                 string            `json:"storagetype"`
 	Systemvmtype                string            `json:"systemvmtype"`
+	Vgpuprofileid               string            `json:"vgpuprofileid"`
+	Vgpuprofilename             string            `json:"vgpuprofilename"`
+	Videoram                    int64             `json:"videoram"`
 	Vspherestoragepolicy        string            `json:"vspherestoragepolicy"`
 	Zone                        string            `json:"zone"`
 	Zoneid                      string            `json:"zoneid"`
diff --git a/cloudstack/SnapshotService.go b/cloudstack/SnapshotService.go
index 5c0102d..b1a148a 100644
--- a/cloudstack/SnapshotService.go
+++ b/cloudstack/SnapshotService.go
@@ -149,6 +149,7 @@ func (s *SnapshotService) ArchiveSnapshot(p *ArchiveSnapshotParams) (*ArchiveSna
 
 type ArchiveSnapshotResponse struct {
 	Account         string            `json:"account"`
+	Chainsize       int64             `json:"chainsize"`
 	Created         string            `json:"created"`
 	Datastoreid     string            `json:"datastoreid"`
 	Datastorename   string            `json:"datastorename"`
@@ -233,6 +234,14 @@ func (p *CopySnapshotParams) toURLValues() url.Values {
 	if v, found := p.p["sourcezoneid"]; found {
 		u.Set("sourcezoneid", v.(string))
 	}
+	if v, found := p.p["storageids"]; found {
+		vv := strings.Join(v.([]string), ",")
+		u.Set("storageids", vv)
+	}
+	if v, found := p.p["usestoragereplication"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("usestoragereplication", vv)
+	}
 	return u
 }
 
@@ -320,6 +329,48 @@ func (p *CopySnapshotParams) GetSourcezoneid() (string, bool) {
 	return value, ok
 }
 
+func (p *CopySnapshotParams) SetStorageids(v []string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageids"] = v
+}
+
+func (p *CopySnapshotParams) ResetStorageids() {
+	if p.p != nil && p.p["storageids"] != nil {
+		delete(p.p, "storageids")
+	}
+}
+
+func (p *CopySnapshotParams) GetStorageids() ([]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageids"].([]string)
+	return value, ok
+}
+
+func (p *CopySnapshotParams) SetUsestoragereplication(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["usestoragereplication"] = v
+}
+
+func (p *CopySnapshotParams) ResetUsestoragereplication() {
+	if p.p != nil && p.p["usestoragereplication"] != nil {
+		delete(p.p, "usestoragereplication")
+	}
+}
+
+func (p *CopySnapshotParams) GetUsestoragereplication() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["usestoragereplication"].(bool)
+	return value, ok
+}
+
 // You should always use this function to get a new CopySnapshotParams instance,
 // as then you are sure you have configured all required params
 func (s *SnapshotService) NewCopySnapshotParams(id string) *CopySnapshotParams {
@@ -366,6 +417,7 @@ func (s *SnapshotService) CopySnapshot(p *CopySnapshotParams) (*CopySnapshotResp
 
 type CopySnapshotResponse struct {
 	Account         string            `json:"account"`
+	Chainsize       int64             `json:"chainsize"`
 	Created         string            `json:"created"`
 	Datastoreid     string            `json:"datastoreid"`
 	Datastorename   string            `json:"datastorename"`
@@ -460,6 +512,10 @@ func (p *CreateSnapshotParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("quiescevm", vv)
 	}
+	if v, found := p.p["storageids"]; found {
+		vv := strings.Join(v.([]string), ",")
+		u.Set("storageids", vv)
+	}
 	if v, found := p.p["tags"]; found {
 		m := v.(map[string]string)
 		for i, k := range getSortedKeysFromMap(m) {
@@ -467,6 +523,10 @@ func (p *CreateSnapshotParams) toURLValues() url.Values {
 			u.Set(fmt.Sprintf("tags[%d].value", i), m[k])
 		}
 	}
+	if v, found := p.p["usestoragereplication"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("usestoragereplication", vv)
+	}
 	if v, found := p.p["volumeid"]; found {
 		u.Set("volumeid", v.(string))
 	}
@@ -624,6 +684,27 @@ func (p *CreateSnapshotParams) GetQuiescevm() (bool, bool) {
 	return value, ok
 }
 
+func (p *CreateSnapshotParams) SetStorageids(v []string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageids"] = v
+}
+
+func (p *CreateSnapshotParams) ResetStorageids() {
+	if p.p != nil && p.p["storageids"] != nil {
+		delete(p.p, "storageids")
+	}
+}
+
+func (p *CreateSnapshotParams) GetStorageids() ([]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageids"].([]string)
+	return value, ok
+}
+
 func (p *CreateSnapshotParams) SetTags(v map[string]string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -645,6 +726,27 @@ func (p *CreateSnapshotParams) GetTags() (map[string]string, bool) {
 	return value, ok
 }
 
+func (p *CreateSnapshotParams) SetUsestoragereplication(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["usestoragereplication"] = v
+}
+
+func (p *CreateSnapshotParams) ResetUsestoragereplication() {
+	if p.p != nil && p.p["usestoragereplication"] != nil {
+		delete(p.p, "usestoragereplication")
+	}
+}
+
+func (p *CreateSnapshotParams) GetUsestoragereplication() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["usestoragereplication"].(bool)
+	return value, ok
+}
+
 func (p *CreateSnapshotParams) SetVolumeid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -733,6 +835,7 @@ func (s *SnapshotService) CreateSnapshot(p *CreateSnapshotParams) (*CreateSnapsh
 
 type CreateSnapshotResponse struct {
 	Account         string            `json:"account"`
+	Chainsize       int64             `json:"chainsize"`
 	Created         string            `json:"created"`
 	Datastoreid     string            `json:"datastoreid"`
 	Datastorename   string            `json:"datastorename"`
@@ -926,6 +1029,7 @@ func (s *SnapshotService) CreateSnapshotFromVMSnapshot(p *CreateSnapshotFromVMSn
 
 type CreateSnapshotFromVMSnapshotResponse struct {
 	Account         string            `json:"account"`
+	Chainsize       int64             `json:"chainsize"`
 	Created         string            `json:"created"`
 	Datastoreid     string            `json:"datastoreid"`
 	Datastorename   string            `json:"datastorename"`
@@ -1011,6 +1115,10 @@ func (p *CreateSnapshotPolicyParams) toURLValues() url.Values {
 	if v, found := p.p["schedule"]; found {
 		u.Set("schedule", v.(string))
 	}
+	if v, found := p.p["storageids"]; found {
+		vv := strings.Join(v.([]string), ",")
+		u.Set("storageids", vv)
+	}
 	if v, found := p.p["tags"]; found {
 		m := v.(map[string]string)
 		for i, k := range getSortedKeysFromMap(m) {
@@ -1021,6 +1129,10 @@ func (p *CreateSnapshotPolicyParams) toURLValues() url.Values {
 	if v, found := p.p["timezone"]; found {
 		u.Set("timezone", v.(string))
 	}
+	if v, found := p.p["usestoragereplication"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("usestoragereplication", vv)
+	}
 	if v, found := p.p["volumeid"]; found {
 		u.Set("volumeid", v.(string))
 	}
@@ -1115,6 +1227,27 @@ func (p *CreateSnapshotPolicyParams) GetSchedule() (string, bool) {
 	return value, ok
 }
 
+func (p *CreateSnapshotPolicyParams) SetStorageids(v []string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageids"] = v
+}
+
+func (p *CreateSnapshotPolicyParams) ResetStorageids() {
+	if p.p != nil && p.p["storageids"] != nil {
+		delete(p.p, "storageids")
+	}
+}
+
+func (p *CreateSnapshotPolicyParams) GetStorageids() ([]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageids"].([]string)
+	return value, ok
+}
+
 func (p *CreateSnapshotPolicyParams) SetTags(v map[string]string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1157,6 +1290,27 @@ func (p *CreateSnapshotPolicyParams) GetTimezone() (string, bool) {
 	return value, ok
 }
 
+func (p *CreateSnapshotPolicyParams) SetUsestoragereplication(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["usestoragereplication"] = v
+}
+
+func (p *CreateSnapshotPolicyParams) ResetUsestoragereplication() {
+	if p.p != nil && p.p["usestoragereplication"] != nil {
+		delete(p.p, "usestoragereplication")
+	}
+}
+
+func (p *CreateSnapshotPolicyParams) GetUsestoragereplication() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["usestoragereplication"].(bool)
+	return value, ok
+}
+
 func (p *CreateSnapshotPolicyParams) SetVolumeid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1236,6 +1390,7 @@ type CreateSnapshotPolicyResponse struct {
 	Jobstatus      int           `json:"jobstatus"`
 	Maxsnaps       int           `json:"maxsnaps"`
 	Schedule       string        `json:"schedule"`
+	Storage        []interface{} `json:"storage"`
 	Tags           []Tags        `json:"tags"`
 	Timezone       string        `json:"timezone"`
 	Volumeid       string        `json:"volumeid"`
@@ -2107,6 +2262,7 @@ type SnapshotPolicy struct {
 	Jobstatus      int           `json:"jobstatus"`
 	Maxsnaps       int           `json:"maxsnaps"`
 	Schedule       string        `json:"schedule"`
+	Storage        []interface{} `json:"storage"`
 	Tags           []Tags        `json:"tags"`
 	Timezone       string        `json:"timezone"`
 	Volumeid       string        `json:"volumeid"`
@@ -2728,6 +2884,7 @@ type ListSnapshotsResponse struct {
 
 type Snapshot struct {
 	Account         string            `json:"account"`
+	Chainsize       int64             `json:"chainsize"`
 	Created         string            `json:"created"`
 	Datastoreid     string            `json:"datastoreid"`
 	Datastorename   string            `json:"datastorename"`
@@ -3321,6 +3478,7 @@ func (s *SnapshotService) RevertSnapshot(p *RevertSnapshotParams) (*RevertSnapsh
 
 type RevertSnapshotResponse struct {
 	Account         string            `json:"account"`
+	Chainsize       int64             `json:"chainsize"`
 	Created         string            `json:"created"`
 	Datastoreid     string            `json:"datastoreid"`
 	Datastorename   string            `json:"datastorename"`
@@ -3491,6 +3649,9 @@ type RevertToVMSnapshotResponse struct {
 	Domainid              string                                    `json:"domainid"`
 	Domainpath            string                                    `json:"domainpath"`
 	Forvirtualnetwork     bool                                      `json:"forvirtualnetwork"`
+	Gpucardid             string                                    `json:"gpucardid"`
+	Gpucardname           string                                    `json:"gpucardname"`
+	Gpucount              int                                       `json:"gpucount"`
 	Group                 string                                    `json:"group"`
 	Groupid               string                                    `json:"groupid"`
 	Guestosid             string                                    `json:"guestosid"`
@@ -3512,6 +3673,12 @@ type RevertToVMSnapshotResponse struct {
 	Jobstatus             int                                       `json:"jobstatus"`
 	Keypairs              string                                    `json:"keypairs"`
 	Lastupdated           string                                    `json:"lastupdated"`
+	Leaseduration         int                                       `json:"leaseduration"`
+	Leaseexpiryaction     string                                    `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                    `json:"leaseexpirydate"`
+	Maxheads              int64                                     `json:"maxheads"`
+	Maxresolutionx        int64                                     `json:"maxresolutionx"`
+	Maxresolutiony        int64                                     `json:"maxresolutiony"`
 	Memory                int                                       `json:"memory"`
 	Memoryintfreekbs      int64                                     `json:"memoryintfreekbs"`
 	Memorykbs             int64                                     `json:"memorykbs"`
@@ -3553,6 +3720,9 @@ type RevertToVMSnapshotResponse struct {
 	Userid                string                                    `json:"userid"`
 	Username              string                                    `json:"username"`
 	Vgpu                  string                                    `json:"vgpu"`
+	Vgpuprofileid         string                                    `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                    `json:"vgpuprofilename"`
+	Videoram              int64                                     `json:"videoram"`
 	Vmtype                string                                    `json:"vmtype"`
 	Vnfdetails            map[string]string                         `json:"vnfdetails"`
 	Vnfnics               []string                                  `json:"vnfnics"`
@@ -3769,6 +3939,7 @@ type UpdateSnapshotPolicyResponse struct {
 	Jobstatus      int           `json:"jobstatus"`
 	Maxsnaps       int           `json:"maxsnaps"`
 	Schedule       string        `json:"schedule"`
+	Storage        []interface{} `json:"storage"`
 	Tags           []Tags        `json:"tags"`
 	Timezone       string        `json:"timezone"`
 	Volumeid       string        `json:"volumeid"`
diff --git a/cloudstack/StoragePoolService.go b/cloudstack/StoragePoolService.go
index 5150934..ea964ad 100644
--- a/cloudstack/StoragePoolService.go
+++ b/cloudstack/StoragePoolService.go
@@ -146,6 +146,7 @@ type CancelStorageMaintenanceResponse struct {
 	Clusterid            string            `json:"clusterid"`
 	Clustername          string            `json:"clustername"`
 	Created              string            `json:"created"`
+	Details              map[string]string `json:"details"`
 	Disksizeallocated    int64             `json:"disksizeallocated"`
 	Disksizetotal        int64             `json:"disksizetotal"`
 	Disksizeused         int64             `json:"disksizeused"`
@@ -166,6 +167,7 @@ type CancelStorageMaintenanceResponse struct {
 	Provider             string            `json:"provider"`
 	Scope                string            `json:"scope"`
 	State                string            `json:"state"`
+	Storageaccessgroups  string            `json:"storageaccessgroups"`
 	Storagecapabilities  map[string]string `json:"storagecapabilities"`
 	Storagecustomstats   map[string]string `json:"storagecustomstats"`
 	Suitableformigration bool              `json:"suitableformigration"`
@@ -393,6 +395,7 @@ type EnableStorageMaintenanceResponse struct {
 	Clusterid            string            `json:"clusterid"`
 	Clustername          string            `json:"clustername"`
 	Created              string            `json:"created"`
+	Details              map[string]string `json:"details"`
 	Disksizeallocated    int64             `json:"disksizeallocated"`
 	Disksizetotal        int64             `json:"disksizetotal"`
 	Disksizeused         int64             `json:"disksizeused"`
@@ -413,6 +416,7 @@ type EnableStorageMaintenanceResponse struct {
 	Provider             string            `json:"provider"`
 	Scope                string            `json:"scope"`
 	State                string            `json:"state"`
+	Storageaccessgroups  string            `json:"storageaccessgroups"`
 	Storagecapabilities  map[string]string `json:"storagecapabilities"`
 	Storagecustomstats   map[string]string `json:"storagecustomstats"`
 	Suitableformigration bool              `json:"suitableformigration"`
@@ -1053,15 +1057,16 @@ type ListObjectStoragePoolsResponse struct {
 }
 
 type ObjectStoragePool struct {
-	Hasannotations bool   `json:"hasannotations"`
-	Id             string `json:"id"`
-	JobID          string `json:"jobid"`
-	Jobstatus      int    `json:"jobstatus"`
-	Name           string `json:"name"`
-	Providername   string `json:"providername"`
-	Storagetotal   int64  `json:"storagetotal"`
-	Storageused    int64  `json:"storageused"`
-	Url            string `json:"url"`
+	Hasannotations   bool   `json:"hasannotations"`
+	Id               string `json:"id"`
+	JobID            string `json:"jobid"`
+	Jobstatus        int    `json:"jobstatus"`
+	Name             string `json:"name"`
+	Providername     string `json:"providername"`
+	Storageallocated int64  `json:"storageallocated"`
+	Storagetotal     int64  `json:"storagetotal"`
+	Storageused      int64  `json:"storageused"`
+	Url              string `json:"url"`
 }
 
 type ListStoragePoolObjectsParams struct {
@@ -1291,6 +1296,10 @@ func (p *UpdateObjectStoragePoolParams) toURLValues() url.Values {
 	if v, found := p.p["name"]; found {
 		u.Set("name", v.(string))
 	}
+	if v, found := p.p["size"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("size", vv)
+	}
 	if v, found := p.p["url"]; found {
 		u.Set("url", v.(string))
 	}
@@ -1339,6 +1348,27 @@ func (p *UpdateObjectStoragePoolParams) GetName() (string, bool) {
 	return value, ok
 }
 
+func (p *UpdateObjectStoragePoolParams) SetSize(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["size"] = v
+}
+
+func (p *UpdateObjectStoragePoolParams) ResetSize() {
+	if p.p != nil && p.p["size"] != nil {
+		delete(p.p, "size")
+	}
+}
+
+func (p *UpdateObjectStoragePoolParams) GetSize() (int64, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["size"].(int64)
+	return value, ok
+}
+
 func (p *UpdateObjectStoragePoolParams) SetUrl(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1388,15 +1418,16 @@ func (s *StoragePoolService) UpdateObjectStoragePool(p *UpdateObjectStoragePoolP
 }
 
 type UpdateObjectStoragePoolResponse struct {
-	Hasannotations bool   `json:"hasannotations"`
-	Id             string `json:"id"`
-	JobID          string `json:"jobid"`
-	Jobstatus      int    `json:"jobstatus"`
-	Name           string `json:"name"`
-	Providername   string `json:"providername"`
-	Storagetotal   int64  `json:"storagetotal"`
-	Storageused    int64  `json:"storageused"`
-	Url            string `json:"url"`
+	Hasannotations   bool   `json:"hasannotations"`
+	Id               string `json:"id"`
+	JobID            string `json:"jobid"`
+	Jobstatus        int    `json:"jobstatus"`
+	Name             string `json:"name"`
+	Providername     string `json:"providername"`
+	Storageallocated int64  `json:"storageallocated"`
+	Storagetotal     int64  `json:"storagetotal"`
+	Storageused      int64  `json:"storageused"`
+	Url              string `json:"url"`
 }
 
 type AddObjectStoragePoolParams struct {
@@ -1421,6 +1452,10 @@ func (p *AddObjectStoragePoolParams) toURLValues() url.Values {
 	if v, found := p.p["provider"]; found {
 		u.Set("provider", v.(string))
 	}
+	if v, found := p.p["size"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("size", vv)
+	}
 	if v, found := p.p["tags"]; found {
 		u.Set("tags", v.(string))
 	}
@@ -1493,6 +1528,27 @@ func (p *AddObjectStoragePoolParams) GetProvider() (string, bool) {
 	return value, ok
 }
 
+func (p *AddObjectStoragePoolParams) SetSize(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["size"] = v
+}
+
+func (p *AddObjectStoragePoolParams) ResetSize() {
+	if p.p != nil && p.p["size"] != nil {
+		delete(p.p, "size")
+	}
+}
+
+func (p *AddObjectStoragePoolParams) GetSize() (int64, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["size"].(int64)
+	return value, ok
+}
+
 func (p *AddObjectStoragePoolParams) SetTags(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1565,15 +1621,16 @@ func (s *StoragePoolService) AddObjectStoragePool(p *AddObjectStoragePoolParams)
 }
 
 type AddObjectStoragePoolResponse struct {
-	Hasannotations bool   `json:"hasannotations"`
-	Id             string `json:"id"`
-	JobID          string `json:"jobid"`
-	Jobstatus      int    `json:"jobstatus"`
-	Name           string `json:"name"`
-	Providername   string `json:"providername"`
-	Storagetotal   int64  `json:"storagetotal"`
-	Storageused    int64  `json:"storageused"`
-	Url            string `json:"url"`
+	Hasannotations   bool   `json:"hasannotations"`
+	Id               string `json:"id"`
+	JobID            string `json:"jobid"`
+	Jobstatus        int    `json:"jobstatus"`
+	Name             string `json:"name"`
+	Providername     string `json:"providername"`
+	Storageallocated int64  `json:"storageallocated"`
+	Storagetotal     int64  `json:"storagetotal"`
+	Storageused      int64  `json:"storageused"`
+	Url              string `json:"url"`
 }
 
 type DeleteObjectStoragePoolParams struct {
@@ -1717,6 +1774,9 @@ func (p *ListStoragePoolsMetricsParams) toURLValues() url.Values {
 	if v, found := p.p["status"]; found {
 		u.Set("status", v.(string))
 	}
+	if v, found := p.p["storageaccessgroup"]; found {
+		u.Set("storageaccessgroup", v.(string))
+	}
 	if v, found := p.p["storagecustomstats"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("storagecustomstats", vv)
@@ -1979,6 +2039,27 @@ func (p *ListStoragePoolsMetricsParams) GetStatus() (string, bool) {
 	return value, ok
 }
 
+func (p *ListStoragePoolsMetricsParams) SetStorageaccessgroup(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroup"] = v
+}
+
+func (p *ListStoragePoolsMetricsParams) ResetStorageaccessgroup() {
+	if p.p != nil && p.p["storageaccessgroup"] != nil {
+		delete(p.p, "storageaccessgroup")
+	}
+}
+
+func (p *ListStoragePoolsMetricsParams) GetStorageaccessgroup() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroup"].(string)
+	return value, ok
+}
+
 func (p *ListStoragePoolsMetricsParams) SetStoragecustomstats(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2138,6 +2219,7 @@ type StoragePoolsMetric struct {
 	Clusterid                        string            `json:"clusterid"`
 	Clustername                      string            `json:"clustername"`
 	Created                          string            `json:"created"`
+	Details                          map[string]string `json:"details"`
 	Disksizeallocated                int64             `json:"disksizeallocated"`
 	Disksizeallocatedgb              string            `json:"disksizeallocatedgb"`
 	Disksizetotal                    int64             `json:"disksizetotal"`
@@ -2162,6 +2244,7 @@ type StoragePoolsMetric struct {
 	Provider                         string            `json:"provider"`
 	Scope                            string            `json:"scope"`
 	State                            string            `json:"state"`
+	Storageaccessgroups              string            `json:"storageaccessgroups"`
 	Storageallocateddisablethreshold bool              `json:"storageallocateddisablethreshold"`
 	Storageallocatedthreshold        bool              `json:"storageallocatedthreshold"`
 	Storagecapabilities              map[string]string `json:"storagecapabilities"`
diff --git a/cloudstack/TemplateService.go b/cloudstack/TemplateService.go
index d2cf6b1..9a1c490 100644
--- a/cloudstack/TemplateService.go
+++ b/cloudstack/TemplateService.go
@@ -232,6 +232,9 @@ type CopyTemplateResponse struct {
 	Domainid              string              `json:"domainid"`
 	Domainpath            string              `json:"domainpath"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
+	Extensionid           string              `json:"extensionid"`
+	Extensionname         string              `json:"extensionname"`
+	Forcks                bool                `json:"forcks"`
 	Format                string              `json:"format"`
 	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
@@ -311,6 +314,9 @@ func (p *CreateTemplateParams) toURLValues() url.Values {
 	if v, found := p.p["account"]; found {
 		u.Set("account", v.(string))
 	}
+	if v, found := p.p["arch"]; found {
+		u.Set("arch", v.(string))
+	}
 	if v, found := p.p["bits"]; found {
 		vv := strconv.Itoa(v.(int))
 		u.Set("bits", vv)
@@ -402,6 +408,27 @@ func (p *CreateTemplateParams) GetAccount() (string, bool) {
 	return value, ok
 }
 
+func (p *CreateTemplateParams) SetArch(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["arch"] = v
+}
+
+func (p *CreateTemplateParams) ResetArch() {
+	if p.p != nil && p.p["arch"] != nil {
+		delete(p.p, "arch")
+	}
+}
+
+func (p *CreateTemplateParams) GetArch() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["arch"].(string)
+	return value, ok
+}
+
 func (p *CreateTemplateParams) SetBits(v int) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -866,6 +893,9 @@ type CreateTemplateResponse struct {
 	Domainid              string              `json:"domainid"`
 	Domainpath            string              `json:"domainpath"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
+	Extensionid           string              `json:"extensionid"`
+	Extensionname         string              `json:"extensionname"`
+	Forcks                bool                `json:"forcks"`
 	Format                string              `json:"format"`
 	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
@@ -1299,6 +1329,10 @@ func (p *GetUploadParamsForTemplateParams) toURLValues() url.Values {
 	if v, found := p.p["domainid"]; found {
 		u.Set("domainid", v.(string))
 	}
+	if v, found := p.p["forcks"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("forcks", vv)
+	}
 	if v, found := p.p["format"]; found {
 		u.Set("format", v.(string))
 	}
@@ -1523,6 +1557,27 @@ func (p *GetUploadParamsForTemplateParams) GetDomainid() (string, bool) {
 	return value, ok
 }
 
+func (p *GetUploadParamsForTemplateParams) SetForcks(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["forcks"] = v
+}
+
+func (p *GetUploadParamsForTemplateParams) ResetForcks() {
+	if p.p != nil && p.p["forcks"] != nil {
+		delete(p.p, "forcks")
+	}
+}
+
+func (p *GetUploadParamsForTemplateParams) GetForcks() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["forcks"].(bool)
+	return value, ok
+}
+
 func (p *GetUploadParamsForTemplateParams) SetFormat(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2009,6 +2064,13 @@ func (p *ListTemplatesParams) toURLValues() url.Values {
 	if v, found := p.p["domainid"]; found {
 		u.Set("domainid", v.(string))
 	}
+	if v, found := p.p["extensionid"]; found {
+		u.Set("extensionid", v.(string))
+	}
+	if v, found := p.p["forcks"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("forcks", vv)
+	}
 	if v, found := p.p["hypervisor"]; found {
 		u.Set("hypervisor", v.(string))
 	}
@@ -2022,6 +2084,10 @@ func (p *ListTemplatesParams) toURLValues() url.Values {
 	if v, found := p.p["imagestoreid"]; found {
 		u.Set("imagestoreid", v.(string))
 	}
+	if v, found := p.p["isready"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("isready", vv)
+	}
 	if v, found := p.p["isrecursive"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("isrecursive", vv)
@@ -2040,6 +2106,9 @@ func (p *ListTemplatesParams) toURLValues() url.Values {
 	if v, found := p.p["name"]; found {
 		u.Set("name", v.(string))
 	}
+	if v, found := p.p["oscategoryid"]; found {
+		u.Set("oscategoryid", v.(string))
+	}
 	if v, found := p.p["page"]; found {
 		vv := strconv.Itoa(v.(int))
 		u.Set("page", vv)
@@ -2172,6 +2241,48 @@ func (p *ListTemplatesParams) GetDomainid() (string, bool) {
 	return value, ok
 }
 
+func (p *ListTemplatesParams) SetExtensionid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["extensionid"] = v
+}
+
+func (p *ListTemplatesParams) ResetExtensionid() {
+	if p.p != nil && p.p["extensionid"] != nil {
+		delete(p.p, "extensionid")
+	}
+}
+
+func (p *ListTemplatesParams) GetExtensionid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["extensionid"].(string)
+	return value, ok
+}
+
+func (p *ListTemplatesParams) SetForcks(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["forcks"] = v
+}
+
+func (p *ListTemplatesParams) ResetForcks() {
+	if p.p != nil && p.p["forcks"] != nil {
+		delete(p.p, "forcks")
+	}
+}
+
+func (p *ListTemplatesParams) GetForcks() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["forcks"].(bool)
+	return value, ok
+}
+
 func (p *ListTemplatesParams) SetHypervisor(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2256,6 +2367,27 @@ func (p *ListTemplatesParams) GetImagestoreid() (string, bool) {
 	return value, ok
 }
 
+func (p *ListTemplatesParams) SetIsready(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["isready"] = v
+}
+
+func (p *ListTemplatesParams) ResetIsready() {
+	if p.p != nil && p.p["isready"] != nil {
+		delete(p.p, "isready")
+	}
+}
+
+func (p *ListTemplatesParams) GetIsready() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["isready"].(bool)
+	return value, ok
+}
+
 func (p *ListTemplatesParams) SetIsrecursive(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2361,6 +2493,27 @@ func (p *ListTemplatesParams) GetName() (string, bool) {
 	return value, ok
 }
 
+func (p *ListTemplatesParams) SetOscategoryid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["oscategoryid"] = v
+}
+
+func (p *ListTemplatesParams) ResetOscategoryid() {
+	if p.p != nil && p.p["oscategoryid"] != nil {
+		delete(p.p, "oscategoryid")
+	}
+}
+
+func (p *ListTemplatesParams) GetOscategoryid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["oscategoryid"].(string)
+	return value, ok
+}
+
 func (p *ListTemplatesParams) SetPage(v int) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2747,6 +2900,9 @@ type Template struct {
 	Domainid              string              `json:"domainid"`
 	Domainpath            string              `json:"domainpath"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
+	Extensionid           string              `json:"extensionid"`
+	Extensionname         string              `json:"extensionname"`
+	Forcks                bool                `json:"forcks"`
 	Format                string              `json:"format"`
 	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
@@ -2942,6 +3098,9 @@ type PrepareTemplateResponse struct {
 	Domainid              string              `json:"domainid"`
 	Domainpath            string              `json:"domainpath"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
+	Extensionid           string              `json:"extensionid"`
+	Extensionname         string              `json:"extensionname"`
+	Forcks                bool                `json:"forcks"`
 	Format                string              `json:"format"`
 	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
@@ -3051,6 +3210,19 @@ func (p *RegisterTemplateParams) toURLValues() url.Values {
 	if v, found := p.p["domainid"]; found {
 		u.Set("domainid", v.(string))
 	}
+	if v, found := p.p["extensionid"]; found {
+		u.Set("extensionid", v.(string))
+	}
+	if v, found := p.p["externaldetails"]; found {
+		m := v.(map[string]string)
+		for _, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("externaldetails[0].%s", k), m[k])
+		}
+	}
+	if v, found := p.p["forcks"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("forcks", vv)
+	}
 	if v, found := p.p["format"]; found {
 		u.Set("format", v.(string))
 	}
@@ -3306,6 +3478,69 @@ func (p *RegisterTemplateParams) GetDomainid() (string, bool) {
 	return value, ok
 }
 
+func (p *RegisterTemplateParams) SetExtensionid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["extensionid"] = v
+}
+
+func (p *RegisterTemplateParams) ResetExtensionid() {
+	if p.p != nil && p.p["extensionid"] != nil {
+		delete(p.p, "extensionid")
+	}
+}
+
+func (p *RegisterTemplateParams) GetExtensionid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["extensionid"].(string)
+	return value, ok
+}
+
+func (p *RegisterTemplateParams) SetExternaldetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["externaldetails"] = v
+}
+
+func (p *RegisterTemplateParams) ResetExternaldetails() {
+	if p.p != nil && p.p["externaldetails"] != nil {
+		delete(p.p, "externaldetails")
+	}
+}
+
+func (p *RegisterTemplateParams) GetExternaldetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["externaldetails"].(map[string]string)
+	return value, ok
+}
+
+func (p *RegisterTemplateParams) SetForcks(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["forcks"] = v
+}
+
+func (p *RegisterTemplateParams) ResetForcks() {
+	if p.p != nil && p.p["forcks"] != nil {
+		delete(p.p, "forcks")
+	}
+}
+
+func (p *RegisterTemplateParams) GetForcks() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["forcks"].(bool)
+	return value, ok
+}
+
 func (p *RegisterTemplateParams) SetFormat(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3736,6 +3971,9 @@ type RegisterTemplate struct {
 	Domainid              string              `json:"domainid"`
 	Domainpath            string              `json:"domainpath"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
+	Extensionid           string              `json:"extensionid"`
+	Extensionname         string              `json:"extensionname"`
+	Forcks                bool                `json:"forcks"`
 	Format                string              `json:"format"`
 	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
@@ -3832,6 +4070,14 @@ func (p *UpdateTemplateParams) toURLValues() url.Values {
 	if v, found := p.p["displaytext"]; found {
 		u.Set("displaytext", v.(string))
 	}
+	if v, found := p.p["forceupdateostype"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("forceupdateostype", vv)
+	}
+	if v, found := p.p["forcks"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("forcks", vv)
+	}
 	if v, found := p.p["format"]; found {
 		u.Set("format", v.(string))
 	}
@@ -3982,6 +4228,48 @@ func (p *UpdateTemplateParams) GetDisplaytext() (string, bool) {
 	return value, ok
 }
 
+func (p *UpdateTemplateParams) SetForceupdateostype(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["forceupdateostype"] = v
+}
+
+func (p *UpdateTemplateParams) ResetForceupdateostype() {
+	if p.p != nil && p.p["forceupdateostype"] != nil {
+		delete(p.p, "forceupdateostype")
+	}
+}
+
+func (p *UpdateTemplateParams) GetForceupdateostype() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["forceupdateostype"].(bool)
+	return value, ok
+}
+
+func (p *UpdateTemplateParams) SetForcks(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["forcks"] = v
+}
+
+func (p *UpdateTemplateParams) ResetForcks() {
+	if p.p != nil && p.p["forcks"] != nil {
+		delete(p.p, "forcks")
+	}
+}
+
+func (p *UpdateTemplateParams) GetForcks() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["forcks"].(bool)
+	return value, ok
+}
+
 func (p *UpdateTemplateParams) SetFormat(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -4277,6 +4565,9 @@ type UpdateTemplateResponse struct {
 	Domainid              string              `json:"domainid"`
 	Domainpath            string              `json:"domainpath"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
+	Extensionid           string              `json:"extensionid"`
+	Extensionname         string              `json:"extensionname"`
+	Forcks                bool                `json:"forcks"`
 	Format                string              `json:"format"`
 	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
@@ -4924,6 +5215,9 @@ type LinkUserDataToTemplateResponse struct {
 	Domainid              string              `json:"domainid"`
 	Domainpath            string              `json:"domainpath"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
+	Extensionid           string              `json:"extensionid"`
+	Extensionname         string              `json:"extensionname"`
+	Forcks                bool                `json:"forcks"`
 	Format                string              `json:"format"`
 	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
diff --git a/cloudstack/UserService.go b/cloudstack/UserService.go
index 1939ad4..1b46c0b 100644
--- a/cloudstack/UserService.go
+++ b/cloudstack/UserService.go
@@ -1019,6 +1019,9 @@ func (p *ListUsersParams) toURLValues() url.Values {
 	if v, found := p.p["username"]; found {
 		u.Set("username", v.(string))
 	}
+	if v, found := p.p["usersource"]; found {
+		u.Set("usersource", v.(string))
+	}
 	return u
 }
 
@@ -1295,6 +1298,27 @@ func (p *ListUsersParams) GetUsername() (string, bool) {
 	return value, ok
 }
 
+func (p *ListUsersParams) SetUsersource(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["usersource"] = v
+}
+
+func (p *ListUsersParams) ResetUsersource() {
+	if p.p != nil && p.p["usersource"] != nil {
+		delete(p.p, "usersource")
+	}
+}
+
+func (p *ListUsersParams) GetUsersource() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["usersource"].(string)
+	return value, ok
+}
+
 // You should always use this function to get a new ListUsersParams instance,
 // as then you are sure you have configured all required params
 func (s *UserService) NewListUsersParams() *ListUsersParams {
@@ -2623,7 +2647,7 @@ func (s *UserService) NewRegisterUserDataParams(name string, userdata string) *R
 	return p
 }
 
-// Register a new userdata.
+// Register a new User Data.
 func (s *UserService) RegisterUserData(p *RegisterUserDataParams) (*RegisterUserDataResponse, error) {
 	resp, err := s.cs.newPostRequest("registerUserData", p.toURLValues())
 	if err != nil {
diff --git a/cloudstack/VLANService.go b/cloudstack/VLANService.go
index 55f4e4c..68b0a31 100644
--- a/cloudstack/VLANService.go
+++ b/cloudstack/VLANService.go
@@ -69,10 +69,6 @@ func (p *CreateVlanIpRangeParams) toURLValues() url.Values {
 	if v, found := p.p["endipv6"]; found {
 		u.Set("endipv6", v.(string))
 	}
-	if v, found := p.p["fornsx"]; found {
-		vv := strconv.FormatBool(v.(bool))
-		u.Set("fornsx", vv)
-	}
 	if v, found := p.p["forsystemvms"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("forsystemvms", vv)
@@ -105,6 +101,9 @@ func (p *CreateVlanIpRangeParams) toURLValues() url.Values {
 	if v, found := p.p["projectid"]; found {
 		u.Set("projectid", v.(string))
 	}
+	if v, found := p.p["provider"]; found {
+		u.Set("provider", v.(string))
+	}
 	if v, found := p.p["startip"]; found {
 		u.Set("startip", v.(string))
 	}
@@ -204,27 +203,6 @@ func (p *CreateVlanIpRangeParams) GetEndipv6() (string, bool) {
 	return value, ok
 }
 
-func (p *CreateVlanIpRangeParams) SetFornsx(v bool) {
-	if p.p == nil {
-		p.p = make(map[string]interface{})
-	}
-	p.p["fornsx"] = v
-}
-
-func (p *CreateVlanIpRangeParams) ResetFornsx() {
-	if p.p != nil && p.p["fornsx"] != nil {
-		delete(p.p, "fornsx")
-	}
-}
-
-func (p *CreateVlanIpRangeParams) GetFornsx() (bool, bool) {
-	if p.p == nil {
-		p.p = make(map[string]interface{})
-	}
-	value, ok := p.p["fornsx"].(bool)
-	return value, ok
-}
-
 func (p *CreateVlanIpRangeParams) SetForsystemvms(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -435,6 +413,27 @@ func (p *CreateVlanIpRangeParams) GetProjectid() (string, bool) {
 	return value, ok
 }
 
+func (p *CreateVlanIpRangeParams) SetProvider(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["provider"] = v
+}
+
+func (p *CreateVlanIpRangeParams) ResetProvider() {
+	if p.p != nil && p.p["provider"] != nil {
+		delete(p.p, "provider")
+	}
+}
+
+func (p *CreateVlanIpRangeParams) GetProvider() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["provider"].(string)
+	return value, ok
+}
+
 func (p *CreateVlanIpRangeParams) SetStartip(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -555,7 +554,6 @@ type CreateVlanIpRangeResponse struct {
 	Domainpath        string `json:"domainpath"`
 	Endip             string `json:"endip"`
 	Endipv6           string `json:"endipv6"`
-	Fornsx            bool   `json:"fornsx"`
 	Forsystemvms      bool   `json:"forsystemvms"`
 	Forvirtualnetwork bool   `json:"forvirtualnetwork"`
 	Gateway           string `json:"gateway"`
@@ -571,6 +569,7 @@ type CreateVlanIpRangeResponse struct {
 	Podname           string `json:"podname"`
 	Project           string `json:"project"`
 	Projectid         string `json:"projectid"`
+	Provider          string `json:"provider"`
 	Startip           string `json:"startip"`
 	Startipv6         string `json:"startipv6"`
 	Vlan              string `json:"vlan"`
@@ -1574,7 +1573,6 @@ type VlanIpRange struct {
 	Domainpath        string `json:"domainpath"`
 	Endip             string `json:"endip"`
 	Endipv6           string `json:"endipv6"`
-	Fornsx            bool   `json:"fornsx"`
 	Forsystemvms      bool   `json:"forsystemvms"`
 	Forvirtualnetwork bool   `json:"forvirtualnetwork"`
 	Gateway           string `json:"gateway"`
@@ -1590,6 +1588,7 @@ type VlanIpRange struct {
 	Podname           string `json:"podname"`
 	Project           string `json:"project"`
 	Projectid         string `json:"projectid"`
+	Provider          string `json:"provider"`
 	Startip           string `json:"startip"`
 	Startipv6         string `json:"startipv6"`
 	Vlan              string `json:"vlan"`
@@ -2225,7 +2224,6 @@ type UpdateVlanIpRangeResponse struct {
 	Domainpath        string `json:"domainpath"`
 	Endip             string `json:"endip"`
 	Endipv6           string `json:"endipv6"`
-	Fornsx            bool   `json:"fornsx"`
 	Forsystemvms      bool   `json:"forsystemvms"`
 	Forvirtualnetwork bool   `json:"forvirtualnetwork"`
 	Gateway           string `json:"gateway"`
@@ -2241,6 +2239,7 @@ type UpdateVlanIpRangeResponse struct {
 	Podname           string `json:"podname"`
 	Project           string `json:"project"`
 	Projectid         string `json:"projectid"`
+	Provider          string `json:"provider"`
 	Startip           string `json:"startip"`
 	Startipv6         string `json:"startipv6"`
 	Vlan              string `json:"vlan"`
diff --git a/cloudstack/VPCService.go b/cloudstack/VPCService.go
index ad32996..d5f67d0 100644
--- a/cloudstack/VPCService.go
+++ b/cloudstack/VPCService.go
@@ -31,7 +31,7 @@ type VPCServiceIface interface {
 	CreatePrivateGateway(p *CreatePrivateGatewayParams) (*CreatePrivateGatewayResponse, error)
 	NewCreatePrivateGatewayParams(gateway string, ipaddress string, netmask string, vpcid string) *CreatePrivateGatewayParams
 	CreateStaticRoute(p *CreateStaticRouteParams) (*CreateStaticRouteResponse, error)
-	NewCreateStaticRouteParams(cidr string, gatewayid string) *CreateStaticRouteParams
+	NewCreateStaticRouteParams(cidr string) *CreateStaticRouteParams
 	CreateVPC(p *CreateVPCParams) (*CreateVPCResponse, error)
 	NewCreateVPCParams(cidr string, displaytext string, name string, vpcofferingid string, zoneid string) *CreateVPCParams
 	CreateVPCOffering(p *CreateVPCOfferingParams) (*CreateVPCOfferingResponse, error)
@@ -438,6 +438,12 @@ func (p *CreateStaticRouteParams) toURLValues() url.Values {
 	if v, found := p.p["gatewayid"]; found {
 		u.Set("gatewayid", v.(string))
 	}
+	if v, found := p.p["nexthop"]; found {
+		u.Set("nexthop", v.(string))
+	}
+	if v, found := p.p["vpcid"]; found {
+		u.Set("vpcid", v.(string))
+	}
 	return u
 }
 
@@ -483,13 +489,54 @@ func (p *CreateStaticRouteParams) GetGatewayid() (string, bool) {
 	return value, ok
 }
 
+func (p *CreateStaticRouteParams) SetNexthop(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["nexthop"] = v
+}
+
+func (p *CreateStaticRouteParams) ResetNexthop() {
+	if p.p != nil && p.p["nexthop"] != nil {
+		delete(p.p, "nexthop")
+	}
+}
+
+func (p *CreateStaticRouteParams) GetNexthop() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["nexthop"].(string)
+	return value, ok
+}
+
+func (p *CreateStaticRouteParams) SetVpcid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["vpcid"] = v
+}
+
+func (p *CreateStaticRouteParams) ResetVpcid() {
+	if p.p != nil && p.p["vpcid"] != nil {
+		delete(p.p, "vpcid")
+	}
+}
+
+func (p *CreateStaticRouteParams) GetVpcid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["vpcid"].(string)
+	return value, ok
+}
+
 // You should always use this function to get a new CreateStaticRouteParams instance,
 // as then you are sure you have configured all required params
-func (s *VPCService) NewCreateStaticRouteParams(cidr string, gatewayid string) *CreateStaticRouteParams {
+func (s *VPCService) NewCreateStaticRouteParams(cidr string) *CreateStaticRouteParams {
 	p := &CreateStaticRouteParams{}
 	p.p = make(map[string]interface{})
 	p.p["cidr"] = cidr
-	p.p["gatewayid"] = gatewayid
 	return p
 }
 
@@ -529,20 +576,22 @@ func (s *VPCService) CreateStaticRoute(p *CreateStaticRouteParams) (*CreateStati
 }
 
 type CreateStaticRouteResponse struct {
-	Account    string `json:"account"`
-	Cidr       string `json:"cidr"`
-	Domain     string `json:"domain"`
-	Domainid   string `json:"domainid"`
-	Domainpath string `json:"domainpath"`
-	Gatewayid  string `json:"gatewayid"`
-	Id         string `json:"id"`
-	JobID      string `json:"jobid"`
-	Jobstatus  int    `json:"jobstatus"`
-	Project    string `json:"project"`
-	Projectid  string `json:"projectid"`
-	State      string `json:"state"`
-	Tags       []Tags `json:"tags"`
-	Vpcid      string `json:"vpcid"`
+	Account      string `json:"account"`
+	Cidr         string `json:"cidr"`
+	Domain       string `json:"domain"`
+	Domainid     string `json:"domainid"`
+	Domainpath   string `json:"domainpath"`
+	Id           string `json:"id"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
+	Nexthop      string `json:"nexthop"`
+	Project      string `json:"project"`
+	Projectid    string `json:"projectid"`
+	State        string `json:"state"`
+	Tags         []Tags `json:"tags"`
+	Vpcgatewayid string `json:"vpcgatewayid"`
+	Vpcgatewayip string `json:"vpcgatewayip"`
+	Vpcid        string `json:"vpcid"`
 }
 
 type CreateVPCParams struct {
@@ -614,6 +663,10 @@ func (p *CreateVPCParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("start", vv)
 	}
+	if v, found := p.p["userouteripresolver"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("userouteripresolver", vv)
+	}
 	if v, found := p.p["vpcofferingid"]; found {
 		u.Set("vpcofferingid", v.(string))
 	}
@@ -1001,6 +1054,27 @@ func (p *CreateVPCParams) GetStart() (bool, bool) {
 	return value, ok
 }
 
+func (p *CreateVPCParams) SetUserouteripresolver(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["userouteripresolver"] = v
+}
+
+func (p *CreateVPCParams) ResetUserouteripresolver() {
+	if p.p != nil && p.p["userouteripresolver"] != nil {
+		delete(p.p, "userouteripresolver")
+	}
+}
+
+func (p *CreateVPCParams) GetUserouteripresolver() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["userouteripresolver"].(bool)
+	return value, ok
+}
+
 func (p *CreateVPCParams) SetVpcofferingid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1193,6 +1267,9 @@ func (p *CreateVPCOfferingParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("nsxsupportlb", vv)
 	}
+	if v, found := p.p["provider"]; found {
+		u.Set("provider", v.(string))
+	}
 	if v, found := p.p["routingmode"]; found {
 		u.Set("routingmode", v.(string))
 	}
@@ -1396,6 +1473,27 @@ func (p *CreateVPCOfferingParams) GetNsxsupportlb() (bool, bool) {
 	return value, ok
 }
 
+func (p *CreateVPCOfferingParams) SetProvider(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["provider"] = v
+}
+
+func (p *CreateVPCOfferingParams) ResetProvider() {
+	if p.p != nil && p.p["provider"] != nil {
+		delete(p.p, "provider")
+	}
+}
+
+func (p *CreateVPCOfferingParams) GetProvider() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["provider"].(string)
+	return value, ok
+}
+
 func (p *CreateVPCOfferingParams) SetRoutingmode(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2772,20 +2870,22 @@ type ListStaticRoutesResponse struct {
 }
 
 type StaticRoute struct {
-	Account    string `json:"account"`
-	Cidr       string `json:"cidr"`
-	Domain     string `json:"domain"`
-	Domainid   string `json:"domainid"`
-	Domainpath string `json:"domainpath"`
-	Gatewayid  string `json:"gatewayid"`
-	Id         string `json:"id"`
-	JobID      string `json:"jobid"`
-	Jobstatus  int    `json:"jobstatus"`
-	Project    string `json:"project"`
-	Projectid  string `json:"projectid"`
-	State      string `json:"state"`
-	Tags       []Tags `json:"tags"`
-	Vpcid      string `json:"vpcid"`
+	Account      string `json:"account"`
+	Cidr         string `json:"cidr"`
+	Domain       string `json:"domain"`
+	Domainid     string `json:"domainid"`
+	Domainpath   string `json:"domainpath"`
+	Id           string `json:"id"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
+	Nexthop      string `json:"nexthop"`
+	Project      string `json:"project"`
+	Projectid    string `json:"projectid"`
+	State        string `json:"state"`
+	Tags         []Tags `json:"tags"`
+	Vpcgatewayid string `json:"vpcgatewayid"`
+	Vpcgatewayip string `json:"vpcgatewayip"`
+	Vpcid        string `json:"vpcid"`
 }
 
 type ListVPCOfferingsParams struct {
diff --git a/cloudstack/VPCService_mock.go b/cloudstack/VPCService_mock.go
index c5513a0..7431292 100644
--- a/cloudstack/VPCService_mock.go
+++ b/cloudstack/VPCService_mock.go
@@ -436,17 +436,17 @@ func (mr *MockVPCServiceIfaceMockRecorder) NewCreatePrivateGatewayParams(gateway
 }
 
 // NewCreateStaticRouteParams mocks base method.
-func (m *MockVPCServiceIface) NewCreateStaticRouteParams(cidr, gatewayid string) *CreateStaticRouteParams {
+func (m *MockVPCServiceIface) NewCreateStaticRouteParams(cidr string) *CreateStaticRouteParams {
 	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "NewCreateStaticRouteParams", cidr, gatewayid)
+	ret := m.ctrl.Call(m, "NewCreateStaticRouteParams", cidr)
 	ret0, _ := ret[0].(*CreateStaticRouteParams)
 	return ret0
 }
 
 // NewCreateStaticRouteParams indicates an expected call of NewCreateStaticRouteParams.
-func (mr *MockVPCServiceIfaceMockRecorder) NewCreateStaticRouteParams(cidr, gatewayid any) *gomock.Call {
+func (mr *MockVPCServiceIfaceMockRecorder) NewCreateStaticRouteParams(cidr any) *gomock.Call {
 	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewCreateStaticRouteParams", reflect.TypeOf((*MockVPCServiceIface)(nil).NewCreateStaticRouteParams), cidr, gatewayid)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewCreateStaticRouteParams", reflect.TypeOf((*MockVPCServiceIface)(nil).NewCreateStaticRouteParams), cidr)
 }
 
 // NewCreateVPCOfferingParams mocks base method.
diff --git a/cloudstack/VPNService.go b/cloudstack/VPNService.go
index 5a77d5c..785c1cd 100644
--- a/cloudstack/VPNService.go
+++ b/cloudstack/VPNService.go
@@ -1139,6 +1139,9 @@ func (p *CreateVpnGatewayParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("fordisplay", vv)
 	}
+	if v, found := p.p["ipaddressid"]; found {
+		u.Set("ipaddressid", v.(string))
+	}
 	if v, found := p.p["vpcid"]; found {
 		u.Set("vpcid", v.(string))
 	}
@@ -1166,6 +1169,27 @@ func (p *CreateVpnGatewayParams) GetFordisplay() (bool, bool) {
 	return value, ok
 }
 
+func (p *CreateVpnGatewayParams) SetIpaddressid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["ipaddressid"] = v
+}
+
+func (p *CreateVpnGatewayParams) ResetIpaddressid() {
+	if p.p != nil && p.p["ipaddressid"] != nil {
+		delete(p.p, "ipaddressid")
+	}
+}
+
+func (p *CreateVpnGatewayParams) GetIpaddressid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["ipaddressid"].(string)
+	return value, ok
+}
+
 func (p *CreateVpnGatewayParams) SetVpcid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
diff --git a/cloudstack/VirtualMachineService.go b/cloudstack/VirtualMachineService.go
index 8a9166c..27c5eb9 100644
--- a/cloudstack/VirtualMachineService.go
+++ b/cloudstack/VirtualMachineService.go
@@ -37,7 +37,7 @@ type VirtualMachineServiceIface interface {
 	CleanVMReservations(p *CleanVMReservationsParams) (*CleanVMReservationsResponse, error)
 	NewCleanVMReservationsParams() *CleanVMReservationsParams
 	DeployVirtualMachine(p *DeployVirtualMachineParams) (*DeployVirtualMachineResponse, error)
-	NewDeployVirtualMachineParams(serviceofferingid string, templateid string, zoneid string) *DeployVirtualMachineParams
+	NewDeployVirtualMachineParams(serviceofferingid string, zoneid string) *DeployVirtualMachineParams
 	DestroyVirtualMachine(p *DestroyVirtualMachineParams) (*DestroyVirtualMachineResponse, error)
 	NewDestroyVirtualMachineParams(id string) *DestroyVirtualMachineParams
 	ExpungeVirtualMachine(p *ExpungeVirtualMachineParams) (*ExpungeVirtualMachineResponse, error)
@@ -315,6 +315,9 @@ type AddNicToVirtualMachineResponse struct {
 	Domainid              string                                        `json:"domainid"`
 	Domainpath            string                                        `json:"domainpath"`
 	Forvirtualnetwork     bool                                          `json:"forvirtualnetwork"`
+	Gpucardid             string                                        `json:"gpucardid"`
+	Gpucardname           string                                        `json:"gpucardname"`
+	Gpucount              int                                           `json:"gpucount"`
 	Group                 string                                        `json:"group"`
 	Groupid               string                                        `json:"groupid"`
 	Guestosid             string                                        `json:"guestosid"`
@@ -336,6 +339,12 @@ type AddNicToVirtualMachineResponse struct {
 	Jobstatus             int                                           `json:"jobstatus"`
 	Keypairs              string                                        `json:"keypairs"`
 	Lastupdated           string                                        `json:"lastupdated"`
+	Leaseduration         int                                           `json:"leaseduration"`
+	Leaseexpiryaction     string                                        `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                        `json:"leaseexpirydate"`
+	Maxheads              int64                                         `json:"maxheads"`
+	Maxresolutionx        int64                                         `json:"maxresolutionx"`
+	Maxresolutiony        int64                                         `json:"maxresolutiony"`
 	Memory                int                                           `json:"memory"`
 	Memoryintfreekbs      int64                                         `json:"memoryintfreekbs"`
 	Memorykbs             int64                                         `json:"memorykbs"`
@@ -377,6 +386,9 @@ type AddNicToVirtualMachineResponse struct {
 	Userid                string                                        `json:"userid"`
 	Username              string                                        `json:"username"`
 	Vgpu                  string                                        `json:"vgpu"`
+	Vgpuprofileid         string                                        `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                        `json:"vgpuprofilename"`
+	Videoram              int64                                         `json:"videoram"`
 	Vmtype                string                                        `json:"vmtype"`
 	Vnfdetails            map[string]string                             `json:"vnfdetails"`
 	Vnfnics               []string                                      `json:"vnfnics"`
@@ -666,6 +678,9 @@ type AssignVirtualMachineResponse struct {
 	Domainid              string                                      `json:"domainid"`
 	Domainpath            string                                      `json:"domainpath"`
 	Forvirtualnetwork     bool                                        `json:"forvirtualnetwork"`
+	Gpucardid             string                                      `json:"gpucardid"`
+	Gpucardname           string                                      `json:"gpucardname"`
+	Gpucount              int                                         `json:"gpucount"`
 	Group                 string                                      `json:"group"`
 	Groupid               string                                      `json:"groupid"`
 	Guestosid             string                                      `json:"guestosid"`
@@ -687,6 +702,12 @@ type AssignVirtualMachineResponse struct {
 	Jobstatus             int                                         `json:"jobstatus"`
 	Keypairs              string                                      `json:"keypairs"`
 	Lastupdated           string                                      `json:"lastupdated"`
+	Leaseduration         int                                         `json:"leaseduration"`
+	Leaseexpiryaction     string                                      `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                      `json:"leaseexpirydate"`
+	Maxheads              int64                                       `json:"maxheads"`
+	Maxresolutionx        int64                                       `json:"maxresolutionx"`
+	Maxresolutiony        int64                                       `json:"maxresolutiony"`
 	Memory                int                                         `json:"memory"`
 	Memoryintfreekbs      int64                                       `json:"memoryintfreekbs"`
 	Memorykbs             int64                                       `json:"memorykbs"`
@@ -728,6 +749,9 @@ type AssignVirtualMachineResponse struct {
 	Userid                string                                      `json:"userid"`
 	Username              string                                      `json:"username"`
 	Vgpu                  string                                      `json:"vgpu"`
+	Vgpuprofileid         string                                      `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                      `json:"vgpuprofilename"`
+	Videoram              int64                                       `json:"videoram"`
 	Vmtype                string                                      `json:"vmtype"`
 	Vnfdetails            map[string]string                           `json:"vnfdetails"`
 	Vnfnics               []string                                    `json:"vnfnics"`
@@ -1047,6 +1071,9 @@ type ChangeServiceForVirtualMachineResponse struct {
 	Domainid              string                                                `json:"domainid"`
 	Domainpath            string                                                `json:"domainpath"`
 	Forvirtualnetwork     bool                                                  `json:"forvirtualnetwork"`
+	Gpucardid             string                                                `json:"gpucardid"`
+	Gpucardname           string                                                `json:"gpucardname"`
+	Gpucount              int                                                   `json:"gpucount"`
 	Group                 string                                                `json:"group"`
 	Groupid               string                                                `json:"groupid"`
 	Guestosid             string                                                `json:"guestosid"`
@@ -1068,6 +1095,12 @@ type ChangeServiceForVirtualMachineResponse struct {
 	Jobstatus             int                                                   `json:"jobstatus"`
 	Keypairs              string                                                `json:"keypairs"`
 	Lastupdated           string                                                `json:"lastupdated"`
+	Leaseduration         int                                                   `json:"leaseduration"`
+	Leaseexpiryaction     string                                                `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                                `json:"leaseexpirydate"`
+	Maxheads              int64                                                 `json:"maxheads"`
+	Maxresolutionx        int64                                                 `json:"maxresolutionx"`
+	Maxresolutiony        int64                                                 `json:"maxresolutiony"`
 	Memory                int                                                   `json:"memory"`
 	Memoryintfreekbs      int64                                                 `json:"memoryintfreekbs"`
 	Memorykbs             int64                                                 `json:"memorykbs"`
@@ -1109,6 +1142,9 @@ type ChangeServiceForVirtualMachineResponse struct {
 	Userid                string                                                `json:"userid"`
 	Username              string                                                `json:"username"`
 	Vgpu                  string                                                `json:"vgpu"`
+	Vgpuprofileid         string                                                `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                                `json:"vgpuprofilename"`
+	Videoram              int64                                                 `json:"videoram"`
 	Vmtype                string                                                `json:"vmtype"`
 	Vnfdetails            map[string]string                                     `json:"vnfdetails"`
 	Vnfnics               []string                                              `json:"vnfnics"`
@@ -1292,6 +1328,13 @@ func (p *DeployVirtualMachineParams) toURLValues() url.Values {
 			u.Set(fmt.Sprintf("datadiskofferinglist[%d].diskOffering", i), m[k])
 		}
 	}
+	if v, found := p.p["datadisksdetails"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("datadisksdetails[%d].key", i), k)
+			u.Set(fmt.Sprintf("datadisksdetails[%d].value", i), m[k])
+		}
+	}
 	if v, found := p.p["deploymentplanner"]; found {
 		u.Set("deploymentplanner", v.(string))
 	}
@@ -1326,6 +1369,13 @@ func (p *DeployVirtualMachineParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("dynamicscalingenabled", vv)
 	}
+	if v, found := p.p["externaldetails"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("externaldetails[%d].key", i), k)
+			u.Set(fmt.Sprintf("externaldetails[%d].value", i), m[k])
+		}
+	}
 	if v, found := p.p["extraconfig"]; found {
 		u.Set("extraconfig", v.(string))
 	}
@@ -1369,6 +1419,13 @@ func (p *DeployVirtualMachineParams) toURLValues() url.Values {
 		vv := strings.Join(v.([]string), ",")
 		u.Set("keypairs", vv)
 	}
+	if v, found := p.p["leaseduration"]; found {
+		vv := strconv.Itoa(v.(int))
+		u.Set("leaseduration", vv)
+	}
+	if v, found := p.p["leaseexpiryaction"]; found {
+		u.Set("leaseexpiryaction", v.(string))
+	}
 	if v, found := p.p["macaddress"]; found {
 		u.Set("macaddress", v.(string))
 	}
@@ -1433,6 +1490,9 @@ func (p *DeployVirtualMachineParams) toURLValues() url.Values {
 		vv := strconv.FormatInt(v.(int64), 10)
 		u.Set("size", vv)
 	}
+	if v, found := p.p["snapshotid"]; found {
+		u.Set("snapshotid", v.(string))
+	}
 	if v, found := p.p["startvm"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("startvm", vv)
@@ -1453,6 +1513,9 @@ func (p *DeployVirtualMachineParams) toURLValues() url.Values {
 	if v, found := p.p["userdataid"]; found {
 		u.Set("userdataid", v.(string))
 	}
+	if v, found := p.p["volumeid"]; found {
+		u.Set("volumeid", v.(string))
+	}
 	if v, found := p.p["zoneid"]; found {
 		u.Set("zoneid", v.(string))
 	}
@@ -1669,6 +1732,27 @@ func (p *DeployVirtualMachineParams) GetDatadiskofferinglist() (map[string]strin
 	return value, ok
 }
 
+func (p *DeployVirtualMachineParams) SetDatadisksdetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["datadisksdetails"] = v
+}
+
+func (p *DeployVirtualMachineParams) ResetDatadisksdetails() {
+	if p.p != nil && p.p["datadisksdetails"] != nil {
+		delete(p.p, "datadisksdetails")
+	}
+}
+
+func (p *DeployVirtualMachineParams) GetDatadisksdetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["datadisksdetails"].(map[string]string)
+	return value, ok
+}
+
 func (p *DeployVirtualMachineParams) SetDeploymentplanner(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1851,6 +1935,27 @@ func (p *DeployVirtualMachineParams) GetDynamicscalingenabled() (bool, bool) {
 	return value, ok
 }
 
+func (p *DeployVirtualMachineParams) SetExternaldetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["externaldetails"] = v
+}
+
+func (p *DeployVirtualMachineParams) ResetExternaldetails() {
+	if p.p != nil && p.p["externaldetails"] != nil {
+		delete(p.p, "externaldetails")
+	}
+}
+
+func (p *DeployVirtualMachineParams) GetExternaldetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["externaldetails"].(map[string]string)
+	return value, ok
+}
+
 func (p *DeployVirtualMachineParams) SetExtraconfig(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2117,6 +2222,48 @@ func (p *DeployVirtualMachineParams) GetKeypairs() ([]string, bool) {
 	return value, ok
 }
 
+func (p *DeployVirtualMachineParams) SetLeaseduration(v int) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["leaseduration"] = v
+}
+
+func (p *DeployVirtualMachineParams) ResetLeaseduration() {
+	if p.p != nil && p.p["leaseduration"] != nil {
+		delete(p.p, "leaseduration")
+	}
+}
+
+func (p *DeployVirtualMachineParams) GetLeaseduration() (int, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["leaseduration"].(int)
+	return value, ok
+}
+
+func (p *DeployVirtualMachineParams) SetLeaseexpiryaction(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["leaseexpiryaction"] = v
+}
+
+func (p *DeployVirtualMachineParams) ResetLeaseexpiryaction() {
+	if p.p != nil && p.p["leaseexpiryaction"] != nil {
+		delete(p.p, "leaseexpiryaction")
+	}
+}
+
+func (p *DeployVirtualMachineParams) GetLeaseexpiryaction() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["leaseexpiryaction"].(string)
+	return value, ok
+}
+
 func (p *DeployVirtualMachineParams) SetMacaddress(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2467,6 +2614,27 @@ func (p *DeployVirtualMachineParams) GetSize() (int64, bool) {
 	return value, ok
 }
 
+func (p *DeployVirtualMachineParams) SetSnapshotid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["snapshotid"] = v
+}
+
+func (p *DeployVirtualMachineParams) ResetSnapshotid() {
+	if p.p != nil && p.p["snapshotid"] != nil {
+		delete(p.p, "snapshotid")
+	}
+}
+
+func (p *DeployVirtualMachineParams) GetSnapshotid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["snapshotid"].(string)
+	return value, ok
+}
+
 func (p *DeployVirtualMachineParams) SetStartvm(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2572,6 +2740,27 @@ func (p *DeployVirtualMachineParams) GetUserdataid() (string, bool) {
 	return value, ok
 }
 
+func (p *DeployVirtualMachineParams) SetVolumeid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["volumeid"] = v
+}
+
+func (p *DeployVirtualMachineParams) ResetVolumeid() {
+	if p.p != nil && p.p["volumeid"] != nil {
+		delete(p.p, "volumeid")
+	}
+}
+
+func (p *DeployVirtualMachineParams) GetVolumeid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["volumeid"].(string)
+	return value, ok
+}
+
 func (p *DeployVirtualMachineParams) SetZoneid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2595,11 +2784,10 @@ func (p *DeployVirtualMachineParams) GetZoneid() (string, bool) {
 
 // You should always use this function to get a new DeployVirtualMachineParams instance,
 // as then you are sure you have configured all required params
-func (s *VirtualMachineService) NewDeployVirtualMachineParams(serviceofferingid string, templateid string, zoneid string) *DeployVirtualMachineParams {
+func (s *VirtualMachineService) NewDeployVirtualMachineParams(serviceofferingid string, zoneid string) *DeployVirtualMachineParams {
 	p := &DeployVirtualMachineParams{}
 	p.p = make(map[string]interface{})
 	p.p["serviceofferingid"] = serviceofferingid
-	p.p["templateid"] = templateid
 	p.p["zoneid"] = zoneid
 	return p
 }
@@ -2667,6 +2855,9 @@ type DeployVirtualMachineResponse struct {
 	Domainid              string                                      `json:"domainid"`
 	Domainpath            string                                      `json:"domainpath"`
 	Forvirtualnetwork     bool                                        `json:"forvirtualnetwork"`
+	Gpucardid             string                                      `json:"gpucardid"`
+	Gpucardname           string                                      `json:"gpucardname"`
+	Gpucount              int                                         `json:"gpucount"`
 	Group                 string                                      `json:"group"`
 	Groupid               string                                      `json:"groupid"`
 	Guestosid             string                                      `json:"guestosid"`
@@ -2688,6 +2879,12 @@ type DeployVirtualMachineResponse struct {
 	Jobstatus             int                                         `json:"jobstatus"`
 	Keypairs              string                                      `json:"keypairs"`
 	Lastupdated           string                                      `json:"lastupdated"`
+	Leaseduration         int                                         `json:"leaseduration"`
+	Leaseexpiryaction     string                                      `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                      `json:"leaseexpirydate"`
+	Maxheads              int64                                       `json:"maxheads"`
+	Maxresolutionx        int64                                       `json:"maxresolutionx"`
+	Maxresolutiony        int64                                       `json:"maxresolutiony"`
 	Memory                int                                         `json:"memory"`
 	Memoryintfreekbs      int64                                       `json:"memoryintfreekbs"`
 	Memorykbs             int64                                       `json:"memorykbs"`
@@ -2729,6 +2926,9 @@ type DeployVirtualMachineResponse struct {
 	Userid                string                                      `json:"userid"`
 	Username              string                                      `json:"username"`
 	Vgpu                  string                                      `json:"vgpu"`
+	Vgpuprofileid         string                                      `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                      `json:"vgpuprofilename"`
+	Videoram              int64                                       `json:"videoram"`
 	Vmtype                string                                      `json:"vmtype"`
 	Vnfdetails            map[string]string                           `json:"vnfdetails"`
 	Vnfnics               []string                                    `json:"vnfnics"`
@@ -2966,6 +3166,9 @@ type DestroyVirtualMachineResponse struct {
 	Domainid              string                                       `json:"domainid"`
 	Domainpath            string                                       `json:"domainpath"`
 	Forvirtualnetwork     bool                                         `json:"forvirtualnetwork"`
+	Gpucardid             string                                       `json:"gpucardid"`
+	Gpucardname           string                                       `json:"gpucardname"`
+	Gpucount              int                                          `json:"gpucount"`
 	Group                 string                                       `json:"group"`
 	Groupid               string                                       `json:"groupid"`
 	Guestosid             string                                       `json:"guestosid"`
@@ -2987,6 +3190,12 @@ type DestroyVirtualMachineResponse struct {
 	Jobstatus             int                                          `json:"jobstatus"`
 	Keypairs              string                                       `json:"keypairs"`
 	Lastupdated           string                                       `json:"lastupdated"`
+	Leaseduration         int                                          `json:"leaseduration"`
+	Leaseexpiryaction     string                                       `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                       `json:"leaseexpirydate"`
+	Maxheads              int64                                        `json:"maxheads"`
+	Maxresolutionx        int64                                        `json:"maxresolutionx"`
+	Maxresolutiony        int64                                        `json:"maxresolutiony"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
 	Memorykbs             int64                                        `json:"memorykbs"`
@@ -3028,6 +3237,9 @@ type DestroyVirtualMachineResponse struct {
 	Userid                string                                       `json:"userid"`
 	Username              string                                       `json:"username"`
 	Vgpu                  string                                       `json:"vgpu"`
+	Vgpuprofileid         string                                       `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                       `json:"vgpuprofilename"`
+	Videoram              int64                                        `json:"videoram"`
 	Vmtype                string                                       `json:"vmtype"`
 	Vnfdetails            map[string]string                            `json:"vnfdetails"`
 	Vnfnics               []string                                     `json:"vnfnics"`
@@ -3297,10 +3509,17 @@ func (p *ListVirtualMachinesParams) toURLValues() url.Values {
 	if v, found := p.p["domainid"]; found {
 		u.Set("domainid", v.(string))
 	}
+	if v, found := p.p["extensionid"]; found {
+		u.Set("extensionid", v.(string))
+	}
 	if v, found := p.p["forvirtualnetwork"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("forvirtualnetwork", vv)
 	}
+	if v, found := p.p["gpuenabled"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("gpuenabled", vv)
+	}
 	if v, found := p.p["groupid"]; found {
 		u.Set("groupid", v.(string))
 	}
@@ -3338,6 +3557,10 @@ func (p *ListVirtualMachinesParams) toURLValues() url.Values {
 	if v, found := p.p["keyword"]; found {
 		u.Set("keyword", v.(string))
 	}
+	if v, found := p.p["leased"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("leased", vv)
+	}
 	if v, found := p.p["listall"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("listall", vv)
@@ -3621,6 +3844,27 @@ func (p *ListVirtualMachinesParams) GetDomainid() (string, bool) {
 	return value, ok
 }
 
+func (p *ListVirtualMachinesParams) SetExtensionid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["extensionid"] = v
+}
+
+func (p *ListVirtualMachinesParams) ResetExtensionid() {
+	if p.p != nil && p.p["extensionid"] != nil {
+		delete(p.p, "extensionid")
+	}
+}
+
+func (p *ListVirtualMachinesParams) GetExtensionid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["extensionid"].(string)
+	return value, ok
+}
+
 func (p *ListVirtualMachinesParams) SetForvirtualnetwork(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3642,6 +3886,27 @@ func (p *ListVirtualMachinesParams) GetForvirtualnetwork() (bool, bool) {
 	return value, ok
 }
 
+func (p *ListVirtualMachinesParams) SetGpuenabled(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["gpuenabled"] = v
+}
+
+func (p *ListVirtualMachinesParams) ResetGpuenabled() {
+	if p.p != nil && p.p["gpuenabled"] != nil {
+		delete(p.p, "gpuenabled")
+	}
+}
+
+func (p *ListVirtualMachinesParams) GetGpuenabled() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["gpuenabled"].(bool)
+	return value, ok
+}
+
 func (p *ListVirtualMachinesParams) SetGroupid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3873,6 +4138,27 @@ func (p *ListVirtualMachinesParams) GetKeyword() (string, bool) {
 	return value, ok
 }
 
+func (p *ListVirtualMachinesParams) SetLeased(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["leased"] = v
+}
+
+func (p *ListVirtualMachinesParams) ResetLeased() {
+	if p.p != nil && p.p["leased"] != nil {
+		delete(p.p, "leased")
+	}
+}
+
+func (p *ListVirtualMachinesParams) GetLeased() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["leased"].(bool)
+	return value, ok
+}
+
 func (p *ListVirtualMachinesParams) SetListall(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -4432,6 +4718,9 @@ type VirtualMachine struct {
 	Domainid              string                        `json:"domainid"`
 	Domainpath            string                        `json:"domainpath"`
 	Forvirtualnetwork     bool                          `json:"forvirtualnetwork"`
+	Gpucardid             string                        `json:"gpucardid"`
+	Gpucardname           string                        `json:"gpucardname"`
+	Gpucount              int                           `json:"gpucount"`
 	Group                 string                        `json:"group"`
 	Groupid               string                        `json:"groupid"`
 	Guestosid             string                        `json:"guestosid"`
@@ -4453,6 +4742,12 @@ type VirtualMachine struct {
 	Jobstatus             int                           `json:"jobstatus"`
 	Keypairs              string                        `json:"keypairs"`
 	Lastupdated           string                        `json:"lastupdated"`
+	Leaseduration         int                           `json:"leaseduration"`
+	Leaseexpiryaction     string                        `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                        `json:"leaseexpirydate"`
+	Maxheads              int64                         `json:"maxheads"`
+	Maxresolutionx        int64                         `json:"maxresolutionx"`
+	Maxresolutiony        int64                         `json:"maxresolutiony"`
 	Memory                int                           `json:"memory"`
 	Memoryintfreekbs      int64                         `json:"memoryintfreekbs"`
 	Memorykbs             int64                         `json:"memorykbs"`
@@ -4494,6 +4789,9 @@ type VirtualMachine struct {
 	Userid                string                        `json:"userid"`
 	Username              string                        `json:"username"`
 	Vgpu                  string                        `json:"vgpu"`
+	Vgpuprofileid         string                        `json:"vgpuprofileid"`
+	Vgpuprofilename       string                        `json:"vgpuprofilename"`
+	Videoram              int64                         `json:"videoram"`
 	Vmtype                string                        `json:"vmtype"`
 	Vnfdetails            map[string]string             `json:"vnfdetails"`
 	Vnfnics               []string                      `json:"vnfnics"`
@@ -4615,10 +4913,17 @@ func (p *ListVirtualMachinesMetricsParams) toURLValues() url.Values {
 	if v, found := p.p["domainid"]; found {
 		u.Set("domainid", v.(string))
 	}
+	if v, found := p.p["extensionid"]; found {
+		u.Set("extensionid", v.(string))
+	}
 	if v, found := p.p["forvirtualnetwork"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("forvirtualnetwork", vv)
 	}
+	if v, found := p.p["gpuenabled"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("gpuenabled", vv)
+	}
 	if v, found := p.p["groupid"]; found {
 		u.Set("groupid", v.(string))
 	}
@@ -4656,6 +4961,10 @@ func (p *ListVirtualMachinesMetricsParams) toURLValues() url.Values {
 	if v, found := p.p["keyword"]; found {
 		u.Set("keyword", v.(string))
 	}
+	if v, found := p.p["leased"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("leased", vv)
+	}
 	if v, found := p.p["listall"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("listall", vv)
@@ -4939,6 +5248,27 @@ func (p *ListVirtualMachinesMetricsParams) GetDomainid() (string, bool) {
 	return value, ok
 }
 
+func (p *ListVirtualMachinesMetricsParams) SetExtensionid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["extensionid"] = v
+}
+
+func (p *ListVirtualMachinesMetricsParams) ResetExtensionid() {
+	if p.p != nil && p.p["extensionid"] != nil {
+		delete(p.p, "extensionid")
+	}
+}
+
+func (p *ListVirtualMachinesMetricsParams) GetExtensionid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["extensionid"].(string)
+	return value, ok
+}
+
 func (p *ListVirtualMachinesMetricsParams) SetForvirtualnetwork(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -4960,6 +5290,27 @@ func (p *ListVirtualMachinesMetricsParams) GetForvirtualnetwork() (bool, bool) {
 	return value, ok
 }
 
+func (p *ListVirtualMachinesMetricsParams) SetGpuenabled(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["gpuenabled"] = v
+}
+
+func (p *ListVirtualMachinesMetricsParams) ResetGpuenabled() {
+	if p.p != nil && p.p["gpuenabled"] != nil {
+		delete(p.p, "gpuenabled")
+	}
+}
+
+func (p *ListVirtualMachinesMetricsParams) GetGpuenabled() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["gpuenabled"].(bool)
+	return value, ok
+}
+
 func (p *ListVirtualMachinesMetricsParams) SetGroupid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -5191,6 +5542,27 @@ func (p *ListVirtualMachinesMetricsParams) GetKeyword() (string, bool) {
 	return value, ok
 }
 
+func (p *ListVirtualMachinesMetricsParams) SetLeased(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["leased"] = v
+}
+
+func (p *ListVirtualMachinesMetricsParams) ResetLeased() {
+	if p.p != nil && p.p["leased"] != nil {
+		delete(p.p, "leased")
+	}
+}
+
+func (p *ListVirtualMachinesMetricsParams) GetLeased() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["leased"].(bool)
+	return value, ok
+}
+
 func (p *ListVirtualMachinesMetricsParams) SetListall(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -5754,6 +6126,9 @@ type VirtualMachinesMetric struct {
 	Domainid              string                               `json:"domainid"`
 	Domainpath            string                               `json:"domainpath"`
 	Forvirtualnetwork     bool                                 `json:"forvirtualnetwork"`
+	Gpucardid             string                               `json:"gpucardid"`
+	Gpucardname           string                               `json:"gpucardname"`
+	Gpucount              int                                  `json:"gpucount"`
 	Group                 string                               `json:"group"`
 	Groupid               string                               `json:"groupid"`
 	Guestosid             string                               `json:"guestosid"`
@@ -5775,6 +6150,12 @@ type VirtualMachinesMetric struct {
 	Jobstatus             int                                  `json:"jobstatus"`
 	Keypairs              string                               `json:"keypairs"`
 	Lastupdated           string                               `json:"lastupdated"`
+	Leaseduration         int                                  `json:"leaseduration"`
+	Leaseexpiryaction     string                               `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                               `json:"leaseexpirydate"`
+	Maxheads              int64                                `json:"maxheads"`
+	Maxresolutionx        int64                                `json:"maxresolutionx"`
+	Maxresolutiony        int64                                `json:"maxresolutiony"`
 	Memory                int                                  `json:"memory"`
 	Memoryintfreekbs      int64                                `json:"memoryintfreekbs"`
 	Memorykbs             int64                                `json:"memorykbs"`
@@ -5819,6 +6200,9 @@ type VirtualMachinesMetric struct {
 	Userid                string                               `json:"userid"`
 	Username              string                               `json:"username"`
 	Vgpu                  string                               `json:"vgpu"`
+	Vgpuprofileid         string                               `json:"vgpuprofileid"`
+	Vgpuprofilename       string                               `json:"vgpuprofilename"`
+	Videoram              int64                                `json:"videoram"`
 	Vmtype                string                               `json:"vmtype"`
 	Vnfdetails            map[string]string                    `json:"vnfdetails"`
 	Vnfnics               []string                             `json:"vnfnics"`
@@ -6351,6 +6735,9 @@ type MigrateVirtualMachineResponse struct {
 	Domainid              string                                       `json:"domainid"`
 	Domainpath            string                                       `json:"domainpath"`
 	Forvirtualnetwork     bool                                         `json:"forvirtualnetwork"`
+	Gpucardid             string                                       `json:"gpucardid"`
+	Gpucardname           string                                       `json:"gpucardname"`
+	Gpucount              int                                          `json:"gpucount"`
 	Group                 string                                       `json:"group"`
 	Groupid               string                                       `json:"groupid"`
 	Guestosid             string                                       `json:"guestosid"`
@@ -6372,6 +6759,12 @@ type MigrateVirtualMachineResponse struct {
 	Jobstatus             int                                          `json:"jobstatus"`
 	Keypairs              string                                       `json:"keypairs"`
 	Lastupdated           string                                       `json:"lastupdated"`
+	Leaseduration         int                                          `json:"leaseduration"`
+	Leaseexpiryaction     string                                       `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                       `json:"leaseexpirydate"`
+	Maxheads              int64                                        `json:"maxheads"`
+	Maxresolutionx        int64                                        `json:"maxresolutionx"`
+	Maxresolutiony        int64                                        `json:"maxresolutiony"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
 	Memorykbs             int64                                        `json:"memorykbs"`
@@ -6413,6 +6806,9 @@ type MigrateVirtualMachineResponse struct {
 	Userid                string                                       `json:"userid"`
 	Username              string                                       `json:"username"`
 	Vgpu                  string                                       `json:"vgpu"`
+	Vgpuprofileid         string                                       `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                       `json:"vgpuprofilename"`
+	Videoram              int64                                        `json:"videoram"`
 	Vmtype                string                                       `json:"vmtype"`
 	Vnfdetails            map[string]string                            `json:"vnfdetails"`
 	Vnfnics               []string                                     `json:"vnfnics"`
@@ -6692,6 +7088,9 @@ type MigrateVirtualMachineWithVolumeResponse struct {
 	Domainid              string                                                 `json:"domainid"`
 	Domainpath            string                                                 `json:"domainpath"`
 	Forvirtualnetwork     bool                                                   `json:"forvirtualnetwork"`
+	Gpucardid             string                                                 `json:"gpucardid"`
+	Gpucardname           string                                                 `json:"gpucardname"`
+	Gpucount              int                                                    `json:"gpucount"`
 	Group                 string                                                 `json:"group"`
 	Groupid               string                                                 `json:"groupid"`
 	Guestosid             string                                                 `json:"guestosid"`
@@ -6713,6 +7112,12 @@ type MigrateVirtualMachineWithVolumeResponse struct {
 	Jobstatus             int                                                    `json:"jobstatus"`
 	Keypairs              string                                                 `json:"keypairs"`
 	Lastupdated           string                                                 `json:"lastupdated"`
+	Leaseduration         int                                                    `json:"leaseduration"`
+	Leaseexpiryaction     string                                                 `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                                 `json:"leaseexpirydate"`
+	Maxheads              int64                                                  `json:"maxheads"`
+	Maxresolutionx        int64                                                  `json:"maxresolutionx"`
+	Maxresolutiony        int64                                                  `json:"maxresolutiony"`
 	Memory                int                                                    `json:"memory"`
 	Memoryintfreekbs      int64                                                  `json:"memoryintfreekbs"`
 	Memorykbs             int64                                                  `json:"memorykbs"`
@@ -6754,6 +7159,9 @@ type MigrateVirtualMachineWithVolumeResponse struct {
 	Userid                string                                                 `json:"userid"`
 	Username              string                                                 `json:"username"`
 	Vgpu                  string                                                 `json:"vgpu"`
+	Vgpuprofileid         string                                                 `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                                 `json:"vgpuprofilename"`
+	Videoram              int64                                                  `json:"videoram"`
 	Vmtype                string                                                 `json:"vmtype"`
 	Vnfdetails            map[string]string                                      `json:"vnfdetails"`
 	Vnfnics               []string                                               `json:"vnfnics"`
@@ -6991,6 +7399,9 @@ type RebootVirtualMachineResponse struct {
 	Domainid              string                                      `json:"domainid"`
 	Domainpath            string                                      `json:"domainpath"`
 	Forvirtualnetwork     bool                                        `json:"forvirtualnetwork"`
+	Gpucardid             string                                      `json:"gpucardid"`
+	Gpucardname           string                                      `json:"gpucardname"`
+	Gpucount              int                                         `json:"gpucount"`
 	Group                 string                                      `json:"group"`
 	Groupid               string                                      `json:"groupid"`
 	Guestosid             string                                      `json:"guestosid"`
@@ -7012,6 +7423,12 @@ type RebootVirtualMachineResponse struct {
 	Jobstatus             int                                         `json:"jobstatus"`
 	Keypairs              string                                      `json:"keypairs"`
 	Lastupdated           string                                      `json:"lastupdated"`
+	Leaseduration         int                                         `json:"leaseduration"`
+	Leaseexpiryaction     string                                      `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                      `json:"leaseexpirydate"`
+	Maxheads              int64                                       `json:"maxheads"`
+	Maxresolutionx        int64                                       `json:"maxresolutionx"`
+	Maxresolutiony        int64                                       `json:"maxresolutiony"`
 	Memory                int                                         `json:"memory"`
 	Memoryintfreekbs      int64                                       `json:"memoryintfreekbs"`
 	Memorykbs             int64                                       `json:"memorykbs"`
@@ -7053,6 +7470,9 @@ type RebootVirtualMachineResponse struct {
 	Userid                string                                      `json:"userid"`
 	Username              string                                      `json:"username"`
 	Vgpu                  string                                      `json:"vgpu"`
+	Vgpuprofileid         string                                      `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                      `json:"vgpuprofilename"`
+	Videoram              int64                                       `json:"videoram"`
 	Vmtype                string                                      `json:"vmtype"`
 	Vnfdetails            map[string]string                           `json:"vnfdetails"`
 	Vnfnics               []string                                    `json:"vnfnics"`
@@ -7220,6 +7640,9 @@ type RecoverVirtualMachineResponse struct {
 	Domainid              string                                       `json:"domainid"`
 	Domainpath            string                                       `json:"domainpath"`
 	Forvirtualnetwork     bool                                         `json:"forvirtualnetwork"`
+	Gpucardid             string                                       `json:"gpucardid"`
+	Gpucardname           string                                       `json:"gpucardname"`
+	Gpucount              int                                          `json:"gpucount"`
 	Group                 string                                       `json:"group"`
 	Groupid               string                                       `json:"groupid"`
 	Guestosid             string                                       `json:"guestosid"`
@@ -7241,6 +7664,12 @@ type RecoverVirtualMachineResponse struct {
 	Jobstatus             int                                          `json:"jobstatus"`
 	Keypairs              string                                       `json:"keypairs"`
 	Lastupdated           string                                       `json:"lastupdated"`
+	Leaseduration         int                                          `json:"leaseduration"`
+	Leaseexpiryaction     string                                       `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                       `json:"leaseexpirydate"`
+	Maxheads              int64                                        `json:"maxheads"`
+	Maxresolutionx        int64                                        `json:"maxresolutionx"`
+	Maxresolutiony        int64                                        `json:"maxresolutiony"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
 	Memorykbs             int64                                        `json:"memorykbs"`
@@ -7282,6 +7711,9 @@ type RecoverVirtualMachineResponse struct {
 	Userid                string                                       `json:"userid"`
 	Username              string                                       `json:"username"`
 	Vgpu                  string                                       `json:"vgpu"`
+	Vgpuprofileid         string                                       `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                       `json:"vgpuprofilename"`
+	Videoram              int64                                        `json:"videoram"`
 	Vmtype                string                                       `json:"vmtype"`
 	Vnfdetails            map[string]string                            `json:"vnfdetails"`
 	Vnfnics               []string                                     `json:"vnfnics"`
@@ -7494,6 +7926,9 @@ type RemoveNicFromVirtualMachineResponse struct {
 	Domainid              string                                             `json:"domainid"`
 	Domainpath            string                                             `json:"domainpath"`
 	Forvirtualnetwork     bool                                               `json:"forvirtualnetwork"`
+	Gpucardid             string                                             `json:"gpucardid"`
+	Gpucardname           string                                             `json:"gpucardname"`
+	Gpucount              int                                                `json:"gpucount"`
 	Group                 string                                             `json:"group"`
 	Groupid               string                                             `json:"groupid"`
 	Guestosid             string                                             `json:"guestosid"`
@@ -7515,6 +7950,12 @@ type RemoveNicFromVirtualMachineResponse struct {
 	Jobstatus             int                                                `json:"jobstatus"`
 	Keypairs              string                                             `json:"keypairs"`
 	Lastupdated           string                                             `json:"lastupdated"`
+	Leaseduration         int                                                `json:"leaseduration"`
+	Leaseexpiryaction     string                                             `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                             `json:"leaseexpirydate"`
+	Maxheads              int64                                              `json:"maxheads"`
+	Maxresolutionx        int64                                              `json:"maxresolutionx"`
+	Maxresolutiony        int64                                              `json:"maxresolutiony"`
 	Memory                int                                                `json:"memory"`
 	Memoryintfreekbs      int64                                              `json:"memoryintfreekbs"`
 	Memorykbs             int64                                              `json:"memorykbs"`
@@ -7556,6 +7997,9 @@ type RemoveNicFromVirtualMachineResponse struct {
 	Userid                string                                             `json:"userid"`
 	Username              string                                             `json:"username"`
 	Vgpu                  string                                             `json:"vgpu"`
+	Vgpuprofileid         string                                             `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                             `json:"vgpuprofilename"`
+	Videoram              int64                                              `json:"videoram"`
 	Vmtype                string                                             `json:"vmtype"`
 	Vnfdetails            map[string]string                                  `json:"vnfdetails"`
 	Vnfnics               []string                                           `json:"vnfnics"`
@@ -7767,6 +8211,9 @@ type ResetPasswordForVirtualMachineResponse struct {
 	Domainid              string                                                `json:"domainid"`
 	Domainpath            string                                                `json:"domainpath"`
 	Forvirtualnetwork     bool                                                  `json:"forvirtualnetwork"`
+	Gpucardid             string                                                `json:"gpucardid"`
+	Gpucardname           string                                                `json:"gpucardname"`
+	Gpucount              int                                                   `json:"gpucount"`
 	Group                 string                                                `json:"group"`
 	Groupid               string                                                `json:"groupid"`
 	Guestosid             string                                                `json:"guestosid"`
@@ -7788,6 +8235,12 @@ type ResetPasswordForVirtualMachineResponse struct {
 	Jobstatus             int                                                   `json:"jobstatus"`
 	Keypairs              string                                                `json:"keypairs"`
 	Lastupdated           string                                                `json:"lastupdated"`
+	Leaseduration         int                                                   `json:"leaseduration"`
+	Leaseexpiryaction     string                                                `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                                `json:"leaseexpirydate"`
+	Maxheads              int64                                                 `json:"maxheads"`
+	Maxresolutionx        int64                                                 `json:"maxresolutionx"`
+	Maxresolutiony        int64                                                 `json:"maxresolutiony"`
 	Memory                int                                                   `json:"memory"`
 	Memoryintfreekbs      int64                                                 `json:"memoryintfreekbs"`
 	Memorykbs             int64                                                 `json:"memorykbs"`
@@ -7829,6 +8282,9 @@ type ResetPasswordForVirtualMachineResponse struct {
 	Userid                string                                                `json:"userid"`
 	Username              string                                                `json:"username"`
 	Vgpu                  string                                                `json:"vgpu"`
+	Vgpuprofileid         string                                                `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                                `json:"vgpuprofilename"`
+	Videoram              int64                                                 `json:"videoram"`
 	Vmtype                string                                                `json:"vmtype"`
 	Vnfdetails            map[string]string                                     `json:"vnfdetails"`
 	Vnfnics               []string                                              `json:"vnfnics"`
@@ -8144,6 +8600,9 @@ type ResetUserDataForVirtualMachineResponse struct {
 	Domainid              string                                                `json:"domainid"`
 	Domainpath            string                                                `json:"domainpath"`
 	Forvirtualnetwork     bool                                                  `json:"forvirtualnetwork"`
+	Gpucardid             string                                                `json:"gpucardid"`
+	Gpucardname           string                                                `json:"gpucardname"`
+	Gpucount              int                                                   `json:"gpucount"`
 	Group                 string                                                `json:"group"`
 	Groupid               string                                                `json:"groupid"`
 	Guestosid             string                                                `json:"guestosid"`
@@ -8165,6 +8624,12 @@ type ResetUserDataForVirtualMachineResponse struct {
 	Jobstatus             int                                                   `json:"jobstatus"`
 	Keypairs              string                                                `json:"keypairs"`
 	Lastupdated           string                                                `json:"lastupdated"`
+	Leaseduration         int                                                   `json:"leaseduration"`
+	Leaseexpiryaction     string                                                `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                                `json:"leaseexpirydate"`
+	Maxheads              int64                                                 `json:"maxheads"`
+	Maxresolutionx        int64                                                 `json:"maxresolutionx"`
+	Maxresolutiony        int64                                                 `json:"maxresolutiony"`
 	Memory                int                                                   `json:"memory"`
 	Memoryintfreekbs      int64                                                 `json:"memoryintfreekbs"`
 	Memorykbs             int64                                                 `json:"memorykbs"`
@@ -8206,6 +8671,9 @@ type ResetUserDataForVirtualMachineResponse struct {
 	Userid                string                                                `json:"userid"`
 	Username              string                                                `json:"username"`
 	Vgpu                  string                                                `json:"vgpu"`
+	Vgpuprofileid         string                                                `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                                `json:"vgpuprofilename"`
+	Videoram              int64                                                 `json:"videoram"`
 	Vmtype                string                                                `json:"vmtype"`
 	Vnfdetails            map[string]string                                     `json:"vnfdetails"`
 	Vnfnics               []string                                              `json:"vnfnics"`
@@ -8518,6 +8986,9 @@ type RestoreVirtualMachineResponse struct {
 	Domainid              string                                       `json:"domainid"`
 	Domainpath            string                                       `json:"domainpath"`
 	Forvirtualnetwork     bool                                         `json:"forvirtualnetwork"`
+	Gpucardid             string                                       `json:"gpucardid"`
+	Gpucardname           string                                       `json:"gpucardname"`
+	Gpucount              int                                          `json:"gpucount"`
 	Group                 string                                       `json:"group"`
 	Groupid               string                                       `json:"groupid"`
 	Guestosid             string                                       `json:"guestosid"`
@@ -8539,6 +9010,12 @@ type RestoreVirtualMachineResponse struct {
 	Jobstatus             int                                          `json:"jobstatus"`
 	Keypairs              string                                       `json:"keypairs"`
 	Lastupdated           string                                       `json:"lastupdated"`
+	Leaseduration         int                                          `json:"leaseduration"`
+	Leaseexpiryaction     string                                       `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                       `json:"leaseexpirydate"`
+	Maxheads              int64                                        `json:"maxheads"`
+	Maxresolutionx        int64                                        `json:"maxresolutionx"`
+	Maxresolutiony        int64                                        `json:"maxresolutiony"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
 	Memorykbs             int64                                        `json:"memorykbs"`
@@ -8580,6 +9057,9 @@ type RestoreVirtualMachineResponse struct {
 	Userid                string                                       `json:"userid"`
 	Username              string                                       `json:"username"`
 	Vgpu                  string                                       `json:"vgpu"`
+	Vgpuprofileid         string                                       `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                       `json:"vgpuprofilename"`
+	Videoram              int64                                        `json:"videoram"`
 	Vmtype                string                                       `json:"vmtype"`
 	Vnfdetails            map[string]string                            `json:"vnfdetails"`
 	Vnfnics               []string                                     `json:"vnfnics"`
@@ -9147,6 +9627,9 @@ type StartVirtualMachineResponse struct {
 	Domainid              string                                     `json:"domainid"`
 	Domainpath            string                                     `json:"domainpath"`
 	Forvirtualnetwork     bool                                       `json:"forvirtualnetwork"`
+	Gpucardid             string                                     `json:"gpucardid"`
+	Gpucardname           string                                     `json:"gpucardname"`
+	Gpucount              int                                        `json:"gpucount"`
 	Group                 string                                     `json:"group"`
 	Groupid               string                                     `json:"groupid"`
 	Guestosid             string                                     `json:"guestosid"`
@@ -9168,6 +9651,12 @@ type StartVirtualMachineResponse struct {
 	Jobstatus             int                                        `json:"jobstatus"`
 	Keypairs              string                                     `json:"keypairs"`
 	Lastupdated           string                                     `json:"lastupdated"`
+	Leaseduration         int                                        `json:"leaseduration"`
+	Leaseexpiryaction     string                                     `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                     `json:"leaseexpirydate"`
+	Maxheads              int64                                      `json:"maxheads"`
+	Maxresolutionx        int64                                      `json:"maxresolutionx"`
+	Maxresolutiony        int64                                      `json:"maxresolutiony"`
 	Memory                int                                        `json:"memory"`
 	Memoryintfreekbs      int64                                      `json:"memoryintfreekbs"`
 	Memorykbs             int64                                      `json:"memorykbs"`
@@ -9209,6 +9698,9 @@ type StartVirtualMachineResponse struct {
 	Userid                string                                     `json:"userid"`
 	Username              string                                     `json:"username"`
 	Vgpu                  string                                     `json:"vgpu"`
+	Vgpuprofileid         string                                     `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                     `json:"vgpuprofilename"`
+	Videoram              int64                                      `json:"videoram"`
 	Vmtype                string                                     `json:"vmtype"`
 	Vnfdetails            map[string]string                          `json:"vnfdetails"`
 	Vnfnics               []string                                   `json:"vnfnics"`
@@ -9421,6 +9913,9 @@ type StopVirtualMachineResponse struct {
 	Domainid              string                                    `json:"domainid"`
 	Domainpath            string                                    `json:"domainpath"`
 	Forvirtualnetwork     bool                                      `json:"forvirtualnetwork"`
+	Gpucardid             string                                    `json:"gpucardid"`
+	Gpucardname           string                                    `json:"gpucardname"`
+	Gpucount              int                                       `json:"gpucount"`
 	Group                 string                                    `json:"group"`
 	Groupid               string                                    `json:"groupid"`
 	Guestosid             string                                    `json:"guestosid"`
@@ -9442,6 +9937,12 @@ type StopVirtualMachineResponse struct {
 	Jobstatus             int                                       `json:"jobstatus"`
 	Keypairs              string                                    `json:"keypairs"`
 	Lastupdated           string                                    `json:"lastupdated"`
+	Leaseduration         int                                       `json:"leaseduration"`
+	Leaseexpiryaction     string                                    `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                    `json:"leaseexpirydate"`
+	Maxheads              int64                                     `json:"maxheads"`
+	Maxresolutionx        int64                                     `json:"maxresolutionx"`
+	Maxresolutiony        int64                                     `json:"maxresolutiony"`
 	Memory                int                                       `json:"memory"`
 	Memoryintfreekbs      int64                                     `json:"memoryintfreekbs"`
 	Memorykbs             int64                                     `json:"memorykbs"`
@@ -9483,6 +9984,9 @@ type StopVirtualMachineResponse struct {
 	Userid                string                                    `json:"userid"`
 	Username              string                                    `json:"username"`
 	Vgpu                  string                                    `json:"vgpu"`
+	Vgpuprofileid         string                                    `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                    `json:"vgpuprofilename"`
+	Videoram              int64                                     `json:"videoram"`
 	Vmtype                string                                    `json:"vmtype"`
 	Vnfdetails            map[string]string                         `json:"vnfdetails"`
 	Vnfnics               []string                                  `json:"vnfnics"`
@@ -9695,6 +10199,9 @@ type UpdateDefaultNicForVirtualMachineResponse struct {
 	Domainid              string                                                   `json:"domainid"`
 	Domainpath            string                                                   `json:"domainpath"`
 	Forvirtualnetwork     bool                                                     `json:"forvirtualnetwork"`
+	Gpucardid             string                                                   `json:"gpucardid"`
+	Gpucardname           string                                                   `json:"gpucardname"`
+	Gpucount              int                                                      `json:"gpucount"`
 	Group                 string                                                   `json:"group"`
 	Groupid               string                                                   `json:"groupid"`
 	Guestosid             string                                                   `json:"guestosid"`
@@ -9716,6 +10223,12 @@ type UpdateDefaultNicForVirtualMachineResponse struct {
 	Jobstatus             int                                                      `json:"jobstatus"`
 	Keypairs              string                                                   `json:"keypairs"`
 	Lastupdated           string                                                   `json:"lastupdated"`
+	Leaseduration         int                                                      `json:"leaseduration"`
+	Leaseexpiryaction     string                                                   `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                                   `json:"leaseexpirydate"`
+	Maxheads              int64                                                    `json:"maxheads"`
+	Maxresolutionx        int64                                                    `json:"maxresolutionx"`
+	Maxresolutiony        int64                                                    `json:"maxresolutiony"`
 	Memory                int                                                      `json:"memory"`
 	Memoryintfreekbs      int64                                                    `json:"memoryintfreekbs"`
 	Memorykbs             int64                                                    `json:"memorykbs"`
@@ -9757,6 +10270,9 @@ type UpdateDefaultNicForVirtualMachineResponse struct {
 	Userid                string                                                   `json:"userid"`
 	Username              string                                                   `json:"username"`
 	Vgpu                  string                                                   `json:"vgpu"`
+	Vgpuprofileid         string                                                   `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                                   `json:"vgpuprofilename"`
+	Videoram              int64                                                    `json:"videoram"`
 	Vmtype                string                                                   `json:"vmtype"`
 	Vnfdetails            map[string]string                                        `json:"vnfdetails"`
 	Vnfnics               []string                                                 `json:"vnfnics"`
@@ -9897,6 +10413,13 @@ func (p *UpdateVirtualMachineParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("isdynamicallyscalable", vv)
 	}
+	if v, found := p.p["leaseduration"]; found {
+		vv := strconv.Itoa(v.(int))
+		u.Set("leaseduration", vv)
+	}
+	if v, found := p.p["leaseexpiryaction"]; found {
+		u.Set("leaseexpiryaction", v.(string))
+	}
 	if v, found := p.p["name"]; found {
 		u.Set("name", v.(string))
 	}
@@ -10214,6 +10737,48 @@ func (p *UpdateVirtualMachineParams) GetIsdynamicallyscalable() (bool, bool) {
 	return value, ok
 }
 
+func (p *UpdateVirtualMachineParams) SetLeaseduration(v int) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["leaseduration"] = v
+}
+
+func (p *UpdateVirtualMachineParams) ResetLeaseduration() {
+	if p.p != nil && p.p["leaseduration"] != nil {
+		delete(p.p, "leaseduration")
+	}
+}
+
+func (p *UpdateVirtualMachineParams) GetLeaseduration() (int, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["leaseduration"].(int)
+	return value, ok
+}
+
+func (p *UpdateVirtualMachineParams) SetLeaseexpiryaction(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["leaseexpiryaction"] = v
+}
+
+func (p *UpdateVirtualMachineParams) ResetLeaseexpiryaction() {
+	if p.p != nil && p.p["leaseexpiryaction"] != nil {
+		delete(p.p, "leaseexpiryaction")
+	}
+}
+
+func (p *UpdateVirtualMachineParams) GetLeaseexpiryaction() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["leaseexpiryaction"].(string)
+	return value, ok
+}
+
 func (p *UpdateVirtualMachineParams) SetName(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -10413,6 +10978,9 @@ type UpdateVirtualMachineResponse struct {
 	Domainid              string                                      `json:"domainid"`
 	Domainpath            string                                      `json:"domainpath"`
 	Forvirtualnetwork     bool                                        `json:"forvirtualnetwork"`
+	Gpucardid             string                                      `json:"gpucardid"`
+	Gpucardname           string                                      `json:"gpucardname"`
+	Gpucount              int                                         `json:"gpucount"`
 	Group                 string                                      `json:"group"`
 	Groupid               string                                      `json:"groupid"`
 	Guestosid             string                                      `json:"guestosid"`
@@ -10434,6 +11002,12 @@ type UpdateVirtualMachineResponse struct {
 	Jobstatus             int                                         `json:"jobstatus"`
 	Keypairs              string                                      `json:"keypairs"`
 	Lastupdated           string                                      `json:"lastupdated"`
+	Leaseduration         int                                         `json:"leaseduration"`
+	Leaseexpiryaction     string                                      `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                      `json:"leaseexpirydate"`
+	Maxheads              int64                                       `json:"maxheads"`
+	Maxresolutionx        int64                                       `json:"maxresolutionx"`
+	Maxresolutiony        int64                                       `json:"maxresolutiony"`
 	Memory                int                                         `json:"memory"`
 	Memoryintfreekbs      int64                                       `json:"memoryintfreekbs"`
 	Memorykbs             int64                                       `json:"memorykbs"`
@@ -10475,6 +11049,9 @@ type UpdateVirtualMachineResponse struct {
 	Userid                string                                      `json:"userid"`
 	Username              string                                      `json:"username"`
 	Vgpu                  string                                      `json:"vgpu"`
+	Vgpuprofileid         string                                      `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                      `json:"vgpuprofilename"`
+	Videoram              int64                                       `json:"videoram"`
 	Vmtype                string                                      `json:"vmtype"`
 	Vnfdetails            map[string]string                           `json:"vnfdetails"`
 	Vnfnics               []string                                    `json:"vnfnics"`
@@ -11858,6 +12435,9 @@ type ImportVmResponse struct {
 	Domainid              string                          `json:"domainid"`
 	Domainpath            string                          `json:"domainpath"`
 	Forvirtualnetwork     bool                            `json:"forvirtualnetwork"`
+	Gpucardid             string                          `json:"gpucardid"`
+	Gpucardname           string                          `json:"gpucardname"`
+	Gpucount              int                             `json:"gpucount"`
 	Group                 string                          `json:"group"`
 	Groupid               string                          `json:"groupid"`
 	Guestosid             string                          `json:"guestosid"`
@@ -11879,6 +12459,12 @@ type ImportVmResponse struct {
 	Jobstatus             int                             `json:"jobstatus"`
 	Keypairs              string                          `json:"keypairs"`
 	Lastupdated           string                          `json:"lastupdated"`
+	Leaseduration         int                             `json:"leaseduration"`
+	Leaseexpiryaction     string                          `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                          `json:"leaseexpirydate"`
+	Maxheads              int64                           `json:"maxheads"`
+	Maxresolutionx        int64                           `json:"maxresolutionx"`
+	Maxresolutiony        int64                           `json:"maxresolutiony"`
 	Memory                int                             `json:"memory"`
 	Memoryintfreekbs      int64                           `json:"memoryintfreekbs"`
 	Memorykbs             int64                           `json:"memorykbs"`
@@ -11920,6 +12506,9 @@ type ImportVmResponse struct {
 	Userid                string                          `json:"userid"`
 	Username              string                          `json:"username"`
 	Vgpu                  string                          `json:"vgpu"`
+	Vgpuprofileid         string                          `json:"vgpuprofileid"`
+	Vgpuprofilename       string                          `json:"vgpuprofilename"`
+	Videoram              int64                           `json:"videoram"`
 	Vmtype                string                          `json:"vmtype"`
 	Vnfdetails            map[string]string               `json:"vnfdetails"`
 	Vnfnics               []string                        `json:"vnfnics"`
@@ -12747,6 +13336,9 @@ type ImportUnmanagedInstanceResponse struct {
 	Domainid              string                                         `json:"domainid"`
 	Domainpath            string                                         `json:"domainpath"`
 	Forvirtualnetwork     bool                                           `json:"forvirtualnetwork"`
+	Gpucardid             string                                         `json:"gpucardid"`
+	Gpucardname           string                                         `json:"gpucardname"`
+	Gpucount              int                                            `json:"gpucount"`
 	Group                 string                                         `json:"group"`
 	Groupid               string                                         `json:"groupid"`
 	Guestosid             string                                         `json:"guestosid"`
@@ -12768,6 +13360,12 @@ type ImportUnmanagedInstanceResponse struct {
 	Jobstatus             int                                            `json:"jobstatus"`
 	Keypairs              string                                         `json:"keypairs"`
 	Lastupdated           string                                         `json:"lastupdated"`
+	Leaseduration         int                                            `json:"leaseduration"`
+	Leaseexpiryaction     string                                         `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                         `json:"leaseexpirydate"`
+	Maxheads              int64                                          `json:"maxheads"`
+	Maxresolutionx        int64                                          `json:"maxresolutionx"`
+	Maxresolutiony        int64                                          `json:"maxresolutiony"`
 	Memory                int                                            `json:"memory"`
 	Memoryintfreekbs      int64                                          `json:"memoryintfreekbs"`
 	Memorykbs             int64                                          `json:"memorykbs"`
@@ -12809,6 +13407,9 @@ type ImportUnmanagedInstanceResponse struct {
 	Userid                string                                         `json:"userid"`
 	Username              string                                         `json:"username"`
 	Vgpu                  string                                         `json:"vgpu"`
+	Vgpuprofileid         string                                         `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                         `json:"vgpuprofilename"`
+	Videoram              int64                                          `json:"videoram"`
 	Vmtype                string                                         `json:"vmtype"`
 	Vnfdetails            map[string]string                              `json:"vnfdetails"`
 	Vnfnics               []string                                       `json:"vnfnics"`
diff --git a/cloudstack/VirtualMachineService_mock.go b/cloudstack/VirtualMachineService_mock.go
index 75c6e86..bc2f2b3 100644
--- a/cloudstack/VirtualMachineService_mock.go
+++ b/cloudstack/VirtualMachineService_mock.go
@@ -653,17 +653,17 @@ func (mr *MockVirtualMachineServiceIfaceMockRecorder) NewDeleteVMScheduleParams(
 }
 
 // NewDeployVirtualMachineParams mocks base method.
-func (m *MockVirtualMachineServiceIface) NewDeployVirtualMachineParams(serviceofferingid, templateid, zoneid string) *DeployVirtualMachineParams {
+func (m *MockVirtualMachineServiceIface) NewDeployVirtualMachineParams(serviceofferingid, zoneid string) *DeployVirtualMachineParams {
 	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "NewDeployVirtualMachineParams", serviceofferingid, templateid, zoneid)
+	ret := m.ctrl.Call(m, "NewDeployVirtualMachineParams", serviceofferingid, zoneid)
 	ret0, _ := ret[0].(*DeployVirtualMachineParams)
 	return ret0
 }
 
 // NewDeployVirtualMachineParams indicates an expected call of NewDeployVirtualMachineParams.
-func (mr *MockVirtualMachineServiceIfaceMockRecorder) NewDeployVirtualMachineParams(serviceofferingid, templateid, zoneid any) *gomock.Call {
+func (mr *MockVirtualMachineServiceIfaceMockRecorder) NewDeployVirtualMachineParams(serviceofferingid, zoneid any) *gomock.Call {
 	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewDeployVirtualMachineParams", reflect.TypeOf((*MockVirtualMachineServiceIface)(nil).NewDeployVirtualMachineParams), serviceofferingid, templateid, zoneid)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewDeployVirtualMachineParams", reflect.TypeOf((*MockVirtualMachineServiceIface)(nil).NewDeployVirtualMachineParams), serviceofferingid, zoneid)
 }
 
 // NewDestroyVirtualMachineParams mocks base method.
diff --git a/cloudstack/VirtualNetworkFunctionsService.go b/cloudstack/VirtualNetworkFunctionsService.go
index 9e73da6..ab34838 100644
--- a/cloudstack/VirtualNetworkFunctionsService.go
+++ b/cloudstack/VirtualNetworkFunctionsService.go
@@ -31,7 +31,7 @@ type VirtualNetworkFunctionsServiceIface interface {
 	DeleteVnfTemplate(p *DeleteVnfTemplateParams) (*DeleteVnfTemplateResponse, error)
 	NewDeleteVnfTemplateParams(id string) *DeleteVnfTemplateParams
 	DeployVnfAppliance(p *DeployVnfApplianceParams) (*DeployVnfApplianceResponse, error)
-	NewDeployVnfApplianceParams(serviceofferingid string, templateid string, zoneid string) *DeployVnfApplianceParams
+	NewDeployVnfApplianceParams(serviceofferingid string, zoneid string) *DeployVnfApplianceParams
 	ListVnfAppliances(p *ListVnfAppliancesParams) (*ListVnfAppliancesResponse, error)
 	NewListVnfAppliancesParams() *ListVnfAppliancesParams
 	GetVnfApplianceID(name string, opts ...OptionFunc) (string, int, error)
@@ -248,6 +248,13 @@ func (p *DeployVnfApplianceParams) toURLValues() url.Values {
 			u.Set(fmt.Sprintf("datadiskofferinglist[%d].diskOffering", i), m[k])
 		}
 	}
+	if v, found := p.p["datadisksdetails"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("datadisksdetails[%d].key", i), k)
+			u.Set(fmt.Sprintf("datadisksdetails[%d].value", i), m[k])
+		}
+	}
 	if v, found := p.p["deploymentplanner"]; found {
 		u.Set("deploymentplanner", v.(string))
 	}
@@ -281,6 +288,13 @@ func (p *DeployVnfApplianceParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("dynamicscalingenabled", vv)
 	}
+	if v, found := p.p["externaldetails"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("externaldetails[%d].key", i), k)
+			u.Set(fmt.Sprintf("externaldetails[%d].value", i), m[k])
+		}
+	}
 	if v, found := p.p["extraconfig"]; found {
 		u.Set("extraconfig", v.(string))
 	}
@@ -323,6 +337,13 @@ func (p *DeployVnfApplianceParams) toURLValues() url.Values {
 		vv := strings.Join(v.([]string), ",")
 		u.Set("keypairs", vv)
 	}
+	if v, found := p.p["leaseduration"]; found {
+		vv := strconv.Itoa(v.(int))
+		u.Set("leaseduration", vv)
+	}
+	if v, found := p.p["leaseexpiryaction"]; found {
+		u.Set("leaseexpiryaction", v.(string))
+	}
 	if v, found := p.p["macaddress"]; found {
 		u.Set("macaddress", v.(string))
 	}
@@ -383,6 +404,9 @@ func (p *DeployVnfApplianceParams) toURLValues() url.Values {
 		vv := strconv.FormatInt(v.(int64), 10)
 		u.Set("size", vv)
 	}
+	if v, found := p.p["snapshotid"]; found {
+		u.Set("snapshotid", v.(string))
+	}
 	if v, found := p.p["startvm"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("startvm", vv)
@@ -411,6 +435,9 @@ func (p *DeployVnfApplianceParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("vnfconfiguremanagement", vv)
 	}
+	if v, found := p.p["volumeid"]; found {
+		u.Set("volumeid", v.(string))
+	}
 	if v, found := p.p["zoneid"]; found {
 		u.Set("zoneid", v.(string))
 	}
@@ -606,6 +633,27 @@ func (p *DeployVnfApplianceParams) GetDatadiskofferinglist() (map[string]string,
 	return value, ok
 }
 
+func (p *DeployVnfApplianceParams) SetDatadisksdetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["datadisksdetails"] = v
+}
+
+func (p *DeployVnfApplianceParams) ResetDatadisksdetails() {
+	if p.p != nil && p.p["datadisksdetails"] != nil {
+		delete(p.p, "datadisksdetails")
+	}
+}
+
+func (p *DeployVnfApplianceParams) GetDatadisksdetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["datadisksdetails"].(map[string]string)
+	return value, ok
+}
+
 func (p *DeployVnfApplianceParams) SetDeploymentplanner(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -774,6 +822,27 @@ func (p *DeployVnfApplianceParams) GetDynamicscalingenabled() (bool, bool) {
 	return value, ok
 }
 
+func (p *DeployVnfApplianceParams) SetExternaldetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["externaldetails"] = v
+}
+
+func (p *DeployVnfApplianceParams) ResetExternaldetails() {
+	if p.p != nil && p.p["externaldetails"] != nil {
+		delete(p.p, "externaldetails")
+	}
+}
+
+func (p *DeployVnfApplianceParams) GetExternaldetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["externaldetails"].(map[string]string)
+	return value, ok
+}
+
 func (p *DeployVnfApplianceParams) SetExtraconfig(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1026,6 +1095,48 @@ func (p *DeployVnfApplianceParams) GetKeypairs() ([]string, bool) {
 	return value, ok
 }
 
+func (p *DeployVnfApplianceParams) SetLeaseduration(v int) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["leaseduration"] = v
+}
+
+func (p *DeployVnfApplianceParams) ResetLeaseduration() {
+	if p.p != nil && p.p["leaseduration"] != nil {
+		delete(p.p, "leaseduration")
+	}
+}
+
+func (p *DeployVnfApplianceParams) GetLeaseduration() (int, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["leaseduration"].(int)
+	return value, ok
+}
+
+func (p *DeployVnfApplianceParams) SetLeaseexpiryaction(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["leaseexpiryaction"] = v
+}
+
+func (p *DeployVnfApplianceParams) ResetLeaseexpiryaction() {
+	if p.p != nil && p.p["leaseexpiryaction"] != nil {
+		delete(p.p, "leaseexpiryaction")
+	}
+}
+
+func (p *DeployVnfApplianceParams) GetLeaseexpiryaction() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["leaseexpiryaction"].(string)
+	return value, ok
+}
+
 func (p *DeployVnfApplianceParams) SetMacaddress(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1341,6 +1452,27 @@ func (p *DeployVnfApplianceParams) GetSize() (int64, bool) {
 	return value, ok
 }
 
+func (p *DeployVnfApplianceParams) SetSnapshotid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["snapshotid"] = v
+}
+
+func (p *DeployVnfApplianceParams) ResetSnapshotid() {
+	if p.p != nil && p.p["snapshotid"] != nil {
+		delete(p.p, "snapshotid")
+	}
+}
+
+func (p *DeployVnfApplianceParams) GetSnapshotid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["snapshotid"].(string)
+	return value, ok
+}
+
 func (p *DeployVnfApplianceParams) SetStartvm(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1488,6 +1620,27 @@ func (p *DeployVnfApplianceParams) GetVnfconfiguremanagement() (bool, bool) {
 	return value, ok
 }
 
+func (p *DeployVnfApplianceParams) SetVolumeid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["volumeid"] = v
+}
+
+func (p *DeployVnfApplianceParams) ResetVolumeid() {
+	if p.p != nil && p.p["volumeid"] != nil {
+		delete(p.p, "volumeid")
+	}
+}
+
+func (p *DeployVnfApplianceParams) GetVolumeid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["volumeid"].(string)
+	return value, ok
+}
+
 func (p *DeployVnfApplianceParams) SetZoneid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1511,11 +1664,10 @@ func (p *DeployVnfApplianceParams) GetZoneid() (string, bool) {
 
 // You should always use this function to get a new DeployVnfApplianceParams instance,
 // as then you are sure you have configured all required params
-func (s *VirtualNetworkFunctionsService) NewDeployVnfApplianceParams(serviceofferingid string, templateid string, zoneid string) *DeployVnfApplianceParams {
+func (s *VirtualNetworkFunctionsService) NewDeployVnfApplianceParams(serviceofferingid string, zoneid string) *DeployVnfApplianceParams {
 	p := &DeployVnfApplianceParams{}
 	p.p = make(map[string]interface{})
 	p.p["serviceofferingid"] = serviceofferingid
-	p.p["templateid"] = templateid
 	p.p["zoneid"] = zoneid
 	return p
 }
@@ -1583,6 +1735,9 @@ type DeployVnfApplianceResponse struct {
 	Domainid              string                                    `json:"domainid"`
 	Domainpath            string                                    `json:"domainpath"`
 	Forvirtualnetwork     bool                                      `json:"forvirtualnetwork"`
+	Gpucardid             string                                    `json:"gpucardid"`
+	Gpucardname           string                                    `json:"gpucardname"`
+	Gpucount              int                                       `json:"gpucount"`
 	Group                 string                                    `json:"group"`
 	Groupid               string                                    `json:"groupid"`
 	Guestosid             string                                    `json:"guestosid"`
@@ -1604,6 +1759,12 @@ type DeployVnfApplianceResponse struct {
 	Jobstatus             int                                       `json:"jobstatus"`
 	Keypairs              string                                    `json:"keypairs"`
 	Lastupdated           string                                    `json:"lastupdated"`
+	Leaseduration         int                                       `json:"leaseduration"`
+	Leaseexpiryaction     string                                    `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                                    `json:"leaseexpirydate"`
+	Maxheads              int64                                     `json:"maxheads"`
+	Maxresolutionx        int64                                     `json:"maxresolutionx"`
+	Maxresolutiony        int64                                     `json:"maxresolutiony"`
 	Memory                int                                       `json:"memory"`
 	Memoryintfreekbs      int64                                     `json:"memoryintfreekbs"`
 	Memorykbs             int64                                     `json:"memorykbs"`
@@ -1645,6 +1806,9 @@ type DeployVnfApplianceResponse struct {
 	Userid                string                                    `json:"userid"`
 	Username              string                                    `json:"username"`
 	Vgpu                  string                                    `json:"vgpu"`
+	Vgpuprofileid         string                                    `json:"vgpuprofileid"`
+	Vgpuprofilename       string                                    `json:"vgpuprofilename"`
+	Videoram              int64                                     `json:"videoram"`
 	Vmtype                string                                    `json:"vmtype"`
 	Vnfdetails            map[string]string                         `json:"vnfdetails"`
 	Vnfnics               []string                                  `json:"vnfnics"`
@@ -1763,10 +1927,17 @@ func (p *ListVnfAppliancesParams) toURLValues() url.Values {
 	if v, found := p.p["domainid"]; found {
 		u.Set("domainid", v.(string))
 	}
+	if v, found := p.p["extensionid"]; found {
+		u.Set("extensionid", v.(string))
+	}
 	if v, found := p.p["forvirtualnetwork"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("forvirtualnetwork", vv)
 	}
+	if v, found := p.p["gpuenabled"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("gpuenabled", vv)
+	}
 	if v, found := p.p["groupid"]; found {
 		u.Set("groupid", v.(string))
 	}
@@ -1801,6 +1972,10 @@ func (p *ListVnfAppliancesParams) toURLValues() url.Values {
 	if v, found := p.p["keyword"]; found {
 		u.Set("keyword", v.(string))
 	}
+	if v, found := p.p["leased"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("leased", vv)
+	}
 	if v, found := p.p["listall"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("listall", vv)
@@ -2057,6 +2232,27 @@ func (p *ListVnfAppliancesParams) GetDomainid() (string, bool) {
 	return value, ok
 }
 
+func (p *ListVnfAppliancesParams) SetExtensionid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["extensionid"] = v
+}
+
+func (p *ListVnfAppliancesParams) ResetExtensionid() {
+	if p.p != nil && p.p["extensionid"] != nil {
+		delete(p.p, "extensionid")
+	}
+}
+
+func (p *ListVnfAppliancesParams) GetExtensionid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["extensionid"].(string)
+	return value, ok
+}
+
 func (p *ListVnfAppliancesParams) SetForvirtualnetwork(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2078,6 +2274,27 @@ func (p *ListVnfAppliancesParams) GetForvirtualnetwork() (bool, bool) {
 	return value, ok
 }
 
+func (p *ListVnfAppliancesParams) SetGpuenabled(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["gpuenabled"] = v
+}
+
+func (p *ListVnfAppliancesParams) ResetGpuenabled() {
+	if p.p != nil && p.p["gpuenabled"] != nil {
+		delete(p.p, "gpuenabled")
+	}
+}
+
+func (p *ListVnfAppliancesParams) GetGpuenabled() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["gpuenabled"].(bool)
+	return value, ok
+}
+
 func (p *ListVnfAppliancesParams) SetGroupid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2288,6 +2505,27 @@ func (p *ListVnfAppliancesParams) GetKeyword() (string, bool) {
 	return value, ok
 }
 
+func (p *ListVnfAppliancesParams) SetLeased(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["leased"] = v
+}
+
+func (p *ListVnfAppliancesParams) ResetLeased() {
+	if p.p != nil && p.p["leased"] != nil {
+		delete(p.p, "leased")
+	}
+}
+
+func (p *ListVnfAppliancesParams) GetLeased() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["leased"].(bool)
+	return value, ok
+}
+
 func (p *ListVnfAppliancesParams) SetListall(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2805,6 +3043,9 @@ type VnfAppliance struct {
 	Domainid              string                      `json:"domainid"`
 	Domainpath            string                      `json:"domainpath"`
 	Forvirtualnetwork     bool                        `json:"forvirtualnetwork"`
+	Gpucardid             string                      `json:"gpucardid"`
+	Gpucardname           string                      `json:"gpucardname"`
+	Gpucount              int                         `json:"gpucount"`
 	Group                 string                      `json:"group"`
 	Groupid               string                      `json:"groupid"`
 	Guestosid             string                      `json:"guestosid"`
@@ -2826,6 +3067,12 @@ type VnfAppliance struct {
 	Jobstatus             int                         `json:"jobstatus"`
 	Keypairs              string                      `json:"keypairs"`
 	Lastupdated           string                      `json:"lastupdated"`
+	Leaseduration         int                         `json:"leaseduration"`
+	Leaseexpiryaction     string                      `json:"leaseexpiryaction"`
+	Leaseexpirydate       string                      `json:"leaseexpirydate"`
+	Maxheads              int64                       `json:"maxheads"`
+	Maxresolutionx        int64                       `json:"maxresolutionx"`
+	Maxresolutiony        int64                       `json:"maxresolutiony"`
 	Memory                int                         `json:"memory"`
 	Memoryintfreekbs      int64                       `json:"memoryintfreekbs"`
 	Memorykbs             int64                       `json:"memorykbs"`
@@ -2867,6 +3114,9 @@ type VnfAppliance struct {
 	Userid                string                      `json:"userid"`
 	Username              string                      `json:"username"`
 	Vgpu                  string                      `json:"vgpu"`
+	Vgpuprofileid         string                      `json:"vgpuprofileid"`
+	Vgpuprofilename       string                      `json:"vgpuprofilename"`
+	Videoram              int64                       `json:"videoram"`
 	Vmtype                string                      `json:"vmtype"`
 	Vnfdetails            map[string]string           `json:"vnfdetails"`
 	Vnfnics               []string                    `json:"vnfnics"`
@@ -2968,6 +3218,13 @@ func (p *ListVnfTemplatesParams) toURLValues() url.Values {
 	if v, found := p.p["domainid"]; found {
 		u.Set("domainid", v.(string))
 	}
+	if v, found := p.p["extensionid"]; found {
+		u.Set("extensionid", v.(string))
+	}
+	if v, found := p.p["forcks"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("forcks", vv)
+	}
 	if v, found := p.p["hypervisor"]; found {
 		u.Set("hypervisor", v.(string))
 	}
@@ -2978,6 +3235,10 @@ func (p *ListVnfTemplatesParams) toURLValues() url.Values {
 		vv := strings.Join(v.([]string), ",")
 		u.Set("ids", vv)
 	}
+	if v, found := p.p["isready"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("isready", vv)
+	}
 	if v, found := p.p["isrecursive"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("isrecursive", vv)
@@ -2996,6 +3257,9 @@ func (p *ListVnfTemplatesParams) toURLValues() url.Values {
 	if v, found := p.p["name"]; found {
 		u.Set("name", v.(string))
 	}
+	if v, found := p.p["oscategoryid"]; found {
+		u.Set("oscategoryid", v.(string))
+	}
 	if v, found := p.p["page"]; found {
 		vv := strconv.Itoa(v.(int))
 		u.Set("page", vv)
@@ -3125,6 +3389,48 @@ func (p *ListVnfTemplatesParams) GetDomainid() (string, bool) {
 	return value, ok
 }
 
+func (p *ListVnfTemplatesParams) SetExtensionid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["extensionid"] = v
+}
+
+func (p *ListVnfTemplatesParams) ResetExtensionid() {
+	if p.p != nil && p.p["extensionid"] != nil {
+		delete(p.p, "extensionid")
+	}
+}
+
+func (p *ListVnfTemplatesParams) GetExtensionid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["extensionid"].(string)
+	return value, ok
+}
+
+func (p *ListVnfTemplatesParams) SetForcks(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["forcks"] = v
+}
+
+func (p *ListVnfTemplatesParams) ResetForcks() {
+	if p.p != nil && p.p["forcks"] != nil {
+		delete(p.p, "forcks")
+	}
+}
+
+func (p *ListVnfTemplatesParams) GetForcks() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["forcks"].(bool)
+	return value, ok
+}
+
 func (p *ListVnfTemplatesParams) SetHypervisor(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3188,6 +3494,27 @@ func (p *ListVnfTemplatesParams) GetIds() ([]string, bool) {
 	return value, ok
 }
 
+func (p *ListVnfTemplatesParams) SetIsready(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["isready"] = v
+}
+
+func (p *ListVnfTemplatesParams) ResetIsready() {
+	if p.p != nil && p.p["isready"] != nil {
+		delete(p.p, "isready")
+	}
+}
+
+func (p *ListVnfTemplatesParams) GetIsready() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["isready"].(bool)
+	return value, ok
+}
+
 func (p *ListVnfTemplatesParams) SetIsrecursive(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3293,6 +3620,27 @@ func (p *ListVnfTemplatesParams) GetName() (string, bool) {
 	return value, ok
 }
 
+func (p *ListVnfTemplatesParams) SetOscategoryid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["oscategoryid"] = v
+}
+
+func (p *ListVnfTemplatesParams) ResetOscategoryid() {
+	if p.p != nil && p.p["oscategoryid"] != nil {
+		delete(p.p, "oscategoryid")
+	}
+}
+
+func (p *ListVnfTemplatesParams) GetOscategoryid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["oscategoryid"].(string)
+	return value, ok
+}
+
 func (p *ListVnfTemplatesParams) SetPage(v int) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3657,6 +4005,9 @@ type VnfTemplate struct {
 	Domainid              string              `json:"domainid"`
 	Domainpath            string              `json:"domainpath"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
+	Extensionid           string              `json:"extensionid"`
+	Extensionname         string              `json:"extensionname"`
+	Forcks                bool                `json:"forcks"`
 	Format                string              `json:"format"`
 	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
@@ -3766,6 +4117,20 @@ func (p *RegisterVnfTemplateParams) toURLValues() url.Values {
 	if v, found := p.p["domainid"]; found {
 		u.Set("domainid", v.(string))
 	}
+	if v, found := p.p["extensionid"]; found {
+		u.Set("extensionid", v.(string))
+	}
+	if v, found := p.p["externaldetails"]; found {
+		m := v.(map[string]string)
+		for i, k := range getSortedKeysFromMap(m) {
+			u.Set(fmt.Sprintf("externaldetails[%d].key", i), k)
+			u.Set(fmt.Sprintf("externaldetails[%d].value", i), m[k])
+		}
+	}
+	if v, found := p.p["forcks"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("forcks", vv)
+	}
 	if v, found := p.p["format"]; found {
 		u.Set("format", v.(string))
 	}
@@ -4035,6 +4400,69 @@ func (p *RegisterVnfTemplateParams) GetDomainid() (string, bool) {
 	return value, ok
 }
 
+func (p *RegisterVnfTemplateParams) SetExtensionid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["extensionid"] = v
+}
+
+func (p *RegisterVnfTemplateParams) ResetExtensionid() {
+	if p.p != nil && p.p["extensionid"] != nil {
+		delete(p.p, "extensionid")
+	}
+}
+
+func (p *RegisterVnfTemplateParams) GetExtensionid() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["extensionid"].(string)
+	return value, ok
+}
+
+func (p *RegisterVnfTemplateParams) SetExternaldetails(v map[string]string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["externaldetails"] = v
+}
+
+func (p *RegisterVnfTemplateParams) ResetExternaldetails() {
+	if p.p != nil && p.p["externaldetails"] != nil {
+		delete(p.p, "externaldetails")
+	}
+}
+
+func (p *RegisterVnfTemplateParams) GetExternaldetails() (map[string]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["externaldetails"].(map[string]string)
+	return value, ok
+}
+
+func (p *RegisterVnfTemplateParams) SetForcks(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["forcks"] = v
+}
+
+func (p *RegisterVnfTemplateParams) ResetForcks() {
+	if p.p != nil && p.p["forcks"] != nil {
+		delete(p.p, "forcks")
+	}
+}
+
+func (p *RegisterVnfTemplateParams) GetForcks() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["forcks"].(bool)
+	return value, ok
+}
+
 func (p *RegisterVnfTemplateParams) SetFormat(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -4501,6 +4929,9 @@ type RegisterVnfTemplateResponse struct {
 	Domainid              string              `json:"domainid"`
 	Domainpath            string              `json:"domainpath"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
+	Extensionid           string              `json:"extensionid"`
+	Extensionname         string              `json:"extensionname"`
+	Forcks                bool                `json:"forcks"`
 	Format                string              `json:"format"`
 	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
@@ -4605,6 +5036,14 @@ func (p *UpdateVnfTemplateParams) toURLValues() url.Values {
 	if v, found := p.p["displaytext"]; found {
 		u.Set("displaytext", v.(string))
 	}
+	if v, found := p.p["forceupdateostype"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("forceupdateostype", vv)
+	}
+	if v, found := p.p["forcks"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("forcks", vv)
+	}
 	if v, found := p.p["format"]; found {
 		u.Set("format", v.(string))
 	}
@@ -4811,6 +5250,48 @@ func (p *UpdateVnfTemplateParams) GetDisplaytext() (string, bool) {
 	return value, ok
 }
 
+func (p *UpdateVnfTemplateParams) SetForceupdateostype(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["forceupdateostype"] = v
+}
+
+func (p *UpdateVnfTemplateParams) ResetForceupdateostype() {
+	if p.p != nil && p.p["forceupdateostype"] != nil {
+		delete(p.p, "forceupdateostype")
+	}
+}
+
+func (p *UpdateVnfTemplateParams) GetForceupdateostype() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["forceupdateostype"].(bool)
+	return value, ok
+}
+
+func (p *UpdateVnfTemplateParams) SetForcks(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["forcks"] = v
+}
+
+func (p *UpdateVnfTemplateParams) ResetForcks() {
+	if p.p != nil && p.p["forcks"] != nil {
+		delete(p.p, "forcks")
+	}
+}
+
+func (p *UpdateVnfTemplateParams) GetForcks() (bool, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["forcks"].(bool)
+	return value, ok
+}
+
 func (p *UpdateVnfTemplateParams) SetFormat(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -5148,6 +5629,9 @@ type UpdateVnfTemplateResponse struct {
 	Domainid              string              `json:"domainid"`
 	Domainpath            string              `json:"domainpath"`
 	Downloaddetails       []map[string]string `json:"downloaddetails"`
+	Extensionid           string              `json:"extensionid"`
+	Extensionname         string              `json:"extensionname"`
+	Forcks                bool                `json:"forcks"`
 	Format                string              `json:"format"`
 	Hasannotations        bool                `json:"hasannotations"`
 	Hostid                string              `json:"hostid"`
diff --git a/cloudstack/VirtualNetworkFunctionsService_mock.go b/cloudstack/VirtualNetworkFunctionsService_mock.go
index fe286d8..f9622d3 100644
--- a/cloudstack/VirtualNetworkFunctionsService_mock.go
+++ b/cloudstack/VirtualNetworkFunctionsService_mock.go
@@ -259,17 +259,17 @@ func (mr *MockVirtualNetworkFunctionsServiceIfaceMockRecorder) NewDeleteVnfTempl
 }
 
 // NewDeployVnfApplianceParams mocks base method.
-func (m *MockVirtualNetworkFunctionsServiceIface) NewDeployVnfApplianceParams(serviceofferingid, templateid, zoneid string) *DeployVnfApplianceParams {
+func (m *MockVirtualNetworkFunctionsServiceIface) NewDeployVnfApplianceParams(serviceofferingid, zoneid string) *DeployVnfApplianceParams {
 	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "NewDeployVnfApplianceParams", serviceofferingid, templateid, zoneid)
+	ret := m.ctrl.Call(m, "NewDeployVnfApplianceParams", serviceofferingid, zoneid)
 	ret0, _ := ret[0].(*DeployVnfApplianceParams)
 	return ret0
 }
 
 // NewDeployVnfApplianceParams indicates an expected call of NewDeployVnfApplianceParams.
-func (mr *MockVirtualNetworkFunctionsServiceIfaceMockRecorder) NewDeployVnfApplianceParams(serviceofferingid, templateid, zoneid any) *gomock.Call {
+func (mr *MockVirtualNetworkFunctionsServiceIfaceMockRecorder) NewDeployVnfApplianceParams(serviceofferingid, zoneid any) *gomock.Call {
 	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewDeployVnfApplianceParams", reflect.TypeOf((*MockVirtualNetworkFunctionsServiceIface)(nil).NewDeployVnfApplianceParams), serviceofferingid, templateid, zoneid)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewDeployVnfApplianceParams", reflect.TypeOf((*MockVirtualNetworkFunctionsServiceIface)(nil).NewDeployVnfApplianceParams), serviceofferingid, zoneid)
 }
 
 // NewListVnfAppliancesParams mocks base method.
diff --git a/cloudstack/ZoneService.go b/cloudstack/ZoneService.go
index 7e428e5..8ae1e10 100644
--- a/cloudstack/ZoneService.go
+++ b/cloudstack/ZoneService.go
@@ -333,6 +333,10 @@ func (p *CreateZoneParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("securitygroupenabled", vv)
 	}
+	if v, found := p.p["storageaccessgroups"]; found {
+		vv := strings.Join(v.([]string), ",")
+		u.Set("storageaccessgroups", vv)
+	}
 	return u
 }
 
@@ -651,6 +655,27 @@ func (p *CreateZoneParams) GetSecuritygroupenabled() (bool, bool) {
 	return value, ok
 }
 
+func (p *CreateZoneParams) SetStorageaccessgroups(v []string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroups"] = v
+}
+
+func (p *CreateZoneParams) ResetStorageaccessgroups() {
+	if p.p != nil && p.p["storageaccessgroups"] != nil {
+		delete(p.p, "storageaccessgroups")
+	}
+}
+
+func (p *CreateZoneParams) GetStorageaccessgroups() ([]string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroups"].([]string)
+	return value, ok
+}
+
 // You should always use this function to get a new CreateZoneParams instance,
 // as then you are sure you have configured all required params
 func (s *ZoneService) NewCreateZoneParams(dns1 string, internaldns1 string, name string, networktype string) *CreateZoneParams {
@@ -695,6 +720,8 @@ type CreateZoneResponse struct {
 	Domain                       string                       `json:"domain"`
 	Domainid                     string                       `json:"domainid"`
 	Domainname                   string                       `json:"domainname"`
+	Gputotal                     int64                        `json:"gputotal"`
+	Gpuused                      int64                        `json:"gpuused"`
 	Guestcidraddress             string                       `json:"guestcidraddress"`
 	Hasannotations               bool                         `json:"hasannotations"`
 	Icon                         interface{}                  `json:"icon"`
@@ -710,11 +737,13 @@ type CreateZoneResponse struct {
 	Localstorageenabled          bool                         `json:"localstorageenabled"`
 	Name                         string                       `json:"name"`
 	Networktype                  string                       `json:"networktype"`
+	Provider                     string                       `json:"provider"`
 	Resourcedetails              map[string]string            `json:"resourcedetails"`
 	Routedmodeenabled            bool                         `json:"routedmodeenabled"`
 	Routerprivateinterfacemaxmtu int                          `json:"routerprivateinterfacemaxmtu"`
 	Routerpublicinterfacemaxmtu  int                          `json:"routerpublicinterfacemaxmtu"`
 	Securitygroupsenabled        bool                         `json:"securitygroupsenabled"`
+	Storageaccessgroups          string                       `json:"storageaccessgroups"`
 	Tags                         []Tags                       `json:"tags"`
 	Type                         string                       `json:"type"`
 	Zonetoken                    string                       `json:"zonetoken"`
@@ -2150,6 +2179,9 @@ func (p *ListZonesParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("showicon", vv)
 	}
+	if v, found := p.p["storageaccessgroup"]; found {
+		u.Set("storageaccessgroup", v.(string))
+	}
 	if v, found := p.p["tags"]; found {
 		m := v.(map[string]string)
 		for i, k := range getSortedKeysFromMap(m) {
@@ -2391,6 +2423,27 @@ func (p *ListZonesParams) GetShowicon() (bool, bool) {
 	return value, ok
 }
 
+func (p *ListZonesParams) SetStorageaccessgroup(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroup"] = v
+}
+
+func (p *ListZonesParams) ResetStorageaccessgroup() {
+	if p.p != nil && p.p["storageaccessgroup"] != nil {
+		delete(p.p, "storageaccessgroup")
+	}
+}
+
+func (p *ListZonesParams) GetStorageaccessgroup() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroup"].(string)
+	return value, ok
+}
+
 func (p *ListZonesParams) SetTags(v map[string]string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -2536,6 +2589,8 @@ type Zone struct {
 	Domain                       string            `json:"domain"`
 	Domainid                     string            `json:"domainid"`
 	Domainname                   string            `json:"domainname"`
+	Gputotal                     int64             `json:"gputotal"`
+	Gpuused                      int64             `json:"gpuused"`
 	Guestcidraddress             string            `json:"guestcidraddress"`
 	Hasannotations               bool              `json:"hasannotations"`
 	Icon                         interface{}       `json:"icon"`
@@ -2551,11 +2606,13 @@ type Zone struct {
 	Localstorageenabled          bool              `json:"localstorageenabled"`
 	Name                         string            `json:"name"`
 	Networktype                  string            `json:"networktype"`
+	Provider                     string            `json:"provider"`
 	Resourcedetails              map[string]string `json:"resourcedetails"`
 	Routedmodeenabled            bool              `json:"routedmodeenabled"`
 	Routerprivateinterfacemaxmtu int               `json:"routerprivateinterfacemaxmtu"`
 	Routerpublicinterfacemaxmtu  int               `json:"routerpublicinterfacemaxmtu"`
 	Securitygroupsenabled        bool              `json:"securitygroupsenabled"`
+	Storageaccessgroups          string            `json:"storageaccessgroups"`
 	Tags                         []Tags            `json:"tags"`
 	Type                         string            `json:"type"`
 	Zonetoken                    string            `json:"zonetoken"`
@@ -2625,6 +2682,9 @@ func (p *ListZonesMetricsParams) toURLValues() url.Values {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("showicon", vv)
 	}
+	if v, found := p.p["storageaccessgroup"]; found {
+		u.Set("storageaccessgroup", v.(string))
+	}
 	if v, found := p.p["tags"]; found {
 		m := v.(map[string]string)
 		for i, k := range getSortedKeysFromMap(m) {
@@ -2866,6 +2926,27 @@ func (p *ListZonesMetricsParams) GetShowicon() (bool, bool) {
 	return value, ok
 }
 
+func (p *ListZonesMetricsParams) SetStorageaccessgroup(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["storageaccessgroup"] = v
+}
+
+func (p *ListZonesMetricsParams) ResetStorageaccessgroup() {
+	if p.p != nil && p.p["storageaccessgroup"] != nil {
+		delete(p.p, "storageaccessgroup")
+	}
+}
+
+func (p *ListZonesMetricsParams) GetStorageaccessgroup() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["storageaccessgroup"].(string)
+	return value, ok
+}
+
 func (p *ListZonesMetricsParams) SetTags(v map[string]string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -3020,6 +3101,8 @@ type ZonesMetric struct {
 	Domain                          string                `json:"domain"`
 	Domainid                        string                `json:"domainid"`
 	Domainname                      string                `json:"domainname"`
+	Gputotal                        int64                 `json:"gputotal"`
+	Gpuused                         int64                 `json:"gpuused"`
 	Guestcidraddress                string                `json:"guestcidraddress"`
 	Hasannotations                  bool                  `json:"hasannotations"`
 	Icon                            interface{}           `json:"icon"`
@@ -3043,12 +3126,14 @@ type ZonesMetric struct {
 	Memoryused                      string                `json:"memoryused"`
 	Name                            string                `json:"name"`
 	Networktype                     string                `json:"networktype"`
+	Provider                        string                `json:"provider"`
 	Resourcedetails                 map[string]string     `json:"resourcedetails"`
 	Routedmodeenabled               bool                  `json:"routedmodeenabled"`
 	Routerprivateinterfacemaxmtu    int                   `json:"routerprivateinterfacemaxmtu"`
 	Routerpublicinterfacemaxmtu     int                   `json:"routerpublicinterfacemaxmtu"`
 	Securitygroupsenabled           bool                  `json:"securitygroupsenabled"`
 	State                           string                `json:"state"`
+	Storageaccessgroups             string                `json:"storageaccessgroups"`
 	Tags                            []Tags                `json:"tags"`
 	Type                            string                `json:"type"`
 	Zonetoken                       string                `json:"zonetoken"`
@@ -3716,6 +3801,8 @@ type UpdateZoneResponse struct {
 	Domain                       string                       `json:"domain"`
 	Domainid                     string                       `json:"domainid"`
 	Domainname                   string                       `json:"domainname"`
+	Gputotal                     int64                        `json:"gputotal"`
+	Gpuused                      int64                        `json:"gpuused"`
 	Guestcidraddress             string                       `json:"guestcidraddress"`
 	Hasannotations               bool                         `json:"hasannotations"`
 	Icon                         interface{}                  `json:"icon"`
@@ -3731,11 +3818,13 @@ type UpdateZoneResponse struct {
 	Localstorageenabled          bool                         `json:"localstorageenabled"`
 	Name                         string                       `json:"name"`
 	Networktype                  string                       `json:"networktype"`
+	Provider                     string                       `json:"provider"`
 	Resourcedetails              map[string]string            `json:"resourcedetails"`
 	Routedmodeenabled            bool                         `json:"routedmodeenabled"`
 	Routerprivateinterfacemaxmtu int                          `json:"routerprivateinterfacemaxmtu"`
 	Routerpublicinterfacemaxmtu  int                          `json:"routerpublicinterfacemaxmtu"`
 	Securitygroupsenabled        bool                         `json:"securitygroupsenabled"`
+	Storageaccessgroups          string                       `json:"storageaccessgroups"`
 	Tags                         []Tags                       `json:"tags"`
 	Type                         string                       `json:"type"`
 	Zonetoken                    string                       `json:"zonetoken"`
diff --git a/generate/generate.go b/generate/generate.go
index d65be25..0a5d5ec 100644
--- a/generate/generate.go
+++ b/generate/generate.go
@@ -1424,6 +1424,14 @@ func (s *service) generateConvertCode(cmd, name, typ string) {
 		case "otherdeployparams":
 			pn("	u.Set(fmt.Sprintf(\"%s[%%d].name\", i), k)", name)
 			pn("	u.Set(fmt.Sprintf(\"%s[%%d].value\", i), m[k])", name)
+		case "nodeofferings":
+			pn("	u.Set(fmt.Sprintf(\"%s[%%d].node\", i), k)", name)
+			pn("	u.Set(fmt.Sprintf(\"%s[%%d].offering\", i), m[k])", name)
+		case "nodetemplates":
+			pn("	u.Set(fmt.Sprintf(\"%s[%%d].node\", i), k)", name)
+			pn("	u.Set(fmt.Sprintf(\"%s[%%d].template\", i), m[k])", name)
+		case "cniconfigdetails":
+			pn("	u.Set(fmt.Sprintf(\"%s[%%d].%%s\", i, k), m[k])", name)
 		default:
 			if shouldUseStaticZeroIndex && !detailsRequireKeyValue[cmd] {
 				pn("	u.Set(fmt.Sprintf(\"%s[0].%%s\", k), m[k])", name)
diff --git a/generate/listApis.json b/generate/listApis.json
index 790365c..017bfea 100644
--- a/generate/listApis.json
+++ b/generate/listApis.json
@@ -6,26 +6,11 @@
       "name": "createVPCOffering",
       "params": [
         {
-          "description": "The internet protocol of the offering. Options are ipv4 and dualstack. Default is ipv4. dualstack will create an offering that supports both IPv4 and IPv6",
-          "length": 255,
-          "name": "internetprotocol",
-          "required": false,
-          "since": "4.17.0",
-          "type": "string"
-        },
-        {
-          "description": "set to true if the offering is to be enabled during creation. Default is false",
-          "length": 255,
-          "name": "enable",
-          "required": false,
-          "since": "4.16",
-          "type": "boolean"
-        },
-        {
-          "description": "provider to service mapping. If not specified, the provider for the service will be mapped to the default provider on the physical network",
+          "description": "desired service capabilities as part of vpc offering",
           "length": 255,
-          "name": "serviceproviderlist",
+          "name": "servicecapabilitylist",
           "required": false,
+          "since": "4.4",
           "type": "map"
         },
         {
@@ -36,6 +21,13 @@
           "since": "4.20.0",
           "type": "string"
         },
+        {
+          "description": "the display text of the vpc offering, defaults to the 'name'",
+          "length": 255,
+          "name": "displaytext",
+          "required": false,
+          "type": "string"
+        },
         {
           "description": "true if the VPC offering supports choosing AS number",
           "length": 255,
@@ -45,12 +37,11 @@
           "type": "boolean"
         },
         {
-          "description": "Indicates the mode with which the network will operate. Valid option: NATTED or ROUTED",
+          "description": "provider to service mapping. If not specified, the provider for the service will be mapped to the default provider on the physical network",
           "length": 255,
-          "name": "networkmode",
+          "name": "serviceproviderlist",
           "required": false,
-          "since": "4.20.0",
-          "type": "string"
+          "type": "map"
         },
         {
           "description": "the name of the vpc offering",
@@ -60,11 +51,19 @@
           "type": "string"
         },
         {
-          "description": "true if network offering is meant to be used for NSX, false otherwise.",
+          "description": "The internet protocol of the offering. Options are ipv4 and dualstack. Default is ipv4. dualstack will create an offering that supports both IPv4 and IPv6",
           "length": 255,
-          "name": "fornsx",
+          "name": "internetprotocol",
           "required": false,
-          "since": "4.20.0",
+          "since": "4.17.0",
+          "type": "string"
+        },
+        {
+          "description": "set to true if the offering is to be enabled during creation. Default is false",
+          "length": 255,
+          "name": "enable",
+          "required": false,
+          "since": "4.16",
           "type": "boolean"
         },
         {
@@ -76,10 +75,18 @@
           "type": "uuid"
         },
         {
-          "description": "the display text of the vpc offering, defaults to the 'name'",
+          "description": "services supported by the vpc offering",
           "length": 255,
-          "name": "displaytext",
+          "name": "supportedservices",
+          "required": false,
+          "type": "list"
+        },
+        {
+          "description": "Indicates the mode with which the network will operate. Valid option: NATTED or ROUTED",
+          "length": 255,
+          "name": "networkmode",
           "required": false,
+          "since": "4.20.0",
           "type": "string"
         },
         {
@@ -92,19 +99,20 @@
           "type": "list"
         },
         {
-          "description": "true if network offering for NSX VPC offering supports Load balancer service.",
+          "description": "Name of the provider providing the service",
           "length": 255,
-          "name": "nsxsupportlb",
+          "name": "provider",
           "required": false,
-          "since": "4.20.0",
-          "type": "boolean"
+          "since": "4.21.0",
+          "type": "string"
         },
         {
-          "description": "services supported by the vpc offering",
+          "description": "true if network offering is meant to be used for NSX, false otherwise.",
           "length": 255,
-          "name": "supportedservices",
+          "name": "fornsx",
           "required": false,
-          "type": "list"
+          "since": "4.20.0",
+          "type": "boolean"
         },
         {
           "description": "the ID of the containing domain(s), null for public offerings",
@@ -115,98 +123,62 @@
           "type": "list"
         },
         {
-          "description": "desired service capabilities as part of vpc offering",
+          "description": "true if network offering for NSX VPC offering supports Load balancer service.",
           "length": 255,
-          "name": "servicecapabilitylist",
+          "name": "nsxsupportlb",
           "required": false,
-          "since": "4.4",
-          "type": "map"
+          "since": "4.20.0",
+          "type": "boolean"
         }
       ],
       "related": "updateVPCOffering,listVPCOfferings",
       "response": [
         {
-          "description": "the date this vpc offering was created",
-          "name": "created",
-          "type": "date"
-        },
-        {},
-        {
-          "description": "Mode in which the network will operate. The valid values are NATTED and ROUTED",
-          "name": "networkmode",
-          "type": "string"
-        },
-        {
-          "description": "the name of the vpc offering",
-          "name": "name",
+          "description": "the domain ID(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
+          "name": "domainid",
           "type": "string"
         },
         {
-          "description": "state of the vpc offering. Can be Disabled/Enabled",
-          "name": "state",
-          "type": "string"
+          "description": "true if network offering supports choosing AS numbers",
+          "name": "specifyasnumber",
+          "type": "boolean"
         },
         {
-          "description": "an alternate display text of the vpc offering.",
-          "name": "displaytext",
+          "description": "the routing mode for the network offering, supported types are Static or Dynamic.",
+          "name": "routingmode",
           "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 current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
         },
         {
           "description": "the domain name(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
           "name": "domain",
           "type": "string"
         },
-        {
-          "description": "true if vpc offering is default, false otherwise",
-          "name": "isdefault",
-          "type": "boolean"
-        },
         {},
         {
-          "description": "the internet protocol of the vpc offering",
-          "name": "internetprotocol",
-          "type": "string"
-        },
-        {
-          "description": "the routing mode for the network offering, supported types are Static or Dynamic.",
-          "name": "routingmode",
+          "description": "the name of the vpc offering",
+          "name": "name",
           "type": "string"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
+          "description": "the zone name(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
+          "name": "zone",
           "type": "string"
         },
         {
-          "description": "true if network offering supports choosing AS numbers",
-          "name": "specifyasnumber",
+          "description": "indicated if the offering can support region level vpc",
+          "name": "supportsregionLevelvpc",
           "type": "boolean"
         },
         {
-          "description": "the id of the vpc offering",
-          "name": "id",
-          "type": "string"
-        },
-        {
-          "description": "the zone ID(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
-          "name": "zoneid",
+          "description": "an alternate display text of the vpc offering.",
+          "name": "displaytext",
           "type": "string"
         },
-        {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
-        },
-        {
-          "description": " indicates if the vpc offering supports distributed router for one-hop forwarding",
-          "name": "distributedvpcrouter",
-          "type": "boolean"
-        },
         {
           "description": "the list of supported services",
           "name": "service",
@@ -216,23 +188,23 @@
               "name": "provider",
               "response": [
                 {
-                  "description": "the physical network this belongs to",
-                  "name": "physicalnetworkid",
-                  "type": "string"
+                  "description": "services for this provider",
+                  "name": "servicelist",
+                  "type": "list"
                 },
                 {
-                  "description": "the provider name",
-                  "name": "name",
+                  "description": "the destination physical network",
+                  "name": "destinationphysicalnetworkid",
                   "type": "string"
                 },
                 {
-                  "description": "the destination physical network",
-                  "name": "destinationphysicalnetworkid",
+                  "description": "the physical network this belongs to",
+                  "name": "physicalnetworkid",
                   "type": "string"
                 },
                 {
-                  "description": "uuid of the network provider",
-                  "name": "id",
+                  "description": "the provider name",
+                  "name": "name",
                   "type": "string"
                 },
                 {
@@ -240,36 +212,31 @@
                   "name": "canenableindividualservice",
                   "type": "boolean"
                 },
-                {
-                  "description": "services for this provider",
-                  "name": "servicelist",
-                  "type": "list"
-                },
                 {
                   "description": "state of the network provider",
                   "name": "state",
                   "type": "string"
+                },
+                {
+                  "description": "uuid of the network provider",
+                  "name": "id",
+                  "type": "string"
                 }
               ],
               "type": "list"
             },
-            {
-              "description": "the service name",
-              "name": "name",
-              "type": "string"
-            },
             {
               "description": "the list of capabilities",
               "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"
                 },
                 {
@@ -279,24 +246,65 @@
                 }
               ],
               "type": "list"
+            },
+            {
+              "description": "the service name",
+              "name": "name",
+              "type": "string"
             }
           ],
           "type": "list"
         },
+        {
+          "description": "Mode in which the network will operate. The valid values are NATTED and ROUTED",
+          "name": "networkmode",
+          "type": "string"
+        },
         {
           "description": "true if vpc offering can be used by NSX networks only",
           "name": "fornsx",
           "type": "boolean"
         },
         {
-          "description": "the zone name(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
-          "name": "zone",
+          "description": "the zone ID(s) this disk offering belongs to. Ignore this information as it is not currently applicable.",
+          "name": "zoneid",
           "type": "string"
         },
         {
-          "description": "indicated if the offering can support region level vpc",
-          "name": "supportsregionLevelvpc",
+          "description": " indicates if the vpc offering supports distributed router for one-hop forwarding",
+          "name": "distributedvpcrouter",
+          "type": "boolean"
+        },
+        {
+          "description": "the date this vpc offering was created",
+          "name": "created",
+          "type": "date"
+        },
+        {
+          "description": "true if vpc offering is default, false otherwise",
+          "name": "isdefault",
           "type": "boolean"
+        },
+        {
+          "description": "state of the vpc offering. Can be Disabled/Enabled",
+          "name": "state",
+          "type": "string"
+        },
+        {
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
+          "type": "string"
+        },
+        {
+          "description": "the id of the vpc offering",
+          "name": "id",
+          "type": "string"
+        },
+        {},
+        {
+          "description": "the internet protocol of the vpc offering",
+          "name": "internetprotocol",
+          "type": "string"
         }
       ]
     },
@@ -305,29 +313,6 @@
       "isasync": false,
       "name": "ldapCreateAccount",
       "params": [
-        {
-          "description": "Creates the account under the specified role.",
-          "length": 255,
-          "name": "roleid",
-          "related": "createRole,importRole,listRoles,updateRole",
-          "required": false,
-          "type": "uuid"
-        },
-        {
-          "description": "details for account used to store specific parameters",
-          "length": 255,
-          "name": "accountdetails",
-          "required": false,
-          "type": "map"
-        },
-        {
-          "description": "Creates the user under the specified domain.",
-          "length": 255,
-          "name": "domainid",
-          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain,moveDomain",
-          "required": false,
-          "type": "uuid"
-        },
         {
           "description": "Creates the user under the specified account. If no account is specified, the username will be used as the account name.",
           "length": 255,
@@ -350,11 +335,11 @@
           "type": "string"
         },
         {
-          "description": "Network domain for the account's networks",
+          "description": "details for account used to store specific parameters",
           "length": 255,
-          "name": "networkdomain",
+          "name": "accountdetails",
           "required": false,
-          "type": "string"
+          "type": "map"
         },
         {
           "description": "Type of the account. Specify 0 for user, 1 for root admin, and 2 for domain admin",
@@ -363,6 +348,21 @@
           "required": false,
           "type": "integer"
         },
+        {
+          "description": "Network domain for the account's networks",
+          "length": 255,
+          "name": "networkdomain",
+          "required": false,
+          "type": "string"
+        },
+        {
+          "description": "Creates the user under the specified domain.",
+          "length": 255,
+          "name": "domainid",
+          "related": "createDomain,listDomainChildren,listDomains,listDomains,updateDomain,moveDomain",
+          "required": false,
+          "type": "uuid"
+        },
         {
           "description": "Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.",
           "length": 255,
@@ -376,13 +376,37 @@
           "name": "accountid",
           "required": false,
           "type": "string"
+        },
+        {
+          "description": "Creates the account under the specified role.",
+          "length": 255,
+          "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 virtual machines that can be deployed by this account",
-          "name": "vmlimit",
+          "description": "the total number of backups which can be stored by this account",
+          "name": "backuplimit",
+          "type": "string"
+        },
+        {
+          "description": "the total number of cpu cores the account can own",
+          "name": "cpulimit",
+          "type": "string"
+        },
+        {
+          "description": "the total memory (in MB) the account can own",
+          "name": "memorylimit",
+          "type": "string"
+        },
+        {
+          "description": "the type of the role (Admin, ResourceAdmin, DomainAdmin, User)",
+          "name": "roletype",
           "type": "string"
         },
         {
@@ -391,92 +415,212 @@
           "type": "string"
         },
         {
-          "description": "the total number of networks owned by account",
-          "name": "networktotal",
-          "type": "long"
+          "description": "The tagged resource limit and count for the account",
+          "name": "taggedresources",
+          "type": "list"
         },
         {
-          "description": "the total number of vpcs owned by account",
-          "name": "vpctotal",
-          "type": "long"
+          "description": "the total number of projects the account can own",
+          "name": "projectlimit",
+          "type": "string"
         },
         {
-          "description": "the total primary storage space (in GiB) owned by account",
-          "name": "primarystoragetotal",
+          "description": "the total number of buckets stored by this account",
+          "name": "buckettotal",
           "type": "long"
         },
         {
-          "description": "the total number of networks available to be created for this account",
-          "name": "networkavailable",
+          "description": "the total primary storage space (in GiB) available to be used for this account",
+          "name": "primarystorageavailable",
           "type": "string"
         },
         {
-          "description": "the list of acl groups that account belongs to",
-          "name": "groups",
-          "type": "list"
+          "description": "the total number of backups available to this account",
+          "name": "backupavailable",
+          "type": "string"
         },
         {
-          "description": "the total primary storage space (in GiB) available to be used for this account",
-          "name": "primarystorageavailable",
+          "description": "the total object storage space (in GiB) available to the account",
+          "name": "objectstorageavailable",
           "type": "string"
         },
         {
-          "description": "the state of the account",
-          "name": "state",
+          "description": "the total number of gpus available to be created for this account",
+          "name": "gpuavailable",
+          "type": "string"
+        },
+        {
+          "description": "true if the account requires cleanup",
+          "name": "iscleanuprequired",
+          "type": "boolean"
+        },
+        {
+          "description": "the total number of vpcs available to be created for this account",
+          "name": "vpcavailable",
+          "type": "string"
+        },
+        {
+          "description": "the total secondary storage space (in GiB) available to be used for this account",
+          "name": "secondarystorageavailable",
           "type": "string"
         },
+        {
+          "description": "the total number of gpus owned by account",
+          "name": "gputotal",
+          "type": "long"
+        },
         {
           "description": "the ID of the role",
           "name": "roleid",
           "type": "string"
         },
+        {
+          "description": "the total primary storage space (in GiB) the account can own",
+          "name": "primarystoragelimit",
+          "type": "string"
+        },
         {
           "description": "details for the account",
           "name": "accountdetails",
           "type": "map"
         },
+        {
+          "description": "the total object storage space (in GiB) owned by the account",
+          "name": "objectstoragetotal",
+          "type": "long"
+        },
+        {
+          "description": "the total number of snapshots which can be stored by this account",
+          "name": "snapshotlimit",
+          "type": "string"
+        },
+        {
+          "description": "name of the Domain the account belongs to",
+          "name": "domain",
+          "type": "string"
+        },
         {
           "description": "the total number of networks the account can own",
           "name": "networklimit",
           "type": "string"
         },
+        {
+          "description": "the total number of gpus the account can own",
+          "name": "gpulimit",
+          "type": "string"
+        },
+        {
+          "description": "the total number of vpcs the account can own",
+          "name": "vpclimit",
+          "type": "string"
+        },
+        {
+          "description": "the total volume available for this account",
+          "name": "volumeavailable",
+          "type": "string"
+        },
+        {
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
+          "type": "string"
+        },
+        {
+          "description": "the total memory (in MB) owned by account",
+          "name": "memorytotal",
+          "type": "long"
+        },
+        {
+          "description": "the total number of virtual machines deployed by this account",
+          "name": "vmtotal",
+          "type": "long"
+        },
+        {
+          "description": "the total number of snapshots available for this account",
+          "name": "snapshotavailable",
+          "type": "string"
+        },
+        {
+          "description": "the total number of templates available to be created by this account",
+          "name": "templateavailable",
+          "type": "string"
+        },
+        {
+          "description": "the total number of network traffic bytes received",
+          "name": "receivedbytes",
+          "type": "long"
+        },
+        {
+          "description": "the current status of the latest async job acting on this object",
+          "name": "jobstatus",
+          "type": "integer"
+        },
         {
           "description": "account type (admin, domain-admin, user)",
           "name": "accounttype",
           "type": "integer"
         },
+        {
+          "description": "the total primary storage space (in GiB) owned by account",
+          "name": "primarystoragetotal",
+          "type": "long"
+        },
+        {
+          "description": "the name of the role",
+          "name": "rolename",
+          "type": "string"
+        },
+        {
+          "description": "the total number of cpu cores owned by account",
+          "name": "cputotal",
+          "type": "long"
+        },
+        {
+          "description": "the network domain",
+          "name": "networkdomain",
+          "type": "string"
+        },
+        {
+          "description": "the default zone of the account",
+          "name": "defaultzoneid",
+          "type": "string"
+        },
+        {
+          "description": "the total number of virtual machines stopped for this account",
+          "name": "vmstopped",
+          "type": "integer"
+        },
+        {
+          "description": "the total memory (in MB) available to be created for this account",
+          "name": "memoryavailable",
+          "type": "string"
+        },
         {
           "description": "the list of users associated with account",
           "name": "user",
           "response": [
             {
-              "description": "the date and time the user account was created",
-              "name": "created",
-              "type": "date"
-            },
-            {
-              "description": "the user state",
-              "name": "state",
+              "description": "the source type of the user in lowercase, such as native, ldap, saml2",
+              "name": "usersource",
               "type": "string"
             },
             {
-              "description": "the account ID of the user",
-              "name": "accountid",
+              "description": "the user email address",
+              "name": "email",
               "type": "string"
             },
             {
-              "description": "the type of the role",
-              "name": "roletype",
+              "description": "the account name of the user",
+              "name": "account",
               "type": "string"
             },
             {
-              "description": "the api key of the user",
-              "name": "apikey",
+              "description": "the user state",
+              "name": "state",
               "type": "string"
             },
             {
-              "description": "the secret key of the user",
-              "name": "secretkey",
+              "description": "the type of the role",
+              "name": "roletype",
               "type": "string"
             },
             {
@@ -484,24 +628,29 @@
               "name": "firstname",
               "type": "string"
             },
+            {
+              "description": "the user lastname",
+              "name": "lastname",
+              "type": "string"
+            },
             {
               "description": "the timezone user was created in",
               "name": "timezone",
               "type": "string"
             },
             {
-              "description": "the user name",
-              "name": "username",
+              "description": "the user ID",
+              "name": "id",
               "type": "string"
             },
             {
-              "description": "the ID of the role",
-              "name": "roleid",
-              "type": "string"
+              "description": "the boolean value representing if the updating target is in caller's child domain",
+              "name": "iscallerchilddomain",
+              "type": "boolean"
             },
             {
-              "description": "the domain ID of the user",
-              "name": "domainid",
+              "description": "the domain name of the user",
+              "name": "domain",
               "type": "string"
             },
             {
@@ -515,58 +664,58 @@
               "type": "resourceiconresponse"
             },
             {
-              "description": "whether api key access is Enabled, Disabled or set to Inherit (it inherits the value from the parent)",
-              "name": "apikeyaccess",
-              "type": "apikeyaccess"
+              "description": "the name of the role",
+              "name": "rolename",
+              "type": "string"
             },
             {
-              "description": "the user ID",
-              "name": "id",
+              "description": "the user name",
+              "name": "username",
               "type": "string"
             },
             {
-              "description": "the boolean value representing if the updating target is in caller's child domain",
-              "name": "iscallerchilddomain",
+              "description": "true if user has two factor authentication is mandated",
+              "name": "is2famandated",
               "type": "boolean"
             },
             {
-              "description": "the domain name of the user",
-              "name": "domain",
-              "type": "string"
-            },
-            {
-              "description": "the account name of the user",
-              "name": "account",
-              "type": "string"
+              "description": "the date and time the user account was created",
+              "name": "created",
+              "type": "date"
             },
             {
-              "description": "the name of the role",
-              "name": "rolename",
+              "description": "the account ID of the user",
+              "name": "accountid",
               "type": "string"
             },
-            {
-              "description": "true if user has two factor authentication is mandated",
-              "name": "is2famandated",
-              "type": "boolean"
-            },
             {
               "description": "true if user has two factor authentication enabled",
               "name": "is2faenabled",
               "type": "boolean"
             },
             {
-              "description": "the source type of the user in lowercase, such as native, ldap, saml2",
-              "name": "usersource",
+              "description": "the secret key of the user",
+              "name": "secretkey",
               "type": "string"
             },
             {
-              "description": "the user lastname",
-              "name": "lastname",
+              "description": "the api key of the user",
+              "name": "apikey",
               "type": "string"
             },
             {
-              "description": "the user email address",
-              "name": "email",
+              "description": "whether api key access is Enabled, Disabled or set to Inherit (it inherits the value from the parent)",
+              "name": "apikeyaccess",
+              "type": "apikeyaccess"
+            },
+            {
+              "description": "the ID of the role",
+              "name": "roleid",
+              "type": "string"
+            },
+            {
+              "description": "the domain ID of the user",
+              "name": "domainid",
               "type": "string"
             },
             {
@@ -578,68 +727,43 @@
           "type": "list"
         },
         {
-          "description": "the total secondary storage space (in GiB) owned by account",
-          "name": "secondarystoragetotal",
-          "type": "float"
-        },
-        {
-          "description": "the total number of public ip addresses this account can acquire",
-          "name": "iplimit",
-          "type": "string"
-        },
-        {
-          "description": "the total number of templates available to be created by this account",
-          "name": "templateavailable",
+          "description": "the total number of networks available to be created for this account",
+          "name": "networkavailable",
           "type": "string"
         },
         {
-          "description": "the total number of vpcs the account can own",
-          "name": "vpclimit",
-          "type": "string"
+          "description": "the total number of backups stored by this account",
+          "name": "backuptotal",
+          "type": "long"
         },
         {
-          "description": "the total secondary storage space (in GiB) the account can own",
-          "name": "secondarystoragelimit",
-          "type": "string"
+          "description": "the total backup storage space (in GiB) owned by the account",
+          "name": "backupstoragetotal",
+          "type": "long"
         },
         {
-          "description": "the total secondary storage space (in GiB) available to be used for this account",
-          "name": "secondarystorageavailable",
+          "description": "the total number of projects available for administration by this account",
+          "name": "projectavailable",
           "type": "string"
         },
         {
-          "description": "the date when this account was created",
-          "name": "created",
-          "type": "date"
-        },
-        {
-          "description": "true if account is default, false otherwise",
-          "name": "isdefault",
-          "type": "boolean"
-        },
-        {
-          "description": "the name of the role",
-          "name": "rolename",
-          "type": "string"
+          "description": "the total secondary storage space (in GiB) owned by account",
+          "name": "secondarystoragetotal",
+          "type": "float"
         },
         {
-          "description": "the network domain",
-          "name": "networkdomain",
+          "description": "the total backup storage space (in GiB) available to the account",
+          "name": "backupstorageavailable",
           "type": "string"
         },
         {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
+          "description": "the total number of virtual machines running for this account",
+          "name": "vmrunning",
           "type": "integer"
         },
         {
-          "description": "the total number of projects available for administration by this account",
-          "name": "projectavailable",
-          "type": "string"
-        },
-        {
-          "description": "the total number of cpu cores the account can own",
-          "name": "cpulimit",
+          "description": "the total backup storage space (in GiB) the account can own",
+          "name": "backupstoragelimit",
           "type": "string"
         },
         {
@@ -648,180 +772,139 @@
           "type": "string"
         },
         {
-          "description": "the total volume being used by this account",
-          "name": "volumetotal",
-          "type": "long"
+          "description": "the date when this account was created",
+          "name": "created",
+          "type": "date"
         },
         {
-          "description": "the total number of network traffic bytes sent",
-          "name": "sentbytes",
-          "type": "long"
+          "description": "the total number of public ip addresses this account can acquire",
+          "name": "iplimit",
+          "type": "string"
         },
         {
           "description": "Base64 string representation of the resource icon",
           "name": "icon",
           "type": "resourceiconresponse"
         },
-        {},
-        {
-          "description": "the total volume which can be used by this account",
-          "name": "volumelimit",
-          "type": "string"
-        },
         {
-          "description": "the total number of vpcs available to be created for this account",
-          "name": "vpcavailable",
+          "description": "path of the Domain the account belongs to",
+          "name": "domainpath",
           "type": "string"
         },
         {
-          "description": "the total number of cpu cores owned by account",
-          "name": "cputotal",
+          "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",
+          "description": "the total volume which can be used by this account",
+          "name": "volumelimit",
           "type": "string"
         },
         {
-          "description": "the total memory (in MB) available to be created for this account",
-          "name": "memoryavailable",
+          "description": "the total number of buckets which can be stored by this account",
+          "name": "bucketlimit",
           "type": "string"
         },
         {
-          "description": "the id of the account",
-          "name": "id",
+          "description": "the total object storage space (in GiB) the account can own",
+          "name": "objectstoragelimit",
           "type": "string"
         },
         {
-          "description": "true if the account requires cleanup",
-          "name": "iscleanuprequired",
-          "type": "boolean"
+          "description": "the list of acl groups that account belongs to",
+          "name": "groups",
+          "type": "list"
         },
         {
-          "description": "the default zone of the account",
-          "name": "defaultzoneid",
-          "type": "string"
+          "description": "the total number of networks owned by account",
+          "name": "networktotal",
+          "type": "long"
         },
         {
-          "description": "whether api key access is Enabled, Disabled or set to Inherit (it inherits the value from the parent)",
-          "name": "apikeyaccess",
-          "type": "apikeyaccess"
+          "description": "the total secondary storage space (in GiB) the account can own",
+          "name": "secondarystoragelimit",
+          "type": "string"
         },
         {
-          "description": "id of the Domain the account belongs to",
-          "name": "domainid",
+          "description": "the total number of public ip addresses available for this account to acquire",
+          "name": "ipavailable",
           "type": "string"
         },
         {
-          "description": "the total number of projects being administrated by this account",
-          "name": "projecttotal",
+          "description": "the total volume being used by this account",
+          "name": "volumetotal",
           "type": "long"
         },
         {
-          "description": "the total memory (in MB) owned by account",
-          "name": "memorytotal",
+          "description": "the total number of templates which have been created by this account",
+          "name": "templatetotal",
           "type": "long"
         },
         {
-          "description": "the total number of cpu cores available to be created for this account",
-          "name": "cpuavailable",
-          "type": "string"
-        },
-        {},
-        {
-          "description": "the total volume available for this account",
-          "name": "volumeavailable",
-          "type": "string"
-        },
-        {
-          "description": "the total number of snapshots stored by this account",
-          "name": "snapshottotal",
+          "description": "the total number of vpcs owned by account",
+          "name": "vpctotal",
           "type": "long"
         },
         {
-          "description": "the total number of projects the account can own",
-          "name": "projectlimit",
+          "description": "the total number of buckets available to this account",
+          "name": "bucketavailable",
           "type": "string"
         },
         {
-          "description": "the total number of virtual machines running for this account",
-          "name": "vmrunning",
-          "type": "integer"
-        },
-        {
-          "description": "path of the Domain the account belongs to",
-          "name": "domainpath",
+          "description": "the total number of cpu cores available to be created for this account",
+          "name": "cpuavailable",
           "type": "string"
         },
         {
-          "description": "the total number of network traffic bytes received",
-          "name": "receivedbytes",
-          "type": "long"
-        },
-        {
-          "description": "the total number of templates which can be created by this account",
-          "name": "templatelimit",
+          "description": "the id of the account",
+          "name": "id",
           "type": "string"
         },
         {
-          "description": "the total number of virtual machines deployed by this account",
-          "name": "vmtotal",
-          "type": "long"
-        },
-        {
-          "description": "the total number of snapshots available for this account",
-          "name": "snapshotavailable",
+          "description": "the total number of virtual machines that can be deployed by this account",
+          "name": "vmlimit",
           "type": "string"
         },
         {
-          "description": "the total number of public ip addresses available for this account to acquire",
-          "name": "ipavailable",
-          "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",
-          "type": "long"
+          "description": "true if account is default, false otherwise",
+          "name": "isdefault",
+          "type": "boolean"
         },
         {
-          "description": "the total number of public ip addresses allocated for this account",
-          "name": "iptotal",
+          "description": "the total number of network traffic bytes sent",
+          "name": "sentbytes",
           "type": "long"
         },
         {
-          "description": "the total primary storage space (in GiB) the account can own",
-          "name": "primarystoragelimit",
+          "description": "the state of the account",
+          "name": "state",
           "type": "string"
         },
         {
-          "description": "the total number of virtual machines stopped for this account",
-          "name": "vmstopped",
-          "type": "integer"
-        },
-        {
-          "description": "The tagged resource limit and count for the account",
-          "name": "taggedresources",
-          "type": "list"
-        },
-        {
-          "description": "the total number of snapshots which can be stored by this account",
-          "name": "snapshotlimit",
-          "type": "string"
+          "description": "whether api key access is Enabled, Disabled or set to Inherit (it inherits the value from the parent)",
+          "name": "apikeyaccess",
+          "type": "apikeyaccess"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
+          "description": "the total number of templates which can be created by this account",
+          "name": "templatelimit",
           "type": "string"
         },
         {
-          "description": "the type of the role (Admin, ResourceAdmin, DomainAdmin, User)",
-          "name": "roletype",
-          "type": "string"
+          "description": "the total number of projects being administrated by this account",
+          "name": "projecttotal",
+          "type": "long"
         },
         {
-          "description": "the total memory (in MB) the account can own",
-          "name": "memorylimit",
+          "description": "id of the Domain the account belongs to",
+          "name": "domainid",
           "type": "string"
         }
       ],
@@ -832,14 +915,6 @@
       "isasync": true,
       "name": "copyIso",
       "params": [
-        {
-          "description": "Template ID.",
-          "length": 255,
-          "name": "id",
-          "related": "registerVnfTemplate,registerVnfTemplate,listVnfTemplates,listVnfTemplates,updateVnfTemplate,updateVnfTemplate,prepareTemplate,copyIso,listIsos,registerIso,updateIso,copyTemplate,createTemplate,listTemplates,registerTemplate,updateTemplate,listTemplates,createTemplate,copyTemplate,registerTemplate,registerIso,copyIso,listIsos,linkUserDataToTemplate",
-          "required": true,
-          "type": "uuid"
-        },
         {
           "description": "A list of IDs of the zones that the template needs to be copied to.Specify this list if the template needs to copied to multiple zones in one go. Do not specify destzoneid and destzoneids together, however one of them is required.",
           "length": 255,
@@ -849,57 +924,71 @@
           "type": "list"
         },
         {
-          "description": "ID of the zone the template is currently hosted on. If not specified and template is cross-zone, then we will sync this template to region wide image store.",
+          "description": "ID of the zone the template is being copied to.",
           "length": 255,
-          "name": "sourcezoneid",
+          "name": "destzoneid",
           "related": "createZone,updateZone,listZones,listZones",
           "required": false,
           "type": "uuid"
         },
         {
-          "description": "ID of the zone the template is being copied to.",
+          "description": "Template ID.",
           "length": 255,
-          "name": "destzoneid",
+          "name": "id",
+          "related": "prepareTemplate,copyIso,listIsos,registerIso,updateIso,copyTemplate,createTemplate,listTemplates,registerTemplate,updateTemplate,listTemplates,createTemplate,copyTemplate,registerTemplate,registerIso,copyIso,listIsos,linkUserDataToTemplate,registerVnfTemplate,registerVnfTemplate,listVnfTemplates,listVnfTemplates,updateVnfTemplate,updateVnfTemplate",
+          "required": true,
+          "type": "uuid"
+        },
+        {
+          "description": "ID of the zone the template is currently hosted on. If not specified and template is cross-zone, then we will sync this template to region wide image store.",
+          "length": 255,
+          "name": "sourcezoneid",
           "related": "createZone,updateZone,listZones,listZones",
           "required": false,
           "type": "uuid"
         }
       ],
-      "related": "registerVnfTemplate,registerVnfTemplate,listVnfTemplates,listVnfTemplates,updateVnfTemplate,updateVnfTemplate,prepareTemplate,listIsos,registerIso,updateIso,copyTemplate,createTemplate,listTemplates,registerTemplate,updateTemplate,listTemplates,createTemplate,copyTemplate,registerTemplate,registerIso,copyIso,listIsos,linkUserDataToTemplate",
+      "related": "prepareTemplate,listIsos,registerIso,updateIso,copyTemplate,createTemplate,listTemplates,registerTemplate,updateTemplate,listTemplates,createTemplate,copyTemplate,registerTemplate,registerIso,copyIso,listIsos,linkUserDataToTemplate,registerVnfTemplate,registerVnfTemplate,listVnfTemplates,listVnfTemplates,updateVnfTemplate,updateVnfTemplate",
       "response": [
         {
-          "description": "the name of the OS type for this template.",
-          "name": "ostypename",
-          "type": "string"
+          "description": "the date this template was created",
+          "name": "created",
+          "type": "date"
         },
         {
-          "description": "true if template contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory",
-          "name": "isdynamicallyscalable",
+          "description": "true if the ISO is bootable, false otherwise",
+          "name": "bootable",
           "type": "boolean"
         },
         {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
-          "type": "string"
+          "description": "true if the template is managed across all Zones, false otherwise",
+          "name": "crossZones",
+          "type": "boolean"
         },
+        {},
         {
-          "description": "the name of the secondary storage host for the template",
-          "name": "hostname",
-          "type": "string"
+          "description": "true if the template is extractable, false otherwise",
+          "name": "isextractable",
+          "type": "boolean"
         },
         {
-          "description": "the account name to which the template belongs",
-          "name": "account",
+          "description": "the date this template was removed",
+          "name": "removed",
+          "type": "date"
+        },
+        {
+          "description": "the account id to which the template belongs",
+          "name": "accountid",
           "type": "string"
         },
         {
-          "description": "the ID of the zone for this template",
-          "name": "zoneid",
+          "description": "the template ID of the parent template if present",
+          "name": "sourcetemplateid",
           "type": "string"
         },
         {
-          "description": "path of the Domain the template belongs to",
-          "name": "domainpath",
+          "description": "CPU Arch of the template",
+          "name": "arch",
           "type": "string"
         },
         {
@@ -908,58 +997,128 @@
           "type": "long"
         },
         {
-          "description": "if root disk template, then ids of the datas disk templates this template owns",
-          "name": "childtemplates",
-          "type": "set"
+          "description": "true if template is sshkey enabled, false otherwise",
+          "name": "sshkeyenabled",
+          "type": "boolean"
         },
         {
-          "description": "true if the template is extractable, false otherwise",
-          "name": "isextractable",
-          "type": "boolean"
+          "description": "VMware only: additional key/value details tied with deploy-as-is template",
+          "name": "deployasisdetails",
+          "type": "map"
+        },
+        {
+          "description": "the ID of the secondary storage host for the template",
+          "name": "hostid",
+          "type": "string"
+        },
+        {
+          "description": "Base64 string representation of the resource icon",
+          "name": "icon",
+          "type": "resourceiconresponse"
+        },
+        {
+          "description": "the ID of the zone for this template",
+          "name": "zoneid",
+          "type": "string"
+        },
+        {
+          "description": "the name of the secondary storage host for the template",
+          "name": "hostname",
+          "type": "string"
         },
-        {},
         {
           "description": "the ID of the OS type for this template.",
           "name": "ostypeid",
           "type": "string"
         },
+        {
+          "description": "the project id of the template",
+          "name": "projectid",
+          "type": "string"
+        },
+        {
+          "description": "the template ID",
+          "name": "id",
+          "type": "string"
+        },
+        {
+          "description": "list of parameters which contains the list of keys or string parameters that are needed to be passed for any variables declared in userdata",
+          "name": "userdataparams",
+          "type": "string"
+        },
         {
           "description": "the current status of the latest async job acting on this object",
           "name": "jobstatus",
           "type": "integer"
         },
         {
-          "description": "the date this template was removed",
-          "name": "removed",
-          "type": "date"
+          "description": "if Datadisk template, then id of the root disk template this template belongs to",
+          "name": "parenttemplateid",
+          "type": "string"
         },
         {
-          "description": "the project name of the template",
-          "name": "project",
+          "description": "the name of the OS type for this template.",
+          "name": "ostypename",
+          "type": "string"
+        },
+        {
+          "description": "true if the reset password feature is enabled, false otherwise",
+          "name": "passwordenabled",
+          "type": "boolean"
+        },
+        {
+          "description": "The name of extension linked to this template",
+          "name": "extensionname",
+          "type": "string"
+        },
+        {
+          "description": "the size of the template",
+          "name": "size",
+          "type": "long"
+        },
+        {
+          "description": "the processor bit size",
+          "name": "bits",
+          "type": "int"
+        },
+        {
+          "description": "the name of userdata linked to this template",
+          "name": "userdataname",
+          "type": "string"
+        },
+        {
+          "description": "the URL which the template/iso is registered from",
+          "name": "url",
           "type": "string"
         },
+        {},
+        {
+          "description": "true if the template is ready to be deployed from, false otherwise.",
+          "name": "isready",
+          "type": "boolean"
+        },
         {
           "description": "the list of resource tags associated",
           "name": "tags",
           "response": [
             {
-              "description": "path of the Domain associated with the tag",
-              "name": "domainpath",
+              "description": "resource type",
+              "name": "resourcetype",
               "type": "string"
             },
             {
-              "description": "the ID of the domain associated with the tag",
-              "name": "domainid",
+              "description": "id of the resource",
+              "name": "resourceid",
               "type": "string"
             },
             {
-              "description": "the account associated with the tag",
-              "name": "account",
+              "description": "the project id the tag belongs to",
+              "name": "projectid",
               "type": "string"
             },
             {
-              "description": "id of the resource",
-              "name": "resourceid",
+              "description": "the domain associated with the tag",
+              "name": "domain",
               "type": "string"
             },
             {
@@ -968,28 +1127,28 @@
               "type": "string"
             },
             {
-              "description": "tag value",
-              "name": "value",
+              "description": "the account associated with the tag",
+              "name": "account",
               "type": "string"
             },
             {
-              "description": "resource type",
-              "name": "resourcetype",
+              "description": "the ID of the domain associated with the tag",
+              "name": "domainid",
               "type": "string"
             },
             {
-              "description": "the domain associated with the tag",
-              "name": "domain",
+              "description": "customer associated with the tag",
+              "name": "customer",
               "type": "string"
             },
             {
-              "description": "customer associated with the tag",
-              "name": "customer",
+              "description": "tag value",
+              "name": "value",
               "type": "string"
             },
             {
-              "description": "the project id the tag belongs to",
-              "name": "projectid",
+              "description": "path of the Domain associated with the tag",
+              "name": "domainpath",
               "type": "string"
             },
             {
@@ -1001,23 +1160,18 @@
           "type": "set"
         },
         {
-          "description": "the template ID",
-          "name": "id",
+          "description": "the tag of this template",
+          "name": "templatetag",
           "type": "string"
         },
         {
-          "description": "the size of the template",
-          "name": "size",
-          "type": "long"
-        },
-        {
-          "description": "the template name",
-          "name": "name",
+          "description": "the id of userdata linked to this template",
+          "name": "userdataid",
           "type": "string"
         },
         {
-          "description": "the project id of the template",
-          "name": "projectid",
+          "description": "the name of the zone for this template",
+          "name": "zonename",
           "type": "string"
         },
         {
@@ -1026,59 +1180,60 @@
           "type": "string"
         },
         {
-          "description": "the name of userdata linked to this template",
-          "name": "userdataname",
+          "description": "The ID of extension linked to this template",
+          "name": "extensionid",
           "type": "string"
         },
+        {},
         {
-          "description": "VMware only: true if template is deployed without orchestrating disks and networks but \"as-is\" defined in the template.",
-          "name": "deployasis",
+          "description": "true if this template is a featured template, false otherwise",
+          "name": "isfeatured",
           "type": "boolean"
         },
         {
-          "description": "true if this template is a public template, false otherwise",
-          "name": "ispublic",
-          "type": "boolean"
+          "description": "the ID of the domain to which the template belongs",
+          "name": "domainid",
+          "type": "string"
         },
         {
-          "description": "the name of the domain to which the template belongs",
-          "name": "domain",
+          "description": "the project name of the template",
+          "name": "project",
           "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": "Lists the download progress of a template across all secondary storages",
-          "name": "downloaddetails",
-          "type": "list"
+          "description": "path of the Domain the template belongs to",
+          "name": "domainpath",
+          "type": "string"
         },
         {
-          "description": "checksum of the template",
-          "name": "checksum",
-          "type": "string"
+          "description": "true if the entity/resource has annotations",
+          "name": "hasannotations",
+          "type": "boolean"
         },
         {
-          "description": "additional key/value details tied with template",
-          "name": "details",
-          "type": "map"
+          "description": "If true it indicates that the template can be used for CKS cluster deployments",
+          "name": "forcks",
+          "type": "boolean"
         },
         {
-          "description": "list of parameters which contains the list of keys or string parameters that are needed to be passed for any variables declared in userdata",
-          "name": "userdataparams",
-          "type": "string"
+          "description": "true if this template is a public template, false otherwise",
+          "name": "ispublic",
+          "type": "boolean"
         },
         {
-          "description": "the template display text",
-          "name": "displaytext",
+          "description": "the hypervisor on which the template runs",
+          "name": "hypervisor",
           "type": "string"
         },
         {
-          "description": "KVM Only: true if template is directly downloaded to Primary Storage bypassing Secondary Storage",
-          "name": "directdownload",
-          "type": "boolean"
+          "description": "if root disk template, then ids of the datas disk templates this template owns",
+          "name": "childtemplates",
+          "type": "set"
         },
         {
           "description": "the userdata override policy with the userdata provided while deploying VM",
@@ -1086,125 +1241,69 @@
           "type": "string"
         },
         {
-          "description": "true if the template is managed across all Zones, false otherwise",
-          "name": "crossZones",
+          "description": "true if template contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory",
+          "name": "isdynamicallyscalable",
           "type": "boolean"
         },
         {
-          "description": "the tag of this template",
-          "name": "templatetag",
+          "description": "the template name",
+          "name": "name",
           "type": "string"
         },
         {
-          "description": "the date this template was created",
-          "name": "created",
-          "type": "date"
-        },
-        {
-          "description": "the ID of the secondary storage host for the template",
-          "name": "hostid",
+          "description": "the template display text",
+          "name": "displaytext",
           "type": "string"
         },
         {
-          "description": "Base64 string representation of the resource icon",
-          "name": "icon",
-          "type": "resourceiconresponse"
+          "description": "the UUID of the latest async job acting on this object",
+          "name": "jobid",
+          "type": "string"
         },
         {
-          "description": "the account id to which the template belongs",
-          "name": "accountid",
-          "type": "string"
+          "description": "the format of the template.",
+          "name": "format",
+          "type": "imageformat"
         },
         {
-          "description": "the hypervisor on which the template runs",
-          "name": "hypervisor",
+          "description": "the name of the domain to which the template belongs",
+          "name": "domain",
           "type": "string"
         },
         {
-          "description": "true if this template is a featured template, false otherwise",
-          "name": "isfeatured",
-          "type": "boolean"
+          "description": "additional key/value details tied with template",
+          "name": "details",
+          "type": "map"
         },
         {
-          "description": "true if the template is ready to be deployed from, false otherwise.",
-          "name": "isready",
... 234261 lines suppressed ...