bump xanzy/go-cloudstack to v2.7.0
diff --git a/go.mod b/go.mod
index 355d17f..4cfe0e4 100644
--- a/go.mod
+++ b/go.mod
@@ -4,7 +4,7 @@
 
 require (
 	github.com/spf13/pflag v1.0.3
-	github.com/xanzy/go-cloudstack v2.4.1+incompatible
+	github.com/xanzy/go-cloudstack v2.7.0+incompatible
 	gopkg.in/gcfg.v1 v1.2.3
 	k8s.io/api v0.0.0
 	k8s.io/apimachinery v0.0.0
diff --git a/go.sum b/go.sum
index 865c7dd..56e4b00 100644
--- a/go.sum
+++ b/go.sum
@@ -44,7 +44,7 @@
 github.com/containernetworking/cni v0.6.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
 github.com/coreos/bbolt v1.3.1-coreos.6 h1:uTXKg9gY70s9jMAKdfljFQcuh4e/BXOM+V+d00KFj3A=
 github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
-github.com/coreos/etcd v3.3.13+incompatible h1:8F3hqu9fGYLBifCmRCJsicFqDx/D68Rt3q1JMazcgBQ=
+github.com/coreos/etcd v3.3.13+incompatible h1:gLs8IvZUgVJwC3/b0ILSqPZoflsywDhG78behZnjk/s=
 github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
 github.com/coreos/go-oidc v0.0.0-20180117170138-065b426bd416/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
 github.com/coreos/go-semver v0.0.0-20180108230905-e214231b295a h1:WqY2Kv7eI1jeoU3pC05YYK/kK4tdXyLzzaBzCR51r9M=
@@ -67,7 +67,7 @@
 github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
 github.com/docker/distribution v0.0.0-20170726174610-edc3ab29cdff h1:FKH02LHYqSmeWd3GBh0KIkM8JBpw3RrShgtcWShdWJg=
 github.com/docker/distribution v0.0.0-20170726174610-edc3ab29cdff/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0 h1:w3NnFcKR5241cfmQU5ZZAsf0xcpId6mWOupTvJlUX2U=
+github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0 h1:sLjcXL0ozEc1CVv4OhvrLFbieIL8OxgtFTMykm8idvo=
 github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
 github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
@@ -289,8 +289,8 @@
 github.com/vmware/govmomi v0.20.1/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU=
 github.com/vmware/photon-controller-go-sdk v0.0.0-20170310013346-4a435daef6cc/go.mod h1:e6humHha1ekIwTCm+A5Qed5mG8V4JL+ChHcUOJ+L/8U=
 github.com/xanzy/go-cloudstack v0.0.0-20160728180336-1e2cbf647e57/go.mod h1:s3eL3z5pNXF5FVybcT+LIVdId8pYn709yv6v5mrkrQE=
-github.com/xanzy/go-cloudstack v2.4.1+incompatible h1:Oc4xa2+I94h1g/QJ+nHoq597nJz2KXzxuQx/weOx0AU=
-github.com/xanzy/go-cloudstack v2.4.1+incompatible/go.mod h1:s3eL3z5pNXF5FVybcT+LIVdId8pYn709yv6v5mrkrQE=
+github.com/xanzy/go-cloudstack v2.7.0+incompatible h1:TGR5+3r645XAQcU+v/S4MDW1qb2ybOBRN5ZStoTkBSc=
+github.com/xanzy/go-cloudstack v2.7.0+incompatible/go.mod h1:sBh287mCRwCz6zyXHMmw7sSZGPohVpnx+o+OY4M+i3A=
 github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18 h1:MPPkRncZLN9Kh4MEFmbnK4h3BD7AUmskWv2+EeZJCCs=
 github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8=
@@ -359,7 +359,7 @@
 gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg=
 gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
+gotest.tools v2.2.0+incompatible h1:y0IMTfclpMdsdIbr6uwmJn5/WZ7vFuObxDMdrylFM3A=
 gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
 k8s.io/api v0.0.0-20190805141119-fdd30b57c827 h1:Yf7m8lslHFWm22YDRTAHrGPh729A6Lmxcm1weHHBTuw=
 k8s.io/api v0.0.0-20190805141119-fdd30b57c827/go.mod h1:TBhBqb1AWbBQbW3XRusr7n7E4v2+5ZY8r8sAMnyFC5A=
@@ -369,19 +369,16 @@
 k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719/go.mod h1:I4A+glKBHiTgiEjQiCCQfCAIcIMFGt291SmsvcrFzJA=
 k8s.io/apiserver v0.0.0-20190805142138-368b2058237c h1:OxQmmVHy+tsC9ciM88NSUWyX3PWastYCO192eVJ7HNg=
 k8s.io/apiserver v0.0.0-20190805142138-368b2058237c/go.mod h1:k9Vk6Fiw9pZljxzTtvH2MAfADQK6+hPgf7/eRaZb//o=
-k8s.io/cli-runtime v0.0.0-20190805143448-a07e59fb081d h1:M738ESzMZ3GYE73vBzl9y0vdOsRVTMj90bAIZyjMZRk=
 k8s.io/cli-runtime v0.0.0-20190805143448-a07e59fb081d/go.mod h1:5w8rmLFPEY2JBGBgRZyieqhi9q0iuUg8oK+zxOdtO7U=
 k8s.io/client-go v0.0.0-20190805141520-2fe0317bcee0 h1:BtLpkscF7UZVmtKshdjDIcWLnfGOY01MRIdtYTUme+o=
 k8s.io/client-go v0.0.0-20190805141520-2fe0317bcee0/go.mod h1:ayzmabJptoFlxo7SQxN2Oz3a12t9kmpMKADzQmr5Zbc=
 k8s.io/cloud-provider v0.0.0-20190805144409-8484242760e7 h1:j8s0zgBusPIneXYPsYBAkEi9c9kovyPFl6l+41TlndU=
 k8s.io/cloud-provider v0.0.0-20190805144409-8484242760e7/go.mod h1:CBAE+UyBK7Sf2hxVn6mJWVRZvcsvxq4IgngvZtKmEgM=
-k8s.io/cluster-bootstrap v0.0.0-20190805144246-c01ee70854a1 h1:RflEIV9dYAR+tgZaIJUO5CZwbJoWd4HRI350gDYN/cA=
 k8s.io/cluster-bootstrap v0.0.0-20190805144246-c01ee70854a1/go.mod h1:4ijIkuJiiLZ51gE9wH/RJgMoyQHmGk7EknPexWJzzZY=
 k8s.io/code-generator v0.0.0-20190612205613-18da4a14b22b h1:p+PRuwXWwk5e+UYvicGiavEupapqM5NOxUl3y1GkD6c=
 k8s.io/code-generator v0.0.0-20190612205613-18da4a14b22b/go.mod h1:G8bQwmHm2eafm5bgtX67XDZQ8CWKSGu9DekI+yN4Y5I=
 k8s.io/component-base v0.0.0-20190805141645-3a5e5ac800ae h1:JlCWBqK+5Q0iW1eEANRyLYf8eB3buXL3X6SWVTPxLsg=
 k8s.io/component-base v0.0.0-20190805141645-3a5e5ac800ae/go.mod h1:VLedAFwENz2swOjm0zmUXpAP2mV55c49xgaOzPBI/QQ=
-k8s.io/cri-api v0.0.0-20190531030430-6117653b35f1 h1:NVZIgq492plCUB4GlZUTdgGQRPOKmBWpw2HlOJDm9OQ=
 k8s.io/cri-api v0.0.0-20190531030430-6117653b35f1/go.mod h1:K6Ux7uDbzKhacgqW0OJg3rjXk/SR9kprCPfSUDXGB5A=
 k8s.io/csi-translation-lib v0.0.0-20190805144531-3985229e1802 h1:5JJ//MBulYqyB/nF4ryjWnF8JDlKJ8eLE/RUSfnwiq4=
 k8s.io/csi-translation-lib v0.0.0-20190805144531-3985229e1802/go.mod h1:WZWsyiXyvB8YDkJbQ2o7MWxl8QXg6XMvfX2+NfV/otY=
@@ -389,26 +386,19 @@
 k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM=
 k8s.io/klog v0.3.1 h1:RVgyDHY/kFKtLqh67NvEWIgkMneNoIrdkN0CxDSQc68=
 k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/kube-aggregator v0.0.0-20190805142416-fd821fbbb94e h1:QcOmBYs8GHtTfEBEbjov8/wr6+vvRv4VYTxGRF4CZFc=
 k8s.io/kube-aggregator v0.0.0-20190805142416-fd821fbbb94e/go.mod h1:CeR9bnF7HDA1LsoCd62doStyCAcWGT2BLuz6arA7FM4=
 k8s.io/kube-controller-manager v0.0.0-20190805144128-269742da31dd h1:Enwjw75g5H60/j1Ov5az3PcynqcyMTk/aVqQyFlLEMw=
 k8s.io/kube-controller-manager v0.0.0-20190805144128-269742da31dd/go.mod h1:spJVyiWbnjJmny8JcC1zS+CDsnoR6fvt7wKKG+vPCrg=
 k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30 h1:TRb4wNWoBVrH9plmkp2q86FIDppkbrEXdXlxU3a3BMI=
 k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc=
-k8s.io/kube-proxy v0.0.0-20190805143734-7f1675b90353 h1:m4B+5B+h+Zy+AK7kJH2u13S/BgNA02WdVkPze7OGrQM=
 k8s.io/kube-proxy v0.0.0-20190805143734-7f1675b90353/go.mod h1:REU8MsRh0E7Bq6LbeWcnelU7MPhcr6w6okq95NvswCs=
-k8s.io/kube-scheduler v0.0.0-20190805144012-2a1ed1f3d8a4 h1:o7hD12s7GIS8FUMmWtCK7Iww32VGrd7tubdKm+RgfS4=
 k8s.io/kube-scheduler v0.0.0-20190805144012-2a1ed1f3d8a4/go.mod h1:JIN72V0gy+lWRlEyk1F5PVARAGZApNsZiFpXWAuqawM=
-k8s.io/kubelet v0.0.0-20190805143852-517ff267f8d1 h1:jPKGNokN8b4ru9HqL+VLb0PQezvko8B+80FZgiZo1Qk=
 k8s.io/kubelet v0.0.0-20190805143852-517ff267f8d1/go.mod h1:xFCK3b5WIEViwd//lUcnLXundamh1B64yiIGgkW9TD0=
-k8s.io/kubernetes v1.15.2 h1:RO9EuRw5vlN3oa/lnmPxmywOoJRtg9o40KcklHXNIAQ=
+k8s.io/kubernetes v1.15.2 h1:fdavQqsXQHeqiejKV0LYgp0zdOX2ExbHo7745FHy1N4=
 k8s.io/kubernetes v1.15.2/go.mod h1:3RE5ikMc73WK+dSxk4pQuQ6ZaJcPXiZX2dj98RcdCuM=
-k8s.io/legacy-cloud-providers v0.0.0-20190805144654-3d5bf3a310c1 h1:bzVSMceBFQZ3offHcHVN4NfDuGdk8GVDJSDUsjmUreI=
 k8s.io/legacy-cloud-providers v0.0.0-20190805144654-3d5bf3a310c1/go.mod h1:nqr8H9tPJMAtFWiSk7g5SEQKSzsxKExlgZ1X6jAziPA=
-k8s.io/metrics v0.0.0-20190805143318-16b07057415d h1:x8IEzo1Q3FkhGK9Ti+hom+28zRx5oWad0VUpsgIXTC8=
 k8s.io/metrics v0.0.0-20190805143318-16b07057415d/go.mod h1:bH/65+wgFBMhtyIL8lTvHgfBXNd7lwVv6Xrw3YHVbVw=
 k8s.io/repo-infra v0.0.0-20181204233714-00fe14e3d1a3/go.mod h1:+G1xBfZDfVFsm1Tj/HNCvg4QqWx8rJ2Fxpqr1rqp/gQ=
-k8s.io/sample-apiserver v0.0.0-20190805142637-3b65bc4bb24f h1:9WuxM1OAe37CWzlnmZ0BU9HaBTdQxBzaDvTAqvufFCY=
 k8s.io/sample-apiserver v0.0.0-20190805142637-3b65bc4bb24f/go.mod h1:6eBtUxofjk+EVL6etTnCcg2URVhJbgxwvC85wZYSrBk=
 k8s.io/utils v0.0.0-20190221042446-c2654d5206da h1:ElyM7RPonbKnQqOcw7dG2IK5uvQQn3b/WPHqD5mBvP4=
 k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0=
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/APIDiscoveryService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/APIDiscoveryService.go
index 030f034..e47653c 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/APIDiscoveryService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/APIDiscoveryService.go
@@ -75,6 +75,8 @@
 type Api struct {
 	Description string        `json:"description"`
 	Isasync     bool          `json:"isasync"`
+	JobID       string        `json:"jobid"`
+	Jobstatus   int           `json:"jobstatus"`
 	Name        string        `json:"name"`
 	Params      []ApiParams   `json:"params"`
 	Related     string        `json:"related"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/AccountService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/AccountService.go
index ef82b76..2eb5585 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/AccountService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/AccountService.go
@@ -109,8 +109,9 @@
 }
 
 type AddAccountToProjectResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -334,6 +335,8 @@
 	Iptotal                   int64                       `json:"iptotal"`
 	Iscleanuprequired         bool                        `json:"iscleanuprequired"`
 	Isdefault                 bool                        `json:"isdefault"`
+	JobID                     string                      `json:"jobid"`
+	Jobstatus                 int                         `json:"jobstatus"`
 	Memoryavailable           string                      `json:"memoryavailable"`
 	Memorylimit               string                      `json:"memorylimit"`
 	Memorytotal               int64                       `json:"memorytotal"`
@@ -464,8 +467,9 @@
 }
 
 type DeleteAccountResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -544,8 +548,9 @@
 }
 
 type DeleteAccountFromProjectResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -651,7 +656,6 @@
 }
 
 type DisableAccountResponse struct {
-	JobID                     string                       `json:"jobid"`
 	Accountdetails            map[string]string            `json:"accountdetails"`
 	Accounttype               int                          `json:"accounttype"`
 	Cpuavailable              string                       `json:"cpuavailable"`
@@ -667,6 +671,8 @@
 	Iptotal                   int64                        `json:"iptotal"`
 	Iscleanuprequired         bool                         `json:"iscleanuprequired"`
 	Isdefault                 bool                         `json:"isdefault"`
+	JobID                     string                       `json:"jobid"`
+	Jobstatus                 int                          `json:"jobstatus"`
 	Memoryavailable           string                       `json:"memoryavailable"`
 	Memorylimit               string                       `json:"memorylimit"`
 	Memorytotal               int64                        `json:"memorytotal"`
@@ -818,6 +824,8 @@
 	Iptotal                   int64                       `json:"iptotal"`
 	Iscleanuprequired         bool                        `json:"iscleanuprequired"`
 	Isdefault                 bool                        `json:"isdefault"`
+	JobID                     string                      `json:"jobid"`
+	Jobstatus                 int                         `json:"jobstatus"`
 	Memoryavailable           string                      `json:"memoryavailable"`
 	Memorylimit               string                      `json:"memorylimit"`
 	Memorytotal               int64                       `json:"memorytotal"`
@@ -945,7 +953,9 @@
 }
 
 type GetSolidFireAccountIdResponse struct {
-	SolidFireAccountId int64 `json:"solidFireAccountId"`
+	JobID              string `json:"jobid"`
+	Jobstatus          int    `json:"jobstatus"`
+	SolidFireAccountId int64  `json:"solidFireAccountId"`
 }
 
 type ListAccountsParams struct {
@@ -1214,6 +1224,8 @@
 	Iptotal                   int64             `json:"iptotal"`
 	Iscleanuprequired         bool              `json:"iscleanuprequired"`
 	Isdefault                 bool              `json:"isdefault"`
+	JobID                     string            `json:"jobid"`
+	Jobstatus                 int               `json:"jobstatus"`
 	Memoryavailable           string            `json:"memoryavailable"`
 	Memorylimit               string            `json:"memorylimit"`
 	Memorytotal               int64             `json:"memorytotal"`
@@ -1439,6 +1451,8 @@
 	Ipavailable               string  `json:"ipavailable"`
 	Iplimit                   string  `json:"iplimit"`
 	Iptotal                   int64   `json:"iptotal"`
+	JobID                     string  `json:"jobid"`
+	Jobstatus                 int     `json:"jobstatus"`
 	Memoryavailable           string  `json:"memoryavailable"`
 	Memorylimit               string  `json:"memorylimit"`
 	Memorytotal               int64   `json:"memorytotal"`
@@ -1562,6 +1576,8 @@
 	Iptotal                   int64                     `json:"iptotal"`
 	Iscleanuprequired         bool                      `json:"iscleanuprequired"`
 	Isdefault                 bool                      `json:"isdefault"`
+	JobID                     string                    `json:"jobid"`
+	Jobstatus                 int                       `json:"jobstatus"`
 	Memoryavailable           string                    `json:"memoryavailable"`
 	Memorylimit               string                    `json:"memorylimit"`
 	Memorytotal               int64                     `json:"memorytotal"`
@@ -1721,7 +1737,6 @@
 }
 
 type MarkDefaultZoneForAccountResponse struct {
-	JobID                     string                                  `json:"jobid"`
 	Accountdetails            map[string]string                       `json:"accountdetails"`
 	Accounttype               int                                     `json:"accounttype"`
 	Cpuavailable              string                                  `json:"cpuavailable"`
@@ -1737,6 +1752,8 @@
 	Iptotal                   int64                                   `json:"iptotal"`
 	Iscleanuprequired         bool                                    `json:"iscleanuprequired"`
 	Isdefault                 bool                                    `json:"isdefault"`
+	JobID                     string                                  `json:"jobid"`
+	Jobstatus                 int                                     `json:"jobstatus"`
 	Memoryavailable           string                                  `json:"memoryavailable"`
 	Memorylimit               string                                  `json:"memorylimit"`
 	Memorytotal               int64                                   `json:"memorytotal"`
@@ -1836,6 +1853,9 @@
 	if v, found := p.p["newname"]; found {
 		u.Set("newname", v.(string))
 	}
+	if v, found := p.p["roleid"]; found {
+		u.Set("roleid", v.(string))
+	}
 	return u
 }
 
@@ -1887,12 +1907,19 @@
 	return
 }
 
+func (p *UpdateAccountParams) SetRoleid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["roleid"] = v
+	return
+}
+
 // You should always use this function to get a new UpdateAccountParams instance,
 // as then you are sure you have configured all required params
-func (s *AccountService) NewUpdateAccountParams(newname string) *UpdateAccountParams {
+func (s *AccountService) NewUpdateAccountParams() *UpdateAccountParams {
 	p := &UpdateAccountParams{}
 	p.p = make(map[string]interface{})
-	p.p["newname"] = newname
 	return p
 }
 
@@ -1927,6 +1954,8 @@
 	Iptotal                   int64                       `json:"iptotal"`
 	Iscleanuprequired         bool                        `json:"iscleanuprequired"`
 	Isdefault                 bool                        `json:"isdefault"`
+	JobID                     string                      `json:"jobid"`
+	Jobstatus                 int                         `json:"jobstatus"`
 	Memoryavailable           string                      `json:"memoryavailable"`
 	Memorylimit               string                      `json:"memorylimit"`
 	Memorytotal               int64                       `json:"memorytotal"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/AddressService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/AddressService.go
index d0a61fc..ada4797 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/AddressService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/AddressService.go
@@ -146,7 +146,7 @@
 	return p
 }
 
-// Acquires and associates a public IP to an account.
+// Acquires and associates a public IP to an account. Either of the parameters are required, i.e. either zoneId, or networkId, or vpcId
 func (s *AddressService) AssociateIpAddress(p *AssociateIpAddressParams) (*AssociateIpAddressResponse, error) {
 	resp, err := s.cs.newRequest("associateIpAddress", p.toURLValues())
 	if err != nil {
@@ -182,7 +182,6 @@
 }
 
 type AssociateIpAddressResponse struct {
-	JobID                     string `json:"jobid"`
 	Account                   string `json:"account"`
 	Allocated                 string `json:"allocated"`
 	Associatednetworkid       string `json:"associatednetworkid"`
@@ -197,6 +196,8 @@
 	Issourcenat               bool   `json:"issourcenat"`
 	Isstaticnat               bool   `json:"isstaticnat"`
 	Issystem                  bool   `json:"issystem"`
+	JobID                     string `json:"jobid"`
+	Jobstatus                 int    `json:"jobstatus"`
 	Networkid                 string `json:"networkid"`
 	Physicalnetworkid         string `json:"physicalnetworkid"`
 	Project                   string `json:"project"`
@@ -278,8 +279,9 @@
 }
 
 type DisassociateIpAddressResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -639,6 +641,8 @@
 	Issourcenat               bool   `json:"issourcenat"`
 	Isstaticnat               bool   `json:"isstaticnat"`
 	Issystem                  bool   `json:"issystem"`
+	JobID                     string `json:"jobid"`
+	Jobstatus                 int    `json:"jobstatus"`
 	Networkid                 string `json:"networkid"`
 	Physicalnetworkid         string `json:"physicalnetworkid"`
 	Project                   string `json:"project"`
@@ -748,7 +752,6 @@
 }
 
 type UpdateIpAddressResponse struct {
-	JobID                     string `json:"jobid"`
 	Account                   string `json:"account"`
 	Allocated                 string `json:"allocated"`
 	Associatednetworkid       string `json:"associatednetworkid"`
@@ -763,6 +766,8 @@
 	Issourcenat               bool   `json:"issourcenat"`
 	Isstaticnat               bool   `json:"isstaticnat"`
 	Issystem                  bool   `json:"issystem"`
+	JobID                     string `json:"jobid"`
+	Jobstatus                 int    `json:"jobstatus"`
 	Networkid                 string `json:"networkid"`
 	Physicalnetworkid         string `json:"physicalnetworkid"`
 	Project                   string `json:"project"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/AffinityGroupService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/AffinityGroupService.go
index d81b54d..87d28d8 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/AffinityGroupService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/AffinityGroupService.go
@@ -148,12 +148,13 @@
 }
 
 type CreateAffinityGroupResponse struct {
-	JobID             string   `json:"jobid"`
 	Account           string   `json:"account"`
 	Description       string   `json:"description"`
 	Domain            string   `json:"domain"`
 	Domainid          string   `json:"domainid"`
 	Id                string   `json:"id"`
+	JobID             string   `json:"jobid"`
+	Jobstatus         int      `json:"jobstatus"`
 	Name              string   `json:"name"`
 	Project           string   `json:"project"`
 	Projectid         string   `json:"projectid"`
@@ -267,8 +268,9 @@
 }
 
 type DeleteAffinityGroupResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -348,7 +350,9 @@
 }
 
 type AffinityGroupType struct {
-	Type string `json:"type"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Type      string `json:"type"`
 }
 
 type ListAffinityGroupsParams struct {
@@ -624,6 +628,8 @@
 	Domain            string   `json:"domain"`
 	Domainid          string   `json:"domainid"`
 	Id                string   `json:"id"`
+	JobID             string   `json:"jobid"`
+	Jobstatus         int      `json:"jobstatus"`
 	Name              string   `json:"name"`
 	Project           string   `json:"project"`
 	Projectid         string   `json:"projectid"`
@@ -723,7 +729,6 @@
 }
 
 type UpdateVMAffinityGroupResponse struct {
-	JobID                 string                                       `json:"jobid"`
 	Account               string                                       `json:"account"`
 	Affinitygroup         []UpdateVMAffinityGroupResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                          `json:"cpunumber"`
@@ -755,6 +760,8 @@
 	Isodisplaytext        string                                       `json:"isodisplaytext"`
 	Isoid                 string                                       `json:"isoid"`
 	Isoname               string                                       `json:"isoname"`
+	JobID                 string                                       `json:"jobid"`
+	Jobstatus             int                                          `json:"jobstatus"`
 	Keypair               string                                       `json:"keypair"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
@@ -764,7 +771,7 @@
 	Networkkbsread        int64                                        `json:"networkkbsread"`
 	Networkkbswrite       int64                                        `json:"networkkbswrite"`
 	Nic                   []Nic                                        `json:"nic"`
-	Ostypeid              int64                                        `json:"ostypeid"`
+	Ostypeid              string                                       `json:"ostypeid"`
 	Password              string                                       `json:"password"`
 	Passwordenabled       bool                                         `json:"passwordenabled"`
 	Project               string                                       `json:"project"`
@@ -778,6 +785,7 @@
 	Serviceofferingname   string                                       `json:"serviceofferingname"`
 	Servicestate          string                                       `json:"servicestate"`
 	State                 string                                       `json:"state"`
+	Tags                  []Tags                                       `json:"tags"`
 	Templatedisplaytext   string                                       `json:"templatedisplaytext"`
 	Templateid            string                                       `json:"templateid"`
 	Templatename          string                                       `json:"templatename"`
@@ -829,3 +837,30 @@
 	Type              string   `json:"type"`
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
+
+func (r *UpdateVMAffinityGroupResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias UpdateVMAffinityGroupResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/AlertService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/AlertService.go
index e6fb541..8202e96 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/AlertService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/AlertService.go
@@ -106,6 +106,8 @@
 
 type ArchiveAlertsResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -124,6 +126,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias ArchiveAlertsResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -210,6 +220,8 @@
 
 type DeleteAlertsResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -228,6 +240,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteAlertsResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -342,8 +362,9 @@
 }
 
 type GenerateAlertResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -541,6 +562,8 @@
 type Alert struct {
 	Description string `json:"description"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Sent        string `json:"sent"`
 	Type        int    `json:"type"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/AsyncjobService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/AsyncjobService.go
index 93c1fa0..20ad3b0 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/AsyncjobService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/AsyncjobService.go
@@ -158,7 +158,9 @@
 type AsyncJob struct {
 	Accountid       string          `json:"accountid"`
 	Cmd             string          `json:"cmd"`
+	Completed       string          `json:"completed"`
 	Created         string          `json:"created"`
+	JobID           string          `json:"jobid"`
 	Jobinstanceid   string          `json:"jobinstanceid"`
 	Jobinstancetype string          `json:"jobinstancetype"`
 	Jobprocstatus   int             `json:"jobprocstatus"`
@@ -229,7 +231,9 @@
 type QueryAsyncJobResultResponse struct {
 	Accountid       string          `json:"accountid"`
 	Cmd             string          `json:"cmd"`
+	Completed       string          `json:"completed"`
 	Created         string          `json:"created"`
+	JobID           string          `json:"jobid"`
 	Jobinstanceid   string          `json:"jobinstanceid"`
 	Jobinstancetype string          `json:"jobinstancetype"`
 	Jobprocstatus   int             `json:"jobprocstatus"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/AuthenticationService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/AuthenticationService.go
index 7842d04..aa886fe 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/AuthenticationService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/AuthenticationService.go
@@ -108,6 +108,8 @@
 	Account        string `json:"account"`
 	Domainid       string `json:"domainid"`
 	Firstname      string `json:"firstname"`
+	JobID          string `json:"jobid"`
+	Jobstatus      int    `json:"jobstatus"`
 	Lastname       string `json:"lastname"`
 	Registered     string `json:"registered"`
 	Sessionkey     string `json:"sessionkey"`
@@ -156,4 +158,6 @@
 
 type LogoutResponse struct {
 	Description string `json:"description"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/AutoScaleService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/AutoScaleService.go
index fd18f87..ee6d8a0 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/AutoScaleService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/AutoScaleService.go
@@ -130,7 +130,6 @@
 }
 
 type CreateAutoScalePolicyResponse struct {
-	JobID      string   `json:"jobid"`
 	Account    string   `json:"account"`
 	Action     string   `json:"action"`
 	Conditions []string `json:"conditions"`
@@ -138,6 +137,8 @@
 	Domainid   string   `json:"domainid"`
 	Duration   int      `json:"duration"`
 	Id         string   `json:"id"`
+	JobID      string   `json:"jobid"`
+	Jobstatus  int      `json:"jobstatus"`
 	Project    string   `json:"project"`
 	Projectid  string   `json:"projectid"`
 	Quiettime  int      `json:"quiettime"`
@@ -299,13 +300,14 @@
 }
 
 type CreateAutoScaleVmGroupResponse struct {
-	JobID             string   `json:"jobid"`
 	Account           string   `json:"account"`
 	Domain            string   `json:"domain"`
 	Domainid          string   `json:"domainid"`
 	Fordisplay        bool     `json:"fordisplay"`
 	Id                string   `json:"id"`
 	Interval          int      `json:"interval"`
+	JobID             string   `json:"jobid"`
+	Jobstatus         int      `json:"jobstatus"`
 	Lbruleid          string   `json:"lbruleid"`
 	Maxmembers        int      `json:"maxmembers"`
 	Minmembers        int      `json:"minmembers"`
@@ -471,7 +473,6 @@
 }
 
 type CreateAutoScaleVmProfileResponse struct {
-	JobID                string `json:"jobid"`
 	Account              string `json:"account"`
 	Autoscaleuserid      string `json:"autoscaleuserid"`
 	Destroyvmgraceperiod int    `json:"destroyvmgraceperiod"`
@@ -479,6 +480,8 @@
 	Domainid             string `json:"domainid"`
 	Fordisplay           bool   `json:"fordisplay"`
 	Id                   string `json:"id"`
+	JobID                string `json:"jobid"`
+	Jobstatus            int    `json:"jobstatus"`
 	Otherdeployparams    string `json:"otherdeployparams"`
 	Project              string `json:"project"`
 	Projectid            string `json:"projectid"`
@@ -602,12 +605,13 @@
 }
 
 type CreateConditionResponse struct {
-	JobID              string   `json:"jobid"`
 	Account            string   `json:"account"`
 	Counter            []string `json:"counter"`
 	Domain             string   `json:"domain"`
 	Domainid           string   `json:"domainid"`
 	Id                 string   `json:"id"`
+	JobID              string   `json:"jobid"`
+	Jobstatus          int      `json:"jobstatus"`
 	Project            string   `json:"project"`
 	Projectid          string   `json:"projectid"`
 	Relationaloperator string   `json:"relationaloperator"`
@@ -707,12 +711,13 @@
 }
 
 type CreateCounterResponse struct {
-	JobID  string `json:"jobid"`
-	Id     string `json:"id"`
-	Name   string `json:"name"`
-	Source string `json:"source"`
-	Value  string `json:"value"`
-	Zoneid string `json:"zoneid"`
+	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Name      string `json:"name"`
+	Source    string `json:"source"`
+	Value     string `json:"value"`
+	Zoneid    string `json:"zoneid"`
 }
 
 type DeleteAutoScalePolicyParams struct {
@@ -778,8 +783,9 @@
 }
 
 type DeleteAutoScalePolicyResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -846,8 +852,9 @@
 }
 
 type DeleteAutoScaleVmGroupResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -914,8 +921,9 @@
 }
 
 type DeleteAutoScaleVmProfileResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -982,8 +990,9 @@
 }
 
 type DeleteConditionResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1050,8 +1059,9 @@
 }
 
 type DeleteCounterResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1123,13 +1133,14 @@
 }
 
 type DisableAutoScaleVmGroupResponse struct {
-	JobID             string   `json:"jobid"`
 	Account           string   `json:"account"`
 	Domain            string   `json:"domain"`
 	Domainid          string   `json:"domainid"`
 	Fordisplay        bool     `json:"fordisplay"`
 	Id                string   `json:"id"`
 	Interval          int      `json:"interval"`
+	JobID             string   `json:"jobid"`
+	Jobstatus         int      `json:"jobstatus"`
 	Lbruleid          string   `json:"lbruleid"`
 	Maxmembers        int      `json:"maxmembers"`
 	Minmembers        int      `json:"minmembers"`
@@ -1209,13 +1220,14 @@
 }
 
 type EnableAutoScaleVmGroupResponse struct {
-	JobID             string   `json:"jobid"`
 	Account           string   `json:"account"`
 	Domain            string   `json:"domain"`
 	Domainid          string   `json:"domainid"`
 	Fordisplay        bool     `json:"fordisplay"`
 	Id                string   `json:"id"`
 	Interval          int      `json:"interval"`
+	JobID             string   `json:"jobid"`
+	Jobstatus         int      `json:"jobstatus"`
 	Lbruleid          string   `json:"lbruleid"`
 	Maxmembers        int      `json:"maxmembers"`
 	Minmembers        int      `json:"minmembers"`
@@ -1433,6 +1445,8 @@
 	Domainid   string   `json:"domainid"`
 	Duration   int      `json:"duration"`
 	Id         string   `json:"id"`
+	JobID      string   `json:"jobid"`
+	Jobstatus  int      `json:"jobstatus"`
 	Project    string   `json:"project"`
 	Projectid  string   `json:"projectid"`
 	Quiettime  int      `json:"quiettime"`
@@ -1677,6 +1691,8 @@
 	Fordisplay        bool     `json:"fordisplay"`
 	Id                string   `json:"id"`
 	Interval          int      `json:"interval"`
+	JobID             string   `json:"jobid"`
+	Jobstatus         int      `json:"jobstatus"`
 	Lbruleid          string   `json:"lbruleid"`
 	Maxmembers        int      `json:"maxmembers"`
 	Minmembers        int      `json:"minmembers"`
@@ -1928,6 +1944,8 @@
 	Domainid             string `json:"domainid"`
 	Fordisplay           bool   `json:"fordisplay"`
 	Id                   string `json:"id"`
+	JobID                string `json:"jobid"`
+	Jobstatus            int    `json:"jobstatus"`
 	Otherdeployparams    string `json:"otherdeployparams"`
 	Project              string `json:"project"`
 	Projectid            string `json:"projectid"`
@@ -2129,6 +2147,8 @@
 	Domain             string   `json:"domain"`
 	Domainid           string   `json:"domainid"`
 	Id                 string   `json:"id"`
+	JobID              string   `json:"jobid"`
+	Jobstatus          int      `json:"jobstatus"`
 	Project            string   `json:"project"`
 	Projectid          string   `json:"projectid"`
 	Relationaloperator string   `json:"relationaloperator"`
@@ -2328,11 +2348,13 @@
 }
 
 type Counter struct {
-	Id     string `json:"id"`
-	Name   string `json:"name"`
-	Source string `json:"source"`
-	Value  string `json:"value"`
-	Zoneid string `json:"zoneid"`
+	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Name      string `json:"name"`
+	Source    string `json:"source"`
+	Value     string `json:"value"`
+	Zoneid    string `json:"zoneid"`
 }
 
 type UpdateAutoScalePolicyParams struct {
@@ -2439,7 +2461,6 @@
 }
 
 type UpdateAutoScalePolicyResponse struct {
-	JobID      string   `json:"jobid"`
 	Account    string   `json:"account"`
 	Action     string   `json:"action"`
 	Conditions []string `json:"conditions"`
@@ -2447,6 +2468,8 @@
 	Domainid   string   `json:"domainid"`
 	Duration   int      `json:"duration"`
 	Id         string   `json:"id"`
+	JobID      string   `json:"jobid"`
+	Jobstatus  int      `json:"jobstatus"`
 	Project    string   `json:"project"`
 	Projectid  string   `json:"projectid"`
 	Quiettime  int      `json:"quiettime"`
@@ -2603,13 +2626,14 @@
 }
 
 type UpdateAutoScaleVmGroupResponse struct {
-	JobID             string   `json:"jobid"`
 	Account           string   `json:"account"`
 	Domain            string   `json:"domain"`
 	Domainid          string   `json:"domainid"`
 	Fordisplay        bool     `json:"fordisplay"`
 	Id                string   `json:"id"`
 	Interval          int      `json:"interval"`
+	JobID             string   `json:"jobid"`
+	Jobstatus         int      `json:"jobstatus"`
 	Lbruleid          string   `json:"lbruleid"`
 	Maxmembers        int      `json:"maxmembers"`
 	Minmembers        int      `json:"minmembers"`
@@ -2762,7 +2786,6 @@
 }
 
 type UpdateAutoScaleVmProfileResponse struct {
-	JobID                string `json:"jobid"`
 	Account              string `json:"account"`
 	Autoscaleuserid      string `json:"autoscaleuserid"`
 	Destroyvmgraceperiod int    `json:"destroyvmgraceperiod"`
@@ -2770,6 +2793,8 @@
 	Domainid             string `json:"domainid"`
 	Fordisplay           bool   `json:"fordisplay"`
 	Id                   string `json:"id"`
+	JobID                string `json:"jobid"`
+	Jobstatus            int    `json:"jobstatus"`
 	Otherdeployparams    string `json:"otherdeployparams"`
 	Project              string `json:"project"`
 	Projectid            string `json:"projectid"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/BaremetalService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/BaremetalService.go
index 2b8b9f2..41877f4 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/BaremetalService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/BaremetalService.go
@@ -138,9 +138,10 @@
 }
 
 type AddBaremetalDhcpResponse struct {
-	JobID             string `json:"jobid"`
 	Dhcpservertype    string `json:"dhcpservertype"`
 	Id                string `json:"id"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
 	Provider          string `json:"provider"`
 	Url               string `json:"url"`
@@ -285,8 +286,13 @@
 }
 
 type AddBaremetalPxeKickStartServerResponse struct {
-	JobID   string `json:"jobid"`
-	Tftpdir string `json:"tftpdir"`
+	Id                string `json:"id"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
+	Physicalnetworkid string `json:"physicalnetworkid"`
+	Provider          string `json:"provider"`
+	Tftpdir           string `json:"tftpdir"`
+	Url               string `json:"url"`
 }
 
 type AddBaremetalPxePingServerParams struct {
@@ -474,10 +480,15 @@
 }
 
 type AddBaremetalPxePingServerResponse struct {
+	Id                  string `json:"id"`
 	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
+	Physicalnetworkid   string `json:"physicalnetworkid"`
 	Pingdir             string `json:"pingdir"`
 	Pingstorageserverip string `json:"pingstorageserverip"`
+	Provider            string `json:"provider"`
 	Tftpdir             string `json:"tftpdir"`
+	Url                 string `json:"url"`
 }
 
 type AddBaremetalRctParams struct {
@@ -548,9 +559,10 @@
 }
 
 type AddBaremetalRctResponse struct {
-	JobID string `json:"jobid"`
-	Id    string `json:"id"`
-	Url   string `json:"url"`
+	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Url       string `json:"url"`
 }
 
 type DeleteBaremetalRctParams struct {
@@ -616,8 +628,9 @@
 }
 
 type DeleteBaremetalRctResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -734,6 +747,8 @@
 type BaremetalDhcp struct {
 	Dhcpservertype    string `json:"dhcpservertype"`
 	Id                string `json:"id"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
 	Provider          string `json:"provider"`
 	Url               string `json:"url"`
@@ -840,6 +855,8 @@
 
 type BaremetalPxeServer struct {
 	Id                string `json:"id"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
 	Provider          string `json:"provider"`
 	Url               string `json:"url"`
@@ -921,8 +938,10 @@
 }
 
 type BaremetalRct struct {
-	Id  string `json:"id"`
-	Url string `json:"url"`
+	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Url       string `json:"url"`
 }
 
 type NotifyBaremetalProvisionDoneParams struct {
@@ -988,7 +1007,8 @@
 }
 
 type NotifyBaremetalProvisionDoneResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/BigSwitchBCFService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/BigSwitchBCFService.go
index e85b207..3b88d52 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/BigSwitchBCFService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/BigSwitchBCFService.go
@@ -139,10 +139,11 @@
 }
 
 type AddBigSwitchBcfDeviceResponse struct {
-	JobID               string `json:"jobid"`
 	Bcfdeviceid         string `json:"bcfdeviceid"`
 	Bigswitchdevicename string `json:"bigswitchdevicename"`
 	Hostname            string `json:"hostname"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Nat                 bool   `json:"nat"`
 	Password            string `json:"password"`
 	Physicalnetworkid   string `json:"physicalnetworkid"`
@@ -213,8 +214,9 @@
 }
 
 type DeleteBigSwitchBcfDeviceResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -319,6 +321,8 @@
 	Bcfdeviceid         string `json:"bcfdeviceid"`
 	Bigswitchdevicename string `json:"bigswitchdevicename"`
 	Hostname            string `json:"hostname"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Nat                 bool   `json:"nat"`
 	Password            string `json:"password"`
 	Physicalnetworkid   string `json:"physicalnetworkid"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/BrocadeVCSService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/BrocadeVCSService.go
index 2974767..a89df33 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/BrocadeVCSService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/BrocadeVCSService.go
@@ -127,9 +127,10 @@
 }
 
 type AddBrocadeVcsDeviceResponse struct {
-	JobID             string `json:"jobid"`
 	Brocadedevicename string `json:"brocadedevicename"`
 	Hostname          string `json:"hostname"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
 	Provider          string `json:"provider"`
 	Vcsdeviceid       string `json:"vcsdeviceid"`
@@ -198,8 +199,9 @@
 }
 
 type DeleteBrocadeVcsDeviceResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -349,6 +351,8 @@
 	Isdefault                   bool                             `json:"isdefault"`
 	Ispersistent                bool                             `json:"ispersistent"`
 	Issystem                    bool                             `json:"issystem"`
+	JobID                       string                           `json:"jobid"`
+	Jobstatus                   int                              `json:"jobstatus"`
 	Name                        string                           `json:"name"`
 	Netmask                     string                           `json:"netmask"`
 	Networkcidr                 string                           `json:"networkcidr"`
@@ -502,6 +506,8 @@
 type BrocadeVcsDevice struct {
 	Brocadedevicename string `json:"brocadedevicename"`
 	Hostname          string `json:"hostname"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
 	Provider          string `json:"provider"`
 	Vcsdeviceid       string `json:"vcsdeviceid"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/CertificateService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/CertificateService.go
index 196b961..46ea6f1 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/CertificateService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/CertificateService.go
@@ -136,6 +136,7 @@
 }
 
 type UploadCustomCertificateResponse struct {
-	JobID   string `json:"jobid"`
-	Message string `json:"message"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Message   string `json:"message"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/CloudIdentifierService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/CloudIdentifierService.go
index 40d70aa..5da8af1 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/CloudIdentifierService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/CloudIdentifierService.go
@@ -70,6 +70,8 @@
 
 type GetCloudIdentifierResponse struct {
 	Cloudidentifier string `json:"cloudidentifier"`
+	JobID           string `json:"jobid"`
+	Jobstatus       int    `json:"jobstatus"`
 	Signature       string `json:"signature"`
 	Userid          string `json:"userid"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ClusterService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ClusterService.go
index 8ad5cfc..9a3c15d 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ClusterService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ClusterService.go
@@ -280,6 +280,8 @@
 	Cpuovercommitratio    string                       `json:"cpuovercommitratio"`
 	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"`
@@ -397,13 +399,14 @@
 }
 
 type DedicateClusterResponse struct {
-	JobID           string `json:"jobid"`
 	Accountid       string `json:"accountid"`
 	Affinitygroupid string `json:"affinitygroupid"`
 	Clusterid       string `json:"clusterid"`
 	Clustername     string `json:"clustername"`
 	Domainid        string `json:"domainid"`
 	Id              string `json:"id"`
+	JobID           string `json:"jobid"`
+	Jobstatus       int    `json:"jobstatus"`
 }
 
 type DeleteClusterParams struct {
@@ -455,6 +458,8 @@
 
 type DeleteClusterResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -473,6 +478,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteClusterResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -545,13 +558,14 @@
 }
 
 type DisableOutOfBandManagementForClusterResponse struct {
-	JobID       string `json:"jobid"`
 	Action      string `json:"action"`
 	Address     string `json:"address"`
 	Description string `json:"description"`
 	Driver      string `json:"driver"`
 	Enabled     bool   `json:"enabled"`
 	Hostid      string `json:"hostid"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Password    string `json:"password"`
 	Port        string `json:"port"`
 	Powerstate  string `json:"powerstate"`
@@ -627,13 +641,14 @@
 }
 
 type EnableOutOfBandManagementForClusterResponse struct {
-	JobID       string `json:"jobid"`
 	Action      string `json:"action"`
 	Address     string `json:"address"`
 	Description string `json:"description"`
 	Driver      string `json:"driver"`
 	Enabled     bool   `json:"enabled"`
 	Hostid      string `json:"hostid"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Password    string `json:"password"`
 	Port        string `json:"port"`
 	Powerstate  string `json:"powerstate"`
@@ -906,6 +921,8 @@
 	Cpuovercommitratio    string            `json:"cpuovercommitratio"`
 	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"`
@@ -1058,6 +1075,8 @@
 	Clustername     string `json:"clustername"`
 	Domainid        string `json:"domainid"`
 	Id              string `json:"id"`
+	JobID           string `json:"jobid"`
+	Jobstatus       int    `json:"jobstatus"`
 }
 
 type ReleaseDedicatedClusterParams struct {
@@ -1123,8 +1142,9 @@
 }
 
 type ReleaseDedicatedClusterResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1237,6 +1257,8 @@
 	Cpuovercommitratio    string                          `json:"cpuovercommitratio"`
 	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"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ConfigurationService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ConfigurationService.go
index 2f87a3c..93f8d2f 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ConfigurationService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ConfigurationService.go
@@ -72,6 +72,8 @@
 	Customdiskofferingmaxsize int64  `json:"customdiskofferingmaxsize"`
 	Customdiskofferingminsize int64  `json:"customdiskofferingminsize"`
 	Dynamicrolesenabled       bool   `json:"dynamicrolesenabled"`
+	JobID                     string `json:"jobid"`
+	Jobstatus                 int    `json:"jobstatus"`
 	Kvmsnapshotenabled        bool   `json:"kvmsnapshotenabled"`
 	Projectinviterequired     bool   `json:"projectinviterequired"`
 	Regionsecondaryenabled    bool   `json:"regionsecondaryenabled"`
@@ -247,6 +249,8 @@
 	Category    string `json:"category"`
 	Description string `json:"description"`
 	Id          int64  `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Scope       string `json:"scope"`
 	Value       string `json:"value"`
@@ -328,7 +332,9 @@
 }
 
 type DeploymentPlanner struct {
-	Name string `json:"name"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Name      string `json:"name"`
 }
 
 type UpdateConfigurationParams struct {
@@ -459,6 +465,8 @@
 	Category    string `json:"category"`
 	Description string `json:"description"`
 	Id          int64  `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Scope       string `json:"scope"`
 	Value       string `json:"value"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/DiskOfferingService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/DiskOfferingService.go
index 9e529ee..f71d646 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/DiskOfferingService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/DiskOfferingService.go
@@ -37,10 +37,26 @@
 		vv := strconv.FormatInt(v.(int64), 10)
 		u.Set("bytesreadrate", vv)
 	}
+	if v, found := p.p["bytesreadratemax"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("bytesreadratemax", vv)
+	}
+	if v, found := p.p["bytesreadratemaxlength"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("bytesreadratemaxlength", vv)
+	}
 	if v, found := p.p["byteswriterate"]; found {
 		vv := strconv.FormatInt(v.(int64), 10)
 		u.Set("byteswriterate", vv)
 	}
+	if v, found := p.p["byteswriteratemax"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("byteswriteratemax", vv)
+	}
+	if v, found := p.p["byteswriteratemaxlength"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("byteswriteratemaxlength", vv)
+	}
 	if v, found := p.p["customized"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("customized", vv)
@@ -71,10 +87,26 @@
 		vv := strconv.FormatInt(v.(int64), 10)
 		u.Set("iopsreadrate", vv)
 	}
+	if v, found := p.p["iopsreadratemax"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("iopsreadratemax", vv)
+	}
+	if v, found := p.p["iopsreadratemaxlength"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("iopsreadratemaxlength", vv)
+	}
 	if v, found := p.p["iopswriterate"]; found {
 		vv := strconv.FormatInt(v.(int64), 10)
 		u.Set("iopswriterate", vv)
 	}
+	if v, found := p.p["iopswriteratemax"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("iopswriteratemax", vv)
+	}
+	if v, found := p.p["iopswriteratemaxlength"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("iopswriteratemaxlength", vv)
+	}
 	if v, found := p.p["maxiops"]; found {
 		vv := strconv.FormatInt(v.(int64), 10)
 		u.Set("maxiops", vv)
@@ -106,6 +138,22 @@
 	return
 }
 
+func (p *CreateDiskOfferingParams) SetBytesreadratemax(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["bytesreadratemax"] = v
+	return
+}
+
+func (p *CreateDiskOfferingParams) SetBytesreadratemaxlength(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["bytesreadratemaxlength"] = v
+	return
+}
+
 func (p *CreateDiskOfferingParams) SetByteswriterate(v int64) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -114,6 +162,22 @@
 	return
 }
 
