VmClient.go 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307
  1. // Copyright 2018 JDCLOUD.COM
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. //
  15. // NOTE: This class is auto generated by the jdcloud code generator program.
  16. package client
  17. import (
  18. "github.com/jdcloud-api/jdcloud-sdk-go/core"
  19. vm "github.com/jdcloud-api/jdcloud-sdk-go/services/vm/apis"
  20. "encoding/json"
  21. "errors"
  22. )
  23. type VmClient struct {
  24. core.JDCloudClient
  25. }
  26. func NewVmClient(credential *core.Credential) *VmClient {
  27. if credential == nil {
  28. return nil
  29. }
  30. config := core.NewConfig()
  31. config.SetEndpoint("vm.jdcloud-api.com")
  32. return &VmClient{
  33. core.JDCloudClient{
  34. Credential: *credential,
  35. Config: *config,
  36. ServiceName: "vm",
  37. Revision: "1.3.4",
  38. Logger: core.NewDefaultLogger(core.LogInfo),
  39. }}
  40. }
  41. func (c *VmClient) SetConfig(config *core.Config) {
  42. c.Config = *config
  43. }
  44. func (c *VmClient) SetLogger(logger core.Logger) {
  45. c.Logger = logger
  46. }
  47. func (c *VmClient) DisableLogger() {
  48. c.Logger = core.NewDummyLogger()
  49. }
  50. /* 查询镜像共享帐户列表,只允许操作您的个人私有镜像。
  51. */
  52. func (c *VmClient) DescribeImageMembers(request *vm.DescribeImageMembersRequest) (*vm.DescribeImageMembersResponse, error) {
  53. if request == nil {
  54. return nil, errors.New("Request object is nil. ")
  55. }
  56. resp, err := c.Send(request, c.ServiceName)
  57. if err != nil {
  58. return nil, err
  59. }
  60. jdResp := &vm.DescribeImageMembersResponse{}
  61. err = json.Unmarshal(resp, jdResp)
  62. if err != nil {
  63. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  64. return nil, err
  65. }
  66. return jdResp, err
  67. }
  68. /* 批量查询云主机用户自定义元数据 */
  69. func (c *VmClient) DescribeInstancesCustomData(request *vm.DescribeInstancesCustomDataRequest) (*vm.DescribeInstancesCustomDataResponse, error) {
  70. if request == nil {
  71. return nil, errors.New("Request object is nil. ")
  72. }
  73. resp, err := c.Send(request, c.ServiceName)
  74. if err != nil {
  75. return nil, err
  76. }
  77. jdResp := &vm.DescribeInstancesCustomDataResponse{}
  78. err = json.Unmarshal(resp, jdResp)
  79. if err != nil {
  80. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  81. return nil, err
  82. }
  83. return jdResp, err
  84. }
  85. /* 创建一台或多台指定配置的云主机,创建模式分为三种:1.普通方式、2.使用高可用组、3.使用启动模板。三种方式创建云主机时参数的必传与非必传是不同的,具体请参考<a href="http://docs.jdcloud.com/virtual-machines/api/create_vm_sample">参数详细说明</a><br>
  86. - 创建云主机需要通过实名认证
  87. - 实例规格
  88. - 可查询<a href="http://docs.jdcloud.com/virtual-machines/api/describeinstancetypes">DescribeInstanceTypes</a>接口获得指定地域或可用区的规格信息。
  89. - 不能使用已下线、或已售馨的规格ID
  90. - 镜像
  91. - Windows Server所有镜像CPU不可选超过64核CPU。
  92. - 可查询<a href="http://docs.jdcloud.com/virtual-machines/api/describeimages">DescribeImages</a>接口获得指定地域的镜像信息。
  93. - 选择的镜像必须支持选择的实例规格。可查询<a href="http://docs.jdcloud.com/virtual-machines/api/describeimageconstraints">DescribeImageConstraints</a>接口获得指定镜像的实例规格限制信息。<br>
  94. - 网络配置
  95. - 指定主网卡配置信息
  96. - 必须指定subnetId
  97. - 可以指定elasticIp规格来约束创建的弹性IP,带宽取值范围[1-200]Mbps,步进1Mbps
  98. - 可以指定主网卡的内网主IP(primaryIpAddress),此时maxCount只能为1
  99. - 安全组securityGroup需与子网Subnet在同一个私有网络VPC内
  100. - 一台云主机创建时必须至少指定一个安全组,至多指定5个安全组,如果没有指定安全组,默认使用默认安全组
  101. - 主网卡deviceIndex设置为1
  102. - 存储
  103. - 系统盘
  104. - 磁盘分类,系统盘支持local或cloud
  105. - 磁盘大小
  106. - local:不能指定大小,默认为40GB
  107. - cloud:取值范围: 40-500GB,并且不能小于镜像的最小系统盘大小,如果没有指定,默认以镜像中的系统盘大小为准
  108. - 自动删除
  109. - 如果是local类型,默认自动删除,不可修改
  110. - 如果是cloud类型的按配置计费的云硬盘,默认为True,可修改
  111. - 如果是cloud类型的包年包月的云硬盘,默认为False,不可修改
  112. - 数据盘
  113. - 磁盘分类,数据盘仅支持cloud
  114. - 云硬盘类型可以选择ssd、premium-hdd、hdd.std1、ssd.gp1、ssd.io1
  115. - 磁盘大小
  116. - premium-hdd:范围[20,3000]GB,步长为10G
  117. - ssd:范围[20,1000]GB,步长为10G
  118. - hdd.std1、ssd.gp1、ssd.io1: 范围[20-16000]GB,步长为10GB
  119. - 自动删除
  120. - 默认自动删除,如果是包年包月的云硬盘,此参数不生效
  121. - 可以从快照创建磁盘
  122. - iops
  123. - 仅当云盘类型为ssd.io1时,可指定iops值,范围为【200, min(32000,size * 50 )】,步长为10,若不指定则按此公式计算默认值
  124. - local类型系统的云主机可以挂载8块云硬盘
  125. - cloud类型系统的云主机可以挂载7块云硬盘
  126. - 计费
  127. - 弹性IP的计费模式,如果选择按用量类型可以单独设置,其它计费模式都以主机为准
  128. - 云硬盘的计费模式以主机为准
  129. - 其他
  130. - 创建完成后,主机状态为running
  131. - 仅Linux系统云主机可以指定密钥
  132. - maxCount为最大努力,不保证一定能达到maxCount
  133. - 虚机的az会覆盖磁盘的az属性
  134. - 密码
  135. - <a href="http://docs.jdcloud.com/virtual-machines/api/general_parameters">参考公共参数规范</a>
  136. */
  137. func (c *VmClient) CreateInstances(request *vm.CreateInstancesRequest) (*vm.CreateInstancesResponse, error) {
  138. if request == nil {
  139. return nil, errors.New("Request object is nil. ")
  140. }
  141. resp, err := c.Send(request, c.ServiceName)
  142. if err != nil {
  143. return nil, err
  144. }
  145. jdResp := &vm.CreateInstancesResponse{}
  146. err = json.Unmarshal(resp, jdResp)
  147. if err != nil {
  148. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  149. return nil, err
  150. }
  151. return jdResp, err
  152. }
  153. /* 共享镜像,只允许操作您的个人私有镜像,单个镜像最多可共享给20个京东云帐户。<br>
  154. 整机镜像目前不支持共享。
  155. */
  156. func (c *VmClient) ShareImage(request *vm.ShareImageRequest) (*vm.ShareImageResponse, error) {
  157. if request == nil {
  158. return nil, errors.New("Request object is nil. ")
  159. }
  160. resp, err := c.Send(request, c.ServiceName)
  161. if err != nil {
  162. return nil, err
  163. }
  164. jdResp := &vm.ShareImageResponse{}
  165. err = json.Unmarshal(resp, jdResp)
  166. if err != nil {
  167. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  168. return nil, err
  169. }
  170. return jdResp, err
  171. }
  172. /* 查询模板自定义元数据
  173. */
  174. func (c *VmClient) DescribeInstanceTemplatesCustomdata(request *vm.DescribeInstanceTemplatesCustomdataRequest) (*vm.DescribeInstanceTemplatesCustomdataResponse, error) {
  175. if request == nil {
  176. return nil, errors.New("Request object is nil. ")
  177. }
  178. resp, err := c.Send(request, c.ServiceName)
  179. if err != nil {
  180. return nil, err
  181. }
  182. jdResp := &vm.DescribeInstanceTemplatesCustomdataResponse{}
  183. err = json.Unmarshal(resp, jdResp)
  184. if err != nil {
  185. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  186. return nil, err
  187. }
  188. return jdResp, err
  189. }
  190. /* 绑定ssh密钥对。
  191. */
  192. func (c *VmClient) AttachKeypair(request *vm.AttachKeypairRequest) (*vm.AttachKeypairResponse, error) {
  193. if request == nil {
  194. return nil, errors.New("Request object is nil. ")
  195. }
  196. resp, err := c.Send(request, c.ServiceName)
  197. if err != nil {
  198. return nil, err
  199. }
  200. jdResp := &vm.AttachKeypairResponse{}
  201. err = json.Unmarshal(resp, jdResp)
  202. if err != nil {
  203. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  204. return nil, err
  205. }
  206. return jdResp, err
  207. }
  208. /* 导出镜像,将京东云私有镜像导出至京东云以外环境
  209. */
  210. func (c *VmClient) ExportImage(request *vm.ExportImageRequest) (*vm.ExportImageResponse, error) {
  211. if request == nil {
  212. return nil, errors.New("Request object is nil. ")
  213. }
  214. resp, err := c.Send(request, c.ServiceName)
  215. if err != nil {
  216. return nil, err
  217. }
  218. jdResp := &vm.ExportImageResponse{}
  219. err = json.Unmarshal(resp, jdResp)
  220. if err != nil {
  221. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  222. return nil, err
  223. }
  224. return jdResp, err
  225. }
  226. /* 启动单个云主机,只能启动<b>stopped</b>状态的云主机,云主机没有正在进行中的任务才可启动。<br>
  227. 只能启动正常计费状态的云主机,若已欠费停服或到期停服则不支持启动。
  228. */
  229. func (c *VmClient) StartInstance(request *vm.StartInstanceRequest) (*vm.StartInstanceResponse, error) {
  230. if request == nil {
  231. return nil, errors.New("Request object is nil. ")
  232. }
  233. resp, err := c.Send(request, c.ServiceName)
  234. if err != nil {
  235. return nil, err
  236. }
  237. jdResp := &vm.StartInstanceResponse{}
  238. err = json.Unmarshal(resp, jdResp)
  239. if err != nil {
  240. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  241. return nil, err
  242. }
  243. return jdResp, err
  244. }
  245. /* 撤销社区镜像,只允许操作您的个人私有镜像。
  246. */
  247. func (c *VmClient) UnReleaseImage(request *vm.UnReleaseImageRequest) (*vm.UnReleaseImageResponse, error) {
  248. if request == nil {
  249. return nil, errors.New("Request object is nil. ")
  250. }
  251. resp, err := c.Send(request, c.ServiceName)
  252. if err != nil {
  253. return nil, err
  254. }
  255. jdResp := &vm.UnReleaseImageResponse{}
  256. err = json.Unmarshal(resp, jdResp)
  257. if err != nil {
  258. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  259. return nil, err
  260. }
  261. return jdResp, err
  262. }
  263. /* 取消共享镜像,只允许操作您的个人私有镜像。
  264. */
  265. func (c *VmClient) UnShareImage(request *vm.UnShareImageRequest) (*vm.UnShareImageResponse, error) {
  266. if request == nil {
  267. return nil, errors.New("Request object is nil. ")
  268. }
  269. resp, err := c.Send(request, c.ServiceName)
  270. if err != nil {
  271. return nil, err
  272. }
  273. jdResp := &vm.UnShareImageResponse{}
  274. err = json.Unmarshal(resp, jdResp)
  275. if err != nil {
  276. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  277. return nil, err
  278. }
  279. return jdResp, err
  280. }
  281. /* 批量查询镜像的实例规格限制。<br>
  282. 通过此接口可以查看镜像不支持的实例规格。只有官方镜像、第三方镜像有实例规格的限制,个人的私有镜像没有此限制。
  283. */
  284. func (c *VmClient) DescribeImageConstraintsBatch(request *vm.DescribeImageConstraintsBatchRequest) (*vm.DescribeImageConstraintsBatchResponse, error) {
  285. if request == nil {
  286. return nil, errors.New("Request object is nil. ")
  287. }
  288. resp, err := c.Send(request, c.ServiceName)
  289. if err != nil {
  290. return nil, err
  291. }
  292. jdResp := &vm.DescribeImageConstraintsBatchResponse{}
  293. err = json.Unmarshal(resp, jdResp)
  294. if err != nil {
  295. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  296. return nil, err
  297. }
  298. return jdResp, err
  299. }
  300. /* 修改一个启动模板的信息,包括名称、描述
  301. */
  302. func (c *VmClient) UpdateInstanceTemplate(request *vm.UpdateInstanceTemplateRequest) (*vm.UpdateInstanceTemplateResponse, error) {
  303. if request == nil {
  304. return nil, errors.New("Request object is nil. ")
  305. }
  306. resp, err := c.Send(request, c.ServiceName)
  307. if err != nil {
  308. return nil, err
  309. }
  310. jdResp := &vm.UpdateInstanceTemplateResponse{}
  311. err = json.Unmarshal(resp, jdResp)
  312. if err != nil {
  313. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  314. return nil, err
  315. }
  316. return jdResp, err
  317. }
  318. /* 为一台云主机挂载一块云硬盘,云主机和云硬盘没有正在进行中的的任务时才可挂载。<br>
  319. 云主机状态必须是<b>running</b>或<b>stopped</b>状态。<br>
  320. 本地盘(local类型)做系统盘的云主机可挂载8块云硬盘,云硬盘(cloud类型)做系统盘的云主机可挂载除系统盘外7块云硬盘。
  321. */
  322. func (c *VmClient) AttachDisk(request *vm.AttachDiskRequest) (*vm.AttachDiskResponse, error) {
  323. if request == nil {
  324. return nil, errors.New("Request object is nil. ")
  325. }
  326. resp, err := c.Send(request, c.ServiceName)
  327. if err != nil {
  328. return nil, err
  329. }
  330. jdResp := &vm.AttachDiskResponse{}
  331. err = json.Unmarshal(resp, jdResp)
  332. if err != nil {
  333. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  334. return nil, err
  335. }
  336. return jdResp, err
  337. }
  338. /* 修改云主机密码,主机没有正在进行中的任务时才可操作。<br>
  339. 修改密码后,需要重启云主机后生效。
  340. */
  341. func (c *VmClient) ModifyInstancePassword(request *vm.ModifyInstancePasswordRequest) (*vm.ModifyInstancePasswordResponse, error) {
  342. if request == nil {
  343. return nil, errors.New("Request object is nil. ")
  344. }
  345. resp, err := c.Send(request, c.ServiceName)
  346. if err != nil {
  347. return nil, err
  348. }
  349. jdResp := &vm.ModifyInstancePasswordResponse{}
  350. err = json.Unmarshal(resp, jdResp)
  351. if err != nil {
  352. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  353. return nil, err
  354. }
  355. return jdResp, err
  356. }
  357. /* 云主机绑定一块弹性网卡。<br>
  358. 云主机状态必须为<b>running</b>或<b>stopped</b>状态,并且没有正在进行中的任务才可操作。<br>
  359. 弹性网卡上如果绑定了弹性公网IP,那么其所在az需要与云主机的az保持一致,或者为全可用区型弹性公网IP,才可挂载该网卡。<br>
  360. 云主机挂载弹性网卡的数量,不能超过实例规格的限制。可查询<a href="http://docs.jdcloud.com/virtual-machines/api/describeinstancetypes">DescribeInstanceTypes</a>接口获得指定规格可挂载弹性网卡的数量上限。<br>
  361. 弹性网卡与云主机必须在相同vpc下。
  362. */
  363. func (c *VmClient) AttachNetworkInterface(request *vm.AttachNetworkInterfaceRequest) (*vm.AttachNetworkInterfaceResponse, error) {
  364. if request == nil {
  365. return nil, errors.New("Request object is nil. ")
  366. }
  367. resp, err := c.Send(request, c.ServiceName)
  368. if err != nil {
  369. return nil, err
  370. }
  371. jdResp := &vm.AttachNetworkInterfaceResponse{}
  372. err = json.Unmarshal(resp, jdResp)
  373. if err != nil {
  374. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  375. return nil, err
  376. }
  377. return jdResp, err
  378. }
  379. /* 删除ssh密钥对。
  380. */
  381. func (c *VmClient) DeleteKeypair(request *vm.DeleteKeypairRequest) (*vm.DeleteKeypairResponse, error) {
  382. if request == nil {
  383. return nil, errors.New("Request object is nil. ")
  384. }
  385. resp, err := c.Send(request, c.ServiceName)
  386. if err != nil {
  387. return nil, err
  388. }
  389. jdResp := &vm.DeleteKeypairResponse{}
  390. err = json.Unmarshal(resp, jdResp)
  391. if err != nil {
  392. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  393. return nil, err
  394. }
  395. return jdResp, err
  396. }
  397. /* 查询镜像详情。
  398. */
  399. func (c *VmClient) DescribeImage(request *vm.DescribeImageRequest) (*vm.DescribeImageResponse, error) {
  400. if request == nil {
  401. return nil, errors.New("Request object is nil. ")
  402. }
  403. resp, err := c.Send(request, c.ServiceName)
  404. if err != nil {
  405. return nil, err
  406. }
  407. jdResp := &vm.DescribeImageResponse{}
  408. err = json.Unmarshal(resp, jdResp)
  409. if err != nil {
  410. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  411. return nil, err
  412. }
  413. return jdResp, err
  414. }
  415. /* 导入由其他工具生成的密钥对的公钥部分。<br>
  416. 若传入已存在的密钥名称,会返回错误。
  417. */
  418. func (c *VmClient) ImportKeypair(request *vm.ImportKeypairRequest) (*vm.ImportKeypairResponse, error) {
  419. if request == nil {
  420. return nil, errors.New("Request object is nil. ")
  421. }
  422. resp, err := c.Send(request, c.ServiceName)
  423. if err != nil {
  424. return nil, err
  425. }
  426. jdResp := &vm.ImportKeypairResponse{}
  427. err = json.Unmarshal(resp, jdResp)
  428. if err != nil {
  429. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  430. return nil, err
  431. }
  432. return jdResp, err
  433. }
  434. /* 镜像跨区复制,将私有镜像复制到其它地域下,只允许操作您的个人私有镜像。<br>
  435. 只支持rootDeviceType为cloudDisk的云硬盘系统盘镜像操作。
  436. */
  437. func (c *VmClient) CopyImages(request *vm.CopyImagesRequest) (*vm.CopyImagesResponse, error) {
  438. if request == nil {
  439. return nil, errors.New("Request object is nil. ")
  440. }
  441. resp, err := c.Send(request, c.ServiceName)
  442. if err != nil {
  443. return nil, err
  444. }
  445. jdResp := &vm.CopyImagesResponse{}
  446. err = json.Unmarshal(resp, jdResp)
  447. if err != nil {
  448. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  449. return nil, err
  450. }
  451. return jdResp, err
  452. }
  453. /* 查询一台云主机的详细信息
  454. */
  455. func (c *VmClient) DescribeInstance(request *vm.DescribeInstanceRequest) (*vm.DescribeInstanceResponse, error) {
  456. if request == nil {
  457. return nil, errors.New("Request object is nil. ")
  458. }
  459. resp, err := c.Send(request, c.ServiceName)
  460. if err != nil {
  461. return nil, err
  462. }
  463. jdResp := &vm.DescribeInstanceResponse{}
  464. err = json.Unmarshal(resp, jdResp)
  465. if err != nil {
  466. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  467. return nil, err
  468. }
  469. return jdResp, err
  470. }
  471. /* 修改虚机弹性网卡属性,包括是否随云主机一起删除。<br>
  472. 不能修改主网卡。
  473. */
  474. func (c *VmClient) ModifyInstanceNetworkAttribute(request *vm.ModifyInstanceNetworkAttributeRequest) (*vm.ModifyInstanceNetworkAttributeResponse, error) {
  475. if request == nil {
  476. return nil, errors.New("Request object is nil. ")
  477. }
  478. resp, err := c.Send(request, c.ServiceName)
  479. if err != nil {
  480. return nil, err
  481. }
  482. jdResp := &vm.ModifyInstanceNetworkAttributeResponse{}
  483. err = json.Unmarshal(resp, jdResp)
  484. if err != nil {
  485. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  486. return nil, err
  487. }
  488. return jdResp, err
  489. }
  490. /* 查询配额,支持的类型:云主机、镜像、密钥、模板、镜像共享。
  491. */
  492. func (c *VmClient) DescribeQuotas(request *vm.DescribeQuotasRequest) (*vm.DescribeQuotasResponse, error) {
  493. if request == nil {
  494. return nil, errors.New("Request object is nil. ")
  495. }
  496. resp, err := c.Send(request, c.ServiceName)
  497. if err != nil {
  498. return nil, err
  499. }
  500. jdResp := &vm.DescribeQuotasResponse{}
  501. err = json.Unmarshal(resp, jdResp)
  502. if err != nil {
  503. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  504. return nil, err
  505. }
  506. return jdResp, err
  507. }
  508. /* 修改镜像信息,包括名称、描述;只允许操作您的个人私有镜像。
  509. */
  510. func (c *VmClient) ModifyImageAttribute(request *vm.ModifyImageAttributeRequest) (*vm.ModifyImageAttributeResponse, error) {
  511. if request == nil {
  512. return nil, errors.New("Request object is nil. ")
  513. }
  514. resp, err := c.Send(request, c.ServiceName)
  515. if err != nil {
  516. return nil, err
  517. }
  518. jdResp := &vm.ModifyImageAttributeResponse{}
  519. err = json.Unmarshal(resp, jdResp)
  520. if err != nil {
  521. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  522. return nil, err
  523. }
  524. return jdResp, err
  525. }
  526. /* 重启单个云主机,只能重启<b>running</b>状态的云主机,云主机没有正在进行中的任务才可重启。
  527. */
  528. func (c *VmClient) RebootInstance(request *vm.RebootInstanceRequest) (*vm.RebootInstanceResponse, error) {
  529. if request == nil {
  530. return nil, errors.New("Request object is nil. ")
  531. }
  532. resp, err := c.Send(request, c.ServiceName)
  533. if err != nil {
  534. return nil, err
  535. }
  536. jdResp := &vm.RebootInstanceResponse{}
  537. err = json.Unmarshal(resp, jdResp)
  538. if err != nil {
  539. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  540. return nil, err
  541. }
  542. return jdResp, err
  543. }
  544. /* 批量查询密钥对。<br>
  545. 此接口支持分页查询,默认每页20条。
  546. */
  547. func (c *VmClient) DescribeKeypairs(request *vm.DescribeKeypairsRequest) (*vm.DescribeKeypairsResponse, error) {
  548. if request == nil {
  549. return nil, errors.New("Request object is nil. ")
  550. }
  551. resp, err := c.Send(request, c.ServiceName)
  552. if err != nil {
  553. return nil, err
  554. }
  555. jdResp := &vm.DescribeKeypairsResponse{}
  556. err = json.Unmarshal(resp, jdResp)
  557. if err != nil {
  558. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  559. return nil, err
  560. }
  561. return jdResp, err
  562. }
  563. /* 云主机缷载云硬盘,云主机和云硬盘没有正在进行中的任务时才可缷载。<br>
  564. */
  565. func (c *VmClient) DetachDisk(request *vm.DetachDiskRequest) (*vm.DetachDiskResponse, error) {
  566. if request == nil {
  567. return nil, errors.New("Request object is nil. ")
  568. }
  569. resp, err := c.Send(request, c.ServiceName)
  570. if err != nil {
  571. return nil, err
  572. }
  573. jdResp := &vm.DetachDiskResponse{}
  574. err = json.Unmarshal(resp, jdResp)
  575. if err != nil {
  576. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  577. return nil, err
  578. }
  579. return jdResp, err
  580. }
  581. /* 导入镜像,将外部镜像导入到京东云中
  582. */
  583. func (c *VmClient) ImportImage(request *vm.ImportImageRequest) (*vm.ImportImageResponse, error) {
  584. if request == nil {
  585. return nil, errors.New("Request object is nil. ")
  586. }
  587. resp, err := c.Send(request, c.ServiceName)
  588. if err != nil {
  589. return nil, err
  590. }
  591. jdResp := &vm.ImportImageResponse{}
  592. err = json.Unmarshal(resp, jdResp)
  593. if err != nil {
  594. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  595. return nil, err
  596. }
  597. return jdResp, err
  598. }
  599. /* 创建一个指定参数的启动模板,启动模板中包含创建云主机时的大部分配置参数,避免每次创建云主机时的重复性工作。<br>
  600. 如果是使用启动模板创建云主机,如果指定了某些参数与模板中的参数相冲突,那么新指定的参数会替换模板中的参数。<br>
  601. 如果是使用启动模板创建云主机,如果指定了镜像ID与模板中的镜像ID不一致,那么模板中的dataDisks参数会失效。<br>
  602. 如果使用高可用组(Ag)创建云主机,那么Ag所关联的模板中的参数都不可以被调整,只能以模板为准。
  603. */
  604. func (c *VmClient) CreateInstanceTemplate(request *vm.CreateInstanceTemplateRequest) (*vm.CreateInstanceTemplateResponse, error) {
  605. if request == nil {
  606. return nil, errors.New("Request object is nil. ")
  607. }
  608. resp, err := c.Send(request, c.ServiceName)
  609. if err != nil {
  610. return nil, err
  611. }
  612. jdResp := &vm.CreateInstanceTemplateResponse{}
  613. err = json.Unmarshal(resp, jdResp)
  614. if err != nil {
  615. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  616. return nil, err
  617. }
  618. return jdResp, err
  619. }
  620. /* 为云主机创建私有镜像。云主机状态必须为<b>stopped</b>。<br>
  621. 云主机没有正在进行中的任务才可制作镜像。<br>
  622. 制作镜像以备份系统盘为基础,在此之上可选择全部或部分挂载数据盘制作整机镜像(如不做任何更改将默认制作整机镜像),制作镜像过程会为所挂载云硬盘创建快照并与镜像关联。<br>
  623. 调用接口后,需要等待镜像状态变为<b>ready</b>后,才能正常使用镜像。
  624. */
  625. func (c *VmClient) CreateImage(request *vm.CreateImageRequest) (*vm.CreateImageResponse, error) {
  626. if request == nil {
  627. return nil, errors.New("Request object is nil. ")
  628. }
  629. resp, err := c.Send(request, c.ServiceName)
  630. if err != nil {
  631. return nil, err
  632. }
  633. jdResp := &vm.CreateImageResponse{}
  634. err = json.Unmarshal(resp, jdResp)
  635. if err != nil {
  636. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  637. return nil, err
  638. }
  639. return jdResp, err
  640. }
  641. /* 为云主机主网卡的主内网IP绑定弹性公网IP。<br>
  642. 一台云主机的主网卡的主内网IP只能绑定一个弹性公网IP,若已绑定弹性公网IP,操作绑定会返回错误。<br>
  643. */
  644. func (c *VmClient) AssociateElasticIp(request *vm.AssociateElasticIpRequest) (*vm.AssociateElasticIpResponse, error) {
  645. if request == nil {
  646. return nil, errors.New("Request object is nil. ")
  647. }
  648. resp, err := c.Send(request, c.ServiceName)
  649. if err != nil {
  650. return nil, err
  651. }
  652. jdResp := &vm.AssociateElasticIpResponse{}
  653. err = json.Unmarshal(resp, jdResp)
  654. if err != nil {
  655. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  656. return nil, err
  657. }
  658. return jdResp, err
  659. }
  660. /* 云主机解绑弹性公网IP,解绑的是主网卡、内网主IP对应的弹性公网IP。
  661. */
  662. func (c *VmClient) DisassociateElasticIp(request *vm.DisassociateElasticIpRequest) (*vm.DisassociateElasticIpResponse, error) {
  663. if request == nil {
  664. return nil, errors.New("Request object is nil. ")
  665. }
  666. resp, err := c.Send(request, c.ServiceName)
  667. if err != nil {
  668. return nil, err
  669. }
  670. jdResp := &vm.DisassociateElasticIpResponse{}
  671. err = json.Unmarshal(resp, jdResp)
  672. if err != nil {
  673. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  674. return nil, err
  675. }
  676. return jdResp, err
  677. }
  678. /* 停止单个云主机,只能停止<b>running</b>状态的云主机,云主机没有正在进行中的任务才可停止
  679. */
  680. func (c *VmClient) StopInstance(request *vm.StopInstanceRequest) (*vm.StopInstanceResponse, error) {
  681. if request == nil {
  682. return nil, errors.New("Request object is nil. ")
  683. }
  684. resp, err := c.Send(request, c.ServiceName)
  685. if err != nil {
  686. return nil, err
  687. }
  688. jdResp := &vm.StopInstanceResponse{}
  689. err = json.Unmarshal(resp, jdResp)
  690. if err != nil {
  691. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  692. return nil, err
  693. }
  694. return jdResp, err
  695. }
  696. /* 查询启动模板详情
  697. */
  698. func (c *VmClient) DescribeInstanceTemplate(request *vm.DescribeInstanceTemplateRequest) (*vm.DescribeInstanceTemplateResponse, error) {
  699. if request == nil {
  700. return nil, errors.New("Request object is nil. ")
  701. }
  702. resp, err := c.Send(request, c.ServiceName)
  703. if err != nil {
  704. return nil, err
  705. }
  706. jdResp := &vm.DescribeInstanceTemplateResponse{}
  707. err = json.Unmarshal(resp, jdResp)
  708. if err != nil {
  709. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  710. return nil, err
  711. }
  712. return jdResp, err
  713. }
  714. /* 查询镜像信息列表。<br>
  715. 通过此接口可以查询到京东云官方镜像、第三方镜像、私有镜像、或其他用户共享给您的镜像。<br>
  716. 此接口支持分页查询,默认每页20条。
  717. */
  718. func (c *VmClient) DescribeImages(request *vm.DescribeImagesRequest) (*vm.DescribeImagesResponse, error) {
  719. if request == nil {
  720. return nil, errors.New("Request object is nil. ")
  721. }
  722. resp, err := c.Send(request, c.ServiceName)
  723. if err != nil {
  724. return nil, err
  725. }
  726. jdResp := &vm.DescribeImagesResponse{}
  727. err = json.Unmarshal(resp, jdResp)
  728. if err != nil {
  729. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  730. return nil, err
  731. }
  732. return jdResp, err
  733. }
  734. /* 查询镜像的实例规格限制。<br>
  735. 通过此接口可以查看镜像不支持的实例规格。只有官方镜像、第三方镜像有实例规格的限制,个人的私有镜像没有此限制。
  736. */
  737. func (c *VmClient) DescribeImageConstraints(request *vm.DescribeImageConstraintsRequest) (*vm.DescribeImageConstraintsResponse, error) {
  738. if request == nil {
  739. return nil, errors.New("Request object is nil. ")
  740. }
  741. resp, err := c.Send(request, c.ServiceName)
  742. if err != nil {
  743. return nil, err
  744. }
  745. jdResp := &vm.DescribeImageConstraintsResponse{}
  746. err = json.Unmarshal(resp, jdResp)
  747. if err != nil {
  748. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  749. return nil, err
  750. }
  751. return jdResp, err
  752. }
  753. /* 获取云主机vnc,用于连接管理云主机。<br>
  754. vnc地址的有效期为1个小时,调用接口获取vnc地址后如果1个小时内没有使用,vnc地址自动失效,再次使用需要重新获取。
  755. */
  756. func (c *VmClient) DescribeInstanceVncUrl(request *vm.DescribeInstanceVncUrlRequest) (*vm.DescribeInstanceVncUrlResponse, error) {
  757. if request == nil {
  758. return nil, errors.New("Request object is nil. ")
  759. }
  760. resp, err := c.Send(request, c.ServiceName)
  761. if err != nil {
  762. return nil, err
  763. }
  764. jdResp := &vm.DescribeInstanceVncUrlResponse{}
  765. err = json.Unmarshal(resp, jdResp)
  766. if err != nil {
  767. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  768. return nil, err
  769. }
  770. return jdResp, err
  771. }
  772. /* 云主机使用指定镜像重置云主机系统<br>
  773. 云主机的状态必须为<b>stopped</b>状态。<br>
  774. 若不指定镜像ID,默认使用当前主机的原镜像重置系统。<br>
  775. 云主机系统盘类型必须与待更换镜像支持的系统盘类型保持一致,若当前云主机系统盘为local类型,则更换镜像的系统盘类型必须为loaclDisk类型;同理,若当前云主机系统盘为cloud类型,则更换镜像的系统盘类型必须为cloudDisk类型。可查询<a href="http://docs.jdcloud.com/virtual-machines/api/describeimages">DescribeImages</a>接口获得指定地域的镜像信息。<br>
  776. 指定的镜像必须能够支持当前主机的实例规格(instanceType),否则会返回错误。可查询<a href="http://docs.jdcloud.com/virtual-machines/api/describeimageconstraints">DescribeImageConstraints</a>接口获得指定镜像支持的系统盘类型信息。
  777. */
  778. func (c *VmClient) RebuildInstance(request *vm.RebuildInstanceRequest) (*vm.RebuildInstanceResponse, error) {
  779. if request == nil {
  780. return nil, errors.New("Request object is nil. ")
  781. }
  782. resp, err := c.Send(request, c.ServiceName)
  783. if err != nil {
  784. return nil, err
  785. }
  786. jdResp := &vm.RebuildInstanceResponse{}
  787. err = json.Unmarshal(resp, jdResp)
  788. if err != nil {
  789. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  790. return nil, err
  791. }
  792. return jdResp, err
  793. }
  794. /* 发布社区镜像,只允许操作您的个人私有镜像。发布为社区镜像后会撤销共享关系。<br>
  795. */
  796. func (c *VmClient) ReleaseImage(request *vm.ReleaseImageRequest) (*vm.ReleaseImageResponse, error) {
  797. if request == nil {
  798. return nil, errors.New("Request object is nil. ")
  799. }
  800. resp, err := c.Send(request, c.ServiceName)
  801. if err != nil {
  802. return nil, err
  803. }
  804. jdResp := &vm.ReleaseImageResponse{}
  805. err = json.Unmarshal(resp, jdResp)
  806. if err != nil {
  807. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  808. return nil, err
  809. }
  810. return jdResp, err
  811. }
  812. /* 修改云主机部分信息,包括名称、描述。
  813. */
  814. func (c *VmClient) ModifyInstanceAttribute(request *vm.ModifyInstanceAttributeRequest) (*vm.ModifyInstanceAttributeResponse, error) {
  815. if request == nil {
  816. return nil, errors.New("Request object is nil. ")
  817. }
  818. resp, err := c.Send(request, c.ServiceName)
  819. if err != nil {
  820. return nil, err
  821. }
  822. jdResp := &vm.ModifyInstanceAttributeResponse{}
  823. err = json.Unmarshal(resp, jdResp)
  824. if err != nil {
  825. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  826. return nil, err
  827. }
  828. return jdResp, err
  829. }
  830. /* 云主机变更实例规格<br>
  831. 云主机的状态必须为<b>stopped</b>状态。<br>
  832. 以下情况的云主机,不允许在一代与二代实例规格间互相调整,例:不允许g.n1与g.n2之间互相调配<br>
  833. 1、16年创建的云硬盘做系统盘的云主机<br>
  834. 2、本地盘(local类型)做系统盘的云主机。<br>
  835. 3、使用高可用组(Ag)创建的云主机。<br>
  836. 如果当前主机中的弹性网卡数量,大于新实例规格允许的弹性网卡数量,会返回错误。可查询<a href="http://docs.jdcloud.com/virtual-machines/api/describeinstancetypes">DescribeInstanceTypes</a>接口获得指定地域及可用区下的实例规格信息。<br>
  837. 当前主机所使用的镜像,需要支持要变更的目标实例规格,否则返回错误。可查询<a href="http://docs.jdcloud.com/virtual-machines/api/describeimageconstraints">DescribeImageConstraints</a>接口获得指定镜像的实例规格限制信息。<br>
  838. 云主机欠费或到期时,无法更改实例规格。
  839. */
  840. func (c *VmClient) ResizeInstance(request *vm.ResizeInstanceRequest) (*vm.ResizeInstanceResponse, error) {
  841. if request == nil {
  842. return nil, errors.New("Request object is nil. ")
  843. }
  844. resp, err := c.Send(request, c.ServiceName)
  845. if err != nil {
  846. return nil, err
  847. }
  848. jdResp := &vm.ResizeInstanceResponse{}
  849. err = json.Unmarshal(resp, jdResp)
  850. if err != nil {
  851. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  852. return nil, err
  853. }
  854. return jdResp, err
  855. }
  856. /* 删除一个私有镜像,只允许操作您的个人私有镜像。<br>
  857. 若镜像已共享给其他用户,需先取消共享才可删除。
  858. */
  859. func (c *VmClient) DeleteImage(request *vm.DeleteImageRequest) (*vm.DeleteImageResponse, error) {
  860. if request == nil {
  861. return nil, errors.New("Request object is nil. ")
  862. }
  863. resp, err := c.Send(request, c.ServiceName)
  864. if err != nil {
  865. return nil, err
  866. }
  867. jdResp := &vm.DeleteImageResponse{}
  868. err = json.Unmarshal(resp, jdResp)
  869. if err != nil {
  870. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  871. return nil, err
  872. }
  873. return jdResp, err
  874. }
  875. /* 查询实例规格信息列表
  876. */
  877. func (c *VmClient) DescribeInstanceTypes(request *vm.DescribeInstanceTypesRequest) (*vm.DescribeInstanceTypesResponse, error) {
  878. if request == nil {
  879. return nil, errors.New("Request object is nil. ")
  880. }
  881. resp, err := c.Send(request, c.ServiceName)
  882. if err != nil {
  883. return nil, err
  884. }
  885. jdResp := &vm.DescribeInstanceTypesResponse{}
  886. err = json.Unmarshal(resp, jdResp)
  887. if err != nil {
  888. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  889. return nil, err
  890. }
  891. return jdResp, err
  892. }
  893. /* 云主机缷载一块弹性网卡。<br>
  894. 云主机状态必须为<b>running</b>或<b>stopped</b>状态,并且没有正在进行中的任务才可操作。<br>
  895. 不能缷载主网卡。
  896. */
  897. func (c *VmClient) DetachNetworkInterface(request *vm.DetachNetworkInterfaceRequest) (*vm.DetachNetworkInterfaceResponse, error) {
  898. if request == nil {
  899. return nil, errors.New("Request object is nil. ")
  900. }
  901. resp, err := c.Send(request, c.ServiceName)
  902. if err != nil {
  903. return nil, err
  904. }
  905. jdResp := &vm.DetachNetworkInterfaceResponse{}
  906. err = json.Unmarshal(resp, jdResp)
  907. if err != nil {
  908. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  909. return nil, err
  910. }
  911. return jdResp, err
  912. }
  913. /* 删除一个启动模板
  914. */
  915. func (c *VmClient) DeleteInstanceTemplate(request *vm.DeleteInstanceTemplateRequest) (*vm.DeleteInstanceTemplateResponse, error) {
  916. if request == nil {
  917. return nil, errors.New("Request object is nil. ")
  918. }
  919. resp, err := c.Send(request, c.ServiceName)
  920. if err != nil {
  921. return nil, err
  922. }
  923. jdResp := &vm.DeleteInstanceTemplateResponse{}
  924. err = json.Unmarshal(resp, jdResp)
  925. if err != nil {
  926. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  927. return nil, err
  928. }
  929. return jdResp, err
  930. }
  931. /* 查询启动模板列表
  932. */
  933. func (c *VmClient) DescribeInstanceTemplates(request *vm.DescribeInstanceTemplatesRequest) (*vm.DescribeInstanceTemplatesResponse, error) {
  934. if request == nil {
  935. return nil, errors.New("Request object is nil. ")
  936. }
  937. resp, err := c.Send(request, c.ServiceName)
  938. if err != nil {
  939. return nil, err
  940. }
  941. jdResp := &vm.DescribeInstanceTemplatesResponse{}
  942. err = json.Unmarshal(resp, jdResp)
  943. if err != nil {
  944. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  945. return nil, err
  946. }
  947. return jdResp, err
  948. }
  949. /* 修改云主机挂载的数据盘属性,包括是否随主机删除。<br>
  950. 仅按配置计费云硬盘支持设置随实例删除属性;包年包月计费云硬盘该属性不生效,实例删除时云硬盘将保留。<br>
  951. */
  952. func (c *VmClient) ModifyInstanceDiskAttribute(request *vm.ModifyInstanceDiskAttributeRequest) (*vm.ModifyInstanceDiskAttributeResponse, error) {
  953. if request == nil {
  954. return nil, errors.New("Request object is nil. ")
  955. }
  956. resp, err := c.Send(request, c.ServiceName)
  957. if err != nil {
  958. return nil, err
  959. }
  960. jdResp := &vm.ModifyInstanceDiskAttributeResponse{}
  961. err = json.Unmarshal(resp, jdResp)
  962. if err != nil {
  963. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  964. return nil, err
  965. }
  966. return jdResp, err
  967. }
  968. /* 批量查询云主机内网IP地址,查询的是主网卡内网主IP地址。 */
  969. func (c *VmClient) DescribeInstancePrivateIpAddress(request *vm.DescribeInstancePrivateIpAddressRequest) (*vm.DescribeInstancePrivateIpAddressResponse, error) {
  970. if request == nil {
  971. return nil, errors.New("Request object is nil. ")
  972. }
  973. resp, err := c.Send(request, c.ServiceName)
  974. if err != nil {
  975. return nil, err
  976. }
  977. jdResp := &vm.DescribeInstancePrivateIpAddressResponse{}
  978. err = json.Unmarshal(resp, jdResp)
  979. if err != nil {
  980. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  981. return nil, err
  982. }
  983. return jdResp, err
  984. }
  985. /* 查询镜像导入导出任务详情
  986. */
  987. func (c *VmClient) ImageTasks(request *vm.ImageTasksRequest) (*vm.ImageTasksResponse, error) {
  988. if request == nil {
  989. return nil, errors.New("Request object is nil. ")
  990. }
  991. resp, err := c.Send(request, c.ServiceName)
  992. if err != nil {
  993. return nil, err
  994. }
  995. jdResp := &vm.ImageTasksResponse{}
  996. err = json.Unmarshal(resp, jdResp)
  997. if err != nil {
  998. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  999. return nil, err
  1000. }
  1001. return jdResp, err
  1002. }
  1003. /* 批量查询云主机状态 */
  1004. func (c *VmClient) DescribeInstanceStatus(request *vm.DescribeInstanceStatusRequest) (*vm.DescribeInstanceStatusResponse, error) {
  1005. if request == nil {
  1006. return nil, errors.New("Request object is nil. ")
  1007. }
  1008. resp, err := c.Send(request, c.ServiceName)
  1009. if err != nil {
  1010. return nil, err
  1011. }
  1012. jdResp := &vm.DescribeInstanceStatusResponse{}
  1013. err = json.Unmarshal(resp, jdResp)
  1014. if err != nil {
  1015. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  1016. return nil, err
  1017. }
  1018. return jdResp, err
  1019. }
  1020. /* 解绑ssh密钥对。
  1021. */
  1022. func (c *VmClient) DetachKeypair(request *vm.DetachKeypairRequest) (*vm.DetachKeypairResponse, error) {
  1023. if request == nil {
  1024. return nil, errors.New("Request object is nil. ")
  1025. }
  1026. resp, err := c.Send(request, c.ServiceName)
  1027. if err != nil {
  1028. return nil, err
  1029. }
  1030. jdResp := &vm.DetachKeypairResponse{}
  1031. err = json.Unmarshal(resp, jdResp)
  1032. if err != nil {
  1033. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  1034. return nil, err
  1035. }
  1036. return jdResp, err
  1037. }
  1038. /* 删除按配置计费、或包年包月已到期的单个云主机。不能删除没有计费信息的云主机。<br>
  1039. 云主机状态必须为运行<b>running</b>、停止<b>stopped</b>、错误<b>error</b>,同时云主机没有正在进行中的任务才可删除。<br>
  1040. 如果主机中挂载的数据盘为按配置计费的云硬盘且AutoDelete属性为true,那么数据盘会随主机一起删除。
  1041. [MFA enabled] */
  1042. func (c *VmClient) DeleteInstance(request *vm.DeleteInstanceRequest) (*vm.DeleteInstanceResponse, error) {
  1043. if request == nil {
  1044. return nil, errors.New("Request object is nil. ")
  1045. }
  1046. resp, err := c.Send(request, c.ServiceName)
  1047. if err != nil {
  1048. return nil, err
  1049. }
  1050. jdResp := &vm.DeleteInstanceResponse{}
  1051. err = json.Unmarshal(resp, jdResp)
  1052. if err != nil {
  1053. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  1054. return nil, err
  1055. }
  1056. return jdResp, err
  1057. }
  1058. /* 批量查询云主机信息的轻量接口,不返回云盘、网络、计费、标签等信息。如果不需要关联资源属性,尽量选择使用该接口。<br>
  1059. 此接口支持分页查询,默认每页20条。
  1060. */
  1061. func (c *VmClient) DescribeBriefInstances(request *vm.DescribeBriefInstancesRequest) (*vm.DescribeBriefInstancesResponse, error) {
  1062. if request == nil {
  1063. return nil, errors.New("Request object is nil. ")
  1064. }
  1065. resp, err := c.Send(request, c.ServiceName)
  1066. if err != nil {
  1067. return nil, err
  1068. }
  1069. jdResp := &vm.DescribeBriefInstancesResponse{}
  1070. err = json.Unmarshal(resp, jdResp)
  1071. if err != nil {
  1072. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  1073. return nil, err
  1074. }
  1075. return jdResp, err
  1076. }
  1077. /* 批量查询云主机的详细信息<br>
  1078. 此接口支持分页查询,默认每页20条。
  1079. */
  1080. func (c *VmClient) DescribeInstances(request *vm.DescribeInstancesRequest) (*vm.DescribeInstancesResponse, error) {
  1081. if request == nil {
  1082. return nil, errors.New("Request object is nil. ")
  1083. }
  1084. resp, err := c.Send(request, c.ServiceName)
  1085. if err != nil {
  1086. return nil, err
  1087. }
  1088. jdResp := &vm.DescribeInstancesResponse{}
  1089. err = json.Unmarshal(resp, jdResp)
  1090. if err != nil {
  1091. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  1092. return nil, err
  1093. }
  1094. return jdResp, err
  1095. }
  1096. /* 创建ssh密钥对。公钥部分存储在京东云,并返回未加密的 PEM 编码的 PKCS#8 格式私钥,您只有一次机会保存您的私钥。请妥善保管。<br>
  1097. 若传入已存在的密钥名称,会返回错误。
  1098. */
  1099. func (c *VmClient) CreateKeypair(request *vm.CreateKeypairRequest) (*vm.CreateKeypairResponse, error) {
  1100. if request == nil {
  1101. return nil, errors.New("Request object is nil. ")
  1102. }
  1103. resp, err := c.Send(request, c.ServiceName)
  1104. if err != nil {
  1105. return nil, err
  1106. }
  1107. jdResp := &vm.CreateKeypairResponse{}
  1108. err = json.Unmarshal(resp, jdResp)
  1109. if err != nil {
  1110. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  1111. return nil, err
  1112. }
  1113. return jdResp, err
  1114. }
  1115. /* 校验启动模板的有效性
  1116. */
  1117. func (c *VmClient) VerifyInstanceTemplate(request *vm.VerifyInstanceTemplateRequest) (*vm.VerifyInstanceTemplateResponse, error) {
  1118. if request == nil {
  1119. return nil, errors.New("Request object is nil. ")
  1120. }
  1121. resp, err := c.Send(request, c.ServiceName)
  1122. if err != nil {
  1123. return nil, err
  1124. }
  1125. jdResp := &vm.VerifyInstanceTemplateResponse{}
  1126. err = json.Unmarshal(resp, jdResp)
  1127. if err != nil {
  1128. c.Logger.Log(core.LogError, "Unmarshal json failed, resp: %s", string(resp))
  1129. return nil, err
  1130. }
  1131. return jdResp, err
  1132. }