PodService.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883
  1. //
  2. // Copyright 2016, Sander van Harmelen
  3. //
  4. // Licensed under the Apache License, Version 2.0 (the "License");
  5. // you may not use this file except in compliance with the License.
  6. // You may obtain a copy of the License at
  7. //
  8. // http://www.apache.org/licenses/LICENSE-2.0
  9. //
  10. // Unless required by applicable law or agreed to in writing, software
  11. // distributed under the License is distributed on an "AS IS" BASIS,
  12. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. // See the License for the specific language governing permissions and
  14. // limitations under the License.
  15. //
  16. package cloudstack
  17. import (
  18. "encoding/json"
  19. "fmt"
  20. "net/url"
  21. "strconv"
  22. "strings"
  23. )
  24. type CreatePodParams struct {
  25. p map[string]interface{}
  26. }
  27. func (p *CreatePodParams) toURLValues() url.Values {
  28. u := url.Values{}
  29. if p.p == nil {
  30. return u
  31. }
  32. if v, found := p.p["allocationstate"]; found {
  33. u.Set("allocationstate", v.(string))
  34. }
  35. if v, found := p.p["endip"]; found {
  36. u.Set("endip", v.(string))
  37. }
  38. if v, found := p.p["gateway"]; found {
  39. u.Set("gateway", v.(string))
  40. }
  41. if v, found := p.p["name"]; found {
  42. u.Set("name", v.(string))
  43. }
  44. if v, found := p.p["netmask"]; found {
  45. u.Set("netmask", v.(string))
  46. }
  47. if v, found := p.p["startip"]; found {
  48. u.Set("startip", v.(string))
  49. }
  50. if v, found := p.p["zoneid"]; found {
  51. u.Set("zoneid", v.(string))
  52. }
  53. return u
  54. }
  55. func (p *CreatePodParams) SetAllocationstate(v string) {
  56. if p.p == nil {
  57. p.p = make(map[string]interface{})
  58. }
  59. p.p["allocationstate"] = v
  60. return
  61. }
  62. func (p *CreatePodParams) SetEndip(v string) {
  63. if p.p == nil {
  64. p.p = make(map[string]interface{})
  65. }
  66. p.p["endip"] = v
  67. return
  68. }
  69. func (p *CreatePodParams) SetGateway(v string) {
  70. if p.p == nil {
  71. p.p = make(map[string]interface{})
  72. }
  73. p.p["gateway"] = v
  74. return
  75. }
  76. func (p *CreatePodParams) SetName(v string) {
  77. if p.p == nil {
  78. p.p = make(map[string]interface{})
  79. }
  80. p.p["name"] = v
  81. return
  82. }
  83. func (p *CreatePodParams) SetNetmask(v string) {
  84. if p.p == nil {
  85. p.p = make(map[string]interface{})
  86. }
  87. p.p["netmask"] = v
  88. return
  89. }
  90. func (p *CreatePodParams) SetStartip(v string) {
  91. if p.p == nil {
  92. p.p = make(map[string]interface{})
  93. }
  94. p.p["startip"] = v
  95. return
  96. }
  97. func (p *CreatePodParams) SetZoneid(v string) {
  98. if p.p == nil {
  99. p.p = make(map[string]interface{})
  100. }
  101. p.p["zoneid"] = v
  102. return
  103. }
  104. // You should always use this function to get a new CreatePodParams instance,
  105. // as then you are sure you have configured all required params
  106. func (s *PodService) NewCreatePodParams(gateway string, name string, netmask string, startip string, zoneid string) *CreatePodParams {
  107. p := &CreatePodParams{}
  108. p.p = make(map[string]interface{})
  109. p.p["gateway"] = gateway
  110. p.p["name"] = name
  111. p.p["netmask"] = netmask
  112. p.p["startip"] = startip
  113. p.p["zoneid"] = zoneid
  114. return p
  115. }
  116. // Creates a new Pod.
  117. func (s *PodService) CreatePod(p *CreatePodParams) (*CreatePodResponse, error) {
  118. resp, err := s.cs.newRequest("createPod", p.toURLValues())
  119. if err != nil {
  120. return nil, err
  121. }
  122. var r CreatePodResponse
  123. if err := json.Unmarshal(resp, &r); err != nil {
  124. return nil, err
  125. }
  126. return &r, nil
  127. }
  128. type CreatePodResponse struct {
  129. Allocationstate string `json:"allocationstate,omitempty"`
  130. Capacity []struct {
  131. Capacitytotal int64 `json:"capacitytotal,omitempty"`
  132. Capacityused int64 `json:"capacityused,omitempty"`
  133. Clusterid string `json:"clusterid,omitempty"`
  134. Clustername string `json:"clustername,omitempty"`
  135. Percentused string `json:"percentused,omitempty"`
  136. Podid string `json:"podid,omitempty"`
  137. Podname string `json:"podname,omitempty"`
  138. Type int `json:"type,omitempty"`
  139. Zoneid string `json:"zoneid,omitempty"`
  140. Zonename string `json:"zonename,omitempty"`
  141. } `json:"capacity,omitempty"`
  142. Endip string `json:"endip,omitempty"`
  143. Gateway string `json:"gateway,omitempty"`
  144. Id string `json:"id,omitempty"`
  145. Name string `json:"name,omitempty"`
  146. Netmask string `json:"netmask,omitempty"`
  147. Startip string `json:"startip,omitempty"`
  148. Zoneid string `json:"zoneid,omitempty"`
  149. Zonename string `json:"zonename,omitempty"`
  150. }
  151. type UpdatePodParams struct {
  152. p map[string]interface{}
  153. }
  154. func (p *UpdatePodParams) toURLValues() url.Values {
  155. u := url.Values{}
  156. if p.p == nil {
  157. return u
  158. }
  159. if v, found := p.p["allocationstate"]; found {
  160. u.Set("allocationstate", v.(string))
  161. }
  162. if v, found := p.p["endip"]; found {
  163. u.Set("endip", v.(string))
  164. }
  165. if v, found := p.p["gateway"]; found {
  166. u.Set("gateway", v.(string))
  167. }
  168. if v, found := p.p["id"]; found {
  169. u.Set("id", v.(string))
  170. }
  171. if v, found := p.p["name"]; found {
  172. u.Set("name", v.(string))
  173. }
  174. if v, found := p.p["netmask"]; found {
  175. u.Set("netmask", v.(string))
  176. }
  177. if v, found := p.p["startip"]; found {
  178. u.Set("startip", v.(string))
  179. }
  180. return u
  181. }
  182. func (p *UpdatePodParams) SetAllocationstate(v string) {
  183. if p.p == nil {
  184. p.p = make(map[string]interface{})
  185. }
  186. p.p["allocationstate"] = v
  187. return
  188. }
  189. func (p *UpdatePodParams) SetEndip(v string) {
  190. if p.p == nil {
  191. p.p = make(map[string]interface{})
  192. }
  193. p.p["endip"] = v
  194. return
  195. }
  196. func (p *UpdatePodParams) SetGateway(v string) {
  197. if p.p == nil {
  198. p.p = make(map[string]interface{})
  199. }
  200. p.p["gateway"] = v
  201. return
  202. }
  203. func (p *UpdatePodParams) SetId(v string) {
  204. if p.p == nil {
  205. p.p = make(map[string]interface{})
  206. }
  207. p.p["id"] = v
  208. return
  209. }
  210. func (p *UpdatePodParams) SetName(v string) {
  211. if p.p == nil {
  212. p.p = make(map[string]interface{})
  213. }
  214. p.p["name"] = v
  215. return
  216. }
  217. func (p *UpdatePodParams) SetNetmask(v string) {
  218. if p.p == nil {
  219. p.p = make(map[string]interface{})
  220. }
  221. p.p["netmask"] = v
  222. return
  223. }
  224. func (p *UpdatePodParams) SetStartip(v string) {
  225. if p.p == nil {
  226. p.p = make(map[string]interface{})
  227. }
  228. p.p["startip"] = v
  229. return
  230. }
  231. // You should always use this function to get a new UpdatePodParams instance,
  232. // as then you are sure you have configured all required params
  233. func (s *PodService) NewUpdatePodParams(id string) *UpdatePodParams {
  234. p := &UpdatePodParams{}
  235. p.p = make(map[string]interface{})
  236. p.p["id"] = id
  237. return p
  238. }
  239. // Updates a Pod.
  240. func (s *PodService) UpdatePod(p *UpdatePodParams) (*UpdatePodResponse, error) {
  241. resp, err := s.cs.newRequest("updatePod", p.toURLValues())
  242. if err != nil {
  243. return nil, err
  244. }
  245. var r UpdatePodResponse
  246. if err := json.Unmarshal(resp, &r); err != nil {
  247. return nil, err
  248. }
  249. return &r, nil
  250. }
  251. type UpdatePodResponse struct {
  252. Allocationstate string `json:"allocationstate,omitempty"`
  253. Capacity []struct {
  254. Capacitytotal int64 `json:"capacitytotal,omitempty"`
  255. Capacityused int64 `json:"capacityused,omitempty"`
  256. Clusterid string `json:"clusterid,omitempty"`
  257. Clustername string `json:"clustername,omitempty"`
  258. Percentused string `json:"percentused,omitempty"`
  259. Podid string `json:"podid,omitempty"`
  260. Podname string `json:"podname,omitempty"`
  261. Type int `json:"type,omitempty"`
  262. Zoneid string `json:"zoneid,omitempty"`
  263. Zonename string `json:"zonename,omitempty"`
  264. } `json:"capacity,omitempty"`
  265. Endip string `json:"endip,omitempty"`
  266. Gateway string `json:"gateway,omitempty"`
  267. Id string `json:"id,omitempty"`
  268. Name string `json:"name,omitempty"`
  269. Netmask string `json:"netmask,omitempty"`
  270. Startip string `json:"startip,omitempty"`
  271. Zoneid string `json:"zoneid,omitempty"`
  272. Zonename string `json:"zonename,omitempty"`
  273. }
  274. type DeletePodParams struct {
  275. p map[string]interface{}
  276. }
  277. func (p *DeletePodParams) toURLValues() url.Values {
  278. u := url.Values{}
  279. if p.p == nil {
  280. return u
  281. }
  282. if v, found := p.p["id"]; found {
  283. u.Set("id", v.(string))
  284. }
  285. return u
  286. }
  287. func (p *DeletePodParams) SetId(v string) {
  288. if p.p == nil {
  289. p.p = make(map[string]interface{})
  290. }
  291. p.p["id"] = v
  292. return
  293. }
  294. // You should always use this function to get a new DeletePodParams instance,
  295. // as then you are sure you have configured all required params
  296. func (s *PodService) NewDeletePodParams(id string) *DeletePodParams {
  297. p := &DeletePodParams{}
  298. p.p = make(map[string]interface{})
  299. p.p["id"] = id
  300. return p
  301. }
  302. // Deletes a Pod.
  303. func (s *PodService) DeletePod(p *DeletePodParams) (*DeletePodResponse, error) {
  304. resp, err := s.cs.newRequest("deletePod", p.toURLValues())
  305. if err != nil {
  306. return nil, err
  307. }
  308. var r DeletePodResponse
  309. if err := json.Unmarshal(resp, &r); err != nil {
  310. return nil, err
  311. }
  312. return &r, nil
  313. }
  314. type DeletePodResponse struct {
  315. Displaytext string `json:"displaytext,omitempty"`
  316. Success string `json:"success,omitempty"`
  317. }
  318. type ListPodsParams struct {
  319. p map[string]interface{}
  320. }
  321. func (p *ListPodsParams) toURLValues() url.Values {
  322. u := url.Values{}
  323. if p.p == nil {
  324. return u
  325. }
  326. if v, found := p.p["allocationstate"]; found {
  327. u.Set("allocationstate", v.(string))
  328. }
  329. if v, found := p.p["id"]; found {
  330. u.Set("id", v.(string))
  331. }
  332. if v, found := p.p["keyword"]; found {
  333. u.Set("keyword", v.(string))
  334. }
  335. if v, found := p.p["name"]; found {
  336. u.Set("name", v.(string))
  337. }
  338. if v, found := p.p["page"]; found {
  339. vv := strconv.Itoa(v.(int))
  340. u.Set("page", vv)
  341. }
  342. if v, found := p.p["pagesize"]; found {
  343. vv := strconv.Itoa(v.(int))
  344. u.Set("pagesize", vv)
  345. }
  346. if v, found := p.p["showcapacities"]; found {
  347. vv := strconv.FormatBool(v.(bool))
  348. u.Set("showcapacities", vv)
  349. }
  350. if v, found := p.p["zoneid"]; found {
  351. u.Set("zoneid", v.(string))
  352. }
  353. return u
  354. }
  355. func (p *ListPodsParams) SetAllocationstate(v string) {
  356. if p.p == nil {
  357. p.p = make(map[string]interface{})
  358. }
  359. p.p["allocationstate"] = v
  360. return
  361. }
  362. func (p *ListPodsParams) SetId(v string) {
  363. if p.p == nil {
  364. p.p = make(map[string]interface{})
  365. }
  366. p.p["id"] = v
  367. return
  368. }
  369. func (p *ListPodsParams) SetKeyword(v string) {
  370. if p.p == nil {
  371. p.p = make(map[string]interface{})
  372. }
  373. p.p["keyword"] = v
  374. return
  375. }
  376. func (p *ListPodsParams) SetName(v string) {
  377. if p.p == nil {
  378. p.p = make(map[string]interface{})
  379. }
  380. p.p["name"] = v
  381. return
  382. }
  383. func (p *ListPodsParams) SetPage(v int) {
  384. if p.p == nil {
  385. p.p = make(map[string]interface{})
  386. }
  387. p.p["page"] = v
  388. return
  389. }
  390. func (p *ListPodsParams) SetPagesize(v int) {
  391. if p.p == nil {
  392. p.p = make(map[string]interface{})
  393. }
  394. p.p["pagesize"] = v
  395. return
  396. }
  397. func (p *ListPodsParams) SetShowcapacities(v bool) {
  398. if p.p == nil {
  399. p.p = make(map[string]interface{})
  400. }
  401. p.p["showcapacities"] = v
  402. return
  403. }
  404. func (p *ListPodsParams) SetZoneid(v string) {
  405. if p.p == nil {
  406. p.p = make(map[string]interface{})
  407. }
  408. p.p["zoneid"] = v
  409. return
  410. }
  411. // You should always use this function to get a new ListPodsParams instance,
  412. // as then you are sure you have configured all required params
  413. func (s *PodService) NewListPodsParams() *ListPodsParams {
  414. p := &ListPodsParams{}
  415. p.p = make(map[string]interface{})
  416. return p
  417. }
  418. // This is a courtesy helper function, which in some cases may not work as expected!
  419. func (s *PodService) GetPodID(name string, opts ...OptionFunc) (string, int, error) {
  420. p := &ListPodsParams{}
  421. p.p = make(map[string]interface{})
  422. p.p["name"] = name
  423. for _, fn := range opts {
  424. if err := fn(s.cs, p); err != nil {
  425. return "", -1, err
  426. }
  427. }
  428. l, err := s.ListPods(p)
  429. if err != nil {
  430. return "", -1, err
  431. }
  432. if l.Count == 0 {
  433. return "", l.Count, fmt.Errorf("No match found for %s: %+v", name, l)
  434. }
  435. if l.Count == 1 {
  436. return l.Pods[0].Id, l.Count, nil
  437. }
  438. if l.Count > 1 {
  439. for _, v := range l.Pods {
  440. if v.Name == name {
  441. return v.Id, l.Count, nil
  442. }
  443. }
  444. }
  445. return "", l.Count, fmt.Errorf("Could not find an exact match for %s: %+v", name, l)
  446. }
  447. // This is a courtesy helper function, which in some cases may not work as expected!
  448. func (s *PodService) GetPodByName(name string, opts ...OptionFunc) (*Pod, int, error) {
  449. id, count, err := s.GetPodID(name, opts...)
  450. if err != nil {
  451. return nil, count, err
  452. }
  453. r, count, err := s.GetPodByID(id, opts...)
  454. if err != nil {
  455. return nil, count, err
  456. }
  457. return r, count, nil
  458. }
  459. // This is a courtesy helper function, which in some cases may not work as expected!
  460. func (s *PodService) GetPodByID(id string, opts ...OptionFunc) (*Pod, int, error) {
  461. p := &ListPodsParams{}
  462. p.p = make(map[string]interface{})
  463. p.p["id"] = id
  464. for _, fn := range opts {
  465. if err := fn(s.cs, p); err != nil {
  466. return nil, -1, err
  467. }
  468. }
  469. l, err := s.ListPods(p)
  470. if err != nil {
  471. if strings.Contains(err.Error(), fmt.Sprintf(
  472. "Invalid parameter id value=%s due to incorrect long value format, "+
  473. "or entity does not exist", id)) {
  474. return nil, 0, fmt.Errorf("No match found for %s: %+v", id, l)
  475. }
  476. return nil, -1, err
  477. }
  478. if l.Count == 0 {
  479. return nil, l.Count, fmt.Errorf("No match found for %s: %+v", id, l)
  480. }
  481. if l.Count == 1 {
  482. return l.Pods[0], l.Count, nil
  483. }
  484. return nil, l.Count, fmt.Errorf("There is more then one result for Pod UUID: %s!", id)
  485. }
  486. // Lists all Pods.
  487. func (s *PodService) ListPods(p *ListPodsParams) (*ListPodsResponse, error) {
  488. resp, err := s.cs.newRequest("listPods", p.toURLValues())
  489. if err != nil {
  490. return nil, err
  491. }
  492. var r ListPodsResponse
  493. if err := json.Unmarshal(resp, &r); err != nil {
  494. return nil, err
  495. }
  496. return &r, nil
  497. }
  498. type ListPodsResponse struct {
  499. Count int `json:"count"`
  500. Pods []*Pod `json:"pod"`
  501. }
  502. type Pod struct {
  503. Allocationstate string `json:"allocationstate,omitempty"`
  504. Capacity []struct {
  505. Capacitytotal int64 `json:"capacitytotal,omitempty"`
  506. Capacityused int64 `json:"capacityused,omitempty"`
  507. Clusterid string `json:"clusterid,omitempty"`
  508. Clustername string `json:"clustername,omitempty"`
  509. Percentused string `json:"percentused,omitempty"`
  510. Podid string `json:"podid,omitempty"`
  511. Podname string `json:"podname,omitempty"`
  512. Type int `json:"type,omitempty"`
  513. Zoneid string `json:"zoneid,omitempty"`
  514. Zonename string `json:"zonename,omitempty"`
  515. } `json:"capacity,omitempty"`
  516. Endip string `json:"endip,omitempty"`
  517. Gateway string `json:"gateway,omitempty"`
  518. Id string `json:"id,omitempty"`
  519. Name string `json:"name,omitempty"`
  520. Netmask string `json:"netmask,omitempty"`
  521. Startip string `json:"startip,omitempty"`
  522. Zoneid string `json:"zoneid,omitempty"`
  523. Zonename string `json:"zonename,omitempty"`
  524. }
  525. type DedicatePodParams struct {
  526. p map[string]interface{}
  527. }
  528. func (p *DedicatePodParams) toURLValues() url.Values {
  529. u := url.Values{}
  530. if p.p == nil {
  531. return u
  532. }
  533. if v, found := p.p["account"]; found {
  534. u.Set("account", v.(string))
  535. }
  536. if v, found := p.p["domainid"]; found {
  537. u.Set("domainid", v.(string))
  538. }
  539. if v, found := p.p["podid"]; found {
  540. u.Set("podid", v.(string))
  541. }
  542. return u
  543. }
  544. func (p *DedicatePodParams) SetAccount(v string) {
  545. if p.p == nil {
  546. p.p = make(map[string]interface{})
  547. }
  548. p.p["account"] = v
  549. return
  550. }
  551. func (p *DedicatePodParams) SetDomainid(v string) {
  552. if p.p == nil {
  553. p.p = make(map[string]interface{})
  554. }
  555. p.p["domainid"] = v
  556. return
  557. }
  558. func (p *DedicatePodParams) SetPodid(v string) {
  559. if p.p == nil {
  560. p.p = make(map[string]interface{})
  561. }
  562. p.p["podid"] = v
  563. return
  564. }
  565. // You should always use this function to get a new DedicatePodParams instance,
  566. // as then you are sure you have configured all required params
  567. func (s *PodService) NewDedicatePodParams(domainid string, podid string) *DedicatePodParams {
  568. p := &DedicatePodParams{}
  569. p.p = make(map[string]interface{})
  570. p.p["domainid"] = domainid
  571. p.p["podid"] = podid
  572. return p
  573. }
  574. // Dedicates a Pod.
  575. func (s *PodService) DedicatePod(p *DedicatePodParams) (*DedicatePodResponse, error) {
  576. resp, err := s.cs.newRequest("dedicatePod", p.toURLValues())
  577. if err != nil {
  578. return nil, err
  579. }
  580. var r DedicatePodResponse
  581. if err := json.Unmarshal(resp, &r); err != nil {
  582. return nil, err
  583. }
  584. // If we have a async client, we need to wait for the async result
  585. if s.cs.async {
  586. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  587. if err != nil {
  588. if err == AsyncTimeoutErr {
  589. return &r, err
  590. }
  591. return nil, err
  592. }
  593. b, err = getRawValue(b)
  594. if err != nil {
  595. return nil, err
  596. }
  597. if err := json.Unmarshal(b, &r); err != nil {
  598. return nil, err
  599. }
  600. }
  601. return &r, nil
  602. }
  603. type DedicatePodResponse struct {
  604. JobID string `json:"jobid,omitempty"`
  605. Accountid string `json:"accountid,omitempty"`
  606. Affinitygroupid string `json:"affinitygroupid,omitempty"`
  607. Domainid string `json:"domainid,omitempty"`
  608. Id string `json:"id,omitempty"`
  609. Podid string `json:"podid,omitempty"`
  610. Podname string `json:"podname,omitempty"`
  611. }
  612. type ReleaseDedicatedPodParams struct {
  613. p map[string]interface{}
  614. }
  615. func (p *ReleaseDedicatedPodParams) toURLValues() url.Values {
  616. u := url.Values{}
  617. if p.p == nil {
  618. return u
  619. }
  620. if v, found := p.p["podid"]; found {
  621. u.Set("podid", v.(string))
  622. }
  623. return u
  624. }
  625. func (p *ReleaseDedicatedPodParams) SetPodid(v string) {
  626. if p.p == nil {
  627. p.p = make(map[string]interface{})
  628. }
  629. p.p["podid"] = v
  630. return
  631. }
  632. // You should always use this function to get a new ReleaseDedicatedPodParams instance,
  633. // as then you are sure you have configured all required params
  634. func (s *PodService) NewReleaseDedicatedPodParams(podid string) *ReleaseDedicatedPodParams {
  635. p := &ReleaseDedicatedPodParams{}
  636. p.p = make(map[string]interface{})
  637. p.p["podid"] = podid
  638. return p
  639. }
  640. // Release the dedication for the pod
  641. func (s *PodService) ReleaseDedicatedPod(p *ReleaseDedicatedPodParams) (*ReleaseDedicatedPodResponse, error) {
  642. resp, err := s.cs.newRequest("releaseDedicatedPod", p.toURLValues())
  643. if err != nil {
  644. return nil, err
  645. }
  646. var r ReleaseDedicatedPodResponse
  647. if err := json.Unmarshal(resp, &r); err != nil {
  648. return nil, err
  649. }
  650. // If we have a async client, we need to wait for the async result
  651. if s.cs.async {
  652. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  653. if err != nil {
  654. if err == AsyncTimeoutErr {
  655. return &r, err
  656. }
  657. return nil, err
  658. }
  659. if err := json.Unmarshal(b, &r); err != nil {
  660. return nil, err
  661. }
  662. }
  663. return &r, nil
  664. }
  665. type ReleaseDedicatedPodResponse struct {
  666. JobID string `json:"jobid,omitempty"`
  667. Displaytext string `json:"displaytext,omitempty"`
  668. Success bool `json:"success,omitempty"`
  669. }
  670. type ListDedicatedPodsParams struct {
  671. p map[string]interface{}
  672. }
  673. func (p *ListDedicatedPodsParams) toURLValues() url.Values {
  674. u := url.Values{}
  675. if p.p == nil {
  676. return u
  677. }
  678. if v, found := p.p["account"]; found {
  679. u.Set("account", v.(string))
  680. }
  681. if v, found := p.p["affinitygroupid"]; found {
  682. u.Set("affinitygroupid", v.(string))
  683. }
  684. if v, found := p.p["domainid"]; found {
  685. u.Set("domainid", v.(string))
  686. }
  687. if v, found := p.p["keyword"]; found {
  688. u.Set("keyword", v.(string))
  689. }
  690. if v, found := p.p["page"]; found {
  691. vv := strconv.Itoa(v.(int))
  692. u.Set("page", vv)
  693. }
  694. if v, found := p.p["pagesize"]; found {
  695. vv := strconv.Itoa(v.(int))
  696. u.Set("pagesize", vv)
  697. }
  698. if v, found := p.p["podid"]; found {
  699. u.Set("podid", v.(string))
  700. }
  701. return u
  702. }
  703. func (p *ListDedicatedPodsParams) SetAccount(v string) {
  704. if p.p == nil {
  705. p.p = make(map[string]interface{})
  706. }
  707. p.p["account"] = v
  708. return
  709. }
  710. func (p *ListDedicatedPodsParams) SetAffinitygroupid(v string) {
  711. if p.p == nil {
  712. p.p = make(map[string]interface{})
  713. }
  714. p.p["affinitygroupid"] = v
  715. return
  716. }
  717. func (p *ListDedicatedPodsParams) SetDomainid(v string) {
  718. if p.p == nil {
  719. p.p = make(map[string]interface{})
  720. }
  721. p.p["domainid"] = v
  722. return
  723. }
  724. func (p *ListDedicatedPodsParams) SetKeyword(v string) {
  725. if p.p == nil {
  726. p.p = make(map[string]interface{})
  727. }
  728. p.p["keyword"] = v
  729. return
  730. }
  731. func (p *ListDedicatedPodsParams) SetPage(v int) {
  732. if p.p == nil {
  733. p.p = make(map[string]interface{})
  734. }
  735. p.p["page"] = v
  736. return
  737. }
  738. func (p *ListDedicatedPodsParams) SetPagesize(v int) {
  739. if p.p == nil {
  740. p.p = make(map[string]interface{})
  741. }
  742. p.p["pagesize"] = v
  743. return
  744. }
  745. func (p *ListDedicatedPodsParams) SetPodid(v string) {
  746. if p.p == nil {
  747. p.p = make(map[string]interface{})
  748. }
  749. p.p["podid"] = v
  750. return
  751. }
  752. // You should always use this function to get a new ListDedicatedPodsParams instance,
  753. // as then you are sure you have configured all required params
  754. func (s *PodService) NewListDedicatedPodsParams() *ListDedicatedPodsParams {
  755. p := &ListDedicatedPodsParams{}
  756. p.p = make(map[string]interface{})
  757. return p
  758. }
  759. // Lists dedicated pods.
  760. func (s *PodService) ListDedicatedPods(p *ListDedicatedPodsParams) (*ListDedicatedPodsResponse, error) {
  761. resp, err := s.cs.newRequest("listDedicatedPods", p.toURLValues())
  762. if err != nil {
  763. return nil, err
  764. }
  765. var r ListDedicatedPodsResponse
  766. if err := json.Unmarshal(resp, &r); err != nil {
  767. return nil, err
  768. }
  769. return &r, nil
  770. }
  771. type ListDedicatedPodsResponse struct {
  772. Count int `json:"count"`
  773. DedicatedPods []*DedicatedPod `json:"dedicatedpod"`
  774. }
  775. type DedicatedPod struct {
  776. Accountid string `json:"accountid,omitempty"`
  777. Affinitygroupid string `json:"affinitygroupid,omitempty"`
  778. Domainid string `json:"domainid,omitempty"`
  779. Id string `json:"id,omitempty"`
  780. Podid string `json:"podid,omitempty"`
  781. Podname string `json:"podname,omitempty"`
  782. }