+func (p *CreateDiskOfferingParams) SetByteswriteratemax(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["byteswriteratemax"] = v
+	return
+}
+
+func (p *CreateDiskOfferingParams) SetByteswriteratemaxlength(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["byteswriteratemaxlength"] = v
+	return
+}
+
 func (p *CreateDiskOfferingParams) SetCustomized(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -178,6 +242,22 @@
 	return
 }
 
+func (p *CreateDiskOfferingParams) SetIopsreadratemax(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["iopsreadratemax"] = v
+	return
+}
+
+func (p *CreateDiskOfferingParams) SetIopsreadratemaxlength(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["iopsreadratemaxlength"] = v
+	return
+}
+
 func (p *CreateDiskOfferingParams) SetIopswriterate(v int64) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -186,6 +266,22 @@
 	return
 }
 
+func (p *CreateDiskOfferingParams) SetIopswriteratemax(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["iopswriteratemax"] = v
+	return
+}
+
+func (p *CreateDiskOfferingParams) SetIopswriteratemaxlength(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["iopswriteratemaxlength"] = v
+	return
+}
+
 func (p *CreateDiskOfferingParams) SetMaxiops(v int64) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -260,27 +356,37 @@
 }
 
 type CreateDiskOfferingResponse struct {
-	CacheMode                 string `json:"cacheMode"`
-	Created                   string `json:"created"`
-	DiskBytesReadRate         int64  `json:"diskBytesReadRate"`
-	DiskBytesWriteRate        int64  `json:"diskBytesWriteRate"`
-	DiskIopsReadRate          int64  `json:"diskIopsReadRate"`
-	DiskIopsWriteRate         int64  `json:"diskIopsWriteRate"`
-	Disksize                  int64  `json:"disksize"`
-	Displayoffering           bool   `json:"displayoffering"`
-	Displaytext               string `json:"displaytext"`
-	Domain                    string `json:"domain"`
-	Domainid                  string `json:"domainid"`
-	Hypervisorsnapshotreserve int    `json:"hypervisorsnapshotreserve"`
-	Id                        string `json:"id"`
-	Iscustomized              bool   `json:"iscustomized"`
-	Iscustomizediops          bool   `json:"iscustomizediops"`
-	Maxiops                   int64  `json:"maxiops"`
-	Miniops                   int64  `json:"miniops"`
-	Name                      string `json:"name"`
-	Provisioningtype          string `json:"provisioningtype"`
-	Storagetype               string `json:"storagetype"`
-	Tags                      string `json:"tags"`
+	CacheMode                   string `json:"cacheMode"`
+	Created                     string `json:"created"`
+	DiskBytesReadRate           int64  `json:"diskBytesReadRate"`
+	DiskBytesReadRateMax        int64  `json:"diskBytesReadRateMax"`
+	DiskBytesReadRateMaxLength  int64  `json:"diskBytesReadRateMaxLength"`
+	DiskBytesWriteRate          int64  `json:"diskBytesWriteRate"`
+	DiskBytesWriteRateMax       int64  `json:"diskBytesWriteRateMax"`
+	DiskBytesWriteRateMaxLength int64  `json:"diskBytesWriteRateMaxLength"`
+	DiskIopsReadRate            int64  `json:"diskIopsReadRate"`
+	DiskIopsReadRateMax         int64  `json:"diskIopsReadRateMax"`
+	DiskIopsReadRateMaxLength   int64  `json:"diskIopsReadRateMaxLength"`
+	DiskIopsWriteRate           int64  `json:"diskIopsWriteRate"`
+	DiskIopsWriteRateMax        int64  `json:"diskIopsWriteRateMax"`
+	DiskIopsWriteRateMaxLength  int64  `json:"diskIopsWriteRateMaxLength"`
+	Disksize                    int64  `json:"disksize"`
+	Displayoffering             bool   `json:"displayoffering"`
+	Displaytext                 string `json:"displaytext"`
+	Domain                      string `json:"domain"`
+	Domainid                    string `json:"domainid"`
+	Hypervisorsnapshotreserve   int    `json:"hypervisorsnapshotreserve"`
+	Id                          string `json:"id"`
+	Iscustomized                bool   `json:"iscustomized"`
+	Iscustomizediops            bool   `json:"iscustomizediops"`
+	JobID                       string `json:"jobid"`
+	Jobstatus                   int    `json:"jobstatus"`
+	Maxiops                     int64  `json:"maxiops"`
+	Miniops                     int64  `json:"miniops"`
+	Name                        string `json:"name"`
+	Provisioningtype            string `json:"provisioningtype"`
+	Storagetype                 string `json:"storagetype"`
+	Tags                        string `json:"tags"`
 }
 
 type DeleteDiskOfferingParams struct {
@@ -332,6 +438,8 @@
 
 type DeleteDiskOfferingResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -350,6 +458,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteDiskOfferingResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -570,27 +686,37 @@
 }
 
 type DiskOffering struct {
-	CacheMode                 string `json:"cacheMode"`
-	Created                   string `json:"created"`
-	DiskBytesReadRate         int64  `json:"diskBytesReadRate"`
-	DiskBytesWriteRate        int64  `json:"diskBytesWriteRate"`
-	DiskIopsReadRate          int64  `json:"diskIopsReadRate"`
-	DiskIopsWriteRate         int64  `json:"diskIopsWriteRate"`
-	Disksize                  int64  `json:"disksize"`
-	Displayoffering           bool   `json:"displayoffering"`
-	Displaytext               string `json:"displaytext"`
-	Domain                    string `json:"domain"`
-	Domainid                  string `json:"domainid"`
-	Hypervisorsnapshotreserve int    `json:"hypervisorsnapshotreserve"`
-	Id                        string `json:"id"`
-	Iscustomized              bool   `json:"iscustomized"`
-	Iscustomizediops          bool   `json:"iscustomizediops"`
-	Maxiops                   int64  `json:"maxiops"`
-	Miniops                   int64  `json:"miniops"`
-	Name                      string `json:"name"`
-	Provisioningtype          string `json:"provisioningtype"`
-	Storagetype               string `json:"storagetype"`
-	Tags                      string `json:"tags"`
+	CacheMode                   string `json:"cacheMode"`
+	Created                     string `json:"created"`
+	DiskBytesReadRate           int64  `json:"diskBytesReadRate"`
+	DiskBytesReadRateMax        int64  `json:"diskBytesReadRateMax"`
+	DiskBytesReadRateMaxLength  int64  `json:"diskBytesReadRateMaxLength"`
+	DiskBytesWriteRate          int64  `json:"diskBytesWriteRate"`
+	DiskBytesWriteRateMax       int64  `json:"diskBytesWriteRateMax"`
+	DiskBytesWriteRateMaxLength int64  `json:"diskBytesWriteRateMaxLength"`
+	DiskIopsReadRate            int64  `json:"diskIopsReadRate"`
+	DiskIopsReadRateMax         int64  `json:"diskIopsReadRateMax"`
+	DiskIopsReadRateMaxLength   int64  `json:"diskIopsReadRateMaxLength"`
+	DiskIopsWriteRate           int64  `json:"diskIopsWriteRate"`
+	DiskIopsWriteRateMax        int64  `json:"diskIopsWriteRateMax"`
+	DiskIopsWriteRateMaxLength  int64  `json:"diskIopsWriteRateMaxLength"`
+	Disksize                    int64  `json:"disksize"`
+	Displayoffering             bool   `json:"displayoffering"`
+	Displaytext                 string `json:"displaytext"`
+	Domain                      string `json:"domain"`
+	Domainid                    string `json:"domainid"`
+	Hypervisorsnapshotreserve   int    `json:"hypervisorsnapshotreserve"`
+	Id                          string `json:"id"`
+	Iscustomized                bool   `json:"iscustomized"`
+	Iscustomizediops            bool   `json:"iscustomizediops"`
+	JobID                       string `json:"jobid"`
+	Jobstatus                   int    `json:"jobstatus"`
+	Maxiops                     int64  `json:"maxiops"`
+	Miniops                     int64  `json:"miniops"`
+	Name                        string `json:"name"`
+	Provisioningtype            string `json:"provisioningtype"`
+	Storagetype                 string `json:"storagetype"`
+	Tags                        string `json:"tags"`
 }
 
 type UpdateDiskOfferingParams struct {
@@ -687,25 +813,35 @@
 }
 
 type UpdateDiskOfferingResponse struct {
-	CacheMode                 string `json:"cacheMode"`
-	Created                   string `json:"created"`
-	DiskBytesReadRate         int64  `json:"diskBytesReadRate"`
-	DiskBytesWriteRate        int64  `json:"diskBytesWriteRate"`
-	DiskIopsReadRate          int64  `json:"diskIopsReadRate"`
-	DiskIopsWriteRate         int64  `json:"diskIopsWriteRate"`
-	Disksize                  int64  `json:"disksize"`
-	Displayoffering           bool   `json:"displayoffering"`
-	Displaytext               string `json:"displaytext"`
-	Domain                    string `json:"domain"`
-	Domainid                  string `json:"domainid"`
-	Hypervisorsnapshotreserve int    `json:"hypervisorsnapshotreserve"`
-	Id                        string `json:"id"`
-	Iscustomized              bool   `json:"iscustomized"`
-	Iscustomizediops          bool   `json:"iscustomizediops"`
-	Maxiops                   int64  `json:"maxiops"`
-	Miniops                   int64  `json:"miniops"`
-	Name                      string `json:"name"`
-	Provisioningtype          string `json:"provisioningtype"`
-	Storagetype               string `json:"storagetype"`
-	Tags                      string `json:"tags"`
+	CacheMode                   string `json:"cacheMode"`
+	Created                     string `json:"created"`
+	DiskBytesReadRate           int64  `json:"diskBytesReadRate"`
+	DiskBytesReadRateMax        int64  `json:"diskBytesReadRateMax"`
+	DiskBytesReadRateMaxLength  int64  `json:"diskBytesReadRateMaxLength"`
+	DiskBytesWriteRate          int64  `json:"diskBytesWriteRate"`
+	DiskBytesWriteRateMax       int64  `json:"diskBytesWriteRateMax"`
+	DiskBytesWriteRateMaxLength int64  `json:"diskBytesWriteRateMaxLength"`
+	DiskIopsReadRate            int64  `json:"diskIopsReadRate"`
+	DiskIopsReadRateMax         int64  `json:"diskIopsReadRateMax"`
+	DiskIopsReadRateMaxLength   int64  `json:"diskIopsReadRateMaxLength"`
+	DiskIopsWriteRate           int64  `json:"diskIopsWriteRate"`
+	DiskIopsWriteRateMax        int64  `json:"diskIopsWriteRateMax"`
+	DiskIopsWriteRateMaxLength  int64  `json:"diskIopsWriteRateMaxLength"`
+	Disksize                    int64  `json:"disksize"`
+	Displayoffering             bool   `json:"displayoffering"`
+	Displaytext                 string `json:"displaytext"`
+	Domain                      string `json:"domain"`
+	Domainid                    string `json:"domainid"`
+	Hypervisorsnapshotreserve   int    `json:"hypervisorsnapshotreserve"`
+	Id                          string `json:"id"`
+	Iscustomized                bool   `json:"iscustomized"`
+	Iscustomizediops            bool   `json:"iscustomizediops"`
+	JobID                       string `json:"jobid"`
+	Jobstatus                   int    `json:"jobstatus"`
+	Maxiops                     int64  `json:"maxiops"`
+	Miniops                     int64  `json:"miniops"`
+	Name                        string `json:"name"`
+	Provisioningtype            string `json:"provisioningtype"`
+	Storagetype                 string `json:"storagetype"`
+	Tags                        string `json:"tags"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/DomainService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/DomainService.go
index 5aff993..fdf2604 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/DomainService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/DomainService.go
@@ -113,6 +113,8 @@
 	Ipavailable               string  `json:"ipavailable"`
 	Iplimit                   string  `json:"iplimit"`
 	Iptotal                   int64   `json:"iptotal"`
+	JobID                     string  `json:"jobid"`
+	Jobstatus                 int     `json:"jobstatus"`
 	Level                     int     `json:"level"`
 	Memoryavailable           string  `json:"memoryavailable"`
 	Memorylimit               string  `json:"memorylimit"`
@@ -227,8 +229,9 @@
 }
 
 type DeleteDomainResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -445,6 +448,8 @@
 	Ipavailable               string  `json:"ipavailable"`
 	Iplimit                   string  `json:"iplimit"`
 	Iptotal                   int64   `json:"iptotal"`
+	JobID                     string  `json:"jobid"`
+	Jobstatus                 int     `json:"jobstatus"`
 	Level                     int     `json:"level"`
 	Memoryavailable           string  `json:"memoryavailable"`
 	Memorylimit               string  `json:"memorylimit"`
@@ -709,6 +714,8 @@
 	Ipavailable               string  `json:"ipavailable"`
 	Iplimit                   string  `json:"iplimit"`
 	Iptotal                   int64   `json:"iptotal"`
+	JobID                     string  `json:"jobid"`
+	Jobstatus                 int     `json:"jobstatus"`
 	Level                     int     `json:"level"`
 	Memoryavailable           string  `json:"memoryavailable"`
 	Memorylimit               string  `json:"memorylimit"`
@@ -826,6 +833,8 @@
 	Ipavailable               string  `json:"ipavailable"`
 	Iplimit                   string  `json:"iplimit"`
 	Iptotal                   int64   `json:"iptotal"`
+	JobID                     string  `json:"jobid"`
+	Jobstatus                 int     `json:"jobstatus"`
 	Level                     int     `json:"level"`
 	Memoryavailable           string  `json:"memoryavailable"`
 	Memorylimit               string  `json:"memorylimit"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/EventService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/EventService.go
index f1cd41c..243ada4 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/EventService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/EventService.go
@@ -106,6 +106,8 @@
 
 type ArchiveEventsResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -124,6 +126,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias ArchiveEventsResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -210,6 +220,8 @@
 
 type DeleteEventsResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -228,6 +240,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteEventsResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -273,7 +293,9 @@
 }
 
 type EventType struct {
-	Name string `json:"name"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Name      string `json:"name"`
 }
 
 type ListEventsParams struct {
@@ -538,6 +560,8 @@
 	Domain      string `json:"domain"`
 	Domainid    string `json:"domainid"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Level       string `json:"level"`
 	Parentid    string `json:"parentid"`
 	Project     string `json:"project"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/FirewallService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/FirewallService.go
index 4c4f85b..766b774 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/FirewallService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/FirewallService.go
@@ -195,12 +195,13 @@
 }
 
 type AddPaloAltoFirewallResponse struct {
-	JobID             string `json:"jobid"`
 	Fwdevicecapacity  int64  `json:"fwdevicecapacity"`
 	Fwdeviceid        string `json:"fwdeviceid"`
 	Fwdevicename      string `json:"fwdevicename"`
 	Fwdevicestate     string `json:"fwdevicestate"`
 	Ipaddress         string `json:"ipaddress"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Numretries        string `json:"numretries"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
 	Privateinterface  string `json:"privateinterface"`
@@ -299,12 +300,13 @@
 }
 
 type PaloAltoFirewallResponse struct {
-	JobID             string `json:"jobid"`
 	Fwdevicecapacity  int64  `json:"fwdevicecapacity"`
 	Fwdeviceid        string `json:"fwdeviceid"`
 	Fwdevicename      string `json:"fwdevicename"`
 	Fwdevicestate     string `json:"fwdevicestate"`
 	Ipaddress         string `json:"ipaddress"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Numretries        string `json:"numretries"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
 	Privateinterface  string `json:"privateinterface"`
@@ -498,7 +500,6 @@
 }
 
 type CreateEgressFirewallRuleResponse struct {
-	JobID        string `json:"jobid"`
 	Cidrlist     string `json:"cidrlist"`
 	Destcidrlist string `json:"destcidrlist"`
 	Endport      int    `json:"endport"`
@@ -508,6 +509,8 @@
 	Id           string `json:"id"`
 	Ipaddress    string `json:"ipaddress"`
 	Ipaddressid  string `json:"ipaddressid"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Networkid    string `json:"networkid"`
 	Protocol     string `json:"protocol"`
 	Startport    int    `json:"startport"`
@@ -683,7 +686,6 @@
 }
 
 type CreateFirewallRuleResponse struct {
-	JobID        string `json:"jobid"`
 	Cidrlist     string `json:"cidrlist"`
 	Destcidrlist string `json:"destcidrlist"`
 	Endport      int    `json:"endport"`
@@ -693,6 +695,8 @@
 	Id           string `json:"id"`
 	Ipaddress    string `json:"ipaddress"`
 	Ipaddressid  string `json:"ipaddressid"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Networkid    string `json:"networkid"`
 	Protocol     string `json:"protocol"`
 	Startport    int    `json:"startport"`
@@ -905,12 +909,13 @@
 }
 
 type CreatePortForwardingRuleResponse struct {
-	JobID                     string `json:"jobid"`
 	Cidrlist                  string `json:"cidrlist"`
 	Fordisplay                bool   `json:"fordisplay"`
 	Id                        string `json:"id"`
 	Ipaddress                 string `json:"ipaddress"`
 	Ipaddressid               string `json:"ipaddressid"`
+	JobID                     string `json:"jobid"`
+	Jobstatus                 int    `json:"jobstatus"`
 	Networkid                 string `json:"networkid"`
 	Privateendport            string `json:"privateendport"`
 	Privateport               string `json:"privateport"`
@@ -993,8 +998,9 @@
 }
 
 type DeleteEgressFirewallRuleResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1066,8 +1072,9 @@
 }
 
 type DeleteFirewallRuleResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1139,8 +1146,9 @@
 }
 
 type DeletePaloAltoFirewallResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1212,8 +1220,9 @@
 }
 
 type DeletePortForwardingRuleResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1458,6 +1467,8 @@
 	Id           string `json:"id"`
 	Ipaddress    string `json:"ipaddress"`
 	Ipaddressid  string `json:"ipaddressid"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Networkid    string `json:"networkid"`
 	Protocol     string `json:"protocol"`
 	Startport    int    `json:"startport"`
@@ -1706,6 +1717,8 @@
 	Id           string `json:"id"`
 	Ipaddress    string `json:"ipaddress"`
 	Ipaddressid  string `json:"ipaddressid"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Networkid    string `json:"networkid"`
 	Protocol     string `json:"protocol"`
 	Startport    int    `json:"startport"`
@@ -1821,6 +1834,8 @@
 	Fwdevicename      string `json:"fwdevicename"`
 	Fwdevicestate     string `json:"fwdevicestate"`
 	Ipaddress         string `json:"ipaddress"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Numretries        string `json:"numretries"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
 	Privateinterface  string `json:"privateinterface"`
@@ -2071,6 +2086,8 @@
 	Id                        string `json:"id"`
 	Ipaddress                 string `json:"ipaddress"`
 	Ipaddressid               string `json:"ipaddressid"`
+	JobID                     string `json:"jobid"`
+	Jobstatus                 int    `json:"jobstatus"`
 	Networkid                 string `json:"networkid"`
 	Privateendport            string `json:"privateendport"`
 	Privateport               string `json:"privateport"`
@@ -2181,7 +2198,6 @@
 }
 
 type UpdateEgressFirewallRuleResponse struct {
-	JobID        string `json:"jobid"`
 	Cidrlist     string `json:"cidrlist"`
 	Destcidrlist string `json:"destcidrlist"`
 	Endport      int    `json:"endport"`
@@ -2191,6 +2207,8 @@
 	Id           string `json:"id"`
 	Ipaddress    string `json:"ipaddress"`
 	Ipaddressid  string `json:"ipaddressid"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Networkid    string `json:"networkid"`
 	Protocol     string `json:"protocol"`
 	Startport    int    `json:"startport"`
@@ -2294,7 +2312,6 @@
 }
 
 type UpdateFirewallRuleResponse struct {
-	JobID        string `json:"jobid"`
 	Cidrlist     string `json:"cidrlist"`
 	Destcidrlist string `json:"destcidrlist"`
 	Endport      int    `json:"endport"`
@@ -2304,6 +2321,8 @@
 	Id           string `json:"id"`
 	Ipaddress    string `json:"ipaddress"`
 	Ipaddressid  string `json:"ipaddressid"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Networkid    string `json:"networkid"`
 	Protocol     string `json:"protocol"`
 	Startport    int    `json:"startport"`
@@ -2453,12 +2472,13 @@
 }
 
 type UpdatePortForwardingRuleResponse struct {
-	JobID                     string `json:"jobid"`
 	Cidrlist                  string `json:"cidrlist"`
 	Fordisplay                bool   `json:"fordisplay"`
 	Id                        string `json:"id"`
 	Ipaddress                 string `json:"ipaddress"`
 	Ipaddressid               string `json:"ipaddressid"`
+	JobID                     string `json:"jobid"`
+	Jobstatus                 int    `json:"jobstatus"`
 	Networkid                 string `json:"networkid"`
 	Privateendport            string `json:"privateendport"`
 	Privateport               string `json:"privateport"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/GuestOSService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/GuestOSService.go
index 9e6a672..770090a 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/GuestOSService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/GuestOSService.go
@@ -36,7 +36,8 @@
 	if v, found := p.p["details"]; found {
 		i := 0
 		for k, vv := range v.(map[string]string) {
-			u.Set(fmt.Sprintf("details[%d].%s", i, k), vv)
+			u.Set(fmt.Sprintf("details[%d].key", i), k)
+			u.Set(fmt.Sprintf("details[%d].value", i), vv)
 			i++
 		}
 	}
@@ -131,10 +132,11 @@
 }
 
 type AddGuestOsResponse struct {
-	JobID         string `json:"jobid"`
 	Description   string `json:"description"`
 	Id            string `json:"id"`
 	Isuserdefined bool   `json:"isuserdefined"`
+	JobID         string `json:"jobid"`
+	Jobstatus     int    `json:"jobstatus"`
 	Oscategoryid  string `json:"oscategoryid"`
 }
 
@@ -252,16 +254,44 @@
 }
 
 type AddGuestOsMappingResponse struct {
-	JobID               string `json:"jobid"`
 	Hypervisor          string `json:"hypervisor"`
 	Hypervisorversion   string `json:"hypervisorversion"`
 	Id                  string `json:"id"`
 	Isuserdefined       string `json:"isuserdefined"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Osdisplayname       string `json:"osdisplayname"`
 	Osnameforhypervisor string `json:"osnameforhypervisor"`
 	Ostypeid            string `json:"ostypeid"`
 }
 
+func (r *AddGuestOsMappingResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias AddGuestOsMappingResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type ListGuestOsMappingParams struct {
 	p map[string]interface{}
 }
@@ -419,11 +449,40 @@
 	Hypervisorversion   string `json:"hypervisorversion"`
 	Id                  string `json:"id"`
 	Isuserdefined       string `json:"isuserdefined"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Osdisplayname       string `json:"osdisplayname"`
 	Osnameforhypervisor string `json:"osnameforhypervisor"`
 	Ostypeid            string `json:"ostypeid"`
 }
 
+func (r *GuestOsMapping) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias GuestOsMapping
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type ListOsCategoriesParams struct {
 	p map[string]interface{}
 }
@@ -605,8 +664,10 @@
 }
 
 type OsCategory struct {
-	Id   string `json:"id"`
-	Name string `json:"name"`
+	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Name      string `json:"name"`
 }
 
 type ListOsTypesParams struct {
@@ -754,6 +815,8 @@
 	Description   string `json:"description"`
 	Id            string `json:"id"`
 	Isuserdefined bool   `json:"isuserdefined"`
+	JobID         string `json:"jobid"`
+	Jobstatus     int    `json:"jobstatus"`
 	Oscategoryid  string `json:"oscategoryid"`
 }
 
@@ -820,8 +883,9 @@
 }
 
 type RemoveGuestOsResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -888,8 +952,9 @@
 }
 
 type RemoveGuestOsMappingResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -905,7 +970,8 @@
 	if v, found := p.p["details"]; found {
 		i := 0
 		for k, vv := range v.(map[string]string) {
-			u.Set(fmt.Sprintf("details[%d].%s", i, k), vv)
+			u.Set(fmt.Sprintf("details[%d].key", i), k)
+			u.Set(fmt.Sprintf("details[%d].value", i), vv)
 			i++
 		}
 	}
@@ -989,10 +1055,11 @@
 }
 
 type UpdateGuestOsResponse struct {
-	JobID         string `json:"jobid"`
 	Description   string `json:"description"`
 	Id            string `json:"id"`
 	Isuserdefined bool   `json:"isuserdefined"`
+	JobID         string `json:"jobid"`
+	Jobstatus     int    `json:"jobstatus"`
 	Oscategoryid  string `json:"oscategoryid"`
 }
 
@@ -1076,12 +1143,40 @@
 }
 
 type UpdateGuestOsMappingResponse struct {
-	JobID               string `json:"jobid"`
 	Hypervisor          string `json:"hypervisor"`
 	Hypervisorversion   string `json:"hypervisorversion"`
 	Id                  string `json:"id"`
 	Isuserdefined       string `json:"isuserdefined"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Osdisplayname       string `json:"osdisplayname"`
 	Osnameforhypervisor string `json:"osnameforhypervisor"`
 	Ostypeid            string `json:"ostypeid"`
 }
+
+func (r *UpdateGuestOsMappingResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias UpdateGuestOsMappingResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/HostService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/HostService.go
index a5e6f35..7ce06f5 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/HostService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/HostService.go
@@ -216,6 +216,8 @@
 	Id                         string                             `json:"id"`
 	Ipaddress                  string                             `json:"ipaddress"`
 	Islocalstorageactive       bool                               `json:"islocalstorageactive"`
+	JobID                      string                             `json:"jobid"`
+	Jobstatus                  int                                `json:"jobstatus"`
 	Lastannotated              string                             `json:"lastannotated"`
 	Lastpinged                 string                             `json:"lastpinged"`
 	Managementserverid         int64                              `json:"managementserverid"`
@@ -357,8 +359,9 @@
 }
 
 type AddGloboDnsHostResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -543,6 +546,8 @@
 	Id                         string                      `json:"id"`
 	Ipaddress                  string                      `json:"ipaddress"`
 	Islocalstorageactive       bool                        `json:"islocalstorageactive"`
+	JobID                      string                      `json:"jobid"`
+	Jobstatus                  int                         `json:"jobstatus"`
 	Lastannotated              string                      `json:"lastannotated"`
 	Lastpinged                 string                      `json:"lastpinged"`
 	Managementserverid         int64                       `json:"managementserverid"`
@@ -645,6 +650,8 @@
 
 type AddSecondaryStorageResponse struct {
 	Id           string `json:"id"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Name         string `json:"name"`
 	Protocol     string `json:"protocol"`
 	Providername string `json:"providername"`
@@ -722,7 +729,6 @@
 }
 
 type CancelHostMaintenanceResponse struct {
-	JobID                      string                                  `json:"jobid"`
 	Annotation                 string                                  `json:"annotation"`
 	Averageload                int64                                   `json:"averageload"`
 	Capabilities               string                                  `json:"capabilities"`
@@ -751,6 +757,8 @@
 	Id                         string                                  `json:"id"`
 	Ipaddress                  string                                  `json:"ipaddress"`
 	Islocalstorageactive       bool                                    `json:"islocalstorageactive"`
+	JobID                      string                                  `json:"jobid"`
+	Jobstatus                  int                                     `json:"jobstatus"`
 	Lastannotated              string                                  `json:"lastannotated"`
 	Lastpinged                 string                                  `json:"lastpinged"`
 	Managementserverid         int64                                   `json:"managementserverid"`
@@ -884,13 +892,14 @@
 }
 
 type DedicateHostResponse struct {
-	JobID           string `json:"jobid"`
 	Accountid       string `json:"accountid"`
 	Affinitygroupid string `json:"affinitygroupid"`
 	Domainid        string `json:"domainid"`
 	Hostid          string `json:"hostid"`
 	Hostname        string `json:"hostname"`
 	Id              string `json:"id"`
+	JobID           string `json:"jobid"`
+	Jobstatus       int    `json:"jobstatus"`
 }
 
 type DeleteHostParams struct {
@@ -966,6 +975,8 @@
 
 type DeleteHostResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -984,6 +995,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteHostResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -1056,13 +1075,14 @@
 }
 
 type DisableOutOfBandManagementForHostResponse struct {
-	JobID       string `json:"jobid"`
 	Action      string `json:"action"`
 	Address     string `json:"address"`
 	Description string `json:"description"`
 	Driver      string `json:"driver"`
 	Enabled     bool   `json:"enabled"`
 	Hostid      string `json:"hostid"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Password    string `json:"password"`
 	Port        string `json:"port"`
 	Powerstate  string `json:"powerstate"`
@@ -1138,13 +1158,14 @@
 }
 
 type EnableOutOfBandManagementForHostResponse struct {
-	JobID       string `json:"jobid"`
 	Action      string `json:"action"`
 	Address     string `json:"address"`
 	Description string `json:"description"`
 	Driver      string `json:"driver"`
 	Enabled     bool   `json:"enabled"`
 	Hostid      string `json:"hostid"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Password    string `json:"password"`
 	Port        string `json:"port"`
 	Powerstate  string `json:"powerstate"`
@@ -1258,6 +1279,8 @@
 	Id                         string `json:"id"`
 	Ipaddress                  string `json:"ipaddress"`
 	Islocalstorageactive       bool   `json:"islocalstorageactive"`
+	JobID                      string `json:"jobid"`
+	Jobstatus                  int    `json:"jobstatus"`
 	Lastpinged                 string `json:"lastpinged"`
 	Managementserverid         int64  `json:"managementserverid"`
 	Memoryallocated            string `json:"memoryallocated"`
@@ -1408,6 +1431,8 @@
 	Hostid          string `json:"hostid"`
 	Hostname        string `json:"hostname"`
 	Id              string `json:"id"`
+	JobID           string `json:"jobid"`
+	Jobstatus       int    `json:"jobstatus"`
 }
 
 type ListHostTagsParams struct {
@@ -1522,9 +1547,11 @@
 }
 
 type HostTag struct {
-	Hostid int64  `json:"hostid"`
-	Id     string `json:"id"`
-	Name   string `json:"name"`
+	Hostid    int64  `json:"hostid"`
+	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Name      string `json:"name"`
 }
 
 type ListHostsParams struct {
@@ -1871,6 +1898,8 @@
 	Id                         string                      `json:"id"`
 	Ipaddress                  string                      `json:"ipaddress"`
 	Islocalstorageactive       bool                        `json:"islocalstorageactive"`
+	JobID                      string                      `json:"jobid"`
+	Jobstatus                  int                         `json:"jobstatus"`
 	Lastannotated              string                      `json:"lastannotated"`
 	Lastpinged                 string                      `json:"lastpinged"`
 	Managementserverid         int64                       `json:"managementserverid"`
@@ -1981,7 +2010,6 @@
 }
 
 type PrepareHostForMaintenanceResponse struct {
-	JobID                      string                                      `json:"jobid"`
 	Annotation                 string                                      `json:"annotation"`
 	Averageload                int64                                       `json:"averageload"`
 	Capabilities               string                                      `json:"capabilities"`
@@ -2010,6 +2038,8 @@
 	Id                         string                                      `json:"id"`
 	Ipaddress                  string                                      `json:"ipaddress"`
 	Islocalstorageactive       bool                                        `json:"islocalstorageactive"`
+	JobID                      string                                      `json:"jobid"`
+	Jobstatus                  int                                         `json:"jobstatus"`
 	Lastannotated              string                                      `json:"lastannotated"`
 	Lastpinged                 string                                      `json:"lastpinged"`
 	Managementserverid         int64                                       `json:"managementserverid"`
@@ -2120,7 +2150,6 @@
 }
 
 type ReconnectHostResponse struct {
-	JobID                      string                          `json:"jobid"`
 	Annotation                 string                          `json:"annotation"`
 	Averageload                int64                           `json:"averageload"`
 	Capabilities               string                          `json:"capabilities"`
@@ -2149,6 +2178,8 @@
 	Id                         string                          `json:"id"`
 	Ipaddress                  string                          `json:"ipaddress"`
 	Islocalstorageactive       bool                            `json:"islocalstorageactive"`
+	JobID                      string                          `json:"jobid"`
+	Jobstatus                  int                             `json:"jobstatus"`
 	Lastannotated              string                          `json:"lastannotated"`
 	Lastpinged                 string                          `json:"lastpinged"`
 	Managementserverid         int64                           `json:"managementserverid"`
@@ -2254,8 +2285,9 @@
 }
 
 type ReleaseDedicatedHostResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -2322,8 +2354,9 @@
 }
 
 type ReleaseHostReservationResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -2459,6 +2492,8 @@
 	Id                         string                       `json:"id"`
 	Ipaddress                  string                       `json:"ipaddress"`
 	Islocalstorageactive       bool                         `json:"islocalstorageactive"`
+	JobID                      string                       `json:"jobid"`
+	Jobstatus                  int                          `json:"jobstatus"`
 	Lastannotated              string                       `json:"lastannotated"`
 	Lastpinged                 string                       `json:"lastpinged"`
 	Managementserverid         int64                        `json:"managementserverid"`
@@ -2596,6 +2631,8 @@
 
 type UpdateHostPasswordResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -2614,6 +2651,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias UpdateHostPasswordResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/HypervisorService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/HypervisorService.go
index c457b30..5085dbd 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/HypervisorService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/HypervisorService.go
@@ -158,6 +158,8 @@
 	Hypervisor           string `json:"hypervisor"`
 	Hypervisorversion    string `json:"hypervisorversion"`
 	Id                   string `json:"id"`
+	JobID                string `json:"jobid"`
+	Jobstatus            int    `json:"jobstatus"`
 	Maxdatavolumeslimit  int    `json:"maxdatavolumeslimit"`
 	Maxguestslimit       int64  `json:"maxguestslimit"`
 	Maxhostspercluster   int    `json:"maxhostspercluster"`
@@ -217,7 +219,9 @@
 }
 
 type Hypervisor struct {
-	Name string `json:"name"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Name      string `json:"name"`
 }
 
 type UpdateHypervisorCapabilitiesParams struct {
@@ -294,6 +298,8 @@
 	Hypervisor           string `json:"hypervisor"`
 	Hypervisorversion    string `json:"hypervisorversion"`
 	Id                   string `json:"id"`
+	JobID                string `json:"jobid"`
+	Jobstatus            int    `json:"jobstatus"`
 	Maxdatavolumeslimit  int    `json:"maxdatavolumeslimit"`
 	Maxguestslimit       int64  `json:"maxguestslimit"`
 	Maxhostspercluster   int    `json:"maxhostspercluster"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ISOService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ISOService.go
index 96db4bf..9c1c4f8 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ISOService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ISOService.go
@@ -104,7 +104,6 @@
 }
 
 type AttachIsoResponse struct {
-	JobID                 string                           `json:"jobid"`
 	Account               string                           `json:"account"`
 	Affinitygroup         []AttachIsoResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                              `json:"cpunumber"`
@@ -136,6 +135,8 @@
 	Isodisplaytext        string                           `json:"isodisplaytext"`
 	Isoid                 string                           `json:"isoid"`
 	Isoname               string                           `json:"isoname"`
+	JobID                 string                           `json:"jobid"`
+	Jobstatus             int                              `json:"jobstatus"`
 	Keypair               string                           `json:"keypair"`
 	Memory                int                              `json:"memory"`
 	Memoryintfreekbs      int64                            `json:"memoryintfreekbs"`
@@ -145,7 +146,7 @@
 	Networkkbsread        int64                            `json:"networkkbsread"`
 	Networkkbswrite       int64                            `json:"networkkbswrite"`
 	Nic                   []Nic                            `json:"nic"`
-	Ostypeid              int64                            `json:"ostypeid"`
+	Ostypeid              string                           `json:"ostypeid"`
 	Password              string                           `json:"password"`
 	Passwordenabled       bool                             `json:"passwordenabled"`
 	Project               string                           `json:"project"`
@@ -159,6 +160,7 @@
 	Serviceofferingname   string                           `json:"serviceofferingname"`
 	Servicestate          string                           `json:"servicestate"`
 	State                 string                           `json:"state"`
+	Tags                  []Tags                           `json:"tags"`
 	Templatedisplaytext   string                           `json:"templatedisplaytext"`
 	Templateid            string                           `json:"templateid"`
 	Templatename          string                           `json:"templatename"`
@@ -211,6 +213,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *AttachIsoResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias AttachIsoResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type CopyIsoParams struct {
 	p map[string]interface{}
 }
@@ -313,7 +342,6 @@
 }
 
 type CopyIsoResponse struct {
-	JobID                 string            `json:"jobid"`
 	Account               string            `json:"account"`
 	Accountid             string            `json:"accountid"`
 	Bits                  int               `json:"bits"`
@@ -337,6 +365,8 @@
 	Isfeatured            bool              `json:"isfeatured"`
 	Ispublic              bool              `json:"ispublic"`
 	Isready               bool              `json:"isready"`
+	JobID                 string            `json:"jobid"`
+	Jobstatus             int               `json:"jobstatus"`
 	Name                  string            `json:"name"`
 	Ostypeid              string            `json:"ostypeid"`
 	Ostypename            string            `json:"ostypename"`
@@ -346,16 +376,45 @@
 	Project               string            `json:"project"`
 	Projectid             string            `json:"projectid"`
 	Removed               string            `json:"removed"`
+	Requireshvm           bool              `json:"requireshvm"`
 	Size                  int64             `json:"size"`
 	Sourcetemplateid      string            `json:"sourcetemplateid"`
 	Sshkeyenabled         bool              `json:"sshkeyenabled"`
 	Status                string            `json:"status"`
+	Tags                  []Tags            `json:"tags"`
 	Templatetag           string            `json:"templatetag"`
 	Templatetype          string            `json:"templatetype"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
 
+func (r *CopyIsoResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias CopyIsoResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type DeleteIsoParams struct {
 	p map[string]interface{}
 }
@@ -430,8 +489,9 @@
 }
 
 type DeleteIsoResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -503,7 +563,6 @@
 }
 
 type DetachIsoResponse struct {
-	JobID                 string                           `json:"jobid"`
 	Account               string                           `json:"account"`
 	Affinitygroup         []DetachIsoResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                              `json:"cpunumber"`
@@ -535,6 +594,8 @@
 	Isodisplaytext        string                           `json:"isodisplaytext"`
 	Isoid                 string                           `json:"isoid"`
 	Isoname               string                           `json:"isoname"`
+	JobID                 string                           `json:"jobid"`
+	Jobstatus             int                              `json:"jobstatus"`
 	Keypair               string                           `json:"keypair"`
 	Memory                int                              `json:"memory"`
 	Memoryintfreekbs      int64                            `json:"memoryintfreekbs"`
@@ -544,7 +605,7 @@
 	Networkkbsread        int64                            `json:"networkkbsread"`
 	Networkkbswrite       int64                            `json:"networkkbswrite"`
 	Nic                   []Nic                            `json:"nic"`
-	Ostypeid              int64                            `json:"ostypeid"`
+	Ostypeid              string                           `json:"ostypeid"`
 	Password              string                           `json:"password"`
 	Passwordenabled       bool                             `json:"passwordenabled"`
 	Project               string                           `json:"project"`
@@ -558,6 +619,7 @@
 	Serviceofferingname   string                           `json:"serviceofferingname"`
 	Servicestate          string                           `json:"servicestate"`
 	State                 string                           `json:"state"`
+	Tags                  []Tags                           `json:"tags"`
 	Templatedisplaytext   string                           `json:"templatedisplaytext"`
 	Templateid            string                           `json:"templateid"`
 	Templatename          string                           `json:"templatename"`
@@ -610,6 +672,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *DetachIsoResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias DetachIsoResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type ExtractIsoParams struct {
 	p map[string]interface{}
 }
@@ -712,12 +801,13 @@
 }
 
 type ExtractIsoResponse struct {
-	JobID            string `json:"jobid"`
 	Accountid        string `json:"accountid"`
 	Created          string `json:"created"`
 	ExtractId        string `json:"extractId"`
 	ExtractMode      string `json:"extractMode"`
 	Id               string `json:"id"`
+	JobID            string `json:"jobid"`
+	Jobstatus        int    `json:"jobstatus"`
 	Name             string `json:"name"`
 	Resultstring     string `json:"resultstring"`
 	State            string `json:"state"`
@@ -819,6 +909,8 @@
 	Domainid   string   `json:"domainid"`
 	Id         string   `json:"id"`
 	Ispublic   bool     `json:"ispublic"`
+	JobID      string   `json:"jobid"`
+	Jobstatus  int      `json:"jobstatus"`
 	Projectids []string `json:"projectids"`
 }
 
@@ -1182,6 +1274,8 @@
 	Isfeatured            bool              `json:"isfeatured"`
 	Ispublic              bool              `json:"ispublic"`
 	Isready               bool              `json:"isready"`
+	JobID                 string            `json:"jobid"`
+	Jobstatus             int               `json:"jobstatus"`
 	Name                  string            `json:"name"`
 	Ostypeid              string            `json:"ostypeid"`
 	Ostypename            string            `json:"ostypename"`
@@ -1191,16 +1285,45 @@
 	Project               string            `json:"project"`
 	Projectid             string            `json:"projectid"`
 	Removed               string            `json:"removed"`
+	Requireshvm           bool              `json:"requireshvm"`
 	Size                  int64             `json:"size"`
 	Sourcetemplateid      string            `json:"sourcetemplateid"`
 	Sshkeyenabled         bool              `json:"sshkeyenabled"`
 	Status                string            `json:"status"`
+	Tags                  []Tags            `json:"tags"`
 	Templatetag           string            `json:"templatetag"`
 	Templatetype          string            `json:"templatetype"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
 
+func (r *Iso) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias Iso
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type RegisterIsoParams struct {
 	p map[string]interface{}
 }
@@ -1255,6 +1378,10 @@
 	if v, found := p.p["ostypeid"]; found {
 		u.Set("ostypeid", v.(string))
 	}
+	if v, found := p.p["passwordenabled"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("passwordenabled", vv)
+	}
 	if v, found := p.p["projectid"]; found {
 		u.Set("projectid", v.(string))
 	}
@@ -1371,6 +1498,14 @@
 	return
 }
 
+func (p *RegisterIsoParams) SetPasswordenabled(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["passwordenabled"] = v
+	return
+}
+
 func (p *RegisterIsoParams) SetProjectid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1446,6 +1581,8 @@
 	Isfeatured            bool              `json:"isfeatured"`
 	Ispublic              bool              `json:"ispublic"`
 	Isready               bool              `json:"isready"`
+	JobID                 string            `json:"jobid"`
+	Jobstatus             int               `json:"jobstatus"`
 	Name                  string            `json:"name"`
 	Ostypeid              string            `json:"ostypeid"`
 	Ostypename            string            `json:"ostypename"`
@@ -1455,16 +1592,45 @@
 	Project               string            `json:"project"`
 	Projectid             string            `json:"projectid"`
 	Removed               string            `json:"removed"`
+	Requireshvm           bool              `json:"requireshvm"`
 	Size                  int64             `json:"size"`
 	Sourcetemplateid      string            `json:"sourcetemplateid"`
 	Sshkeyenabled         bool              `json:"sshkeyenabled"`
 	Status                string            `json:"status"`
+	Tags                  []Tags            `json:"tags"`
 	Templatetag           string            `json:"templatetag"`
 	Templatetype          string            `json:"templatetype"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
 
+func (r *RegisterIsoResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias RegisterIsoResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type UpdateIsoParams struct {
 	p map[string]interface{}
 }
@@ -1524,6 +1690,10 @@
 		vv := strconv.Itoa(v.(int))
 		u.Set("sortkey", vv)
 	}
+	if v, found := p.p["sshkeyenabled"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("sshkeyenabled", vv)
+	}
 	return u
 }
 
@@ -1631,6 +1801,14 @@
 	return
 }
 
+func (p *UpdateIsoParams) SetSshkeyenabled(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["sshkeyenabled"] = v
+	return
+}
+
 // You should always use this function to get a new UpdateIsoParams instance,
 // as then you are sure you have configured all required params
 func (s *ISOService) NewUpdateIsoParams(id string) *UpdateIsoParams {
@@ -1679,6 +1857,8 @@
 	Isfeatured            bool              `json:"isfeatured"`
 	Ispublic              bool              `json:"ispublic"`
 	Isready               bool              `json:"isready"`
+	JobID                 string            `json:"jobid"`
+	Jobstatus             int               `json:"jobstatus"`
 	Name                  string            `json:"name"`
 	Ostypeid              string            `json:"ostypeid"`
 	Ostypename            string            `json:"ostypename"`
@@ -1688,16 +1868,45 @@
 	Project               string            `json:"project"`
 	Projectid             string            `json:"projectid"`
 	Removed               string            `json:"removed"`
+	Requireshvm           bool              `json:"requireshvm"`
 	Size                  int64             `json:"size"`
 	Sourcetemplateid      string            `json:"sourcetemplateid"`
 	Sshkeyenabled         bool              `json:"sshkeyenabled"`
 	Status                string            `json:"status"`
+	Tags                  []Tags            `json:"tags"`
 	Templatetag           string            `json:"templatetag"`
 	Templatetype          string            `json:"templatetype"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
 
+func (r *UpdateIsoResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias UpdateIsoResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type UpdateIsoPermissionsParams struct {
 	p map[string]interface{}
 }
@@ -1818,6 +2027,8 @@
 
 type UpdateIsoPermissionsResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1836,6 +2047,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias UpdateIsoPermissionsResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ImageStoreService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ImageStoreService.go
index 1f7b7fb..e7fd67b 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ImageStoreService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ImageStoreService.go
@@ -36,7 +36,8 @@
 	if v, found := p.p["details"]; found {
 		i := 0
 		for k, vv := range v.(map[string]string) {
-			u.Set(fmt.Sprintf("details[%d].%s", i, k), vv)
+			u.Set(fmt.Sprintf("details[%d].key", i), k)
+			u.Set(fmt.Sprintf("details[%d].value", i), vv)
 			i++
 		}
 	}
@@ -121,6 +122,8 @@
 
 type AddImageStoreResponse struct {
 	Id           string `json:"id"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Name         string `json:"name"`
 	Protocol     string `json:"protocol"`
 	Providername string `json:"providername"`
@@ -298,6 +301,8 @@
 
 type AddImageStoreS3Response struct {
 	Id           string `json:"id"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Name         string `json:"name"`
 	Protocol     string `json:"protocol"`
 	Providername string `json:"providername"`
@@ -319,7 +324,8 @@
 	if v, found := p.p["details"]; found {
 		i := 0
 		for k, vv := range v.(map[string]string) {
-			u.Set(fmt.Sprintf("details[%d].%s", i, k), vv)
+			u.Set(fmt.Sprintf("details[%d].key", i), k)
+			u.Set(fmt.Sprintf("details[%d].value", i), vv)
 			i++
 		}
 	}
@@ -404,6 +410,8 @@
 
 type CreateSecondaryStagingStoreResponse struct {
 	Id           string `json:"id"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Name         string `json:"name"`
 	Protocol     string `json:"protocol"`
 	Providername string `json:"providername"`
@@ -462,6 +470,8 @@
 
 type DeleteImageStoreResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -480,6 +490,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteImageStoreResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -533,6 +551,8 @@
 
 type DeleteSecondaryStagingStoreResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -551,6 +571,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteSecondaryStagingStoreResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -770,6 +798,8 @@
 
 type ImageStore struct {
 	Id           string `json:"id"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Name         string `json:"name"`
 	Protocol     string `json:"protocol"`
 	Providername string `json:"providername"`
@@ -994,6 +1024,8 @@
 
 type SecondaryStagingStore struct {
 	Id           string `json:"id"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Name         string `json:"name"`
 	Protocol     string `json:"protocol"`
 	Providername string `json:"providername"`
@@ -1015,7 +1047,8 @@
 	if v, found := p.p["details"]; found {
 		i := 0
 		for k, vv := range v.(map[string]string) {
-			u.Set(fmt.Sprintf("details[%d].%s", i, k), vv)
+			u.Set(fmt.Sprintf("details[%d].key", i), k)
+			u.Set(fmt.Sprintf("details[%d].value", i), vv)
 			i++
 		}
 	}
@@ -1089,6 +1122,8 @@
 
 type UpdateCloudToUseObjectStoreResponse struct {
 	Id           string `json:"id"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Name         string `json:"name"`
 	Protocol     string `json:"protocol"`
 	Providername string `json:"providername"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/InternalLBService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/InternalLBService.go
index 64df1cd..d68dde6 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/InternalLBService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/InternalLBService.go
@@ -105,10 +105,11 @@
 }
 
 type InternalLoadBalancerElementResponse struct {
-	JobID   string `json:"jobid"`
-	Enabled bool   `json:"enabled"`
-	Id      string `json:"id"`
-	Nspid   string `json:"nspid"`
+	Enabled   bool   `json:"enabled"`
+	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Nspid     string `json:"nspid"`
 }
 
 type CreateInternalLoadBalancerElementParams struct {
@@ -179,10 +180,11 @@
 }
 
 type CreateInternalLoadBalancerElementResponse struct {
-	JobID   string `json:"jobid"`
-	Enabled bool   `json:"enabled"`
-	Id      string `json:"id"`
-	Nspid   string `json:"nspid"`
+	Enabled   bool   `json:"enabled"`
+	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Nspid     string `json:"nspid"`
 }
 
 type ListInternalLoadBalancerElementsParams struct {
@@ -328,9 +330,11 @@
 }
 
 type InternalLoadBalancerElement struct {
-	Enabled bool   `json:"enabled"`
-	Id      string `json:"id"`
-	Nspid   string `json:"nspid"`
+	Enabled   bool   `json:"enabled"`
+	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Nspid     string `json:"nspid"`
 }
 
 type ListInternalLoadBalancerVMsParams struct {
@@ -668,6 +672,8 @@
 	Ip6dns1             string `json:"ip6dns1"`
 	Ip6dns2             string `json:"ip6dns2"`
 	Isredundantrouter   bool   `json:"isredundantrouter"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Linklocalip         string `json:"linklocalip"`
 	Linklocalmacaddress string `json:"linklocalmacaddress"`
 	Linklocalnetmask    string `json:"linklocalnetmask"`
@@ -765,7 +771,6 @@
 }
 
 type StartInternalLoadBalancerVMResponse struct {
-	JobID               string `json:"jobid"`
 	Account             string `json:"account"`
 	Created             string `json:"created"`
 	Dns1                string `json:"dns1"`
@@ -785,6 +790,8 @@
 	Ip6dns1             string `json:"ip6dns1"`
 	Ip6dns2             string `json:"ip6dns2"`
 	Isredundantrouter   bool   `json:"isredundantrouter"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Linklocalip         string `json:"linklocalip"`
 	Linklocalmacaddress string `json:"linklocalmacaddress"`
 	Linklocalnetmask    string `json:"linklocalnetmask"`
@@ -894,7 +901,6 @@
 }
 
 type StopInternalLoadBalancerVMResponse struct {
-	JobID               string `json:"jobid"`
 	Account             string `json:"account"`
 	Created             string `json:"created"`
 	Dns1                string `json:"dns1"`
@@ -914,6 +920,8 @@
 	Ip6dns1             string `json:"ip6dns1"`
 	Ip6dns2             string `json:"ip6dns2"`
 	Isredundantrouter   bool   `json:"isredundantrouter"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Linklocalip         string `json:"linklocalip"`
 	Linklocalmacaddress string `json:"linklocalmacaddress"`
 	Linklocalnetmask    string `json:"linklocalnetmask"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/LDAPService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/LDAPService.go
index baff790..1ebc024 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/LDAPService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/LDAPService.go
@@ -95,9 +95,11 @@
 }
 
 type AddLdapConfigurationResponse struct {
-	Domainid string `json:"domainid"`
-	Hostname string `json:"hostname"`
-	Port     int    `json:"port"`
+	Domainid  string `json:"domainid"`
+	Hostname  string `json:"hostname"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Port      int    `json:"port"`
 }
 
 type DeleteLdapConfigurationParams struct {
@@ -171,9 +173,11 @@
 }
 
 type DeleteLdapConfigurationResponse struct {
-	Domainid string `json:"domainid"`
-	Hostname string `json:"hostname"`
-	Port     int    `json:"port"`
+	Domainid  string `json:"domainid"`
+	Hostname  string `json:"hostname"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Port      int    `json:"port"`
 }
 
 type ImportLdapUsersParams struct {
@@ -333,6 +337,8 @@
 	Domain    string `json:"domain"`
 	Email     string `json:"email"`
 	Firstname string `json:"firstname"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Lastname  string `json:"lastname"`
 	Principal string `json:"principal"`
 	Username  string `json:"username"`
@@ -490,6 +496,8 @@
 	Binddn      string `json:"binddn"`
 	Bindpass    string `json:"bindpass"`
 	Hostname    string `json:"hostname"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Port        string `json:"port"`
 	Queryfilter string `json:"queryfilter"`
 	Searchbase  string `json:"searchbase"`
@@ -664,6 +672,8 @@
 	Iptotal                   int64                           `json:"iptotal"`
 	Iscleanuprequired         bool                            `json:"iscleanuprequired"`
 	Isdefault                 bool                            `json:"isdefault"`
+	JobID                     string                          `json:"jobid"`
+	Jobstatus                 int                             `json:"jobstatus"`
 	Memoryavailable           string                          `json:"memoryavailable"`
 	Memorylimit               string                          `json:"memorylimit"`
 	Memorytotal               int64                           `json:"memorytotal"`
@@ -770,6 +780,8 @@
 	Binddn      string `json:"binddn"`
 	Bindpass    string `json:"bindpass"`
 	Hostname    string `json:"hostname"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Port        string `json:"port"`
 	Queryfilter string `json:"queryfilter"`
 	Searchbase  string `json:"searchbase"`
@@ -885,6 +897,8 @@
 	Accountid   string `json:"accountid"`
 	Accounttype int    `json:"accounttype"`
 	Domainid    string `json:"domainid"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Ldapdomain  string `json:"ldapdomain"`
 	Name        string `json:"name"`
 	Type        string `json:"type"`
@@ -1000,9 +1014,11 @@
 }
 
 type LdapConfiguration struct {
-	Domainid string `json:"domainid"`
-	Hostname string `json:"hostname"`
-	Port     int    `json:"port"`
+	Domainid  string `json:"domainid"`
+	Hostname  string `json:"hostname"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Port      int    `json:"port"`
 }
 
 type ListLdapUsersParams struct {
@@ -1095,6 +1111,8 @@
 	Domain    string `json:"domain"`
 	Email     string `json:"email"`
 	Firstname string `json:"firstname"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Lastname  string `json:"lastname"`
 	Principal string `json:"principal"`
 	Username  string `json:"username"`
@@ -1186,6 +1204,8 @@
 	Domain    string `json:"domain"`
 	Email     string `json:"email"`
 	Firstname string `json:"firstname"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Lastname  string `json:"lastname"`
 	Principal string `json:"principal"`
 	Username  string `json:"username"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/LimitService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/LimitService.go
index 2351271..7f8c99f 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/LimitService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/LimitService.go
@@ -63,6 +63,8 @@
 	ApiAllowed  int    `json:"apiAllowed"`
 	ApiIssued   int    `json:"apiIssued"`
 	ExpireAfter int64  `json:"expireAfter"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 }
 
 type ListResourceLimitsParams struct {
@@ -236,6 +238,8 @@
 	Account          string `json:"account"`
 	Domain           string `json:"domain"`
 	Domainid         string `json:"domainid"`
+	JobID            string `json:"jobid"`
+	Jobstatus        int    `json:"jobstatus"`
 	Max              int64  `json:"max"`
 	Project          string `json:"project"`
 	Projectid        string `json:"projectid"`
@@ -295,6 +299,8 @@
 	ApiAllowed  int    `json:"apiAllowed"`
 	ApiIssued   int    `json:"apiIssued"`
 	ExpireAfter int64  `json:"expireAfter"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 }
 
 type UpdateResourceCountParams struct {
@@ -382,6 +388,8 @@
 	Account          string `json:"account"`
 	Domain           string `json:"domain"`
 	Domainid         string `json:"domainid"`
+	JobID            string `json:"jobid"`
+	Jobstatus        int    `json:"jobstatus"`
 	Project          string `json:"project"`
 	Projectid        string `json:"projectid"`
 	Resourcecount    int64  `json:"resourcecount"`
@@ -486,6 +494,8 @@
 	Account          string `json:"account"`
 	Domain           string `json:"domain"`
 	Domainid         string `json:"domainid"`
+	JobID            string `json:"jobid"`
+	Jobstatus        int    `json:"jobstatus"`
 	Max              int64  `json:"max"`
 	Project          string `json:"project"`
 	Projectid        string `json:"projectid"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/LoadBalancerService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/LoadBalancerService.go
index e74e3a3..08cf53b 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/LoadBalancerService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/LoadBalancerService.go
@@ -186,12 +186,13 @@
 }
 
 type AddNetscalerLoadBalancerResponse struct {
-	JobID                   string   `json:"jobid"`
 	Gslbprovider            bool     `json:"gslbprovider"`
 	Gslbproviderprivateip   string   `json:"gslbproviderprivateip"`
 	Gslbproviderpublicip    string   `json:"gslbproviderpublicip"`
 	Ipaddress               string   `json:"ipaddress"`
 	Isexclusivegslbprovider bool     `json:"isexclusivegslbprovider"`
+	JobID                   string   `json:"jobid"`
+	Jobstatus               int      `json:"jobstatus"`
 	Lbdevicecapacity        int64    `json:"lbdevicecapacity"`
 	Lbdevicededicated       bool     `json:"lbdevicededicated"`
 	Lbdeviceid              string   `json:"lbdeviceid"`
@@ -279,8 +280,9 @@
 }
 
 type AssignCertToLoadBalancerResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -376,8 +378,9 @@
 }
 
 type AssignToGlobalLoadBalancerRuleResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -472,8 +475,9 @@
 }
 
 type AssignToLoadBalancerRuleResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -593,12 +597,13 @@
 }
 
 type NetscalerLoadBalancerResponse struct {
-	JobID                   string   `json:"jobid"`
 	Gslbprovider            bool     `json:"gslbprovider"`
 	Gslbproviderprivateip   string   `json:"gslbproviderprivateip"`
 	Gslbproviderpublicip    string   `json:"gslbproviderpublicip"`
 	Ipaddress               string   `json:"ipaddress"`
 	Isexclusivegslbprovider bool     `json:"isexclusivegslbprovider"`
+	JobID                   string   `json:"jobid"`
+	Jobstatus               int      `json:"jobstatus"`
 	Lbdevicecapacity        int64    `json:"lbdevicecapacity"`
 	Lbdevicededicated       bool     `json:"lbdevicededicated"`
 	Lbdeviceid              string   `json:"lbdeviceid"`
@@ -771,7 +776,6 @@
 }
 
 type CreateGlobalLoadBalancerRuleResponse struct {
-	JobID                       string                                                 `json:"jobid"`
 	Account                     string                                                 `json:"account"`
 	Description                 string                                                 `json:"description"`
 	Domain                      string                                                 `json:"domain"`
@@ -781,6 +785,8 @@
 	Gslbservicetype             string                                                 `json:"gslbservicetype"`
 	Gslbstickysessionmethodname string                                                 `json:"gslbstickysessionmethodname"`
 	Id                          string                                                 `json:"id"`
+	JobID                       string                                                 `json:"jobid"`
+	Jobstatus                   int                                                    `json:"jobstatus"`
 	Loadbalancerrule            []CreateGlobalLoadBalancerRuleResponseLoadbalancerrule `json:"loadbalancerrule"`
 	Name                        string                                                 `json:"name"`
 	Project                     string                                                 `json:"project"`
@@ -962,11 +968,12 @@
 }
 
 type CreateLBHealthCheckPolicyResponse struct {
-	JobID             string                                               `json:"jobid"`
 	Account           string                                               `json:"account"`
 	Domain            string                                               `json:"domain"`
 	Domainid          string                                               `json:"domainid"`
 	Healthcheckpolicy []CreateLBHealthCheckPolicyResponseHealthcheckpolicy `json:"healthcheckpolicy"`
+	JobID             string                                               `json:"jobid"`
+	Jobstatus         int                                                  `json:"jobstatus"`
 	Lbruleid          string                                               `json:"lbruleid"`
 	Zoneid            string                                               `json:"zoneid"`
 }
@@ -1114,11 +1121,12 @@
 }
 
 type CreateLBStickinessPolicyResponse struct {
-	JobID            string                                             `json:"jobid"`
 	Account          string                                             `json:"account"`
 	Description      string                                             `json:"description"`
 	Domain           string                                             `json:"domain"`
 	Domainid         string                                             `json:"domainid"`
+	JobID            string                                             `json:"jobid"`
+	Jobstatus        int                                                `json:"jobstatus"`
 	Lbruleid         string                                             `json:"lbruleid"`
 	Name             string                                             `json:"name"`
 	State            string                                             `json:"state"`
@@ -1312,7 +1320,6 @@
 }
 
 type CreateLoadBalancerResponse struct {
-	JobID                    string                                           `json:"jobid"`
 	Account                  string                                           `json:"account"`
 	Algorithm                string                                           `json:"algorithm"`
 	Description              string                                           `json:"description"`
@@ -1320,6 +1327,8 @@
 	Domainid                 string                                           `json:"domainid"`
 	Fordisplay               bool                                             `json:"fordisplay"`
 	Id                       string                                           `json:"id"`
+	JobID                    string                                           `json:"jobid"`
+	Jobstatus                int                                              `json:"jobstatus"`
 	Loadbalancerinstance     []CreateLoadBalancerResponseLoadbalancerinstance `json:"loadbalancerinstance"`
 	Loadbalancerrule         []CreateLoadBalancerResponseLoadbalancerrule     `json:"loadbalancerrule"`
 	Name                     string                                           `json:"name"`
@@ -1563,7 +1572,6 @@
 }
 
 type CreateLoadBalancerRuleResponse struct {
-	JobID       string `json:"jobid"`
 	Account     string `json:"account"`
 	Algorithm   string `json:"algorithm"`
 	Cidrlist    string `json:"cidrlist"`
@@ -1572,6 +1580,8 @@
 	Domainid    string `json:"domainid"`
 	Fordisplay  bool   `json:"fordisplay"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Networkid   string `json:"networkid"`
 	Privateport string `json:"privateport"`
@@ -1650,8 +1660,9 @@
 }
 
 type DeleteGlobalLoadBalancerRuleResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1718,8 +1729,9 @@
 }
 
 type DeleteLBHealthCheckPolicyResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1786,8 +1798,9 @@
 }
 
 type DeleteLBStickinessPolicyResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1854,8 +1867,9 @@
 }
 
 type DeleteLoadBalancerResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1922,8 +1936,9 @@
 }
 
 type DeleteLoadBalancerRuleResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1990,8 +2005,9 @@
 }
 
 type DeleteNetscalerLoadBalancerResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -2044,6 +2060,8 @@
 
 type DeleteSslCertResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -2062,6 +2080,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteSslCertResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -2330,6 +2356,8 @@
 	Gslbservicetype             string                                   `json:"gslbservicetype"`
 	Gslbstickysessionmethodname string                                   `json:"gslbstickysessionmethodname"`
 	Id                          string                                   `json:"id"`
+	JobID                       string                                   `json:"jobid"`
+	Jobstatus                   int                                      `json:"jobstatus"`
 	Loadbalancerrule            []GlobalLoadBalancerRuleLoadbalancerrule `json:"loadbalancerrule"`
 	Name                        string                                   `json:"name"`
 	Project                     string                                   `json:"project"`
@@ -2508,6 +2536,8 @@
 	Domain            string                                 `json:"domain"`
 	Domainid          string                                 `json:"domainid"`
 	Healthcheckpolicy []LBHealthCheckPolicyHealthcheckpolicy `json:"healthcheckpolicy"`
+	JobID             string                                 `json:"jobid"`
+	Jobstatus         int                                    `json:"jobstatus"`
 	Lbruleid          string                                 `json:"lbruleid"`
 	Zoneid            string                                 `json:"zoneid"`
 }
@@ -2671,6 +2701,8 @@
 	Description      string                               `json:"description"`
 	Domain           string                               `json:"domain"`
 	Domainid         string                               `json:"domainid"`
+	JobID            string                               `json:"jobid"`
+	Jobstatus        int                                  `json:"jobstatus"`
 	Lbruleid         string                               `json:"lbruleid"`
 	Name             string                               `json:"name"`
 	State            string                               `json:"state"`
@@ -2834,6 +2866,8 @@
 }
 
 type LoadBalancerRuleInstance struct {
+	JobID                    string          `json:"jobid"`
+	Jobstatus                int             `json:"jobstatus"`
 	Lbvmipaddresses          []string        `json:"lbvmipaddresses"`
 	Loadbalancerruleinstance *VirtualMachine `json:"loadbalancerruleinstance"`
 }
@@ -3156,6 +3190,8 @@
 	Domainid    string `json:"domainid"`
 	Fordisplay  bool   `json:"fordisplay"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Networkid   string `json:"networkid"`
 	Privateport string `json:"privateport"`
@@ -3488,6 +3524,8 @@
 	Domainid                 string                             `json:"domainid"`
 	Fordisplay               bool                               `json:"fordisplay"`
 	Id                       string                             `json:"id"`
+	JobID                    string                             `json:"jobid"`
+	Jobstatus                int                                `json:"jobstatus"`
 	Loadbalancerinstance     []LoadBalancerLoadbalancerinstance `json:"loadbalancerinstance"`
 	Loadbalancerrule         []LoadBalancerLoadbalancerrule     `json:"loadbalancerrule"`
 	Name                     string                             `json:"name"`
@@ -3615,6 +3653,8 @@
 	Gslbproviderpublicip    string   `json:"gslbproviderpublicip"`
 	Ipaddress               string   `json:"ipaddress"`
 	Isexclusivegslbprovider bool     `json:"isexclusivegslbprovider"`
+	JobID                   string   `json:"jobid"`
+	Jobstatus               int      `json:"jobstatus"`
 	Lbdevicecapacity        int64    `json:"lbdevicecapacity"`
 	Lbdevicededicated       bool     `json:"lbdevicededicated"`
 	Lbdeviceid              string   `json:"lbdeviceid"`
@@ -3719,6 +3759,8 @@
 	Domainid             string   `json:"domainid"`
 	Fingerprint          string   `json:"fingerprint"`
 	Id                   string   `json:"id"`
+	JobID                string   `json:"jobid"`
+	Jobstatus            int      `json:"jobstatus"`
 	Loadbalancerrulelist []string `json:"loadbalancerrulelist"`
 	Name                 string   `json:"name"`
 	Project              string   `json:"project"`
@@ -3788,8 +3830,9 @@
 }
 
 type RemoveCertFromLoadBalancerResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -3869,8 +3912,9 @@
 }
 
 type RemoveFromGlobalLoadBalancerRuleResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -3965,8 +4009,9 @@
 }
 
 type RemoveFromLoadBalancerRuleResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -4071,7 +4116,6 @@
 }
 
 type UpdateGlobalLoadBalancerRuleResponse struct {
-	JobID                       string                                                 `json:"jobid"`
 	Account                     string                                                 `json:"account"`
 	Description                 string                                                 `json:"description"`
 	Domain                      string                                                 `json:"domain"`
@@ -4081,6 +4125,8 @@
 	Gslbservicetype             string                                                 `json:"gslbservicetype"`
 	Gslbstickysessionmethodname string                                                 `json:"gslbstickysessionmethodname"`
 	Id                          string                                                 `json:"id"`
+	JobID                       string                                                 `json:"jobid"`
+	Jobstatus                   int                                                    `json:"jobstatus"`
 	Loadbalancerrule            []UpdateGlobalLoadBalancerRuleResponseLoadbalancerrule `json:"loadbalancerrule"`
 	Name                        string                                                 `json:"name"`
 	Project                     string                                                 `json:"project"`
@@ -4203,11 +4249,12 @@
 }
 
 type UpdateLBHealthCheckPolicyResponse struct {
-	JobID             string                                               `json:"jobid"`
 	Account           string                                               `json:"account"`
 	Domain            string                                               `json:"domain"`
 	Domainid          string                                               `json:"domainid"`
 	Healthcheckpolicy []UpdateLBHealthCheckPolicyResponseHealthcheckpolicy `json:"healthcheckpolicy"`
+	JobID             string                                               `json:"jobid"`
+	Jobstatus         int                                                  `json:"jobstatus"`
 	Lbruleid          string                                               `json:"lbruleid"`
 	Zoneid            string                                               `json:"zoneid"`
 }
@@ -4315,11 +4362,12 @@
 }
 
 type UpdateLBStickinessPolicyResponse struct {
-	JobID            string                                             `json:"jobid"`
 	Account          string                                             `json:"account"`
 	Description      string                                             `json:"description"`
 	Domain           string                                             `json:"domain"`
 	Domainid         string                                             `json:"domainid"`
+	JobID            string                                             `json:"jobid"`
+	Jobstatus        int                                                `json:"jobstatus"`
 	Lbruleid         string                                             `json:"lbruleid"`
 	Name             string                                             `json:"name"`
 	State            string                                             `json:"state"`
@@ -4428,7 +4476,6 @@
 }
 
 type UpdateLoadBalancerResponse struct {
-	JobID                    string                                           `json:"jobid"`
 	Account                  string                                           `json:"account"`
 	Algorithm                string                                           `json:"algorithm"`
 	Description              string                                           `json:"description"`
@@ -4436,6 +4483,8 @@
 	Domainid                 string                                           `json:"domainid"`
 	Fordisplay               bool                                             `json:"fordisplay"`
 	Id                       string                                           `json:"id"`
+	JobID                    string                                           `json:"jobid"`
+	Jobstatus                int                                              `json:"jobstatus"`
 	Loadbalancerinstance     []UpdateLoadBalancerResponseLoadbalancerinstance `json:"loadbalancerinstance"`
 	Loadbalancerrule         []UpdateLoadBalancerResponseLoadbalancerrule     `json:"loadbalancerrule"`
 	Name                     string                                           `json:"name"`
@@ -4595,7 +4644,6 @@
 }
 
 type UpdateLoadBalancerRuleResponse struct {
-	JobID       string `json:"jobid"`
 	Account     string `json:"account"`
 	Algorithm   string `json:"algorithm"`
 	Cidrlist    string `json:"cidrlist"`
@@ -4604,6 +4652,8 @@
 	Domainid    string `json:"domainid"`
 	Fordisplay  bool   `json:"fordisplay"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Networkid   string `json:"networkid"`
 	Privateport string `json:"privateport"`
@@ -4753,6 +4803,8 @@
 	Domainid             string   `json:"domainid"`
 	Fingerprint          string   `json:"fingerprint"`
 	Id                   string   `json:"id"`
+	JobID                string   `json:"jobid"`
+	Jobstatus            int      `json:"jobstatus"`
 	Loadbalancerrulelist []string `json:"loadbalancerrulelist"`
 	Name                 string   `json:"name"`
 	Project              string   `json:"project"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NATService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NATService.go
index 714dfa5..f8c56c6 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NATService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NATService.go
@@ -153,12 +153,13 @@
 }
 
 type CreateIpForwardingRuleResponse struct {
-	JobID                     string `json:"jobid"`
 	Cidrlist                  string `json:"cidrlist"`
 	Fordisplay                bool   `json:"fordisplay"`
 	Id                        string `json:"id"`
 	Ipaddress                 string `json:"ipaddress"`
 	Ipaddressid               string `json:"ipaddressid"`
+	JobID                     string `json:"jobid"`
+	Jobstatus                 int    `json:"jobstatus"`
 	Networkid                 string `json:"networkid"`
 	Privateendport            string `json:"privateendport"`
 	Privateport               string `json:"privateport"`
@@ -236,8 +237,9 @@
 }
 
 type DeleteIpForwardingRuleResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -304,8 +306,9 @@
 }
 
 type DisableStaticNatResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -392,6 +395,8 @@
 
 type EnableStaticNatResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -410,6 +415,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias EnableStaticNatResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -618,6 +631,8 @@
 	Id                        string `json:"id"`
 	Ipaddress                 string `json:"ipaddress"`
 	Ipaddressid               string `json:"ipaddressid"`
+	JobID                     string `json:"jobid"`
+	Jobstatus                 int    `json:"jobstatus"`
 	Networkid                 string `json:"networkid"`
 	Privateendport            string `json:"privateendport"`
 	Privateport               string `json:"privateport"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkACLService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkACLService.go
index 6d0e154..73fc718 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkACLService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkACLService.go
@@ -69,6 +69,9 @@
 	if v, found := p.p["protocol"]; found {
 		u.Set("protocol", v.(string))
 	}
+	if v, found := p.p["reason"]; found {
+		u.Set("reason", v.(string))
+	}
 	if v, found := p.p["startport"]; found {
 		vv := strconv.Itoa(v.(int))
 		u.Set("startport", vv)
@@ -159,6 +162,14 @@
 	return
 }
 
+func (p *CreateNetworkACLParams) SetReason(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["reason"] = v
+	return
+}
+
 func (p *CreateNetworkACLParams) SetStartport(v int) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -220,7 +231,6 @@
 }
 
 type CreateNetworkACLResponse struct {
-	JobID       string `json:"jobid"`
 	Aclid       string `json:"aclid"`
 	Action      string `json:"action"`
 	Cidrlist    string `json:"cidrlist"`
@@ -229,8 +239,11 @@
 	Icmpcode    int    `json:"icmpcode"`
 	Icmptype    int    `json:"icmptype"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Number      int    `json:"number"`
 	Protocol    string `json:"protocol"`
+	Reason      string `json:"reason"`
 	Startport   string `json:"startport"`
 	State       string `json:"state"`
 	Tags        []Tags `json:"tags"`
@@ -340,10 +353,11 @@
 }
 
 type CreateNetworkACLListResponse struct {
-	JobID       string `json:"jobid"`
 	Description string `json:"description"`
 	Fordisplay  bool   `json:"fordisplay"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Vpcid       string `json:"vpcid"`
 }
@@ -411,8 +425,9 @@
 }
 
 type DeleteNetworkACLResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -479,8 +494,9 @@
 }
 
 type DeleteNetworkACLListResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -759,6 +775,8 @@
 	Description string `json:"description"`
 	Fordisplay  bool   `json:"fordisplay"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Vpcid       string `json:"vpcid"`
 }
@@ -1031,8 +1049,11 @@
 	Icmpcode    int    `json:"icmpcode"`
 	Icmptype    int    `json:"icmptype"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Number      int    `json:"number"`
 	Protocol    string `json:"protocol"`
+	Reason      string `json:"reason"`
 	Startport   string `json:"startport"`
 	State       string `json:"state"`
 	Tags        []Tags `json:"tags"`
@@ -1124,8 +1145,9 @@
 }
 
 type ReplaceNetworkACLListResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1171,9 +1193,16 @@
 		vv := strconv.Itoa(v.(int))
 		u.Set("number", vv)
 	}
+	if v, found := p.p["partialupgrade"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("partialupgrade", vv)
+	}
 	if v, found := p.p["protocol"]; found {
 		u.Set("protocol", v.(string))
 	}
+	if v, found := p.p["reason"]; found {
+		u.Set("reason", v.(string))
+	}
 	if v, found := p.p["startport"]; found {
 		vv := strconv.Itoa(v.(int))
 		u.Set("startport", vv)
@@ -1256,6 +1285,14 @@
 	return
 }
 
+func (p *UpdateNetworkACLItemParams) SetPartialupgrade(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["partialupgrade"] = v
+	return
+}
+
 func (p *UpdateNetworkACLItemParams) SetProtocol(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1264,6 +1301,14 @@
 	return
 }
 
+func (p *UpdateNetworkACLItemParams) SetReason(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["reason"] = v
+	return
+}
+
 func (p *UpdateNetworkACLItemParams) SetStartport(v int) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1325,7 +1370,6 @@
 }
 
 type UpdateNetworkACLItemResponse struct {
-	JobID       string `json:"jobid"`
 	Aclid       string `json:"aclid"`
 	Action      string `json:"action"`
 	Cidrlist    string `json:"cidrlist"`
@@ -1334,8 +1378,11 @@
 	Icmpcode    int    `json:"icmpcode"`
 	Icmptype    int    `json:"icmptype"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Number      int    `json:"number"`
 	Protocol    string `json:"protocol"`
+	Reason      string `json:"reason"`
 	Startport   string `json:"startport"`
 	State       string `json:"state"`
 	Tags        []Tags `json:"tags"`
@@ -1354,6 +1401,9 @@
 	if v, found := p.p["customid"]; found {
 		u.Set("customid", v.(string))
 	}
+	if v, found := p.p["description"]; found {
+		u.Set("description", v.(string))
+	}
 	if v, found := p.p["fordisplay"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("fordisplay", vv)
@@ -1361,6 +1411,9 @@
 	if v, found := p.p["id"]; found {
 		u.Set("id", v.(string))
 	}
+	if v, found := p.p["name"]; found {
+		u.Set("name", v.(string))
+	}
 	return u
 }
 
@@ -1372,6 +1425,14 @@
 	return
 }
 
+func (p *UpdateNetworkACLListParams) SetDescription(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["description"] = v
+	return
+}
+
 func (p *UpdateNetworkACLListParams) SetFordisplay(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1388,6 +1449,14 @@
 	return
 }
 
+func (p *UpdateNetworkACLListParams) SetName(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["name"] = v
+	return
+}
+
 // You should always use this function to get a new UpdateNetworkACLListParams instance,
 // as then you are sure you have configured all required params
 func (s *NetworkACLService) NewUpdateNetworkACLListParams(id string) *UpdateNetworkACLListParams {
@@ -1428,7 +1497,8 @@
 }
 
 type UpdateNetworkACLListResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkDeviceService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkDeviceService.go
index cea5a8a..edb6adf 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkDeviceService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkDeviceService.go
@@ -86,7 +86,9 @@
 }
 
 type AddNetworkDeviceResponse struct {
-	Id string `json:"id"`
+	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 }
 
 type DeleteNetworkDeviceParams struct {
@@ -138,6 +140,8 @@
 
 type DeleteNetworkDeviceResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -156,6 +160,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteNetworkDeviceResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -263,5 +275,7 @@
 }
 
 type NetworkDevice struct {
-	Id string `json:"id"`
+	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkOfferingService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkOfferingService.go
index 51ed208..e4f7404 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkOfferingService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkOfferingService.go
@@ -324,6 +324,8 @@
 	Id                       string                                 `json:"id"`
 	Isdefault                bool                                   `json:"isdefault"`
 	Ispersistent             bool                                   `json:"ispersistent"`
+	JobID                    string                                 `json:"jobid"`
+	Jobstatus                int                                    `json:"jobstatus"`
 	Maxconnections           int                                    `json:"maxconnections"`
 	Name                     string                                 `json:"name"`
 	Networkrate              int                                    `json:"networkrate"`
@@ -409,6 +411,8 @@
 
 type DeleteNetworkOfferingResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -427,6 +431,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteNetworkOfferingResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -795,6 +807,8 @@
 	Id                       string                           `json:"id"`
 	Isdefault                bool                             `json:"isdefault"`
 	Ispersistent             bool                             `json:"ispersistent"`
+	JobID                    string                           `json:"jobid"`
+	Jobstatus                int                              `json:"jobstatus"`
 	Maxconnections           int                              `json:"maxconnections"`
 	Name                     string                           `json:"name"`
 	Networkrate              int                              `json:"networkrate"`
@@ -980,6 +994,8 @@
 	Id                       string                                 `json:"id"`
 	Isdefault                bool                                   `json:"isdefault"`
 	Ispersistent             bool                                   `json:"ispersistent"`
+	JobID                    string                                 `json:"jobid"`
+	Jobstatus                int                                    `json:"jobstatus"`
 	Maxconnections           int                                    `json:"maxconnections"`
 	Name                     string                                 `json:"name"`
 	Networkrate              int                                    `json:"networkrate"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkService.go
index aef044e..628aa1f 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NetworkService.go
@@ -127,10 +127,11 @@
 }
 
 type AddNetworkServiceProviderResponse struct {
-	JobID                        string   `json:"jobid"`
 	Canenableindividualservice   bool     `json:"canenableindividualservice"`
 	Destinationphysicalnetworkid string   `json:"destinationphysicalnetworkid"`
 	Id                           string   `json:"id"`
+	JobID                        string   `json:"jobid"`
+	Jobstatus                    int      `json:"jobstatus"`
 	Name                         string   `json:"name"`
 	Physicalnetworkid            string   `json:"physicalnetworkid"`
 	Servicelist                  []string `json:"servicelist"`
@@ -241,8 +242,9 @@
 }
 
 type AddOpenDaylightControllerResponse struct {
-	JobID             string `json:"jobid"`
 	Id                string `json:"id"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Name              string `json:"name"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
 	Url               string `json:"url"`
@@ -603,6 +605,8 @@
 	Isdefault                   bool                           `json:"isdefault"`
 	Ispersistent                bool                           `json:"ispersistent"`
 	Issystem                    bool                           `json:"issystem"`
+	JobID                       string                         `json:"jobid"`
+	Jobstatus                   int                            `json:"jobstatus"`
 	Name                        string                         `json:"name"`
 	Netmask                     string                         `json:"netmask"`
 	Networkcidr                 string                         `json:"networkcidr"`
@@ -804,11 +808,12 @@
 }
 
 type CreatePhysicalNetworkResponse struct {
-	JobID                string `json:"jobid"`
 	Broadcastdomainrange string `json:"broadcastdomainrange"`
 	Domainid             string `json:"domainid"`
 	Id                   string `json:"id"`
 	Isolationmethods     string `json:"isolationmethods"`
+	JobID                string `json:"jobid"`
+	Jobstatus            int    `json:"jobstatus"`
 	Name                 string `json:"name"`
 	Networkspeed         string `json:"networkspeed"`
 	State                string `json:"state"`
@@ -978,12 +983,13 @@
 }
 
 type CreateServiceInstanceResponse struct {
-	JobID       string `json:"jobid"`
 	Account     string `json:"account"`
 	Displayname string `json:"displayname"`
 	Domain      string `json:"domain"`
 	Domainid    string `json:"domainid"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Project     string `json:"project"`
 	Projectid   string `json:"projectid"`
@@ -1116,10 +1122,11 @@
 }
 
 type CreateStorageNetworkIpRangeResponse struct {
-	JobID     string `json:"jobid"`
 	Endip     string `json:"endip"`
 	Gateway   string `json:"gateway"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Netmask   string `json:"netmask"`
 	Networkid string `json:"networkid"`
 	Podid     string `json:"podid"`
@@ -1222,6 +1229,8 @@
 	Id                string `json:"id"`
 	Ip6cidr           string `json:"ip6cidr"`
 	Ip6gateway        string `json:"ip6gateway"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Netmask           string `json:"netmask"`
 	Networkid         string `json:"networkid"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
@@ -1310,8 +1319,9 @@
 }
 
 type DeleteNetworkResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1378,8 +1388,9 @@
 }
 
 type DeleteNetworkServiceProviderResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1451,8 +1462,9 @@
 }
 
 type DeleteOpenDaylightControllerResponse struct {
-	JobID             string `json:"jobid"`
 	Id                string `json:"id"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Name              string `json:"name"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
 	Url               string `json:"url"`
@@ -1522,8 +1534,9 @@
 }
 
 type DeletePhysicalNetworkResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1590,8 +1603,9 @@
 }
 
 type DeleteStorageNetworkIpRangeResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1741,6 +1755,8 @@
 	Isdefault                   bool                                  `json:"isdefault"`
 	Ispersistent                bool                                  `json:"ispersistent"`
 	Issystem                    bool                                  `json:"issystem"`
+	JobID                       string                                `json:"jobid"`
+	Jobstatus                   int                                   `json:"jobstatus"`
 	Name                        string                                `json:"name"`
 	Netmask                     string                                `json:"netmask"`
 	Networkcidr                 string                                `json:"networkcidr"`
@@ -1870,7 +1886,9 @@
 }
 
 type NetworkIsolationMethod struct {
-	Name string `json:"name"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Name      string `json:"name"`
 }
 
 type ListNetworkServiceProvidersParams struct {
@@ -2021,6 +2039,8 @@
 	Canenableindividualservice   bool     `json:"canenableindividualservice"`
 	Destinationphysicalnetworkid string   `json:"destinationphysicalnetworkid"`
 	Id                           string   `json:"id"`
+	JobID                        string   `json:"jobid"`
+	Jobstatus                    int      `json:"jobstatus"`
 	Name                         string   `json:"name"`
 	Physicalnetworkid            string   `json:"physicalnetworkid"`
 	Servicelist                  []string `json:"servicelist"`
@@ -2441,6 +2461,8 @@
 	Isdefault                   bool                     `json:"isdefault"`
 	Ispersistent                bool                     `json:"ispersistent"`
 	Issystem                    bool                     `json:"issystem"`
+	JobID                       string                   `json:"jobid"`
+	Jobstatus                   int                      `json:"jobstatus"`
 	Name                        string                   `json:"name"`
 	Netmask                     string                   `json:"netmask"`
 	Networkcidr                 string                   `json:"networkcidr"`
@@ -2640,6 +2662,8 @@
 	Isdefault                   bool                            `json:"isdefault"`
 	Ispersistent                bool                            `json:"ispersistent"`
 	Issystem                    bool                            `json:"issystem"`
+	JobID                       string                          `json:"jobid"`
+	Jobstatus                   int                             `json:"jobstatus"`
 	Name                        string                          `json:"name"`
 	Netmask                     string                          `json:"netmask"`
 	Networkcidr                 string                          `json:"networkcidr"`
@@ -2790,6 +2814,8 @@
 
 type OpenDaylightController struct {
 	Id                string `json:"id"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Name              string `json:"name"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
 	Url               string `json:"url"`
@@ -2942,6 +2968,8 @@
 	Isdefault                   bool                             `json:"isdefault"`
 	Ispersistent                bool                             `json:"ispersistent"`
 	Issystem                    bool                             `json:"issystem"`
+	JobID                       string                           `json:"jobid"`
+	Jobstatus                   int                              `json:"jobstatus"`
 	Name                        string                           `json:"name"`
 	Netmask                     string                           `json:"netmask"`
 	Networkcidr                 string                           `json:"networkcidr"`
@@ -3191,6 +3219,8 @@
 	Domainid             string `json:"domainid"`
 	Id                   string `json:"id"`
 	Isolationmethods     string `json:"isolationmethods"`
+	JobID                string `json:"jobid"`
+	Jobstatus            int    `json:"jobstatus"`
 	Name                 string `json:"name"`
 	Networkspeed         string `json:"networkspeed"`
 	State                string `json:"state"`
@@ -3344,6 +3374,8 @@
 	Endip     string `json:"endip"`
 	Gateway   string `json:"gateway"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Netmask   string `json:"netmask"`
 	Networkid string `json:"networkid"`
 	Podid     string `json:"podid"`
@@ -3451,6 +3483,8 @@
 
 type SupportedNetworkService struct {
 	Capability []SupportedNetworkServiceCapability `json:"capability"`
+	JobID      string                              `json:"jobid"`
+	Jobstatus  int                                 `json:"jobstatus"`
 	Name       string                              `json:"name"`
 	Provider   []SupportedNetworkServiceProvider   `json:"provider"`
 }
@@ -3520,6 +3554,8 @@
 
 type ReleasePublicIpRangeResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -3538,6 +3574,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias ReleasePublicIpRangeResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -3634,7 +3678,6 @@
 }
 
 type RestartNetworkResponse struct {
-	JobID                     string `json:"jobid"`
 	Account                   string `json:"account"`
 	Allocated                 string `json:"allocated"`
 	Associatednetworkid       string `json:"associatednetworkid"`
@@ -3649,6 +3692,8 @@
 	Issourcenat               bool   `json:"issourcenat"`
 	Isstaticnat               bool   `json:"isstaticnat"`
 	Issystem                  bool   `json:"issystem"`
+	JobID                     string `json:"jobid"`
+	Jobstatus                 int    `json:"jobstatus"`
 	Networkid                 string `json:"networkid"`
 	Physicalnetworkid         string `json:"physicalnetworkid"`
 	Project                   string `json:"project"`
@@ -3849,7 +3894,6 @@
 }
 
 type UpdateNetworkResponse struct {
-	JobID                       string                         `json:"jobid"`
 	Account                     string                         `json:"account"`
 	Aclid                       string                         `json:"aclid"`
 	Acltype                     string                         `json:"acltype"`
@@ -3871,6 +3915,8 @@
 	Isdefault                   bool                           `json:"isdefault"`
 	Ispersistent                bool                           `json:"ispersistent"`
 	Issystem                    bool                           `json:"issystem"`
+	JobID                       string                         `json:"jobid"`
+	Jobstatus                   int                            `json:"jobstatus"`
 	Name                        string                         `json:"name"`
 	Netmask                     string                         `json:"netmask"`
 	Networkcidr                 string                         `json:"networkcidr"`
@@ -4015,10 +4061,11 @@
 }
 
 type UpdateNetworkServiceProviderResponse struct {
-	JobID                        string   `json:"jobid"`
 	Canenableindividualservice   bool     `json:"canenableindividualservice"`
 	Destinationphysicalnetworkid string   `json:"destinationphysicalnetworkid"`
 	Id                           string   `json:"id"`
+	JobID                        string   `json:"jobid"`
+	Jobstatus                    int      `json:"jobstatus"`
 	Name                         string   `json:"name"`
 	Physicalnetworkid            string   `json:"physicalnetworkid"`
 	Servicelist                  []string `json:"servicelist"`
@@ -4138,11 +4185,12 @@
 }
 
 type UpdatePhysicalNetworkResponse struct {
-	JobID                string `json:"jobid"`
 	Broadcastdomainrange string `json:"broadcastdomainrange"`
 	Domainid             string `json:"domainid"`
 	Id                   string `json:"id"`
 	Isolationmethods     string `json:"isolationmethods"`
+	JobID                string `json:"jobid"`
+	Jobstatus            int    `json:"jobstatus"`
 	Name                 string `json:"name"`
 	Networkspeed         string `json:"networkspeed"`
 	State                string `json:"state"`
@@ -4264,10 +4312,11 @@
 }
 
 type UpdateStorageNetworkIpRangeResponse struct {
-	JobID     string `json:"jobid"`
 	Endip     string `json:"endip"`
 	Gateway   string `json:"gateway"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Netmask   string `json:"netmask"`
 	Networkid string `json:"networkid"`
 	Podid     string `json:"podid"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NicService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NicService.go
index 525f1b9..722278a 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NicService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NicService.go
@@ -101,9 +101,10 @@
 }
 
 type AddIpToNicResponse struct {
-	JobID       string `json:"jobid"`
 	Id          string `json:"id"`
 	Ipaddress   string `json:"ipaddress"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Networkid   string `json:"networkid"`
 	Nicid       string `json:"nicid"`
 	Secondaryip []struct {
@@ -246,6 +247,8 @@
 	Ipaddress            string   `json:"ipaddress"`
 	Isdefault            bool     `json:"isdefault"`
 	Isolationuri         string   `json:"isolationuri"`
+	JobID                string   `json:"jobid"`
+	Jobstatus            int      `json:"jobstatus"`
 	Macaddress           string   `json:"macaddress"`
 	Netmask              string   `json:"netmask"`
 	Networkid            string   `json:"networkid"`
@@ -324,8 +327,9 @@
 }
 
 type RemoveIpFromNicResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -408,7 +412,6 @@
 }
 
 type UpdateVmNicIpResponse struct {
-	JobID                 string                               `json:"jobid"`
 	Account               string                               `json:"account"`
 	Affinitygroup         []UpdateVmNicIpResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                  `json:"cpunumber"`
@@ -440,6 +443,8 @@
 	Isodisplaytext        string                               `json:"isodisplaytext"`
 	Isoid                 string                               `json:"isoid"`
 	Isoname               string                               `json:"isoname"`
+	JobID                 string                               `json:"jobid"`
+	Jobstatus             int                                  `json:"jobstatus"`
 	Keypair               string                               `json:"keypair"`
 	Memory                int                                  `json:"memory"`
 	Memoryintfreekbs      int64                                `json:"memoryintfreekbs"`
@@ -449,7 +454,7 @@
 	Networkkbsread        int64                                `json:"networkkbsread"`
 	Networkkbswrite       int64                                `json:"networkkbswrite"`
 	Nic                   []Nic                                `json:"nic"`
-	Ostypeid              int64                                `json:"ostypeid"`
+	Ostypeid              string                               `json:"ostypeid"`
 	Password              string                               `json:"password"`
 	Passwordenabled       bool                                 `json:"passwordenabled"`
 	Project               string                               `json:"project"`
@@ -463,6 +468,7 @@
 	Serviceofferingname   string                               `json:"serviceofferingname"`
 	Servicestate          string                               `json:"servicestate"`
 	State                 string                               `json:"state"`
+	Tags                  []Tags                               `json:"tags"`
 	Templatedisplaytext   string                               `json:"templatedisplaytext"`
 	Templateid            string                               `json:"templateid"`
 	Templatename          string                               `json:"templatename"`
@@ -514,3 +520,30 @@
 	Type              string   `json:"type"`
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
+
+func (r *UpdateVmNicIpResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias UpdateVmNicIpResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NiciraNVPService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NiciraNVPService.go
index ec90845..2caa0d3 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NiciraNVPService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NiciraNVPService.go
@@ -160,8 +160,9 @@
 }
 
 type AddNiciraNvpDeviceResponse struct {
-	JobID                string `json:"jobid"`
 	Hostname             string `json:"hostname"`
+	JobID                string `json:"jobid"`
+	Jobstatus            int    `json:"jobstatus"`
 	L2gatewayserviceuuid string `json:"l2gatewayserviceuuid"`
 	L3gatewayserviceuuid string `json:"l3gatewayserviceuuid"`
 	Niciradevicename     string `json:"niciradevicename"`
@@ -234,8 +235,9 @@
 }
 
 type DeleteNiciraNvpDeviceResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -338,6 +340,8 @@
 
 type NiciraNvpDevice struct {
 	Hostname             string `json:"hostname"`
+	JobID                string `json:"jobid"`
+	Jobstatus            int    `json:"jobstatus"`
 	L2gatewayserviceuuid string `json:"l2gatewayserviceuuid"`
 	L3gatewayserviceuuid string `json:"l3gatewayserviceuuid"`
 	Niciradevicename     string `json:"niciradevicename"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NuageVSPService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NuageVSPService.go
index 31f4df2..975fd29 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/NuageVSPService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/NuageVSPService.go
@@ -174,10 +174,11 @@
 }
 
 type AddNuageVspDeviceResponse struct {
-	JobID             string `json:"jobid"`
 	Apiversion        string `json:"apiversion"`
 	Cmsid             string `json:"cmsid"`
 	Hostname          string `json:"hostname"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Nuagedevicename   string `json:"nuagedevicename"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
 	Port              int    `json:"port"`
@@ -250,8 +251,9 @@
 }
 
 type DeleteNuageVspDeviceResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -356,6 +358,8 @@
 	Apiversion        string `json:"apiversion"`
 	Cmsid             string `json:"cmsid"`
 	Hostname          string `json:"hostname"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Nuagedevicename   string `json:"nuagedevicename"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
 	Port              int    `json:"port"`
@@ -513,10 +517,11 @@
 }
 
 type UpdateNuageVspDeviceResponse struct {
-	JobID             string `json:"jobid"`
 	Apiversion        string `json:"apiversion"`
 	Cmsid             string `json:"cmsid"`
 	Hostname          string `json:"hostname"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Nuagedevicename   string `json:"nuagedevicename"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
 	Port              int    `json:"port"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/OutofbandManagementService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/OutofbandManagementService.go
index eb12c45..72af8ad 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/OutofbandManagementService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/OutofbandManagementService.go
@@ -101,13 +101,14 @@
 }
 
 type ChangeOutOfBandManagementPasswordResponse struct {
-	JobID       string `json:"jobid"`
 	Action      string `json:"action"`
 	Address     string `json:"address"`
 	Description string `json:"description"`
 	Driver      string `json:"driver"`
 	Enabled     bool   `json:"enabled"`
 	Hostid      string `json:"hostid"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Password    string `json:"password"`
 	Port        string `json:"port"`
 	Powerstate  string `json:"powerstate"`
@@ -229,6 +230,8 @@
 	Driver      string `json:"driver"`
 	Enabled     bool   `json:"enabled"`
 	Hostid      string `json:"hostid"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Password    string `json:"password"`
 	Port        string `json:"port"`
 	Powerstate  string `json:"powerstate"`
@@ -328,13 +331,14 @@
 }
 
 type IssueOutOfBandManagementPowerActionResponse struct {
-	JobID       string `json:"jobid"`
 	Action      string `json:"action"`
 	Address     string `json:"address"`
 	Description string `json:"description"`
 	Driver      string `json:"driver"`
 	Enabled     bool   `json:"enabled"`
 	Hostid      string `json:"hostid"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Password    string `json:"password"`
 	Port        string `json:"port"`
 	Powerstate  string `json:"powerstate"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/OvsElementService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/OvsElementService.go
index cd5b22e..5181adc 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/OvsElementService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/OvsElementService.go
@@ -105,12 +105,13 @@
 }
 
 type OvsElementResponse struct {
-	JobID     string `json:"jobid"`
 	Account   string `json:"account"`
 	Domain    string `json:"domain"`
 	Domainid  string `json:"domainid"`
 	Enabled   bool   `json:"enabled"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Nspid     string `json:"nspid"`
 	Project   string `json:"project"`
 	Projectid string `json:"projectid"`
@@ -264,6 +265,8 @@
 	Domainid  string `json:"domainid"`
 	Enabled   bool   `json:"enabled"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Nspid     string `json:"nspid"`
 	Project   string `json:"project"`
 	Projectid string `json:"projectid"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/PodService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/PodService.go
index 377e261..c51139a 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/PodService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/PodService.go
@@ -148,6 +148,8 @@
 	Forsystemvms    []string                    `json:"forsystemvms"`
 	Gateway         string                      `json:"gateway"`
 	Id              string                      `json:"id"`
+	JobID           string                      `json:"jobid"`
+	Jobstatus       int                         `json:"jobstatus"`
 	Name            string                      `json:"name"`
 	Netmask         string                      `json:"netmask"`
 	Startip         []string                    `json:"startip"`
@@ -262,11 +264,12 @@
 }
 
 type DedicatePodResponse struct {
-	JobID           string `json:"jobid"`
 	Accountid       string `json:"accountid"`
 	Affinitygroupid string `json:"affinitygroupid"`
 	Domainid        string `json:"domainid"`
 	Id              string `json:"id"`
+	JobID           string `json:"jobid"`
+	Jobstatus       int    `json:"jobstatus"`
 	Podid           string `json:"podid"`
 	Podname         string `json:"podname"`
 }
@@ -320,6 +323,8 @@
 
 type DeletePodResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -338,6 +343,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeletePodResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -466,6 +479,8 @@
 	Affinitygroupid string `json:"affinitygroupid"`
 	Domainid        string `json:"domainid"`
 	Id              string `json:"id"`
+	JobID           string `json:"jobid"`
+	Jobstatus       int    `json:"jobstatus"`
 	Podid           string `json:"podid"`
 	Podname         string `json:"podname"`
 }
@@ -691,6 +706,8 @@
 	Forsystemvms    []string      `json:"forsystemvms"`
 	Gateway         string        `json:"gateway"`
 	Id              string        `json:"id"`
+	JobID           string        `json:"jobid"`
+	Jobstatus       int           `json:"jobstatus"`
 	Name            string        `json:"name"`
 	Netmask         string        `json:"netmask"`
 	Startip         []string      `json:"startip"`
@@ -777,8 +794,9 @@
 }
 
 type ReleaseDedicatedPodResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -902,6 +920,8 @@
 	Forsystemvms    []string                    `json:"forsystemvms"`
 	Gateway         string                      `json:"gateway"`
 	Id              string                      `json:"id"`
+	JobID           string                      `json:"jobid"`
+	Jobstatus       int                         `json:"jobstatus"`
 	Name            string                      `json:"name"`
 	Netmask         string                      `json:"netmask"`
 	Startip         []string                    `json:"startip"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/PoolService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/PoolService.go
index b235a28..047f766 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/PoolService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/PoolService.go
@@ -224,6 +224,8 @@
 	Hypervisor           string            `json:"hypervisor"`
 	Id                   string            `json:"id"`
 	Ipaddress            string            `json:"ipaddress"`
+	JobID                string            `json:"jobid"`
+	Jobstatus            int               `json:"jobstatus"`
 	Name                 string            `json:"name"`
 	Overprovisionfactor  string            `json:"overprovisionfactor"`
 	Path                 string            `json:"path"`
@@ -301,6 +303,8 @@
 
 type DeleteStoragePoolResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -319,6 +323,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteStoragePoolResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -417,6 +429,8 @@
 	Hypervisor           string            `json:"hypervisor"`
 	Id                   string            `json:"id"`
 	Ipaddress            string            `json:"ipaddress"`
+	JobID                string            `json:"jobid"`
+	Jobstatus            int               `json:"jobstatus"`
 	Name                 string            `json:"name"`
 	Overprovisionfactor  string            `json:"overprovisionfactor"`
 	Path                 string            `json:"path"`
@@ -691,6 +705,8 @@
 	Hypervisor           string            `json:"hypervisor"`
 	Id                   string            `json:"id"`
 	Ipaddress            string            `json:"ipaddress"`
+	JobID                string            `json:"jobid"`
+	Jobstatus            int               `json:"jobstatus"`
 	Name                 string            `json:"name"`
 	Overprovisionfactor  string            `json:"overprovisionfactor"`
 	Path                 string            `json:"path"`
@@ -814,6 +830,8 @@
 	Hypervisor           string            `json:"hypervisor"`
 	Id                   string            `json:"id"`
 	Ipaddress            string            `json:"ipaddress"`
+	JobID                string            `json:"jobid"`
+	Jobstatus            int               `json:"jobstatus"`
 	Name                 string            `json:"name"`
 	Overprovisionfactor  string            `json:"overprovisionfactor"`
 	Path                 string            `json:"path"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/PortableIPService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/PortableIPService.go
index 6a9ddf7..c4f5214 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/PortableIPService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/PortableIPService.go
@@ -152,10 +152,11 @@
 }
 
 type CreatePortableIpRangeResponse struct {
-	JobID             string                                           `json:"jobid"`
 	Endip             string                                           `json:"endip"`
 	Gateway           string                                           `json:"gateway"`
 	Id                string                                           `json:"id"`
+	JobID             string                                           `json:"jobid"`
+	Jobstatus         int                                              `json:"jobstatus"`
 	Netmask           string                                           `json:"netmask"`
 	Portableipaddress []CreatePortableIpRangeResponsePortableipaddress `json:"portableipaddress"`
 	Regionid          int                                              `json:"regionid"`
@@ -239,8 +240,9 @@
 }
 
 type DeletePortableIpRangeResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -379,6 +381,8 @@
 	Endip             string                             `json:"endip"`
 	Gateway           string                             `json:"gateway"`
 	Id                string                             `json:"id"`
+	JobID             string                             `json:"jobid"`
+	Jobstatus         int                                `json:"jobstatus"`
 	Netmask           string                             `json:"netmask"`
 	Portableipaddress []PortableIpRangePortableipaddress `json:"portableipaddress"`
 	Regionid          int                                `json:"regionid"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ProjectService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ProjectService.go
index de767a1..1c666ad 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ProjectService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ProjectService.go
@@ -92,7 +92,6 @@
 }
 
 type ActivateProjectResponse struct {
-	JobID                     string  `json:"jobid"`
 	Account                   string  `json:"account"`
 	Cpuavailable              string  `json:"cpuavailable"`
 	Cpulimit                  string  `json:"cpulimit"`
@@ -104,6 +103,8 @@
 	Ipavailable               string  `json:"ipavailable"`
 	Iplimit                   string  `json:"iplimit"`
 	Iptotal                   int64   `json:"iptotal"`
+	JobID                     string  `json:"jobid"`
+	Jobstatus                 int     `json:"jobstatus"`
 	Memoryavailable           string  `json:"memoryavailable"`
 	Memorylimit               string  `json:"memorylimit"`
 	Memorytotal               int64   `json:"memorytotal"`
@@ -241,7 +242,6 @@
 }
 
 type CreateProjectResponse struct {
-	JobID                     string  `json:"jobid"`
 	Account                   string  `json:"account"`
 	Cpuavailable              string  `json:"cpuavailable"`
 	Cpulimit                  string  `json:"cpulimit"`
@@ -253,6 +253,8 @@
 	Ipavailable               string  `json:"ipavailable"`
 	Iplimit                   string  `json:"iplimit"`
 	Iptotal                   int64   `json:"iptotal"`
+	JobID                     string  `json:"jobid"`
+	Jobstatus                 int     `json:"jobstatus"`
 	Memoryavailable           string  `json:"memoryavailable"`
 	Memorylimit               string  `json:"memorylimit"`
 	Memorytotal               int64   `json:"memorytotal"`
@@ -351,8 +353,9 @@
 }
 
 type DeleteProjectResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -419,8 +422,9 @@
 }
 
 type DeleteProjectInvitationResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -629,6 +633,8 @@
 	Domainid  string `json:"domainid"`
 	Email     string `json:"email"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Project   string `json:"project"`
 	Projectid string `json:"projectid"`
 	State     string `json:"state"`
@@ -910,6 +916,8 @@
 	Ipavailable               string  `json:"ipavailable"`
 	Iplimit                   string  `json:"iplimit"`
 	Iptotal                   int64   `json:"iptotal"`
+	JobID                     string  `json:"jobid"`
+	Jobstatus                 int     `json:"jobstatus"`
 	Memoryavailable           string  `json:"memoryavailable"`
 	Memorylimit               string  `json:"memorylimit"`
 	Memorytotal               int64   `json:"memorytotal"`
@@ -1013,7 +1021,6 @@
 }
 
 type SuspendProjectResponse struct {
-	JobID                     string  `json:"jobid"`
 	Account                   string  `json:"account"`
 	Cpuavailable              string  `json:"cpuavailable"`
 	Cpulimit                  string  `json:"cpulimit"`
@@ -1025,6 +1032,8 @@
 	Ipavailable               string  `json:"ipavailable"`
 	Iplimit                   string  `json:"iplimit"`
 	Iptotal                   int64   `json:"iptotal"`
+	JobID                     string  `json:"jobid"`
+	Jobstatus                 int     `json:"jobstatus"`
 	Memoryavailable           string  `json:"memoryavailable"`
 	Memorylimit               string  `json:"memorylimit"`
 	Memorytotal               int64   `json:"memorytotal"`
@@ -1150,7 +1159,6 @@
 }
 
 type UpdateProjectResponse struct {
-	JobID                     string  `json:"jobid"`
 	Account                   string  `json:"account"`
 	Cpuavailable              string  `json:"cpuavailable"`
 	Cpulimit                  string  `json:"cpulimit"`
@@ -1162,6 +1170,8 @@
 	Ipavailable               string  `json:"ipavailable"`
 	Iplimit                   string  `json:"iplimit"`
 	Iptotal                   int64   `json:"iptotal"`
+	JobID                     string  `json:"jobid"`
+	Jobstatus                 int     `json:"jobstatus"`
 	Memoryavailable           string  `json:"memoryavailable"`
 	Memorylimit               string  `json:"memorylimit"`
 	Memorytotal               int64   `json:"memorytotal"`
@@ -1294,7 +1304,8 @@
 }
 
 type UpdateProjectInvitationResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/QuotaService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/QuotaService.go
index 2e2f26a..048afc5 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/QuotaService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/QuotaService.go
@@ -57,5 +57,7 @@
 }
 
 type QuotaIsEnabledResponse struct {
-	Isenabled bool `json:"isenabled"`
+	Isenabled bool   `json:"isenabled"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/RegionService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/RegionService.go
index 244a8fa..92d8338 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/RegionService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/RegionService.go
@@ -98,6 +98,8 @@
 	Endpoint                 string `json:"endpoint"`
 	Gslbserviceenabled       bool   `json:"gslbserviceenabled"`
 	Id                       int    `json:"id"`
+	JobID                    string `json:"jobid"`
+	Jobstatus                int    `json:"jobstatus"`
 	Name                     string `json:"name"`
 	Portableipserviceenabled bool   `json:"portableipserviceenabled"`
 }
@@ -204,6 +206,8 @@
 	Endpoint                 string `json:"endpoint"`
 	Gslbserviceenabled       bool   `json:"gslbserviceenabled"`
 	Id                       int    `json:"id"`
+	JobID                    string `json:"jobid"`
+	Jobstatus                int    `json:"jobstatus"`
 	Name                     string `json:"name"`
 	Portableipserviceenabled bool   `json:"portableipserviceenabled"`
 }
@@ -258,6 +262,8 @@
 
 type RemoveRegionResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -276,6 +282,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias RemoveRegionResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -354,6 +368,8 @@
 	Endpoint                 string `json:"endpoint"`
 	Gslbserviceenabled       bool   `json:"gslbserviceenabled"`
 	Id                       int    `json:"id"`
+	JobID                    string `json:"jobid"`
+	Jobstatus                int    `json:"jobstatus"`
 	Name                     string `json:"name"`
 	Portableipserviceenabled bool   `json:"portableipserviceenabled"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ResourcemetadataService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ResourcemetadataService.go
index 6eef886..c660310 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ResourcemetadataService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ResourcemetadataService.go
@@ -35,7 +35,8 @@
 	if v, found := p.p["details"]; found {
 		i := 0
 		for k, vv := range v.(map[string]string) {
-			u.Set(fmt.Sprintf("details[%d].%s", i, k), vv)
+			u.Set(fmt.Sprintf("details[%d].key", i), k)
+			u.Set(fmt.Sprintf("details[%d].value", i), vv)
 			i++
 		}
 	}
@@ -126,8 +127,9 @@
 }
 
 type AddResourceDetailResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -179,6 +181,8 @@
 }
 
 type GetVolumeSnapshotDetailsResponse struct {
+	JobID           string `json:"jobid"`
+	Jobstatus       int    `json:"jobstatus"`
 	VolumeiScsiName string `json:"volumeiScsiName"`
 }
 
@@ -376,6 +380,8 @@
 	Customer     string `json:"customer"`
 	Domain       string `json:"domain"`
 	Domainid     string `json:"domainid"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Key          string `json:"key"`
 	Project      string `json:"project"`
 	Projectid    string `json:"projectid"`
@@ -470,7 +476,8 @@
 }
 
 type RemoveResourceDetailResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ResourcetagsService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ResourcetagsService.go
index e49d265..9d7dc15 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ResourcetagsService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ResourcetagsService.go
@@ -128,8 +128,9 @@
 }
 
 type CreateTagsResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -225,8 +226,9 @@
 }
 
 type DeleteTagsResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -342,9 +344,11 @@
 }
 
 type StorageTag struct {
-	Id     string `json:"id"`
-	Name   string `json:"name"`
-	Poolid int64  `json:"poolid"`
+	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Name      string `json:"name"`
+	Poolid    int64  `json:"poolid"`
 }
 
 type ListTagsParams struct {
@@ -539,6 +543,8 @@
 	Customer     string `json:"customer"`
 	Domain       string `json:"domain"`
 	Domainid     string `json:"domainid"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Key          string `json:"key"`
 	Project      string `json:"project"`
 	Projectid    string `json:"projectid"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/RoleService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/RoleService.go
index f348b1d..f40354d 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/RoleService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/RoleService.go
@@ -20,6 +20,7 @@
 	"encoding/json"
 	"fmt"
 	"net/url"
+	"strconv"
 	"strings"
 )
 
@@ -96,6 +97,8 @@
 type CreateRoleResponse struct {
 	Description string `json:"description"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Type        string `json:"type"`
 }
@@ -185,6 +188,8 @@
 type CreateRolePermissionResponse struct {
 	Description string `json:"description"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Permission  string `json:"permission"`
 	Roleid      string `json:"roleid"`
 	Rolename    string `json:"rolename"`
@@ -240,6 +245,8 @@
 
 type DeleteRoleResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -258,6 +265,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteRoleResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -311,6 +326,8 @@
 
 type DeleteRolePermissionResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -329,6 +346,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteRolePermissionResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -387,6 +412,8 @@
 type RolePermission struct {
 	Description string `json:"description"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Permission  string `json:"permission"`
 	Roleid      string `json:"roleid"`
 	Rolename    string `json:"rolename"`
@@ -552,6 +579,8 @@
 type Role struct {
 	Description string `json:"description"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Type        string `json:"type"`
 }
@@ -639,6 +668,8 @@
 type UpdateRoleResponse struct {
 	Description string `json:"description"`
 	Id          string `json:"id"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Type        string `json:"type"`
 }
@@ -726,6 +757,8 @@
 
 type UpdateRolePermissionResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -744,6 +777,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias UpdateRolePermissionResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/RouterService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/RouterService.go
index bf37d75..963403b 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/RouterService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/RouterService.go
@@ -103,6 +103,8 @@
 	Ip6dns1             string `json:"ip6dns1"`
 	Ip6dns2             string `json:"ip6dns2"`
 	Isredundantrouter   bool   `json:"isredundantrouter"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Linklocalip         string `json:"linklocalip"`
 	Linklocalmacaddress string `json:"linklocalmacaddress"`
 	Linklocalnetmask    string `json:"linklocalnetmask"`
@@ -213,12 +215,13 @@
 }
 
 type VirtualRouterElementResponse struct {
-	JobID     string `json:"jobid"`
 	Account   string `json:"account"`
 	Domain    string `json:"domain"`
 	Domainid  string `json:"domainid"`
 	Enabled   bool   `json:"enabled"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Nspid     string `json:"nspid"`
 	Project   string `json:"project"`
 	Projectid string `json:"projectid"`
@@ -303,12 +306,13 @@
 }
 
 type CreateVirtualRouterElementResponse struct {
-	JobID     string `json:"jobid"`
 	Account   string `json:"account"`
 	Domain    string `json:"domain"`
 	Domainid  string `json:"domainid"`
 	Enabled   bool   `json:"enabled"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Nspid     string `json:"nspid"`
 	Project   string `json:"project"`
 	Projectid string `json:"projectid"`
@@ -382,7 +386,6 @@
 }
 
 type DestroyRouterResponse struct {
-	JobID               string `json:"jobid"`
 	Account             string `json:"account"`
 	Created             string `json:"created"`
 	Dns1                string `json:"dns1"`
@@ -402,6 +405,8 @@
 	Ip6dns1             string `json:"ip6dns1"`
 	Ip6dns2             string `json:"ip6dns2"`
 	Isredundantrouter   bool   `json:"isredundantrouter"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Linklocalip         string `json:"linklocalip"`
 	Linklocalmacaddress string `json:"linklocalmacaddress"`
 	Linklocalnetmask    string `json:"linklocalnetmask"`
@@ -788,6 +793,8 @@
 	Ip6dns1             string `json:"ip6dns1"`
 	Ip6dns2             string `json:"ip6dns2"`
 	Isredundantrouter   bool   `json:"isredundantrouter"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Linklocalip         string `json:"linklocalip"`
 	Linklocalmacaddress string `json:"linklocalmacaddress"`
 	Linklocalnetmask    string `json:"linklocalnetmask"`
@@ -965,6 +972,8 @@
 	Domainid  string `json:"domainid"`
 	Enabled   bool   `json:"enabled"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Nspid     string `json:"nspid"`
 	Project   string `json:"project"`
 	Projectid string `json:"projectid"`
@@ -1038,7 +1047,6 @@
 }
 
 type RebootRouterResponse struct {
-	JobID               string `json:"jobid"`
 	Account             string `json:"account"`
 	Created             string `json:"created"`
 	Dns1                string `json:"dns1"`
@@ -1058,6 +1066,8 @@
 	Ip6dns1             string `json:"ip6dns1"`
 	Ip6dns2             string `json:"ip6dns2"`
 	Isredundantrouter   bool   `json:"isredundantrouter"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Linklocalip         string `json:"linklocalip"`
 	Linklocalmacaddress string `json:"linklocalmacaddress"`
 	Linklocalnetmask    string `json:"linklocalnetmask"`
@@ -1155,7 +1165,6 @@
 }
 
 type StartRouterResponse struct {
-	JobID               string `json:"jobid"`
 	Account             string `json:"account"`
 	Created             string `json:"created"`
 	Dns1                string `json:"dns1"`
@@ -1175,6 +1184,8 @@
 	Ip6dns1             string `json:"ip6dns1"`
 	Ip6dns2             string `json:"ip6dns2"`
 	Isredundantrouter   bool   `json:"isredundantrouter"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Linklocalip         string `json:"linklocalip"`
 	Linklocalmacaddress string `json:"linklocalmacaddress"`
 	Linklocalnetmask    string `json:"linklocalnetmask"`
@@ -1284,7 +1295,6 @@
 }
 
 type StopRouterResponse struct {
-	JobID               string `json:"jobid"`
 	Account             string `json:"account"`
 	Created             string `json:"created"`
 	Dns1                string `json:"dns1"`
@@ -1304,6 +1314,8 @@
 	Ip6dns1             string `json:"ip6dns1"`
 	Ip6dns2             string `json:"ip6dns2"`
 	Isredundantrouter   bool   `json:"isredundantrouter"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Linklocalip         string `json:"linklocalip"`
 	Linklocalmacaddress string `json:"linklocalmacaddress"`
 	Linklocalnetmask    string `json:"linklocalnetmask"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/SSHService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/SSHService.go
index f1f4ab4..a69f7f2 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/SSHService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/SSHService.go
@@ -107,7 +107,14 @@
 }
 
 type CreateSSHKeyPairResponse struct {
-	Privatekey string `json:"privatekey"`
+	Account     string `json:"account"`
+	Domain      string `json:"domain"`
+	Domainid    string `json:"domainid"`
+	Fingerprint string `json:"fingerprint"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
+	Name        string `json:"name"`
+	Privatekey  string `json:"privatekey"`
 }
 
 type DeleteSSHKeyPairParams struct {
@@ -192,6 +199,8 @@
 
 type DeleteSSHKeyPairResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -210,6 +219,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteSSHKeyPairResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -373,6 +390,8 @@
 	Domain      string `json:"domain"`
 	Domainid    string `json:"domainid"`
 	Fingerprint string `json:"fingerprint"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 }
 
@@ -477,6 +496,8 @@
 	Domain      string `json:"domain"`
 	Domainid    string `json:"domainid"`
 	Fingerprint string `json:"fingerprint"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 }
 
@@ -593,7 +614,6 @@
 }
 
 type ResetSSHKeyForVirtualMachineResponse struct {
-	JobID                 string                                              `json:"jobid"`
 	Account               string                                              `json:"account"`
 	Affinitygroup         []ResetSSHKeyForVirtualMachineResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                                 `json:"cpunumber"`
@@ -625,6 +645,8 @@
 	Isodisplaytext        string                                              `json:"isodisplaytext"`
 	Isoid                 string                                              `json:"isoid"`
 	Isoname               string                                              `json:"isoname"`
+	JobID                 string                                              `json:"jobid"`
+	Jobstatus             int                                                 `json:"jobstatus"`
 	Keypair               string                                              `json:"keypair"`
 	Memory                int                                                 `json:"memory"`
 	Memoryintfreekbs      int64                                               `json:"memoryintfreekbs"`
@@ -634,7 +656,7 @@
 	Networkkbsread        int64                                               `json:"networkkbsread"`
 	Networkkbswrite       int64                                               `json:"networkkbswrite"`
 	Nic                   []Nic                                               `json:"nic"`
-	Ostypeid              int64                                               `json:"ostypeid"`
+	Ostypeid              string                                              `json:"ostypeid"`
 	Password              string                                              `json:"password"`
 	Passwordenabled       bool                                                `json:"passwordenabled"`
 	Project               string                                              `json:"project"`
@@ -648,6 +670,7 @@
 	Serviceofferingname   string                                              `json:"serviceofferingname"`
 	Servicestate          string                                              `json:"servicestate"`
 	State                 string                                              `json:"state"`
+	Tags                  []Tags                                              `json:"tags"`
 	Templatedisplaytext   string                                              `json:"templatedisplaytext"`
 	Templateid            string                                              `json:"templateid"`
 	Templatename          string                                              `json:"templatename"`
@@ -699,3 +722,30 @@
 	Type              string   `json:"type"`
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
+
+func (r *ResetSSHKeyForVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias ResetSSHKeyForVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/SecurityGroupService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/SecurityGroupService.go
index 1257504..245f263 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/SecurityGroupService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/SecurityGroupService.go
@@ -259,12 +259,13 @@
 }
 
 type AuthorizeSecurityGroupEgressResponse struct {
-	JobID             string `json:"jobid"`
 	Account           string `json:"account"`
 	Cidr              string `json:"cidr"`
 	Endport           int    `json:"endport"`
 	Icmpcode          int    `json:"icmpcode"`
 	Icmptype          int    `json:"icmptype"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Protocol          string `json:"protocol"`
 	Ruleid            string `json:"ruleid"`
 	Securitygroupname string `json:"securitygroupname"`
@@ -475,12 +476,13 @@
 }
 
 type AuthorizeSecurityGroupIngressResponse struct {
-	JobID             string `json:"jobid"`
 	Account           string `json:"account"`
 	Cidr              string `json:"cidr"`
 	Endport           int    `json:"endport"`
 	Icmpcode          int    `json:"icmpcode"`
 	Icmptype          int    `json:"icmptype"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Protocol          string `json:"protocol"`
 	Ruleid            string `json:"ruleid"`
 	Securitygroupname string `json:"securitygroupname"`
@@ -591,6 +593,8 @@
 	Egressrule          []CreateSecurityGroupResponseRule `json:"egressrule"`
 	Id                  string                            `json:"id"`
 	Ingressrule         []CreateSecurityGroupResponseRule `json:"ingressrule"`
+	JobID               string                            `json:"jobid"`
+	Jobstatus           int                               `json:"jobstatus"`
 	Name                string                            `json:"name"`
 	Project             string                            `json:"project"`
 	Projectid           string                            `json:"projectid"`
@@ -704,6 +708,8 @@
 
 type DeleteSecurityGroupResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -722,6 +728,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteSecurityGroupResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -998,6 +1012,8 @@
 	Egressrule          []SecurityGroupRule `json:"egressrule"`
 	Id                  string              `json:"id"`
 	Ingressrule         []SecurityGroupRule `json:"ingressrule"`
+	JobID               string              `json:"jobid"`
+	Jobstatus           int                 `json:"jobstatus"`
 	Name                string              `json:"name"`
 	Project             string              `json:"project"`
 	Projectid           string              `json:"projectid"`
@@ -1082,8 +1098,9 @@
 }
 
 type RevokeSecurityGroupEgressResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1150,7 +1167,8 @@
 }
 
 type RevokeSecurityGroupIngressResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ServiceOfferingService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ServiceOfferingService.go
index 1700f8d..ea9b4d9 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ServiceOfferingService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ServiceOfferingService.go
@@ -37,10 +37,26 @@
 		vv := strconv.FormatInt(v.(int64), 10)
 		u.Set("bytesreadrate", vv)
 	}
+	if v, found := p.p["bytesreadratemax"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("bytesreadratemax", vv)
+	}
+	if v, found := p.p["bytesreadratemaxlength"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("bytesreadratemaxlength", vv)
+	}
 	if v, found := p.p["byteswriterate"]; found {
 		vv := strconv.FormatInt(v.(int64), 10)
 		u.Set("byteswriterate", vv)
 	}
+	if v, found := p.p["byteswriteratemax"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("byteswriteratemax", vv)
+	}
+	if v, found := p.p["byteswriteratemaxlength"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("byteswriteratemaxlength", vv)
+	}
 	if v, found := p.p["cpunumber"]; found {
 		vv := strconv.Itoa(v.(int))
 		u.Set("cpunumber", vv)
@@ -73,10 +89,26 @@
 		vv := strconv.FormatInt(v.(int64), 10)
 		u.Set("iopsreadrate", vv)
 	}
+	if v, found := p.p["iopsreadratemax"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("iopsreadratemax", vv)
+	}
+	if v, found := p.p["iopsreadratemaxlength"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("iopsreadratemaxlength", vv)
+	}
 	if v, found := p.p["iopswriterate"]; found {
 		vv := strconv.FormatInt(v.(int64), 10)
 		u.Set("iopswriterate", vv)
 	}
+	if v, found := p.p["iopswriteratemax"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("iopswriteratemax", vv)
+	}
+	if v, found := p.p["iopswriteratemaxlength"]; found {
+		vv := strconv.FormatInt(v.(int64), 10)
+		u.Set("iopswriteratemaxlength", vv)
+	}
 	if v, found := p.p["issystem"]; found {
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("issystem", vv)
@@ -143,6 +175,22 @@
 	return
 }
 
+func (p *CreateServiceOfferingParams) SetBytesreadratemax(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["bytesreadratemax"] = v
+	return
+}
+
+func (p *CreateServiceOfferingParams) SetBytesreadratemaxlength(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["bytesreadratemaxlength"] = v
+	return
+}
+
 func (p *CreateServiceOfferingParams) SetByteswriterate(v int64) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -151,6 +199,22 @@
 	return
 }
 
+func (p *CreateServiceOfferingParams) SetByteswriteratemax(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["byteswriteratemax"] = v
+	return
+}
+
+func (p *CreateServiceOfferingParams) SetByteswriteratemaxlength(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["byteswriteratemaxlength"] = v
+	return
+}
+
 func (p *CreateServiceOfferingParams) SetCpunumber(v int) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -223,6 +287,22 @@
 	return
 }
 
+func (p *CreateServiceOfferingParams) SetIopsreadratemax(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["iopsreadratemax"] = v
+	return
+}
+
+func (p *CreateServiceOfferingParams) SetIopsreadratemaxlength(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["iopsreadratemaxlength"] = v
+	return
+}
+
 func (p *CreateServiceOfferingParams) SetIopswriterate(v int64) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -231,6 +311,22 @@
 	return
 }
 
+func (p *CreateServiceOfferingParams) SetIopswriteratemax(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["iopswriteratemax"] = v
+	return
+}
+
+func (p *CreateServiceOfferingParams) SetIopswriteratemaxlength(v int64) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["iopswriteratemaxlength"] = v
+	return
+}
+
 func (p *CreateServiceOfferingParams) SetIssystem(v bool) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -373,37 +469,47 @@
 }
 
 type CreateServiceOfferingResponse struct {
-	Cpunumber                 int               `json:"cpunumber"`
-	Cpuspeed                  int               `json:"cpuspeed"`
-	Created                   string            `json:"created"`
-	Defaultuse                bool              `json:"defaultuse"`
-	Deploymentplanner         string            `json:"deploymentplanner"`
-	DiskBytesReadRate         int64             `json:"diskBytesReadRate"`
-	DiskBytesWriteRate        int64             `json:"diskBytesWriteRate"`
-	DiskIopsReadRate          int64             `json:"diskIopsReadRate"`
-	DiskIopsWriteRate         int64             `json:"diskIopsWriteRate"`
-	Displaytext               string            `json:"displaytext"`
-	Domain                    string            `json:"domain"`
-	Domainid                  string            `json:"domainid"`
-	Hosttags                  string            `json:"hosttags"`
-	Hypervisorsnapshotreserve int               `json:"hypervisorsnapshotreserve"`
-	Id                        string            `json:"id"`
-	Iscustomized              bool              `json:"iscustomized"`
-	Iscustomizediops          bool              `json:"iscustomizediops"`
-	Issystem                  bool              `json:"issystem"`
-	Isvolatile                bool              `json:"isvolatile"`
-	Limitcpuuse               bool              `json:"limitcpuuse"`
-	Maxiops                   int64             `json:"maxiops"`
-	Memory                    int               `json:"memory"`
-	Miniops                   int64             `json:"miniops"`
-	Name                      string            `json:"name"`
-	Networkrate               int               `json:"networkrate"`
-	Offerha                   bool              `json:"offerha"`
-	Provisioningtype          string            `json:"provisioningtype"`
-	Serviceofferingdetails    map[string]string `json:"serviceofferingdetails"`
-	Storagetype               string            `json:"storagetype"`
-	Systemvmtype              string            `json:"systemvmtype"`
-	Tags                      string            `json:"tags"`
+	Cpunumber                   int               `json:"cpunumber"`
+	Cpuspeed                    int               `json:"cpuspeed"`
+	Created                     string            `json:"created"`
+	Defaultuse                  bool              `json:"defaultuse"`
+	Deploymentplanner           string            `json:"deploymentplanner"`
+	DiskBytesReadRate           int64             `json:"diskBytesReadRate"`
+	DiskBytesReadRateMax        int64             `json:"diskBytesReadRateMax"`
+	DiskBytesReadRateMaxLength  int64             `json:"diskBytesReadRateMaxLength"`
+	DiskBytesWriteRate          int64             `json:"diskBytesWriteRate"`
+	DiskBytesWriteRateMax       int64             `json:"diskBytesWriteRateMax"`
+	DiskBytesWriteRateMaxLength int64             `json:"diskBytesWriteRateMaxLength"`
+	DiskIopsReadRate            int64             `json:"diskIopsReadRate"`
+	DiskIopsReadRateMax         int64             `json:"diskIopsReadRateMax"`
+	DiskIopsReadRateMaxLength   int64             `json:"diskIopsReadRateMaxLength"`
+	DiskIopsWriteRate           int64             `json:"diskIopsWriteRate"`
+	DiskIopsWriteRateMax        int64             `json:"diskIopsWriteRateMax"`
+	DiskIopsWriteRateMaxLength  int64             `json:"diskIopsWriteRateMaxLength"`
+	Displaytext                 string            `json:"displaytext"`
+	Domain                      string            `json:"domain"`
+	Domainid                    string            `json:"domainid"`
+	Hosttags                    string            `json:"hosttags"`
+	Hypervisorsnapshotreserve   int               `json:"hypervisorsnapshotreserve"`
+	Id                          string            `json:"id"`
+	Iscustomized                bool              `json:"iscustomized"`
+	Iscustomizediops            bool              `json:"iscustomizediops"`
+	Issystem                    bool              `json:"issystem"`
+	Isvolatile                  bool              `json:"isvolatile"`
+	JobID                       string            `json:"jobid"`
+	Jobstatus                   int               `json:"jobstatus"`
+	Limitcpuuse                 bool              `json:"limitcpuuse"`
+	Maxiops                     int64             `json:"maxiops"`
+	Memory                      int               `json:"memory"`
+	Miniops                     int64             `json:"miniops"`
+	Name                        string            `json:"name"`
+	Networkrate                 int               `json:"networkrate"`
+	Offerha                     bool              `json:"offerha"`
+	Provisioningtype            string            `json:"provisioningtype"`
+	Serviceofferingdetails      map[string]string `json:"serviceofferingdetails"`
+	Storagetype                 string            `json:"storagetype"`
+	Systemvmtype                string            `json:"systemvmtype"`
+	Tags                        string            `json:"tags"`
 }
 
 type DeleteServiceOfferingParams struct {
@@ -455,6 +561,8 @@
 
 type DeleteServiceOfferingResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -473,6 +581,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteServiceOfferingResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -727,37 +843,47 @@
 }
 
 type ServiceOffering struct {
-	Cpunumber                 int               `json:"cpunumber"`
-	Cpuspeed                  int               `json:"cpuspeed"`
-	Created                   string            `json:"created"`
-	Defaultuse                bool              `json:"defaultuse"`
-	Deploymentplanner         string            `json:"deploymentplanner"`
-	DiskBytesReadRate         int64             `json:"diskBytesReadRate"`
-	DiskBytesWriteRate        int64             `json:"diskBytesWriteRate"`
-	DiskIopsReadRate          int64             `json:"diskIopsReadRate"`
-	DiskIopsWriteRate         int64             `json:"diskIopsWriteRate"`
-	Displaytext               string            `json:"displaytext"`
-	Domain                    string            `json:"domain"`
-	Domainid                  string            `json:"domainid"`
-	Hosttags                  string            `json:"hosttags"`
-	Hypervisorsnapshotreserve int               `json:"hypervisorsnapshotreserve"`
-	Id                        string            `json:"id"`
-	Iscustomized              bool              `json:"iscustomized"`
-	Iscustomizediops          bool              `json:"iscustomizediops"`
-	Issystem                  bool              `json:"issystem"`
-	Isvolatile                bool              `json:"isvolatile"`
-	Limitcpuuse               bool              `json:"limitcpuuse"`
-	Maxiops                   int64             `json:"maxiops"`
-	Memory                    int               `json:"memory"`
-	Miniops                   int64             `json:"miniops"`
-	Name                      string            `json:"name"`
-	Networkrate               int               `json:"networkrate"`
-	Offerha                   bool              `json:"offerha"`
-	Provisioningtype          string            `json:"provisioningtype"`
-	Serviceofferingdetails    map[string]string `json:"serviceofferingdetails"`
-	Storagetype               string            `json:"storagetype"`
-	Systemvmtype              string            `json:"systemvmtype"`
-	Tags                      string            `json:"tags"`
+	Cpunumber                   int               `json:"cpunumber"`
+	Cpuspeed                    int               `json:"cpuspeed"`
+	Created                     string            `json:"created"`
+	Defaultuse                  bool              `json:"defaultuse"`
+	Deploymentplanner           string            `json:"deploymentplanner"`
+	DiskBytesReadRate           int64             `json:"diskBytesReadRate"`
+	DiskBytesReadRateMax        int64             `json:"diskBytesReadRateMax"`
+	DiskBytesReadRateMaxLength  int64             `json:"diskBytesReadRateMaxLength"`
+	DiskBytesWriteRate          int64             `json:"diskBytesWriteRate"`
+	DiskBytesWriteRateMax       int64             `json:"diskBytesWriteRateMax"`
+	DiskBytesWriteRateMaxLength int64             `json:"diskBytesWriteRateMaxLength"`
+	DiskIopsReadRate            int64             `json:"diskIopsReadRate"`
+	DiskIopsReadRateMax         int64             `json:"diskIopsReadRateMax"`
+	DiskIopsReadRateMaxLength   int64             `json:"diskIopsReadRateMaxLength"`
+	DiskIopsWriteRate           int64             `json:"diskIopsWriteRate"`
+	DiskIopsWriteRateMax        int64             `json:"diskIopsWriteRateMax"`
+	DiskIopsWriteRateMaxLength  int64             `json:"diskIopsWriteRateMaxLength"`
+	Displaytext                 string            `json:"displaytext"`
+	Domain                      string            `json:"domain"`
+	Domainid                    string            `json:"domainid"`
+	Hosttags                    string            `json:"hosttags"`
+	Hypervisorsnapshotreserve   int               `json:"hypervisorsnapshotreserve"`
+	Id                          string            `json:"id"`
+	Iscustomized                bool              `json:"iscustomized"`
+	Iscustomizediops            bool              `json:"iscustomizediops"`
+	Issystem                    bool              `json:"issystem"`
+	Isvolatile                  bool              `json:"isvolatile"`
+	JobID                       string            `json:"jobid"`
+	Jobstatus                   int               `json:"jobstatus"`
+	Limitcpuuse                 bool              `json:"limitcpuuse"`
+	Maxiops                     int64             `json:"maxiops"`
+	Memory                      int               `json:"memory"`
+	Miniops                     int64             `json:"miniops"`
+	Name                        string            `json:"name"`
+	Networkrate                 int               `json:"networkrate"`
+	Offerha                     bool              `json:"offerha"`
+	Provisioningtype            string            `json:"provisioningtype"`
+	Serviceofferingdetails      map[string]string `json:"serviceofferingdetails"`
+	Storagetype                 string            `json:"storagetype"`
+	Systemvmtype                string            `json:"systemvmtype"`
+	Tags                        string            `json:"tags"`
 }
 
 type UpdateServiceOfferingParams struct {
@@ -842,35 +968,45 @@
 }
 
 type UpdateServiceOfferingResponse struct {
-	Cpunumber                 int               `json:"cpunumber"`
-	Cpuspeed                  int               `json:"cpuspeed"`
-	Created                   string            `json:"created"`
-	Defaultuse                bool              `json:"defaultuse"`
-	Deploymentplanner         string            `json:"deploymentplanner"`
-	DiskBytesReadRate         int64             `json:"diskBytesReadRate"`
-	DiskBytesWriteRate        int64             `json:"diskBytesWriteRate"`
-	DiskIopsReadRate          int64             `json:"diskIopsReadRate"`
-	DiskIopsWriteRate         int64             `json:"diskIopsWriteRate"`
-	Displaytext               string            `json:"displaytext"`
-	Domain                    string            `json:"domain"`
-	Domainid                  string            `json:"domainid"`
-	Hosttags                  string            `json:"hosttags"`
-	Hypervisorsnapshotreserve int               `json:"hypervisorsnapshotreserve"`
-	Id                        string            `json:"id"`
-	Iscustomized              bool              `json:"iscustomized"`
-	Iscustomizediops          bool              `json:"iscustomizediops"`
-	Issystem                  bool              `json:"issystem"`
-	Isvolatile                bool              `json:"isvolatile"`
-	Limitcpuuse               bool              `json:"limitcpuuse"`
-	Maxiops                   int64             `json:"maxiops"`
-	Memory                    int               `json:"memory"`
-	Miniops                   int64             `json:"miniops"`
-	Name                      string            `json:"name"`
-	Networkrate               int               `json:"networkrate"`
-	Offerha                   bool              `json:"offerha"`
-	Provisioningtype          string            `json:"provisioningtype"`
-	Serviceofferingdetails    map[string]string `json:"serviceofferingdetails"`
-	Storagetype               string            `json:"storagetype"`
-	Systemvmtype              string            `json:"systemvmtype"`
-	Tags                      string            `json:"tags"`
+	Cpunumber                   int               `json:"cpunumber"`
+	Cpuspeed                    int               `json:"cpuspeed"`
+	Created                     string            `json:"created"`
+	Defaultuse                  bool              `json:"defaultuse"`
+	Deploymentplanner           string            `json:"deploymentplanner"`
+	DiskBytesReadRate           int64             `json:"diskBytesReadRate"`
+	DiskBytesReadRateMax        int64             `json:"diskBytesReadRateMax"`
+	DiskBytesReadRateMaxLength  int64             `json:"diskBytesReadRateMaxLength"`
+	DiskBytesWriteRate          int64             `json:"diskBytesWriteRate"`
+	DiskBytesWriteRateMax       int64             `json:"diskBytesWriteRateMax"`
+	DiskBytesWriteRateMaxLength int64             `json:"diskBytesWriteRateMaxLength"`
+	DiskIopsReadRate            int64             `json:"diskIopsReadRate"`
+	DiskIopsReadRateMax         int64             `json:"diskIopsReadRateMax"`
+	DiskIopsReadRateMaxLength   int64             `json:"diskIopsReadRateMaxLength"`
+	DiskIopsWriteRate           int64             `json:"diskIopsWriteRate"`
+	DiskIopsWriteRateMax        int64             `json:"diskIopsWriteRateMax"`
+	DiskIopsWriteRateMaxLength  int64             `json:"diskIopsWriteRateMaxLength"`
+	Displaytext                 string            `json:"displaytext"`
+	Domain                      string            `json:"domain"`
+	Domainid                    string            `json:"domainid"`
+	Hosttags                    string            `json:"hosttags"`
+	Hypervisorsnapshotreserve   int               `json:"hypervisorsnapshotreserve"`
+	Id                          string            `json:"id"`
+	Iscustomized                bool              `json:"iscustomized"`
+	Iscustomizediops            bool              `json:"iscustomizediops"`
+	Issystem                    bool              `json:"issystem"`
+	Isvolatile                  bool              `json:"isvolatile"`
+	JobID                       string            `json:"jobid"`
+	Jobstatus                   int               `json:"jobstatus"`
+	Limitcpuuse                 bool              `json:"limitcpuuse"`
+	Maxiops                     int64             `json:"maxiops"`
+	Memory                      int               `json:"memory"`
+	Miniops                     int64             `json:"miniops"`
+	Name                        string            `json:"name"`
+	Networkrate                 int               `json:"networkrate"`
+	Offerha                     bool              `json:"offerha"`
+	Provisioningtype            string            `json:"provisioningtype"`
+	Serviceofferingdetails      map[string]string `json:"serviceofferingdetails"`
+	Storagetype                 string            `json:"storagetype"`
+	Systemvmtype                string            `json:"systemvmtype"`
+	Tags                        string            `json:"tags"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/SnapshotService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/SnapshotService.go
index e3186e7..7733d82 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/SnapshotService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/SnapshotService.go
@@ -171,13 +171,14 @@
 }
 
 type CreateSnapshotResponse struct {
-	JobID         string `json:"jobid"`
 	Account       string `json:"account"`
 	Created       string `json:"created"`
 	Domain        string `json:"domain"`
 	Domainid      string `json:"domainid"`
 	Id            string `json:"id"`
 	Intervaltype  string `json:"intervaltype"`
+	JobID         string `json:"jobid"`
+	Jobstatus     int    `json:"jobstatus"`
 	Locationtype  string `json:"locationtype"`
 	Name          string `json:"name"`
 	Osdisplayname string `json:"osdisplayname"`
@@ -196,6 +197,33 @@
 	Zoneid        string `json:"zoneid"`
 }
 
+func (r *CreateSnapshotResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias CreateSnapshotResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type CreateSnapshotPolicyParams struct {
 	p map[string]interface{}
 }
@@ -308,6 +336,8 @@
 	Fordisplay   bool   `json:"fordisplay"`
 	Id           string `json:"id"`
 	Intervaltype int    `json:"intervaltype"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Maxsnaps     int    `json:"maxsnaps"`
 	Schedule     string `json:"schedule"`
 	Timezone     string `json:"timezone"`
@@ -428,7 +458,6 @@
 }
 
 type CreateVMSnapshotResponse struct {
-	JobID            string `json:"jobid"`
 	Account          string `json:"account"`
 	Created          string `json:"created"`
 	Current          bool   `json:"current"`
@@ -437,6 +466,8 @@
 	Domain           string `json:"domain"`
 	Domainid         string `json:"domainid"`
 	Id               string `json:"id"`
+	JobID            string `json:"jobid"`
+	Jobstatus        int    `json:"jobstatus"`
 	Name             string `json:"name"`
 	Parent           string `json:"parent"`
 	ParentName       string `json:"parentName"`
@@ -511,8 +542,9 @@
 }
 
 type DeleteSnapshotResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -576,6 +608,8 @@
 
 type DeleteSnapshotPoliciesResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -594,6 +628,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteSnapshotPoliciesResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -661,8 +703,9 @@
 }
 
 type DeleteVMSnapshotResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -812,6 +855,8 @@
 	Fordisplay   bool   `json:"fordisplay"`
 	Id           string `json:"id"`
 	Intervaltype int    `json:"intervaltype"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Maxsnaps     int    `json:"maxsnaps"`
 	Schedule     string `json:"schedule"`
 	Timezone     string `json:"timezone"`
@@ -1134,6 +1179,8 @@
 	Domainid      string `json:"domainid"`
 	Id            string `json:"id"`
 	Intervaltype  string `json:"intervaltype"`
+	JobID         string `json:"jobid"`
+	Jobstatus     int    `json:"jobstatus"`
 	Locationtype  string `json:"locationtype"`
 	Name          string `json:"name"`
 	Osdisplayname string `json:"osdisplayname"`
@@ -1152,6 +1199,33 @@
 	Zoneid        string `json:"zoneid"`
 }
 
+func (r *Snapshot) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias Snapshot
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type ListVMSnapshotParams struct {
 	p map[string]interface{}
 }
@@ -1401,6 +1475,8 @@
 	Domain           string `json:"domain"`
 	Domainid         string `json:"domainid"`
 	Id               string `json:"id"`
+	JobID            string `json:"jobid"`
+	Jobstatus        int    `json:"jobstatus"`
 	Name             string `json:"name"`
 	Parent           string `json:"parent"`
 	ParentName       string `json:"parentName"`
@@ -1480,13 +1556,14 @@
 }
 
 type RevertSnapshotResponse struct {
-	JobID         string `json:"jobid"`
 	Account       string `json:"account"`
 	Created       string `json:"created"`
 	Domain        string `json:"domain"`
 	Domainid      string `json:"domainid"`
 	Id            string `json:"id"`
 	Intervaltype  string `json:"intervaltype"`
+	JobID         string `json:"jobid"`
+	Jobstatus     int    `json:"jobstatus"`
 	Locationtype  string `json:"locationtype"`
 	Name          string `json:"name"`
 	Osdisplayname string `json:"osdisplayname"`
@@ -1505,6 +1582,33 @@
 	Zoneid        string `json:"zoneid"`
 }
 
+func (r *RevertSnapshotResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias RevertSnapshotResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type RevertToVMSnapshotParams struct {
 	p map[string]interface{}
 }
@@ -1573,7 +1677,6 @@
 }
 
 type RevertToVMSnapshotResponse struct {
-	JobID                 string                                    `json:"jobid"`
 	Account               string                                    `json:"account"`
 	Affinitygroup         []RevertToVMSnapshotResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                       `json:"cpunumber"`
@@ -1605,6 +1708,8 @@
 	Isodisplaytext        string                                    `json:"isodisplaytext"`
 	Isoid                 string                                    `json:"isoid"`
 	Isoname               string                                    `json:"isoname"`
+	JobID                 string                                    `json:"jobid"`
+	Jobstatus             int                                       `json:"jobstatus"`
 	Keypair               string                                    `json:"keypair"`
 	Memory                int                                       `json:"memory"`
 	Memoryintfreekbs      int64                                     `json:"memoryintfreekbs"`
@@ -1614,7 +1719,7 @@
 	Networkkbsread        int64                                     `json:"networkkbsread"`
 	Networkkbswrite       int64                                     `json:"networkkbswrite"`
 	Nic                   []Nic                                     `json:"nic"`
-	Ostypeid              int64                                     `json:"ostypeid"`
+	Ostypeid              string                                    `json:"ostypeid"`
 	Password              string                                    `json:"password"`
 	Passwordenabled       bool                                      `json:"passwordenabled"`
 	Project               string                                    `json:"project"`
@@ -1628,6 +1733,7 @@
 	Serviceofferingname   string                                    `json:"serviceofferingname"`
 	Servicestate          string                                    `json:"servicestate"`
 	State                 string                                    `json:"state"`
+	Tags                  []Tags                                    `json:"tags"`
 	Templatedisplaytext   string                                    `json:"templatedisplaytext"`
 	Templateid            string                                    `json:"templateid"`
 	Templatename          string                                    `json:"templatename"`
@@ -1680,6 +1786,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *RevertToVMSnapshotResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias RevertToVMSnapshotResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type UpdateSnapshotPolicyParams struct {
 	p map[string]interface{}
 }
@@ -1770,10 +1903,11 @@
 }
 
 type UpdateSnapshotPolicyResponse struct {
-	JobID        string `json:"jobid"`
 	Fordisplay   bool   `json:"fordisplay"`
 	Id           string `json:"id"`
 	Intervaltype int    `json:"intervaltype"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Maxsnaps     int    `json:"maxsnaps"`
 	Schedule     string `json:"schedule"`
 	Timezone     string `json:"timezone"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/StoragePoolService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/StoragePoolService.go
index 4938f14..efd606b 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/StoragePoolService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/StoragePoolService.go
@@ -90,7 +90,6 @@
 }
 
 type CancelStorageMaintenanceResponse struct {
-	JobID                string            `json:"jobid"`
 	Allocatediops        int64             `json:"allocatediops"`
 	Capacityiops         int64             `json:"capacityiops"`
 	Clusterid            string            `json:"clusterid"`
@@ -102,6 +101,8 @@
 	Hypervisor           string            `json:"hypervisor"`
 	Id                   string            `json:"id"`
 	Ipaddress            string            `json:"ipaddress"`
+	JobID                string            `json:"jobid"`
+	Jobstatus            int               `json:"jobstatus"`
 	Name                 string            `json:"name"`
 	Overprovisionfactor  string            `json:"overprovisionfactor"`
 	Path                 string            `json:"path"`
@@ -186,7 +187,6 @@
 }
 
 type EnableStorageMaintenanceResponse struct {
-	JobID                string            `json:"jobid"`
 	Allocatediops        int64             `json:"allocatediops"`
 	Capacityiops         int64             `json:"capacityiops"`
 	Clusterid            string            `json:"clusterid"`
@@ -198,6 +198,8 @@
 	Hypervisor           string            `json:"hypervisor"`
 	Id                   string            `json:"id"`
 	Ipaddress            string            `json:"ipaddress"`
+	JobID                string            `json:"jobid"`
+	Jobstatus            int               `json:"jobstatus"`
 	Name                 string            `json:"name"`
 	Overprovisionfactor  string            `json:"overprovisionfactor"`
 	Path                 string            `json:"path"`
@@ -302,6 +304,8 @@
 }
 
 type StorageProvider struct {
-	Name string `json:"name"`
-	Type string `json:"type"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Name      string `json:"name"`
+	Type      string `json:"type"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/StratosphereSSPService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/StratosphereSSPService.go
index 8a4d491..81d1059 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/StratosphereSSPService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/StratosphereSSPService.go
@@ -19,6 +19,7 @@
 import (
 	"encoding/json"
 	"net/url"
+	"strconv"
 )
 
 type AddStratosphereSspParams struct {
@@ -126,10 +127,12 @@
 }
 
 type AddStratosphereSspResponse struct {
-	Hostid string `json:"hostid"`
-	Name   string `json:"name"`
-	Url    string `json:"url"`
-	Zoneid string `json:"zoneid"`
+	Hostid    string `json:"hostid"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Name      string `json:"name"`
+	Url       string `json:"url"`
+	Zoneid    string `json:"zoneid"`
 }
 
 type DeleteStratosphereSspParams struct {
@@ -181,6 +184,8 @@
 
 type DeleteStratosphereSspResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -199,6 +204,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteStratosphereSspResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/SwiftService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/SwiftService.go
index e3161d9..ded2b95 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/SwiftService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/SwiftService.go
@@ -105,6 +105,8 @@
 
 type AddSwiftResponse struct {
 	Id           string `json:"id"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Name         string `json:"name"`
 	Protocol     string `json:"protocol"`
 	Providername string `json:"providername"`
@@ -239,6 +241,8 @@
 
 type Swift struct {
 	Id           string `json:"id"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Name         string `json:"name"`
 	Protocol     string `json:"protocol"`
 	Providername string `json:"providername"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/SystemCapacityService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/SystemCapacityService.go
index 686521c..c6d8ff9 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/SystemCapacityService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/SystemCapacityService.go
@@ -171,6 +171,8 @@
 	Capacityused      int64  `json:"capacityused"`
 	Clusterid         string `json:"clusterid"`
 	Clustername       string `json:"clustername"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Name              string `json:"name"`
 	Percentused       string `json:"percentused"`
 	Podid             string `json:"podid"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/TemplateService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/TemplateService.go
index 2c40bbd..2b8d764 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/TemplateService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/TemplateService.go
@@ -126,7 +126,6 @@
 }
 
 type CopyTemplateResponse struct {
-	JobID                 string            `json:"jobid"`
 	Account               string            `json:"account"`
 	Accountid             string            `json:"accountid"`
 	Bits                  int               `json:"bits"`
@@ -150,6 +149,8 @@
 	Isfeatured            bool              `json:"isfeatured"`
 	Ispublic              bool              `json:"ispublic"`
 	Isready               bool              `json:"isready"`
+	JobID                 string            `json:"jobid"`
+	Jobstatus             int               `json:"jobstatus"`
 	Name                  string            `json:"name"`
 	Ostypeid              string            `json:"ostypeid"`
 	Ostypename            string            `json:"ostypename"`
@@ -159,16 +160,45 @@
 	Project               string            `json:"project"`
 	Projectid             string            `json:"projectid"`
 	Removed               string            `json:"removed"`
+	Requireshvm           bool              `json:"requireshvm"`
 	Size                  int64             `json:"size"`
 	Sourcetemplateid      string            `json:"sourcetemplateid"`
 	Sshkeyenabled         bool              `json:"sshkeyenabled"`
 	Status                string            `json:"status"`
+	Tags                  []Tags            `json:"tags"`
 	Templatetag           string            `json:"templatetag"`
 	Templatetype          string            `json:"templatetype"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
 
+func (r *CopyTemplateResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias CopyTemplateResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type CreateTemplateParams struct {
 	p map[string]interface{}
 }
@@ -224,6 +254,10 @@
 	if v, found := p.p["snapshotid"]; found {
 		u.Set("snapshotid", v.(string))
 	}
+	if v, found := p.p["sshkeyenabled"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("sshkeyenabled", vv)
+	}
 	if v, found := p.p["templatetag"]; found {
 		u.Set("templatetag", v.(string))
 	}
@@ -335,6 +369,14 @@
 	return
 }
 
+func (p *CreateTemplateParams) SetSshkeyenabled(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["sshkeyenabled"] = v
+	return
+}
+
 func (p *CreateTemplateParams) SetTemplatetag(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -414,7 +456,6 @@
 }
 
 type CreateTemplateResponse struct {
-	JobID                 string            `json:"jobid"`
 	Account               string            `json:"account"`
 	Accountid             string            `json:"accountid"`
 	Bits                  int               `json:"bits"`
@@ -438,6 +479,8 @@
 	Isfeatured            bool              `json:"isfeatured"`
 	Ispublic              bool              `json:"ispublic"`
 	Isready               bool              `json:"isready"`
+	JobID                 string            `json:"jobid"`
+	Jobstatus             int               `json:"jobstatus"`
 	Name                  string            `json:"name"`
 	Ostypeid              string            `json:"ostypeid"`
 	Ostypename            string            `json:"ostypename"`
@@ -447,16 +490,45 @@
 	Project               string            `json:"project"`
 	Projectid             string            `json:"projectid"`
 	Removed               string            `json:"removed"`
+	Requireshvm           bool              `json:"requireshvm"`
 	Size                  int64             `json:"size"`
 	Sourcetemplateid      string            `json:"sourcetemplateid"`
 	Sshkeyenabled         bool              `json:"sshkeyenabled"`
 	Status                string            `json:"status"`
+	Tags                  []Tags            `json:"tags"`
 	Templatetag           string            `json:"templatetag"`
 	Templatetype          string            `json:"templatetype"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
 
+func (r *CreateTemplateResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias CreateTemplateResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type DeleteTemplateParams struct {
 	p map[string]interface{}
 }
@@ -543,8 +615,9 @@
 }
 
 type DeleteTemplateResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -650,12 +723,13 @@
 }
 
 type ExtractTemplateResponse struct {
-	JobID            string `json:"jobid"`
 	Accountid        string `json:"accountid"`
 	Created          string `json:"created"`
 	ExtractId        string `json:"extractId"`
 	ExtractMode      string `json:"extractMode"`
 	Id               string `json:"id"`
+	JobID            string `json:"jobid"`
+	Jobstatus        int    `json:"jobstatus"`
 	Name             string `json:"name"`
 	Resultstring     string `json:"resultstring"`
 	State            string `json:"state"`
@@ -955,6 +1029,8 @@
 type GetUploadParamsForTemplateResponse struct {
 	Expires   string `json:"expires"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Metadata  string `json:"metadata"`
 	PostURL   string `json:"postURL"`
 	Signature string `json:"signature"`
@@ -1050,6 +1126,8 @@
 	Domainid   string   `json:"domainid"`
 	Id         string   `json:"id"`
 	Ispublic   bool     `json:"ispublic"`
+	JobID      string   `json:"jobid"`
+	Jobstatus  int      `json:"jobstatus"`
 	Projectids []string `json:"projectids"`
 }
 
@@ -1402,6 +1480,8 @@
 	Isfeatured            bool              `json:"isfeatured"`
 	Ispublic              bool              `json:"ispublic"`
 	Isready               bool              `json:"isready"`
+	JobID                 string            `json:"jobid"`
+	Jobstatus             int               `json:"jobstatus"`
 	Name                  string            `json:"name"`
 	Ostypeid              string            `json:"ostypeid"`
 	Ostypename            string            `json:"ostypename"`
@@ -1411,16 +1491,45 @@
 	Project               string            `json:"project"`
 	Projectid             string            `json:"projectid"`
 	Removed               string            `json:"removed"`
+	Requireshvm           bool              `json:"requireshvm"`
 	Size                  int64             `json:"size"`
 	Sourcetemplateid      string            `json:"sourcetemplateid"`
 	Sshkeyenabled         bool              `json:"sshkeyenabled"`
 	Status                string            `json:"status"`
+	Tags                  []Tags            `json:"tags"`
 	Templatetag           string            `json:"templatetag"`
 	Templatetype          string            `json:"templatetype"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
 
+func (r *Template) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias Template
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type PrepareTemplateParams struct {
 	p map[string]interface{}
 }
@@ -1515,6 +1624,8 @@
 	Isfeatured            bool              `json:"isfeatured"`
 	Ispublic              bool              `json:"ispublic"`
 	Isready               bool              `json:"isready"`
+	JobID                 string            `json:"jobid"`
+	Jobstatus             int               `json:"jobstatus"`
 	Name                  string            `json:"name"`
 	Ostypeid              string            `json:"ostypeid"`
 	Ostypename            string            `json:"ostypename"`
@@ -1524,16 +1635,45 @@
 	Project               string            `json:"project"`
 	Projectid             string            `json:"projectid"`
 	Removed               string            `json:"removed"`
+	Requireshvm           bool              `json:"requireshvm"`
 	Size                  int64             `json:"size"`
 	Sourcetemplateid      string            `json:"sourcetemplateid"`
 	Sshkeyenabled         bool              `json:"sshkeyenabled"`
 	Status                string            `json:"status"`
+	Tags                  []Tags            `json:"tags"`
 	Templatetag           string            `json:"templatetag"`
 	Templatetype          string            `json:"templatetype"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
 
+func (r *PrepareTemplateResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias PrepareTemplateResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type RegisterTemplateParams struct {
 	p map[string]interface{}
 }
@@ -1883,6 +2023,8 @@
 	Isfeatured            bool              `json:"isfeatured"`
 	Ispublic              bool              `json:"ispublic"`
 	Isready               bool              `json:"isready"`
+	JobID                 string            `json:"jobid"`
+	Jobstatus             int               `json:"jobstatus"`
 	Name                  string            `json:"name"`
 	Ostypeid              string            `json:"ostypeid"`
 	Ostypename            string            `json:"ostypename"`
@@ -1892,16 +2034,45 @@
 	Project               string            `json:"project"`
 	Projectid             string            `json:"projectid"`
 	Removed               string            `json:"removed"`
+	Requireshvm           bool              `json:"requireshvm"`
 	Size                  int64             `json:"size"`
 	Sourcetemplateid      string            `json:"sourcetemplateid"`
 	Sshkeyenabled         bool              `json:"sshkeyenabled"`
 	Status                string            `json:"status"`
+	Tags                  []Tags            `json:"tags"`
 	Templatetag           string            `json:"templatetag"`
 	Templatetype          string            `json:"templatetype"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
 
+func (r *RegisterTemplate) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias RegisterTemplate
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type UpdateTemplateParams struct {
 	p map[string]interface{}
 }
@@ -1961,6 +2132,10 @@
 		vv := strconv.Itoa(v.(int))
 		u.Set("sortkey", vv)
 	}
+	if v, found := p.p["sshkeyenabled"]; found {
+		vv := strconv.FormatBool(v.(bool))
+		u.Set("sshkeyenabled", vv)
+	}
 	return u
 }
 
@@ -2068,6 +2243,14 @@
 	return
 }
 
+func (p *UpdateTemplateParams) SetSshkeyenabled(v bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["sshkeyenabled"] = v
+	return
+}
+
 // You should always use this function to get a new UpdateTemplateParams instance,
 // as then you are sure you have configured all required params
 func (s *TemplateService) NewUpdateTemplateParams(id string) *UpdateTemplateParams {
@@ -2116,6 +2299,8 @@
 	Isfeatured            bool              `json:"isfeatured"`
 	Ispublic              bool              `json:"ispublic"`
 	Isready               bool              `json:"isready"`
+	JobID                 string            `json:"jobid"`
+	Jobstatus             int               `json:"jobstatus"`
 	Name                  string            `json:"name"`
 	Ostypeid              string            `json:"ostypeid"`
 	Ostypename            string            `json:"ostypename"`
@@ -2125,16 +2310,45 @@
 	Project               string            `json:"project"`
 	Projectid             string            `json:"projectid"`
 	Removed               string            `json:"removed"`
+	Requireshvm           bool              `json:"requireshvm"`
 	Size                  int64             `json:"size"`
 	Sourcetemplateid      string            `json:"sourcetemplateid"`
 	Sshkeyenabled         bool              `json:"sshkeyenabled"`
 	Status                string            `json:"status"`
+	Tags                  []Tags            `json:"tags"`
 	Templatetag           string            `json:"templatetag"`
 	Templatetype          string            `json:"templatetype"`
 	Zoneid                string            `json:"zoneid"`
 	Zonename              string            `json:"zonename"`
 }
 
+func (r *UpdateTemplateResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias UpdateTemplateResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type UpdateTemplatePermissionsParams struct {
 	p map[string]interface{}
 }
@@ -2255,6 +2469,8 @@
 
 type UpdateTemplatePermissionsResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -2273,6 +2489,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias UpdateTemplatePermissionsResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/UCSService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/UCSService.go
index c3e1ed4..bf109f0 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/UCSService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/UCSService.go
@@ -119,10 +119,12 @@
 }
 
 type AddUcsManagerResponse struct {
-	Id     string `json:"id"`
-	Name   string `json:"name"`
-	Url    string `json:"url"`
-	Zoneid string `json:"zoneid"`
+	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Name      string `json:"name"`
+	Url       string `json:"url"`
+	Zoneid    string `json:"zoneid"`
 }
 
 type AssociateUcsProfileToBladeParams struct {
@@ -217,10 +219,11 @@
 }
 
 type AssociateUcsProfileToBladeResponse struct {
-	JobID        string `json:"jobid"`
 	Bladedn      string `json:"bladedn"`
 	Hostid       string `json:"hostid"`
 	Id           string `json:"id"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Profiledn    string `json:"profiledn"`
 	Ucsmanagerid string `json:"ucsmanagerid"`
 }
@@ -274,6 +277,8 @@
 
 type DeleteUcsManagerResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -292,6 +297,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteUcsManagerResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -387,6 +400,8 @@
 	Bladedn      string `json:"bladedn"`
 	Hostid       string `json:"hostid"`
 	Id           string `json:"id"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Profiledn    string `json:"profiledn"`
 	Ucsmanagerid string `json:"ucsmanagerid"`
 }
@@ -572,10 +587,12 @@
 }
 
 type UcsManager struct {
-	Id     string `json:"id"`
-	Name   string `json:"name"`
-	Url    string `json:"url"`
-	Zoneid string `json:"zoneid"`
+	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Name      string `json:"name"`
+	Url       string `json:"url"`
+	Zoneid    string `json:"zoneid"`
 }
 
 type ListUcsProfilesParams struct {
@@ -666,5 +683,7 @@
 }
 
 type UcsProfile struct {
-	Ucsdn string `json:"ucsdn"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Ucsdn     string `json:"ucsdn"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/UsageService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/UsageService.go
index 63a99ae..e6632e7 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/UsageService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/UsageService.go
@@ -107,6 +107,8 @@
 type AddTrafficMonitorResponse struct {
 	Id         string `json:"id"`
 	Ipaddress  string `json:"ipaddress"`
+	JobID      string `json:"jobid"`
+	Jobstatus  int    `json:"jobstatus"`
 	Numretries string `json:"numretries"`
 	Timeout    string `json:"timeout"`
 	Zoneid     string `json:"zoneid"`
@@ -269,9 +271,10 @@
 }
 
 type AddTrafficTypeResponse struct {
-	JobID              string `json:"jobid"`
 	Hypervnetworklabel string `json:"hypervnetworklabel"`
 	Id                 string `json:"id"`
+	JobID              string `json:"jobid"`
+	Jobstatus          int    `json:"jobstatus"`
 	Kvmnetworklabel    string `json:"kvmnetworklabel"`
 	Ovm3networklabel   string `json:"ovm3networklabel"`
 	Physicalnetworkid  string `json:"physicalnetworkid"`
@@ -329,6 +332,8 @@
 
 type DeleteTrafficMonitorResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -347,6 +352,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteTrafficMonitorResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -414,8 +427,9 @@
 }
 
 type DeleteTrafficTypeResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -491,6 +505,8 @@
 
 type GenerateUsageRecordsResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -509,6 +525,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias GenerateUsageRecordsResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -603,6 +627,8 @@
 type TrafficMonitor struct {
 	Id         string `json:"id"`
 	Ipaddress  string `json:"ipaddress"`
+	JobID      string `json:"jobid"`
+	Jobstatus  int    `json:"jobstatus"`
 	Numretries string `json:"numretries"`
 	Timeout    string `json:"timeout"`
 	Zoneid     string `json:"zoneid"`
@@ -695,6 +721,8 @@
 }
 
 type TrafficTypeImplementor struct {
+	JobID                  string `json:"jobid"`
+	Jobstatus              int    `json:"jobstatus"`
 	Traffictype            string `json:"traffictype"`
 	Traffictypeimplementor string `json:"traffictypeimplementor"`
 }
@@ -827,6 +855,8 @@
 	Canenableindividualservice   bool     `json:"canenableindividualservice"`
 	Destinationphysicalnetworkid string   `json:"destinationphysicalnetworkid"`
 	Id                           string   `json:"id"`
+	JobID                        string   `json:"jobid"`
+	Jobstatus                    int      `json:"jobstatus"`
 	Name                         string   `json:"name"`
 	Physicalnetworkid            string   `json:"physicalnetworkid"`
 	Servicelist                  []string `json:"servicelist"`
@@ -1023,6 +1053,8 @@
 	Isdefault        bool   `json:"isdefault"`
 	Issourcenat      bool   `json:"issourcenat"`
 	Issystem         bool   `json:"issystem"`
+	JobID            string `json:"jobid"`
+	Jobstatus        int    `json:"jobstatus"`
 	Memory           int64  `json:"memory"`
 	Name             string `json:"name"`
 	Networkid        string `json:"networkid"`
@@ -1032,6 +1064,7 @@
 	Rawusage         string `json:"rawusage"`
 	Size             int64  `json:"size"`
 	Startdate        string `json:"startdate"`
+	Tags             []Tags `json:"tags"`
 	Templateid       string `json:"templateid"`
 	Type             string `json:"type"`
 	Usage            string `json:"usage"`
@@ -1084,6 +1117,8 @@
 
 type UsageType struct {
 	Description string `json:"description"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Usagetypeid int    `json:"usagetypeid"`
 }
 
@@ -1137,6 +1172,8 @@
 
 type RemoveRawUsageRecordsResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1155,6 +1192,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias RemoveRawUsageRecordsResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -1282,9 +1327,10 @@
 }
 
 type UpdateTrafficTypeResponse struct {
-	JobID              string `json:"jobid"`
 	Hypervnetworklabel string `json:"hypervnetworklabel"`
 	Id                 string `json:"id"`
+	JobID              string `json:"jobid"`
+	Jobstatus          int    `json:"jobstatus"`
 	Kvmnetworklabel    string `json:"kvmnetworklabel"`
 	Ovm3networklabel   string `json:"ovm3networklabel"`
 	Physicalnetworkid  string `json:"physicalnetworkid"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/UserService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/UserService.go
index ba98845..cf121e6 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/UserService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/UserService.go
@@ -181,6 +181,8 @@
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Lastname            string `json:"lastname"`
 	Roleid              string `json:"roleid"`
 	Rolename            string `json:"rolename"`
@@ -241,6 +243,8 @@
 
 type DeleteUserResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -259,6 +263,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteUserResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -331,7 +343,6 @@
 }
 
 type DisableUserResponse struct {
-	JobID               string `json:"jobid"`
 	Account             string `json:"account"`
 	Accountid           string `json:"accountid"`
 	Accounttype         int    `json:"accounttype"`
@@ -344,6 +355,8 @@
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Lastname            string `json:"lastname"`
 	Roleid              string `json:"roleid"`
 	Rolename            string `json:"rolename"`
@@ -415,6 +428,8 @@
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Lastname            string `json:"lastname"`
 	Roleid              string `json:"roleid"`
 	Rolename            string `json:"rolename"`
@@ -486,6 +501,8 @@
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Lastname            string `json:"lastname"`
 	Roleid              string `json:"roleid"`
 	Rolename            string `json:"rolename"`
@@ -545,6 +562,8 @@
 }
 
 type GetVirtualMachineUserDataResponse struct {
+	JobID            string `json:"jobid"`
+	Jobstatus        int    `json:"jobstatus"`
 	Userdata         string `json:"userdata"`
 	Virtualmachineid string `json:"virtualmachineid"`
 }
@@ -761,6 +780,8 @@
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Lastname            string `json:"lastname"`
 	Roleid              string `json:"roleid"`
 	Rolename            string `json:"rolename"`
@@ -832,6 +853,8 @@
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Lastname            string `json:"lastname"`
 	Roleid              string `json:"roleid"`
 	Rolename            string `json:"rolename"`
@@ -896,6 +919,8 @@
 
 type RegisterUserKeysResponse struct {
 	Apikey    string `json:"apikey"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Secretkey string `json:"secretkey"`
 }
 
@@ -908,6 +933,9 @@
 	if p.p == nil {
 		return u
 	}
+	if v, found := p.p["currentpassword"]; found {
+		u.Set("currentpassword", v.(string))
+	}
 	if v, found := p.p["email"]; found {
 		u.Set("email", v.(string))
 	}
@@ -938,6 +966,14 @@
 	return u
 }
 
+func (p *UpdateUserParams) SetCurrentpassword(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["currentpassword"] = v
+	return
+}
+
 func (p *UpdateUserParams) SetEmail(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1047,6 +1083,8 @@
 	Id                  string `json:"id"`
 	Iscallerchilddomain bool   `json:"iscallerchilddomain"`
 	Isdefault           bool   `json:"isdefault"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
 	Lastname            string `json:"lastname"`
 	Roleid              string `json:"roleid"`
 	Rolename            string `json:"rolename"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/VLANService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/VLANService.go
index 754b19e..15555c4 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/VLANService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/VLANService.go
@@ -272,6 +272,8 @@
 	Id                string `json:"id"`
 	Ip6cidr           string `json:"ip6cidr"`
 	Ip6gateway        string `json:"ip6gateway"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Netmask           string `json:"netmask"`
 	Networkid         string `json:"networkid"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
@@ -383,6 +385,8 @@
 	Domainid          string `json:"domainid"`
 	Guestvlanrange    string `json:"guestvlanrange"`
 	Id                string `json:"id"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Physicalnetworkid int64  `json:"physicalnetworkid"`
 	Project           string `json:"project"`
 	Projectid         string `json:"projectid"`
@@ -438,6 +442,8 @@
 
 type DeleteVlanIpRangeResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -456,6 +462,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteVlanIpRangeResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -651,6 +665,8 @@
 	Domainid          string `json:"domainid"`
 	Guestvlanrange    string `json:"guestvlanrange"`
 	Id                string `json:"id"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Physicalnetworkid int64  `json:"physicalnetworkid"`
 	Project           string `json:"project"`
 	Projectid         string `json:"projectid"`
@@ -889,6 +905,8 @@
 	Id                string `json:"id"`
 	Ip6cidr           string `json:"ip6cidr"`
 	Ip6gateway        string `json:"ip6gateway"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 	Netmask           string `json:"netmask"`
 	Networkid         string `json:"networkid"`
 	Physicalnetworkid string `json:"physicalnetworkid"`
@@ -965,7 +983,8 @@
 }
 
 type ReleaseDedicatedGuestVlanRangeResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/VMGroupService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/VMGroupService.go
index 83c3238..450010a 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/VMGroupService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/VMGroupService.go
@@ -110,6 +110,8 @@
 	Domain    string `json:"domain"`
 	Domainid  string `json:"domainid"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Name      string `json:"name"`
 	Project   string `json:"project"`
 	Projectid string `json:"projectid"`
@@ -164,6 +166,8 @@
 
 type DeleteInstanceGroupResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -182,6 +186,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteInstanceGroupResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -429,6 +441,8 @@
 	Domain    string `json:"domain"`
 	Domainid  string `json:"domainid"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Name      string `json:"name"`
 	Project   string `json:"project"`
 	Projectid string `json:"projectid"`
@@ -498,6 +512,8 @@
 	Domain    string `json:"domain"`
 	Domainid  string `json:"domainid"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Name      string `json:"name"`
 	Project   string `json:"project"`
 	Projectid string `json:"projectid"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/VPCService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/VPCService.go
index 149bb4f..4ce00e2 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/VPCService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/VPCService.go
@@ -185,7 +185,6 @@
 }
 
 type CreatePrivateGatewayResponse struct {
-	JobID              string `json:"jobid"`
 	Account            string `json:"account"`
 	Aclid              string `json:"aclid"`
 	Domain             string `json:"domain"`
@@ -193,6 +192,8 @@
 	Gateway            string `json:"gateway"`
 	Id                 string `json:"id"`
 	Ipaddress          string `json:"ipaddress"`
+	JobID              string `json:"jobid"`
+	Jobstatus          int    `json:"jobstatus"`
 	Netmask            string `json:"netmask"`
 	Physicalnetworkid  string `json:"physicalnetworkid"`
 	Project            string `json:"project"`
@@ -285,13 +286,14 @@
 }
 
 type CreateStaticRouteResponse struct {
-	JobID     string `json:"jobid"`
 	Account   string `json:"account"`
 	Cidr      string `json:"cidr"`
 	Domain    string `json:"domain"`
 	Domainid  string `json:"domainid"`
 	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"`
@@ -483,7 +485,6 @@
 }
 
 type CreateVPCResponse struct {
-	JobID                string                     `json:"jobid"`
 	Account              string                     `json:"account"`
 	Cidr                 string                     `json:"cidr"`
 	Created              string                     `json:"created"`
@@ -493,6 +494,8 @@
 	Domainid             string                     `json:"domainid"`
 	Fordisplay           bool                       `json:"fordisplay"`
 	Id                   string                     `json:"id"`
+	JobID                string                     `json:"jobid"`
+	Jobstatus            int                        `json:"jobstatus"`
 	Name                 string                     `json:"name"`
 	Network              []CreateVPCResponseNetwork `json:"network"`
 	Networkdomain        string                     `json:"networkdomain"`
@@ -742,12 +745,13 @@
 }
 
 type CreateVPCOfferingResponse struct {
-	JobID                  string                             `json:"jobid"`
 	Created                string                             `json:"created"`
 	Displaytext            string                             `json:"displaytext"`
 	Distributedvpcrouter   bool                               `json:"distributedvpcrouter"`
 	Id                     string                             `json:"id"`
 	Isdefault              bool                               `json:"isdefault"`
+	JobID                  string                             `json:"jobid"`
+	Jobstatus              int                                `json:"jobstatus"`
 	Name                   string                             `json:"name"`
 	Service                []CreateVPCOfferingResponseService `json:"service"`
 	State                  string                             `json:"state"`
@@ -839,8 +843,9 @@
 }
 
 type DeletePrivateGatewayResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -907,8 +912,9 @@
 }
 
 type DeleteStaticRouteResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -975,8 +981,9 @@
 }
 
 type DeleteVPCResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1043,8 +1050,9 @@
 }
 
 type DeleteVPCOfferingResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1276,6 +1284,8 @@
 	Gateway            string `json:"gateway"`
 	Id                 string `json:"id"`
 	Ipaddress          string `json:"ipaddress"`
+	JobID              string `json:"jobid"`
+	Jobstatus          int    `json:"jobstatus"`
 	Netmask            string `json:"netmask"`
 	Physicalnetworkid  string `json:"physicalnetworkid"`
 	Project            string `json:"project"`
@@ -1509,6 +1519,8 @@
 	Domainid  string `json:"domainid"`
 	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"`
@@ -1748,6 +1760,8 @@
 	Distributedvpcrouter   bool                 `json:"distributedvpcrouter"`
 	Id                     string               `json:"id"`
 	Isdefault              bool                 `json:"isdefault"`
+	JobID                  string               `json:"jobid"`
+	Jobstatus              int                  `json:"jobstatus"`
 	Name                   string               `json:"name"`
 	Service                []VPCOfferingService `json:"service"`
 	State                  string               `json:"state"`
@@ -2130,6 +2144,8 @@
 	Domainid             string               `json:"domainid"`
 	Fordisplay           bool                 `json:"fordisplay"`
 	Id                   string               `json:"id"`
+	JobID                string               `json:"jobid"`
+	Jobstatus            int                  `json:"jobstatus"`
 	Name                 string               `json:"name"`
 	Network              []VPCNetwork         `json:"network"`
 	Networkdomain        string               `json:"networkdomain"`
@@ -2335,7 +2351,6 @@
 }
 
 type RestartVPCResponse struct {
-	JobID                string                      `json:"jobid"`
 	Account              string                      `json:"account"`
 	Cidr                 string                      `json:"cidr"`
 	Created              string                      `json:"created"`
@@ -2345,6 +2360,8 @@
 	Domainid             string                      `json:"domainid"`
 	Fordisplay           bool                        `json:"fordisplay"`
 	Id                   string                      `json:"id"`
+	JobID                string                      `json:"jobid"`
+	Jobstatus            int                         `json:"jobstatus"`
 	Name                 string                      `json:"name"`
 	Network              []RestartVPCResponseNetwork `json:"network"`
 	Networkdomain        string                      `json:"networkdomain"`
@@ -2571,7 +2588,6 @@
 }
 
 type UpdateVPCResponse struct {
-	JobID                string                     `json:"jobid"`
 	Account              string                     `json:"account"`
 	Cidr                 string                     `json:"cidr"`
 	Created              string                     `json:"created"`
@@ -2581,6 +2597,8 @@
 	Domainid             string                     `json:"domainid"`
 	Fordisplay           bool                       `json:"fordisplay"`
 	Id                   string                     `json:"id"`
+	JobID                string                     `json:"jobid"`
+	Jobstatus            int                        `json:"jobstatus"`
 	Name                 string                     `json:"name"`
 	Network              []UpdateVPCResponseNetwork `json:"network"`
 	Networkdomain        string                     `json:"networkdomain"`
@@ -2795,12 +2813,13 @@
 }
 
 type UpdateVPCOfferingResponse struct {
-	JobID                  string                             `json:"jobid"`
 	Created                string                             `json:"created"`
 	Displaytext            string                             `json:"displaytext"`
 	Distributedvpcrouter   bool                               `json:"distributedvpcrouter"`
 	Id                     string                             `json:"id"`
 	Isdefault              bool                               `json:"isdefault"`
+	JobID                  string                             `json:"jobid"`
+	Jobstatus              int                                `json:"jobstatus"`
 	Name                   string                             `json:"name"`
 	Service                []UpdateVPCOfferingResponseService `json:"service"`
 	State                  string                             `json:"state"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/VPNService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/VPNService.go
index 796de85..01f651a 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/VPNService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/VPNService.go
@@ -137,11 +137,12 @@
 }
 
 type AddVpnUserResponse struct {
-	JobID     string `json:"jobid"`
 	Account   string `json:"account"`
 	Domain    string `json:"domain"`
 	Domainid  string `json:"domainid"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Project   string `json:"project"`
 	Projectid string `json:"projectid"`
 	State     string `json:"state"`
@@ -273,13 +274,14 @@
 }
 
 type CreateRemoteAccessVpnResponse struct {
-	JobID        string `json:"jobid"`
 	Account      string `json:"account"`
 	Domain       string `json:"domain"`
 	Domainid     string `json:"domainid"`
 	Fordisplay   bool   `json:"fordisplay"`
 	Id           string `json:"id"`
 	Iprange      string `json:"iprange"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Presharedkey string `json:"presharedkey"`
 	Project      string `json:"project"`
 	Projectid    string `json:"projectid"`
@@ -392,7 +394,6 @@
 }
 
 type CreateVpnConnectionResponse struct {
-	JobID                string `json:"jobid"`
 	Account              string `json:"account"`
 	Cidrlist             string `json:"cidrlist"`
 	Created              string `json:"created"`
@@ -408,6 +409,8 @@
 	Ikelifetime          int64  `json:"ikelifetime"`
 	Ikepolicy            string `json:"ikepolicy"`
 	Ipsecpsk             string `json:"ipsecpsk"`
+	JobID                string `json:"jobid"`
+	Jobstatus            int    `json:"jobstatus"`
 	Passive              bool   `json:"passive"`
 	Project              string `json:"project"`
 	Projectid            string `json:"projectid"`
@@ -626,7 +629,6 @@
 }
 
 type CreateVpnCustomerGatewayResponse struct {
-	JobID       string `json:"jobid"`
 	Account     string `json:"account"`
 	Cidrlist    string `json:"cidrlist"`
 	Domain      string `json:"domain"`
@@ -641,6 +643,8 @@
 	Ikepolicy   string `json:"ikepolicy"`
 	Ipaddress   string `json:"ipaddress"`
 	Ipsecpsk    string `json:"ipsecpsk"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Project     string `json:"project"`
 	Projectid   string `json:"projectid"`
@@ -727,12 +731,13 @@
 }
 
 type CreateVpnGatewayResponse struct {
-	JobID      string `json:"jobid"`
 	Account    string `json:"account"`
 	Domain     string `json:"domain"`
 	Domainid   string `json:"domainid"`
 	Fordisplay bool   `json:"fordisplay"`
 	Id         string `json:"id"`
+	JobID      string `json:"jobid"`
+	Jobstatus  int    `json:"jobstatus"`
 	Project    string `json:"project"`
 	Projectid  string `json:"projectid"`
 	Publicip   string `json:"publicip"`
@@ -803,8 +808,9 @@
 }
 
 type DeleteRemoteAccessVpnResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -871,8 +877,9 @@
 }
 
 type DeleteVpnConnectionResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -939,8 +946,9 @@
 }
 
 type DeleteVpnCustomerGatewayResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1007,8 +1015,9 @@
 }
 
 type DeleteVpnGatewayResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1229,6 +1238,8 @@
 	Fordisplay   bool   `json:"fordisplay"`
 	Id           string `json:"id"`
 	Iprange      string `json:"iprange"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Presharedkey string `json:"presharedkey"`
 	Project      string `json:"project"`
 	Projectid    string `json:"projectid"`
@@ -1452,6 +1463,8 @@
 	Ikelifetime          int64  `json:"ikelifetime"`
 	Ikepolicy            string `json:"ikepolicy"`
 	Ipsecpsk             string `json:"ipsecpsk"`
+	JobID                string `json:"jobid"`
+	Jobstatus            int    `json:"jobstatus"`
 	Passive              bool   `json:"passive"`
 	Project              string `json:"project"`
 	Projectid            string `json:"projectid"`
@@ -1703,6 +1716,8 @@
 	Ikepolicy   string `json:"ikepolicy"`
 	Ipaddress   string `json:"ipaddress"`
 	Ipsecpsk    string `json:"ipsecpsk"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Project     string `json:"project"`
 	Projectid   string `json:"projectid"`
@@ -1914,6 +1929,8 @@
 	Domainid   string `json:"domainid"`
 	Fordisplay bool   `json:"fordisplay"`
 	Id         string `json:"id"`
+	JobID      string `json:"jobid"`
+	Jobstatus  int    `json:"jobstatus"`
 	Project    string `json:"project"`
 	Projectid  string `json:"projectid"`
 	Publicip   string `json:"publicip"`
@@ -2113,6 +2130,8 @@
 	Domain    string `json:"domain"`
 	Domainid  string `json:"domainid"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Project   string `json:"project"`
 	Projectid string `json:"projectid"`
 	State     string `json:"state"`
@@ -2215,8 +2234,9 @@
 }
 
 type RemoveVpnUserResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -2310,7 +2330,6 @@
 }
 
 type ResetVpnConnectionResponse struct {
-	JobID                string `json:"jobid"`
 	Account              string `json:"account"`
 	Cidrlist             string `json:"cidrlist"`
 	Created              string `json:"created"`
@@ -2326,6 +2345,8 @@
 	Ikelifetime          int64  `json:"ikelifetime"`
 	Ikepolicy            string `json:"ikepolicy"`
 	Ipsecpsk             string `json:"ipsecpsk"`
+	JobID                string `json:"jobid"`
+	Jobstatus            int    `json:"jobstatus"`
 	Passive              bool   `json:"passive"`
 	Project              string `json:"project"`
 	Projectid            string `json:"projectid"`
@@ -2427,13 +2448,14 @@
 }
 
 type UpdateRemoteAccessVpnResponse struct {
-	JobID        string `json:"jobid"`
 	Account      string `json:"account"`
 	Domain       string `json:"domain"`
 	Domainid     string `json:"domainid"`
 	Fordisplay   bool   `json:"fordisplay"`
 	Id           string `json:"id"`
 	Iprange      string `json:"iprange"`
+	JobID        string `json:"jobid"`
+	Jobstatus    int    `json:"jobstatus"`
 	Presharedkey string `json:"presharedkey"`
 	Project      string `json:"project"`
 	Projectid    string `json:"projectid"`
@@ -2533,7 +2555,6 @@
 }
 
 type UpdateVpnConnectionResponse struct {
-	JobID                string `json:"jobid"`
 	Account              string `json:"account"`
 	Cidrlist             string `json:"cidrlist"`
 	Created              string `json:"created"`
@@ -2549,6 +2570,8 @@
 	Ikelifetime          int64  `json:"ikelifetime"`
 	Ikepolicy            string `json:"ikepolicy"`
 	Ipsecpsk             string `json:"ipsecpsk"`
+	JobID                string `json:"jobid"`
+	Jobstatus            int    `json:"jobstatus"`
 	Passive              bool   `json:"passive"`
 	Project              string `json:"project"`
 	Projectid            string `json:"projectid"`
@@ -2768,7 +2791,6 @@
 }
 
 type UpdateVpnCustomerGatewayResponse struct {
-	JobID       string `json:"jobid"`
 	Account     string `json:"account"`
 	Cidrlist    string `json:"cidrlist"`
 	Domain      string `json:"domain"`
@@ -2783,6 +2805,8 @@
 	Ikepolicy   string `json:"ikepolicy"`
 	Ipaddress   string `json:"ipaddress"`
 	Ipsecpsk    string `json:"ipsecpsk"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Name        string `json:"name"`
 	Project     string `json:"project"`
 	Projectid   string `json:"projectid"`
@@ -2880,12 +2904,13 @@
 }
 
 type UpdateVpnGatewayResponse struct {
-	JobID      string `json:"jobid"`
 	Account    string `json:"account"`
 	Domain     string `json:"domain"`
 	Domainid   string `json:"domainid"`
 	Fordisplay bool   `json:"fordisplay"`
 	Id         string `json:"id"`
+	JobID      string `json:"jobid"`
+	Jobstatus  int    `json:"jobstatus"`
 	Project    string `json:"project"`
 	Projectid  string `json:"projectid"`
 	Publicip   string `json:"publicip"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/VirtualMachineService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/VirtualMachineService.go
index 638d814..431de3a 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/VirtualMachineService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/VirtualMachineService.go
@@ -142,7 +142,6 @@
 }
 
 type AddNicToVirtualMachineResponse struct {
-	JobID                 string                                        `json:"jobid"`
 	Account               string                                        `json:"account"`
 	Affinitygroup         []AddNicToVirtualMachineResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                           `json:"cpunumber"`
@@ -174,6 +173,8 @@
 	Isodisplaytext        string                                        `json:"isodisplaytext"`
 	Isoid                 string                                        `json:"isoid"`
 	Isoname               string                                        `json:"isoname"`
+	JobID                 string                                        `json:"jobid"`
+	Jobstatus             int                                           `json:"jobstatus"`
 	Keypair               string                                        `json:"keypair"`
 	Memory                int                                           `json:"memory"`
 	Memoryintfreekbs      int64                                         `json:"memoryintfreekbs"`
@@ -183,7 +184,7 @@
 	Networkkbsread        int64                                         `json:"networkkbsread"`
 	Networkkbswrite       int64                                         `json:"networkkbswrite"`
 	Nic                   []Nic                                         `json:"nic"`
-	Ostypeid              int64                                         `json:"ostypeid"`
+	Ostypeid              string                                        `json:"ostypeid"`
 	Password              string                                        `json:"password"`
 	Passwordenabled       bool                                          `json:"passwordenabled"`
 	Project               string                                        `json:"project"`
@@ -197,6 +198,7 @@
 	Serviceofferingname   string                                        `json:"serviceofferingname"`
 	Servicestate          string                                        `json:"servicestate"`
 	State                 string                                        `json:"state"`
+	Tags                  []Tags                                        `json:"tags"`
 	Templatedisplaytext   string                                        `json:"templatedisplaytext"`
 	Templateid            string                                        `json:"templateid"`
 	Templatename          string                                        `json:"templatename"`
@@ -249,6 +251,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *AddNicToVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias AddNicToVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type AssignVirtualMachineParams struct {
 	p map[string]interface{}
 }
@@ -385,6 +414,8 @@
 	Isodisplaytext        string                                      `json:"isodisplaytext"`
 	Isoid                 string                                      `json:"isoid"`
 	Isoname               string                                      `json:"isoname"`
+	JobID                 string                                      `json:"jobid"`
+	Jobstatus             int                                         `json:"jobstatus"`
 	Keypair               string                                      `json:"keypair"`
 	Memory                int                                         `json:"memory"`
 	Memoryintfreekbs      int64                                       `json:"memoryintfreekbs"`
@@ -394,7 +425,7 @@
 	Networkkbsread        int64                                       `json:"networkkbsread"`
 	Networkkbswrite       int64                                       `json:"networkkbswrite"`
 	Nic                   []Nic                                       `json:"nic"`
-	Ostypeid              int64                                       `json:"ostypeid"`
+	Ostypeid              string                                      `json:"ostypeid"`
 	Password              string                                      `json:"password"`
 	Passwordenabled       bool                                        `json:"passwordenabled"`
 	Project               string                                      `json:"project"`
@@ -408,6 +439,7 @@
 	Serviceofferingname   string                                      `json:"serviceofferingname"`
 	Servicestate          string                                      `json:"servicestate"`
 	State                 string                                      `json:"state"`
+	Tags                  []Tags                                      `json:"tags"`
 	Templatedisplaytext   string                                      `json:"templatedisplaytext"`
 	Templateid            string                                      `json:"templateid"`
 	Templatename          string                                      `json:"templatename"`
@@ -460,6 +492,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *AssignVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias AssignVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type ChangeServiceForVirtualMachineParams struct {
 	p map[string]interface{}
 }
@@ -566,6 +625,8 @@
 	Isodisplaytext        string                                                `json:"isodisplaytext"`
 	Isoid                 string                                                `json:"isoid"`
 	Isoname               string                                                `json:"isoname"`
+	JobID                 string                                                `json:"jobid"`
+	Jobstatus             int                                                   `json:"jobstatus"`
 	Keypair               string                                                `json:"keypair"`
 	Memory                int                                                   `json:"memory"`
 	Memoryintfreekbs      int64                                                 `json:"memoryintfreekbs"`
@@ -575,7 +636,7 @@
 	Networkkbsread        int64                                                 `json:"networkkbsread"`
 	Networkkbswrite       int64                                                 `json:"networkkbswrite"`
 	Nic                   []Nic                                                 `json:"nic"`
-	Ostypeid              int64                                                 `json:"ostypeid"`
+	Ostypeid              string                                                `json:"ostypeid"`
 	Password              string                                                `json:"password"`
 	Passwordenabled       bool                                                  `json:"passwordenabled"`
 	Project               string                                                `json:"project"`
@@ -589,6 +650,7 @@
 	Serviceofferingname   string                                                `json:"serviceofferingname"`
 	Servicestate          string                                                `json:"servicestate"`
 	State                 string                                                `json:"state"`
+	Tags                  []Tags                                                `json:"tags"`
 	Templatedisplaytext   string                                                `json:"templatedisplaytext"`
 	Templateid            string                                                `json:"templateid"`
 	Templatename          string                                                `json:"templatename"`
@@ -641,6 +703,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *ChangeServiceForVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias ChangeServiceForVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type CleanVMReservationsParams struct {
 	p map[string]interface{}
 }
@@ -692,8 +781,9 @@
 }
 
 type CleanVMReservationsResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -759,6 +849,9 @@
 	if v, found := p.p["domainid"]; found {
 		u.Set("domainid", v.(string))
 	}
+	if v, found := p.p["extraconfig"]; found {
+		u.Set("extraconfig", v.(string))
+	}
 	if v, found := p.p["group"]; found {
 		u.Set("group", v.(string))
 	}
@@ -932,6 +1025,14 @@
 	return
 }
 
+func (p *DeployVirtualMachineParams) SetExtraconfig(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["extraconfig"] = v
+	return
+}
+
 func (p *DeployVirtualMachineParams) SetGroup(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1147,7 +1248,6 @@
 }
 
 type DeployVirtualMachineResponse struct {
-	JobID                 string                                      `json:"jobid"`
 	Account               string                                      `json:"account"`
 	Affinitygroup         []DeployVirtualMachineResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                         `json:"cpunumber"`
@@ -1179,6 +1279,8 @@
 	Isodisplaytext        string                                      `json:"isodisplaytext"`
 	Isoid                 string                                      `json:"isoid"`
 	Isoname               string                                      `json:"isoname"`
+	JobID                 string                                      `json:"jobid"`
+	Jobstatus             int                                         `json:"jobstatus"`
 	Keypair               string                                      `json:"keypair"`
 	Memory                int                                         `json:"memory"`
 	Memoryintfreekbs      int64                                       `json:"memoryintfreekbs"`
@@ -1188,7 +1290,7 @@
 	Networkkbsread        int64                                       `json:"networkkbsread"`
 	Networkkbswrite       int64                                       `json:"networkkbswrite"`
 	Nic                   []Nic                                       `json:"nic"`
-	Ostypeid              int64                                       `json:"ostypeid"`
+	Ostypeid              string                                      `json:"ostypeid"`
 	Password              string                                      `json:"password"`
 	Passwordenabled       bool                                        `json:"passwordenabled"`
 	Project               string                                      `json:"project"`
@@ -1202,6 +1304,7 @@
 	Serviceofferingname   string                                      `json:"serviceofferingname"`
 	Servicestate          string                                      `json:"servicestate"`
 	State                 string                                      `json:"state"`
+	Tags                  []Tags                                      `json:"tags"`
 	Templatedisplaytext   string                                      `json:"templatedisplaytext"`
 	Templateid            string                                      `json:"templateid"`
 	Templatename          string                                      `json:"templatename"`
@@ -1254,6 +1357,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *DeployVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias DeployVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type DestroyVirtualMachineParams struct {
 	p map[string]interface{}
 }
@@ -1270,6 +1400,10 @@
 	if v, found := p.p["id"]; found {
 		u.Set("id", v.(string))
 	}
+	if v, found := p.p["volumeids"]; found {
+		vv := strings.Join(v.([]string), ",")
+		u.Set("volumeids", vv)
+	}
 	return u
 }
 
@@ -1289,6 +1423,14 @@
 	return
 }
 
+func (p *DestroyVirtualMachineParams) SetVolumeids(v []string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["volumeids"] = v
+	return
+}
+
 // You should always use this function to get a new DestroyVirtualMachineParams instance,
 // as then you are sure you have configured all required params
 func (s *VirtualMachineService) NewDestroyVirtualMachineParams(id string) *DestroyVirtualMachineParams {
@@ -1334,7 +1476,6 @@
 }
 
 type DestroyVirtualMachineResponse struct {
-	JobID                 string                                       `json:"jobid"`
 	Account               string                                       `json:"account"`
 	Affinitygroup         []DestroyVirtualMachineResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                          `json:"cpunumber"`
@@ -1366,6 +1507,8 @@
 	Isodisplaytext        string                                       `json:"isodisplaytext"`
 	Isoid                 string                                       `json:"isoid"`
 	Isoname               string                                       `json:"isoname"`
+	JobID                 string                                       `json:"jobid"`
+	Jobstatus             int                                          `json:"jobstatus"`
 	Keypair               string                                       `json:"keypair"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
@@ -1375,7 +1518,7 @@
 	Networkkbsread        int64                                        `json:"networkkbsread"`
 	Networkkbswrite       int64                                        `json:"networkkbswrite"`
 	Nic                   []Nic                                        `json:"nic"`
-	Ostypeid              int64                                        `json:"ostypeid"`
+	Ostypeid              string                                       `json:"ostypeid"`
 	Password              string                                       `json:"password"`
 	Passwordenabled       bool                                         `json:"passwordenabled"`
 	Project               string                                       `json:"project"`
@@ -1389,6 +1532,7 @@
 	Serviceofferingname   string                                       `json:"serviceofferingname"`
 	Servicestate          string                                       `json:"servicestate"`
 	State                 string                                       `json:"state"`
+	Tags                  []Tags                                       `json:"tags"`
 	Templatedisplaytext   string                                       `json:"templatedisplaytext"`
 	Templateid            string                                       `json:"templateid"`
 	Templatename          string                                       `json:"templatename"`
@@ -1441,6 +1585,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *DestroyVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias DestroyVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type ExpungeVirtualMachineParams struct {
 	p map[string]interface{}
 }
@@ -1504,8 +1675,9 @@
 }
 
 type ExpungeVirtualMachineResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1558,6 +1730,8 @@
 
 type GetVMPasswordResponse struct {
 	Encryptedpassword string `json:"encryptedpassword"`
+	JobID             string `json:"jobid"`
+	Jobstatus         int    `json:"jobstatus"`
 }
 
 type ListVirtualMachinesParams struct {
@@ -2058,6 +2232,8 @@
 	Isodisplaytext        string                        `json:"isodisplaytext"`
 	Isoid                 string                        `json:"isoid"`
 	Isoname               string                        `json:"isoname"`
+	JobID                 string                        `json:"jobid"`
+	Jobstatus             int                           `json:"jobstatus"`
 	Keypair               string                        `json:"keypair"`
 	Memory                int                           `json:"memory"`
 	Memoryintfreekbs      int64                         `json:"memoryintfreekbs"`
@@ -2067,7 +2243,7 @@
 	Networkkbsread        int64                         `json:"networkkbsread"`
 	Networkkbswrite       int64                         `json:"networkkbswrite"`
 	Nic                   []Nic                         `json:"nic"`
-	Ostypeid              int64                         `json:"ostypeid"`
+	Ostypeid              string                        `json:"ostypeid"`
 	Password              string                        `json:"password"`
 	Passwordenabled       bool                          `json:"passwordenabled"`
 	Project               string                        `json:"project"`
@@ -2081,6 +2257,7 @@
 	Serviceofferingname   string                        `json:"serviceofferingname"`
 	Servicestate          string                        `json:"servicestate"`
 	State                 string                        `json:"state"`
+	Tags                  []Tags                        `json:"tags"`
 	Templatedisplaytext   string                        `json:"templatedisplaytext"`
 	Templateid            string                        `json:"templateid"`
 	Templatename          string                        `json:"templatename"`
@@ -2133,6 +2310,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *VirtualMachine) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias VirtualMachine
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type MigrateVirtualMachineParams struct {
 	p map[string]interface{}
 }
@@ -2223,7 +2427,6 @@
 }
 
 type MigrateVirtualMachineResponse struct {
-	JobID                 string                                       `json:"jobid"`
 	Account               string                                       `json:"account"`
 	Affinitygroup         []MigrateVirtualMachineResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                          `json:"cpunumber"`
@@ -2255,6 +2458,8 @@
 	Isodisplaytext        string                                       `json:"isodisplaytext"`
 	Isoid                 string                                       `json:"isoid"`
 	Isoname               string                                       `json:"isoname"`
+	JobID                 string                                       `json:"jobid"`
+	Jobstatus             int                                          `json:"jobstatus"`
 	Keypair               string                                       `json:"keypair"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
@@ -2264,7 +2469,7 @@
 	Networkkbsread        int64                                        `json:"networkkbsread"`
 	Networkkbswrite       int64                                        `json:"networkkbswrite"`
 	Nic                   []Nic                                        `json:"nic"`
-	Ostypeid              int64                                        `json:"ostypeid"`
+	Ostypeid              string                                       `json:"ostypeid"`
 	Password              string                                       `json:"password"`
 	Passwordenabled       bool                                         `json:"passwordenabled"`
 	Project               string                                       `json:"project"`
@@ -2278,6 +2483,7 @@
 	Serviceofferingname   string                                       `json:"serviceofferingname"`
 	Servicestate          string                                       `json:"servicestate"`
 	State                 string                                       `json:"state"`
+	Tags                  []Tags                                       `json:"tags"`
 	Templatedisplaytext   string                                       `json:"templatedisplaytext"`
 	Templateid            string                                       `json:"templateid"`
 	Templatename          string                                       `json:"templatename"`
@@ -2330,6 +2536,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *MigrateVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias MigrateVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type MigrateVirtualMachineWithVolumeParams struct {
 	p map[string]interface{}
 }
@@ -2426,7 +2659,6 @@
 }
 
 type MigrateVirtualMachineWithVolumeResponse struct {
-	JobID                 string                                                 `json:"jobid"`
 	Account               string                                                 `json:"account"`
 	Affinitygroup         []MigrateVirtualMachineWithVolumeResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                                    `json:"cpunumber"`
@@ -2458,6 +2690,8 @@
 	Isodisplaytext        string                                                 `json:"isodisplaytext"`
 	Isoid                 string                                                 `json:"isoid"`
 	Isoname               string                                                 `json:"isoname"`
+	JobID                 string                                                 `json:"jobid"`
+	Jobstatus             int                                                    `json:"jobstatus"`
 	Keypair               string                                                 `json:"keypair"`
 	Memory                int                                                    `json:"memory"`
 	Memoryintfreekbs      int64                                                  `json:"memoryintfreekbs"`
@@ -2467,7 +2701,7 @@
 	Networkkbsread        int64                                                  `json:"networkkbsread"`
 	Networkkbswrite       int64                                                  `json:"networkkbswrite"`
 	Nic                   []Nic                                                  `json:"nic"`
-	Ostypeid              int64                                                  `json:"ostypeid"`
+	Ostypeid              string                                                 `json:"ostypeid"`
 	Password              string                                                 `json:"password"`
 	Passwordenabled       bool                                                   `json:"passwordenabled"`
 	Project               string                                                 `json:"project"`
@@ -2481,6 +2715,7 @@
 	Serviceofferingname   string                                                 `json:"serviceofferingname"`
 	Servicestate          string                                                 `json:"servicestate"`
 	State                 string                                                 `json:"state"`
+	Tags                  []Tags                                                 `json:"tags"`
 	Templatedisplaytext   string                                                 `json:"templatedisplaytext"`
 	Templateid            string                                                 `json:"templateid"`
 	Templatename          string                                                 `json:"templatename"`
@@ -2533,6 +2768,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *MigrateVirtualMachineWithVolumeResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias MigrateVirtualMachineWithVolumeResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type RebootVirtualMachineParams struct {
 	p map[string]interface{}
 }
@@ -2601,7 +2863,6 @@
 }
 
 type RebootVirtualMachineResponse struct {
-	JobID                 string                                      `json:"jobid"`
 	Account               string                                      `json:"account"`
 	Affinitygroup         []RebootVirtualMachineResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                         `json:"cpunumber"`
@@ -2633,6 +2894,8 @@
 	Isodisplaytext        string                                      `json:"isodisplaytext"`
 	Isoid                 string                                      `json:"isoid"`
 	Isoname               string                                      `json:"isoname"`
+	JobID                 string                                      `json:"jobid"`
+	Jobstatus             int                                         `json:"jobstatus"`
 	Keypair               string                                      `json:"keypair"`
 	Memory                int                                         `json:"memory"`
 	Memoryintfreekbs      int64                                       `json:"memoryintfreekbs"`
@@ -2642,7 +2905,7 @@
 	Networkkbsread        int64                                       `json:"networkkbsread"`
 	Networkkbswrite       int64                                       `json:"networkkbswrite"`
 	Nic                   []Nic                                       `json:"nic"`
-	Ostypeid              int64                                       `json:"ostypeid"`
+	Ostypeid              string                                      `json:"ostypeid"`
 	Password              string                                      `json:"password"`
 	Passwordenabled       bool                                        `json:"passwordenabled"`
 	Project               string                                      `json:"project"`
@@ -2656,6 +2919,7 @@
 	Serviceofferingname   string                                      `json:"serviceofferingname"`
 	Servicestate          string                                      `json:"servicestate"`
 	State                 string                                      `json:"state"`
+	Tags                  []Tags                                      `json:"tags"`
 	Templatedisplaytext   string                                      `json:"templatedisplaytext"`
 	Templateid            string                                      `json:"templateid"`
 	Templatename          string                                      `json:"templatename"`
@@ -2708,6 +2972,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *RebootVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias RebootVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type RecoverVirtualMachineParams struct {
 	p map[string]interface{}
 }
@@ -2787,6 +3078,8 @@
 	Isodisplaytext        string                                       `json:"isodisplaytext"`
 	Isoid                 string                                       `json:"isoid"`
 	Isoname               string                                       `json:"isoname"`
+	JobID                 string                                       `json:"jobid"`
+	Jobstatus             int                                          `json:"jobstatus"`
 	Keypair               string                                       `json:"keypair"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
@@ -2796,7 +3089,7 @@
 	Networkkbsread        int64                                        `json:"networkkbsread"`
 	Networkkbswrite       int64                                        `json:"networkkbswrite"`
 	Nic                   []Nic                                        `json:"nic"`
-	Ostypeid              int64                                        `json:"ostypeid"`
+	Ostypeid              string                                       `json:"ostypeid"`
 	Password              string                                       `json:"password"`
 	Passwordenabled       bool                                         `json:"passwordenabled"`
 	Project               string                                       `json:"project"`
@@ -2810,6 +3103,7 @@
 	Serviceofferingname   string                                       `json:"serviceofferingname"`
 	Servicestate          string                                       `json:"servicestate"`
 	State                 string                                       `json:"state"`
+	Tags                  []Tags                                       `json:"tags"`
 	Templatedisplaytext   string                                       `json:"templatedisplaytext"`
 	Templateid            string                                       `json:"templateid"`
 	Templatename          string                                       `json:"templatename"`
@@ -2862,6 +3156,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *RecoverVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias RecoverVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type RemoveNicFromVirtualMachineParams struct {
 	p map[string]interface{}
 }
@@ -2942,7 +3263,6 @@
 }
 
 type RemoveNicFromVirtualMachineResponse struct {
-	JobID                 string                                             `json:"jobid"`
 	Account               string                                             `json:"account"`
 	Affinitygroup         []RemoveNicFromVirtualMachineResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                                `json:"cpunumber"`
@@ -2974,6 +3294,8 @@
 	Isodisplaytext        string                                             `json:"isodisplaytext"`
 	Isoid                 string                                             `json:"isoid"`
 	Isoname               string                                             `json:"isoname"`
+	JobID                 string                                             `json:"jobid"`
+	Jobstatus             int                                                `json:"jobstatus"`
 	Keypair               string                                             `json:"keypair"`
 	Memory                int                                                `json:"memory"`
 	Memoryintfreekbs      int64                                              `json:"memoryintfreekbs"`
@@ -2983,7 +3305,7 @@
 	Networkkbsread        int64                                              `json:"networkkbsread"`
 	Networkkbswrite       int64                                              `json:"networkkbswrite"`
 	Nic                   []Nic                                              `json:"nic"`
-	Ostypeid              int64                                              `json:"ostypeid"`
+	Ostypeid              string                                             `json:"ostypeid"`
 	Password              string                                             `json:"password"`
 	Passwordenabled       bool                                               `json:"passwordenabled"`
 	Project               string                                             `json:"project"`
@@ -2997,6 +3319,7 @@
 	Serviceofferingname   string                                             `json:"serviceofferingname"`
 	Servicestate          string                                             `json:"servicestate"`
 	State                 string                                             `json:"state"`
+	Tags                  []Tags                                             `json:"tags"`
 	Templatedisplaytext   string                                             `json:"templatedisplaytext"`
 	Templateid            string                                             `json:"templateid"`
 	Templatename          string                                             `json:"templatename"`
@@ -3049,6 +3372,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *RemoveNicFromVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias RemoveNicFromVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type ResetPasswordForVirtualMachineParams struct {
 	p map[string]interface{}
 }
@@ -3117,7 +3467,6 @@
 }
 
 type ResetPasswordForVirtualMachineResponse struct {
-	JobID                 string                                                `json:"jobid"`
 	Account               string                                                `json:"account"`
 	Affinitygroup         []ResetPasswordForVirtualMachineResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                                   `json:"cpunumber"`
@@ -3149,6 +3498,8 @@
 	Isodisplaytext        string                                                `json:"isodisplaytext"`
 	Isoid                 string                                                `json:"isoid"`
 	Isoname               string                                                `json:"isoname"`
+	JobID                 string                                                `json:"jobid"`
+	Jobstatus             int                                                   `json:"jobstatus"`
 	Keypair               string                                                `json:"keypair"`
 	Memory                int                                                   `json:"memory"`
 	Memoryintfreekbs      int64                                                 `json:"memoryintfreekbs"`
@@ -3158,7 +3509,7 @@
 	Networkkbsread        int64                                                 `json:"networkkbsread"`
 	Networkkbswrite       int64                                                 `json:"networkkbswrite"`
 	Nic                   []Nic                                                 `json:"nic"`
-	Ostypeid              int64                                                 `json:"ostypeid"`
+	Ostypeid              string                                                `json:"ostypeid"`
 	Password              string                                                `json:"password"`
 	Passwordenabled       bool                                                  `json:"passwordenabled"`
 	Project               string                                                `json:"project"`
@@ -3172,6 +3523,7 @@
 	Serviceofferingname   string                                                `json:"serviceofferingname"`
 	Servicestate          string                                                `json:"servicestate"`
 	State                 string                                                `json:"state"`
+	Tags                  []Tags                                                `json:"tags"`
 	Templatedisplaytext   string                                                `json:"templatedisplaytext"`
 	Templateid            string                                                `json:"templateid"`
 	Templatename          string                                                `json:"templatename"`
@@ -3224,6 +3576,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *ResetPasswordForVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias ResetPasswordForVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type RestoreVirtualMachineParams struct {
 	p map[string]interface{}
 }
@@ -3303,7 +3682,6 @@
 }
 
 type RestoreVirtualMachineResponse struct {
-	JobID                 string                                       `json:"jobid"`
 	Account               string                                       `json:"account"`
 	Affinitygroup         []RestoreVirtualMachineResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                          `json:"cpunumber"`
@@ -3335,6 +3713,8 @@
 	Isodisplaytext        string                                       `json:"isodisplaytext"`
 	Isoid                 string                                       `json:"isoid"`
 	Isoname               string                                       `json:"isoname"`
+	JobID                 string                                       `json:"jobid"`
+	Jobstatus             int                                          `json:"jobstatus"`
 	Keypair               string                                       `json:"keypair"`
 	Memory                int                                          `json:"memory"`
 	Memoryintfreekbs      int64                                        `json:"memoryintfreekbs"`
@@ -3344,7 +3724,7 @@
 	Networkkbsread        int64                                        `json:"networkkbsread"`
 	Networkkbswrite       int64                                        `json:"networkkbswrite"`
 	Nic                   []Nic                                        `json:"nic"`
-	Ostypeid              int64                                        `json:"ostypeid"`
+	Ostypeid              string                                       `json:"ostypeid"`
 	Password              string                                       `json:"password"`
 	Passwordenabled       bool                                         `json:"passwordenabled"`
 	Project               string                                       `json:"project"`
@@ -3358,6 +3738,7 @@
 	Serviceofferingname   string                                       `json:"serviceofferingname"`
 	Servicestate          string                                       `json:"servicestate"`
 	State                 string                                       `json:"state"`
+	Tags                  []Tags                                       `json:"tags"`
 	Templatedisplaytext   string                                       `json:"templatedisplaytext"`
 	Templateid            string                                       `json:"templateid"`
 	Templatename          string                                       `json:"templatename"`
@@ -3410,6 +3791,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *RestoreVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias RestoreVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type ScaleVirtualMachineParams struct {
 	p map[string]interface{}
 }
@@ -3500,8 +3908,9 @@
 }
 
 type ScaleVirtualMachineResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -3595,7 +4004,6 @@
 }
 
 type StartVirtualMachineResponse struct {
-	JobID                 string                                     `json:"jobid"`
 	Account               string                                     `json:"account"`
 	Affinitygroup         []StartVirtualMachineResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                        `json:"cpunumber"`
@@ -3627,6 +4035,8 @@
 	Isodisplaytext        string                                     `json:"isodisplaytext"`
 	Isoid                 string                                     `json:"isoid"`
 	Isoname               string                                     `json:"isoname"`
+	JobID                 string                                     `json:"jobid"`
+	Jobstatus             int                                        `json:"jobstatus"`
 	Keypair               string                                     `json:"keypair"`
 	Memory                int                                        `json:"memory"`
 	Memoryintfreekbs      int64                                      `json:"memoryintfreekbs"`
@@ -3636,7 +4046,7 @@
 	Networkkbsread        int64                                      `json:"networkkbsread"`
 	Networkkbswrite       int64                                      `json:"networkkbswrite"`
 	Nic                   []Nic                                      `json:"nic"`
-	Ostypeid              int64                                      `json:"ostypeid"`
+	Ostypeid              string                                     `json:"ostypeid"`
 	Password              string                                     `json:"password"`
 	Passwordenabled       bool                                       `json:"passwordenabled"`
 	Project               string                                     `json:"project"`
@@ -3650,6 +4060,7 @@
 	Serviceofferingname   string                                     `json:"serviceofferingname"`
 	Servicestate          string                                     `json:"servicestate"`
 	State                 string                                     `json:"state"`
+	Tags                  []Tags                                     `json:"tags"`
 	Templatedisplaytext   string                                     `json:"templatedisplaytext"`
 	Templateid            string                                     `json:"templateid"`
 	Templatename          string                                     `json:"templatename"`
@@ -3702,6 +4113,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *StartVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias StartVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type StopVirtualMachineParams struct {
 	p map[string]interface{}
 }
@@ -3782,7 +4220,6 @@
 }
 
 type StopVirtualMachineResponse struct {
-	JobID                 string                                    `json:"jobid"`
 	Account               string                                    `json:"account"`
 	Affinitygroup         []StopVirtualMachineResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                       `json:"cpunumber"`
@@ -3814,6 +4251,8 @@
 	Isodisplaytext        string                                    `json:"isodisplaytext"`
 	Isoid                 string                                    `json:"isoid"`
 	Isoname               string                                    `json:"isoname"`
+	JobID                 string                                    `json:"jobid"`
+	Jobstatus             int                                       `json:"jobstatus"`
 	Keypair               string                                    `json:"keypair"`
 	Memory                int                                       `json:"memory"`
 	Memoryintfreekbs      int64                                     `json:"memoryintfreekbs"`
@@ -3823,7 +4262,7 @@
 	Networkkbsread        int64                                     `json:"networkkbsread"`
 	Networkkbswrite       int64                                     `json:"networkkbswrite"`
 	Nic                   []Nic                                     `json:"nic"`
-	Ostypeid              int64                                     `json:"ostypeid"`
+	Ostypeid              string                                    `json:"ostypeid"`
 	Password              string                                    `json:"password"`
 	Passwordenabled       bool                                      `json:"passwordenabled"`
 	Project               string                                    `json:"project"`
@@ -3837,6 +4276,7 @@
 	Serviceofferingname   string                                    `json:"serviceofferingname"`
 	Servicestate          string                                    `json:"servicestate"`
 	State                 string                                    `json:"state"`
+	Tags                  []Tags                                    `json:"tags"`
 	Templatedisplaytext   string                                    `json:"templatedisplaytext"`
 	Templateid            string                                    `json:"templateid"`
 	Templatename          string                                    `json:"templatename"`
@@ -3889,6 +4329,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *StopVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias StopVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type UpdateDefaultNicForVirtualMachineParams struct {
 	p map[string]interface{}
 }
@@ -3969,7 +4436,6 @@
 }
 
 type UpdateDefaultNicForVirtualMachineResponse struct {
-	JobID                 string                                                   `json:"jobid"`
 	Account               string                                                   `json:"account"`
 	Affinitygroup         []UpdateDefaultNicForVirtualMachineResponseAffinitygroup `json:"affinitygroup"`
 	Cpunumber             int                                                      `json:"cpunumber"`
@@ -4001,6 +4467,8 @@
 	Isodisplaytext        string                                                   `json:"isodisplaytext"`
 	Isoid                 string                                                   `json:"isoid"`
 	Isoname               string                                                   `json:"isoname"`
+	JobID                 string                                                   `json:"jobid"`
+	Jobstatus             int                                                      `json:"jobstatus"`
 	Keypair               string                                                   `json:"keypair"`
 	Memory                int                                                      `json:"memory"`
 	Memoryintfreekbs      int64                                                    `json:"memoryintfreekbs"`
@@ -4010,7 +4478,7 @@
 	Networkkbsread        int64                                                    `json:"networkkbsread"`
 	Networkkbswrite       int64                                                    `json:"networkkbswrite"`
 	Nic                   []Nic                                                    `json:"nic"`
-	Ostypeid              int64                                                    `json:"ostypeid"`
+	Ostypeid              string                                                   `json:"ostypeid"`
 	Password              string                                                   `json:"password"`
 	Passwordenabled       bool                                                     `json:"passwordenabled"`
 	Project               string                                                   `json:"project"`
@@ -4024,6 +4492,7 @@
 	Serviceofferingname   string                                                   `json:"serviceofferingname"`
 	Servicestate          string                                                   `json:"servicestate"`
 	State                 string                                                   `json:"state"`
+	Tags                  []Tags                                                   `json:"tags"`
 	Templatedisplaytext   string                                                   `json:"templatedisplaytext"`
 	Templateid            string                                                   `json:"templateid"`
 	Templatename          string                                                   `json:"templatename"`
@@ -4076,6 +4545,33 @@
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
 
+func (r *UpdateDefaultNicForVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias UpdateDefaultNicForVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
+
 type UpdateVirtualMachineParams struct {
 	p map[string]interface{}
 }
@@ -4114,6 +4610,9 @@
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("displayvm", vv)
 	}
+	if v, found := p.p["extraconfig"]; found {
+		u.Set("extraconfig", v.(string))
+	}
 	if v, found := p.p["group"]; found {
 		u.Set("group", v.(string))
 	}
@@ -4199,6 +4698,14 @@
 	return
 }
 
+func (p *UpdateVirtualMachineParams) SetExtraconfig(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["extraconfig"] = v
+	return
+}
+
 func (p *UpdateVirtualMachineParams) SetGroup(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -4335,6 +4842,8 @@
 	Isodisplaytext        string                                      `json:"isodisplaytext"`
 	Isoid                 string                                      `json:"isoid"`
 	Isoname               string                                      `json:"isoname"`
+	JobID                 string                                      `json:"jobid"`
+	Jobstatus             int                                         `json:"jobstatus"`
 	Keypair               string                                      `json:"keypair"`
 	Memory                int                                         `json:"memory"`
 	Memoryintfreekbs      int64                                       `json:"memoryintfreekbs"`
@@ -4344,7 +4853,7 @@
 	Networkkbsread        int64                                       `json:"networkkbsread"`
 	Networkkbswrite       int64                                       `json:"networkkbswrite"`
 	Nic                   []Nic                                       `json:"nic"`
-	Ostypeid              int64                                       `json:"ostypeid"`
+	Ostypeid              string                                      `json:"ostypeid"`
 	Password              string                                      `json:"password"`
 	Passwordenabled       bool                                        `json:"passwordenabled"`
 	Project               string                                      `json:"project"`
@@ -4358,6 +4867,7 @@
 	Serviceofferingname   string                                      `json:"serviceofferingname"`
 	Servicestate          string                                      `json:"servicestate"`
 	State                 string                                      `json:"state"`
+	Tags                  []Tags                                      `json:"tags"`
 	Templatedisplaytext   string                                      `json:"templatedisplaytext"`
 	Templateid            string                                      `json:"templateid"`
 	Templatename          string                                      `json:"templatename"`
@@ -4409,3 +4919,30 @@
 	Type              string   `json:"type"`
 	VirtualmachineIds []string `json:"virtualmachineIds"`
 }
+
+func (r *UpdateVirtualMachineResponse) UnmarshalJSON(b []byte) error {
+	var m map[string]interface{}
+	err := json.Unmarshal(b, &m)
+	if err != nil {
+		return err
+	}
+
+	if success, ok := m["success"].(string); ok {
+		m["success"] = success == "true"
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
+	type alias UpdateVirtualMachineResponse
+	return json.Unmarshal(b, (*alias)(r))
+}
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/VolumeService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/VolumeService.go
index e7cf73f..e95c5e0 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/VolumeService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/VolumeService.go
@@ -116,7 +116,6 @@
 }
 
 type AttachVolumeResponse struct {
-	JobID                      string `json:"jobid"`
 	Account                    string `json:"account"`
 	Attached                   string `json:"attached"`
 	Chaininfo                  string `json:"chaininfo"`
@@ -141,6 +140,8 @@
 	Isodisplaytext             string `json:"isodisplaytext"`
 	Isoid                      string `json:"isoid"`
 	Isoname                    string `json:"isoname"`
+	JobID                      string `json:"jobid"`
+	Jobstatus                  int    `json:"jobstatus"`
 	Maxiops                    int64  `json:"maxiops"`
 	Miniops                    int64  `json:"miniops"`
 	Name                       string `json:"name"`
@@ -162,6 +163,7 @@
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
 	Templatename               string `json:"templatename"`
@@ -379,7 +381,6 @@
 }
 
 type CreateVolumeResponse struct {
-	JobID                      string `json:"jobid"`
 	Account                    string `json:"account"`
 	Attached                   string `json:"attached"`
 	Chaininfo                  string `json:"chaininfo"`
@@ -404,6 +405,8 @@
 	Isodisplaytext             string `json:"isodisplaytext"`
 	Isoid                      string `json:"isoid"`
 	Isoname                    string `json:"isoname"`
+	JobID                      string `json:"jobid"`
+	Jobstatus                  int    `json:"jobstatus"`
 	Maxiops                    int64  `json:"maxiops"`
 	Miniops                    int64  `json:"miniops"`
 	Name                       string `json:"name"`
@@ -425,6 +428,7 @@
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
 	Templatename               string `json:"templatename"`
@@ -488,6 +492,8 @@
 
 type DeleteVolumeResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -506,6 +512,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteVolumeResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -600,7 +614,6 @@
 }
 
 type DetachVolumeResponse struct {
-	JobID                      string `json:"jobid"`
 	Account                    string `json:"account"`
 	Attached                   string `json:"attached"`
 	Chaininfo                  string `json:"chaininfo"`
@@ -625,6 +638,8 @@
 	Isodisplaytext             string `json:"isodisplaytext"`
 	Isoid                      string `json:"isoid"`
 	Isoname                    string `json:"isoname"`
+	JobID                      string `json:"jobid"`
+	Jobstatus                  int    `json:"jobstatus"`
 	Maxiops                    int64  `json:"maxiops"`
 	Miniops                    int64  `json:"miniops"`
 	Name                       string `json:"name"`
@@ -646,6 +661,7 @@
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
 	Templatename               string `json:"templatename"`
@@ -763,12 +779,13 @@
 }
 
 type ExtractVolumeResponse struct {
-	JobID            string `json:"jobid"`
 	Accountid        string `json:"accountid"`
 	Created          string `json:"created"`
 	ExtractId        string `json:"extractId"`
 	ExtractMode      string `json:"extractMode"`
 	Id               string `json:"id"`
+	JobID            string `json:"jobid"`
+	Jobstatus        int    `json:"jobstatus"`
 	Name             string `json:"name"`
 	Resultstring     string `json:"resultstring"`
 	State            string `json:"state"`
@@ -828,7 +845,9 @@
 }
 
 type GetPathForVolumeResponse struct {
-	Path string `json:"path"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Path      string `json:"path"`
 }
 
 type GetSolidFireVolumeSizeParams struct {
@@ -879,7 +898,9 @@
 }
 
 type GetSolidFireVolumeSizeResponse struct {
-	SolidFireVolumeSize int64 `json:"solidFireVolumeSize"`
+	JobID               string `json:"jobid"`
+	Jobstatus           int    `json:"jobstatus"`
+	SolidFireVolumeSize int64  `json:"solidFireVolumeSize"`
 }
 
 type GetUploadParamsForVolumeParams struct {
@@ -1022,6 +1043,8 @@
 type GetUploadParamsForVolumeResponse struct {
 	Expires   string `json:"expires"`
 	Id        string `json:"id"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
 	Metadata  string `json:"metadata"`
 	PostURL   string `json:"postURL"`
 	Signature string `json:"signature"`
@@ -1075,6 +1098,8 @@
 }
 
 type GetVolumeiScsiNameResponse struct {
+	JobID           string `json:"jobid"`
+	Jobstatus       int    `json:"jobstatus"`
 	VolumeiScsiName string `json:"volumeiScsiName"`
 }
 
@@ -1468,6 +1493,8 @@
 	Isodisplaytext             string `json:"isodisplaytext"`
 	Isoid                      string `json:"isoid"`
 	Isoname                    string `json:"isoname"`
+	JobID                      string `json:"jobid"`
+	Jobstatus                  int    `json:"jobstatus"`
 	Maxiops                    int64  `json:"maxiops"`
 	Miniops                    int64  `json:"miniops"`
 	Name                       string `json:"name"`
@@ -1489,6 +1516,7 @@
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
 	Templatename               string `json:"templatename"`
@@ -1516,6 +1544,9 @@
 		vv := strconv.FormatBool(v.(bool))
 		u.Set("livemigrate", vv)
 	}
+	if v, found := p.p["newdiskofferingid"]; found {
+		u.Set("newdiskofferingid", v.(string))
+	}
 	if v, found := p.p["storageid"]; found {
 		u.Set("storageid", v.(string))
 	}
@@ -1533,6 +1564,14 @@
 	return
 }
 
+func (p *MigrateVolumeParams) SetNewdiskofferingid(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["newdiskofferingid"] = v
+	return
+}
+
 func (p *MigrateVolumeParams) SetStorageid(v string) {
 	if p.p == nil {
 		p.p = make(map[string]interface{})
@@ -1595,7 +1634,6 @@
 }
 
 type MigrateVolumeResponse struct {
-	JobID                      string `json:"jobid"`
 	Account                    string `json:"account"`
 	Attached                   string `json:"attached"`
 	Chaininfo                  string `json:"chaininfo"`
@@ -1620,6 +1658,8 @@
 	Isodisplaytext             string `json:"isodisplaytext"`
 	Isoid                      string `json:"isoid"`
 	Isoname                    string `json:"isoname"`
+	JobID                      string `json:"jobid"`
+	Jobstatus                  int    `json:"jobstatus"`
 	Maxiops                    int64  `json:"maxiops"`
 	Miniops                    int64  `json:"miniops"`
 	Name                       string `json:"name"`
@@ -1641,6 +1681,7 @@
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
 	Templatename               string `json:"templatename"`
@@ -1782,7 +1823,6 @@
 }
 
 type ResizeVolumeResponse struct {
-	JobID                      string `json:"jobid"`
 	Account                    string `json:"account"`
 	Attached                   string `json:"attached"`
 	Chaininfo                  string `json:"chaininfo"`
@@ -1807,6 +1847,8 @@
 	Isodisplaytext             string `json:"isodisplaytext"`
 	Isoid                      string `json:"isoid"`
 	Isoname                    string `json:"isoname"`
+	JobID                      string `json:"jobid"`
+	Jobstatus                  int    `json:"jobstatus"`
 	Maxiops                    int64  `json:"maxiops"`
 	Miniops                    int64  `json:"miniops"`
 	Name                       string `json:"name"`
@@ -1828,6 +1870,7 @@
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
 	Templatename               string `json:"templatename"`
@@ -1976,7 +2019,6 @@
 }
 
 type UpdateVolumeResponse struct {
-	JobID                      string `json:"jobid"`
 	Account                    string `json:"account"`
 	Attached                   string `json:"attached"`
 	Chaininfo                  string `json:"chaininfo"`
@@ -2001,6 +2043,8 @@
 	Isodisplaytext             string `json:"isodisplaytext"`
 	Isoid                      string `json:"isoid"`
 	Isoname                    string `json:"isoname"`
+	JobID                      string `json:"jobid"`
+	Jobstatus                  int    `json:"jobstatus"`
 	Maxiops                    int64  `json:"maxiops"`
 	Miniops                    int64  `json:"miniops"`
 	Name                       string `json:"name"`
@@ -2022,6 +2066,7 @@
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
 	Templatename               string `json:"templatename"`
@@ -2206,7 +2251,6 @@
 }
 
 type UploadVolumeResponse struct {
-	JobID                      string `json:"jobid"`
 	Account                    string `json:"account"`
 	Attached                   string `json:"attached"`
 	Chaininfo                  string `json:"chaininfo"`
@@ -2231,6 +2275,8 @@
 	Isodisplaytext             string `json:"isodisplaytext"`
 	Isoid                      string `json:"isoid"`
 	Isoname                    string `json:"isoname"`
+	JobID                      string `json:"jobid"`
+	Jobstatus                  int    `json:"jobstatus"`
 	Maxiops                    int64  `json:"maxiops"`
 	Miniops                    int64  `json:"miniops"`
 	Name                       string `json:"name"`
@@ -2252,6 +2298,7 @@
 	Storage                    string `json:"storage"`
 	Storageid                  string `json:"storageid"`
 	Storagetype                string `json:"storagetype"`
+	Tags                       []Tags `json:"tags"`
 	Templatedisplaytext        string `json:"templatedisplaytext"`
 	Templateid                 string `json:"templateid"`
 	Templatename               string `json:"templatename"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ZoneService.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ZoneService.go
index 1d8029d..277a792 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/ZoneService.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/ZoneService.go
@@ -236,6 +236,8 @@
 	Internaldns2          string                       `json:"internaldns2"`
 	Ip6dns1               string                       `json:"ip6dns1"`
 	Ip6dns2               string                       `json:"ip6dns2"`
+	JobID                 string                       `json:"jobid"`
+	Jobstatus             int                          `json:"jobstatus"`
 	Localstorageenabled   bool                         `json:"localstorageenabled"`
 	Name                  string                       `json:"name"`
 	Networktype           string                       `json:"networktype"`
@@ -351,11 +353,12 @@
 }
 
 type DedicateZoneResponse struct {
-	JobID           string `json:"jobid"`
 	Accountid       string `json:"accountid"`
 	Affinitygroupid string `json:"affinitygroupid"`
 	Domainid        string `json:"domainid"`
 	Id              string `json:"id"`
+	JobID           string `json:"jobid"`
+	Jobstatus       int    `json:"jobstatus"`
 	Zoneid          string `json:"zoneid"`
 	Zonename        string `json:"zonename"`
 }
@@ -409,6 +412,8 @@
 
 type DeleteZoneResponse struct {
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -427,6 +432,14 @@
 		}
 	}
 
+	if ostypeid, ok := m["ostypeid"].(float64); ok {
+		m["ostypeid"] = strconv.Itoa(int(ostypeid))
+		b, err = json.Marshal(m)
+		if err != nil {
+			return err
+		}
+	}
+
 	type alias DeleteZoneResponse
 	return json.Unmarshal(b, (*alias)(r))
 }
@@ -499,13 +512,14 @@
 }
 
 type DisableOutOfBandManagementForZoneResponse struct {
-	JobID       string `json:"jobid"`
 	Action      string `json:"action"`
 	Address     string `json:"address"`
 	Description string `json:"description"`
 	Driver      string `json:"driver"`
 	Enabled     bool   `json:"enabled"`
 	Hostid      string `json:"hostid"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Password    string `json:"password"`
 	Port        string `json:"port"`
 	Powerstate  string `json:"powerstate"`
@@ -581,13 +595,14 @@
 }
 
 type EnableOutOfBandManagementForZoneResponse struct {
-	JobID       string `json:"jobid"`
 	Action      string `json:"action"`
 	Address     string `json:"address"`
 	Description string `json:"description"`
 	Driver      string `json:"driver"`
 	Enabled     bool   `json:"enabled"`
 	Hostid      string `json:"hostid"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Password    string `json:"password"`
 	Port        string `json:"port"`
 	Powerstate  string `json:"powerstate"`
@@ -719,6 +734,8 @@
 	Affinitygroupid string `json:"affinitygroupid"`
 	Domainid        string `json:"domainid"`
 	Id              string `json:"id"`
+	JobID           string `json:"jobid"`
+	Jobstatus       int    `json:"jobstatus"`
 	Zoneid          string `json:"zoneid"`
 	Zonename        string `json:"zonename"`
 }
@@ -982,6 +999,8 @@
 	Internaldns2          string            `json:"internaldns2"`
 	Ip6dns1               string            `json:"ip6dns1"`
 	Ip6dns2               string            `json:"ip6dns2"`
+	JobID                 string            `json:"jobid"`
+	Jobstatus             int               `json:"jobstatus"`
 	Localstorageenabled   bool              `json:"localstorageenabled"`
 	Name                  string            `json:"name"`
 	Networktype           string            `json:"networktype"`
@@ -1069,8 +1088,9 @@
 }
 
 type ReleaseDedicatedZoneResponse struct {
-	JobID       string `json:"jobid"`
 	Displaytext string `json:"displaytext"`
+	JobID       string `json:"jobid"`
+	Jobstatus   int    `json:"jobstatus"`
 	Success     bool   `json:"success"`
 }
 
@@ -1089,7 +1109,8 @@
 	if v, found := p.p["details"]; found {
 		i := 0
 		for k, vv := range v.(map[string]string) {
-			u.Set(fmt.Sprintf("details[%d].%s", i, k), vv)
+			u.Set(fmt.Sprintf("details[%d].key", i), k)
+			u.Set(fmt.Sprintf("details[%d].value", i), vv)
 			i++
 		}
 	}
@@ -1310,6 +1331,8 @@
 	Internaldns2          string                       `json:"internaldns2"`
 	Ip6dns1               string                       `json:"ip6dns1"`
 	Ip6dns2               string                       `json:"ip6dns2"`
+	JobID                 string                       `json:"jobid"`
+	Jobstatus             int                          `json:"jobstatus"`
 	Localstorageenabled   bool                         `json:"localstorageenabled"`
 	Name                  string                       `json:"name"`
 	Networktype           string                       `json:"networktype"`
diff --git a/vendor/github.com/xanzy/go-cloudstack/cloudstack/cloudstack.go b/vendor/github.com/xanzy/go-cloudstack/cloudstack/cloudstack.go
index 04bbac3..98f2014 100644
--- a/vendor/github.com/xanzy/go-cloudstack/cloudstack/cloudstack.go
+++ b/vendor/github.com/xanzy/go-cloudstack/cloudstack/cloudstack.go
@@ -46,6 +46,9 @@
 	return idRegex.MatchString(id)
 }
 
+// ClientOption can be passed to new client functions to set custom options
+type ClientOption func(*CloudStackClient)
+
 // OptionFunc can be passed to the courtesy helper functions to set additional parameters
 type OptionFunc func(*CloudStackClient, interface{}) error
 
@@ -142,7 +145,7 @@
 }
 
 // Creates a new client for communicating with CloudStack
-func newClient(apiurl string, apikey string, secret string, async bool, verifyssl bool) *CloudStackClient {
+func newClient(apiurl string, apikey string, secret string, async bool, verifyssl bool, options ...ClientOption) *CloudStackClient {
 	jar, _ := cookiejar.New(nil)
 	cs := &CloudStackClient{
 		client: &http.Client{
@@ -156,7 +159,7 @@
 				}).DialContext,
 				MaxIdleConns:          100,
 				IdleConnTimeout:       90 * time.Second,
-				TLSClientConfig:       &tls.Config{InsecureSkipVerify: !verifyssl}, // If verifyssl is true, skipping the verify should be false and vice versa
+				TLSClientConfig:       &tls.Config{InsecureSkipVerify: !verifyssl},
 				TLSHandshakeTimeout:   10 * time.Second,
 				ExpectContinueTimeout: 1 * time.Second,
 			},
@@ -169,6 +172,11 @@
 		options: []OptionFunc{},
 		timeout: 300,
 	}
+
+	for _, fn := range options {
+		fn(cs)
+	}
+
 	cs.APIDiscovery = NewAPIDiscoveryService(cs)
 	cs.Account = NewAccountService(cs)
 	cs.Address = NewAddressService(cs)
@@ -238,14 +246,15 @@
 	cs.VirtualMachine = NewVirtualMachineService(cs)
 	cs.Volume = NewVolumeService(cs)
 	cs.Zone = NewZoneService(cs)
+
 	return cs
 }
 
 // Default non-async client. So for async calls you need to implement and check the async job result yourself. When using
 // HTTPS with a self-signed certificate to connect to your CloudStack API, you would probably want to set 'verifyssl' to
 // false so the call ignores the SSL errors/warnings.
-func NewClient(apiurl string, apikey string, secret string, verifyssl bool) *CloudStackClient {
-	cs := newClient(apiurl, apikey, secret, false, verifyssl)
+func NewClient(apiurl string, apikey string, secret string, verifyssl bool, options ...ClientOption) *CloudStackClient {
+	cs := newClient(apiurl, apikey, secret, false, verifyssl, options...)
 	return cs
 }
 
@@ -253,8 +262,8 @@
 // this client will wait until the async job is finished or until the configured AsyncTimeout is reached. When the async
 // job finishes successfully it will return actual object received from the API and nil, but when the timout is
 // reached it will return the initial object containing the async job ID for the running job and a warning.
-func NewAsyncClient(apiurl string, apikey string, secret string, verifyssl bool) *CloudStackClient {
-	cs := newClient(apiurl, apikey, secret, true, verifyssl)
+func NewAsyncClient(apiurl string, apikey string, secret string, verifyssl bool, options ...ClientOption) *CloudStackClient {
+	cs := newClient(apiurl, apikey, secret, true, verifyssl, options...)
 	return cs
 }
 
@@ -419,6 +428,55 @@
 	return nil, fmt.Errorf("Unable to extract the raw value from:\n\n%s\n\n", string(b))
 }
 
+// WithAsyncTimeout takes a custom timeout to be used by the CloudStackClient
+func WithAsyncTimeout(timeout int64) ClientOption {
+	return func(cs *CloudStackClient) {
+		if timeout != 0 {
+			cs.timeout = timeout
+		}
+	}
+}
+
+// DomainIDSetter is an interface that every type that can set a domain ID must implement
+type DomainIDSetter interface {
+	SetDomainid(string)
+}
+
+// WithDomain takes either a domain name or ID and sets the `domainid` parameter
+func WithDomain(domain string) OptionFunc {
+	return func(cs *CloudStackClient, p interface{}) error {
+		ps, ok := p.(DomainIDSetter)
+
+		if !ok || domain == "" {
+			return nil
+		}
+
+		if !IsID(domain) {
+			id, _, err := cs.Domain.GetDomainID(domain)
+			if err != nil {
+				return err
+			}
+			domain = id
+		}
+
+		ps.SetDomainid(domain)
+
+		return nil
+	}
+}
+
+// WithHTTPClient takes a custom HTTP client to be used by the CloudStackClient
+func WithHTTPClient(client *http.Client) ClientOption {
+	return func(cs *CloudStackClient) {
+		if client != nil {
+			if client.Jar == nil {
+				client.Jar = cs.client.Jar
+			}
+			cs.client = client
+		}
+	}
+}
+
 // ProjectIDSetter is an interface that every type that can set a project ID must implement
 type ProjectIDSetter interface {
 	SetProjectid(string)
diff --git a/vendor/modules.txt b/vendor/modules.txt
index cc42d42..5ab9656 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -117,7 +117,7 @@
 github.com/spf13/cobra
 # github.com/spf13/pflag v1.0.3
 github.com/spf13/pflag
-# github.com/xanzy/go-cloudstack v2.4.1+incompatible
+# github.com/xanzy/go-cloudstack v2.7.0+incompatible
 github.com/xanzy/go-cloudstack/cloudstack
 # golang.org/x/crypto v0.0.0-20181025213731-e84da0312774
 golang.org/x/crypto/ssh/terminal