PoolService.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801
  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 ListStoragePoolsParams struct {
  25. p map[string]interface{}
  26. }
  27. func (p *ListStoragePoolsParams) toURLValues() url.Values {
  28. u := url.Values{}
  29. if p.p == nil {
  30. return u
  31. }
  32. if v, found := p.p["clusterid"]; found {
  33. u.Set("clusterid", v.(string))
  34. }
  35. if v, found := p.p["id"]; found {
  36. u.Set("id", v.(string))
  37. }
  38. if v, found := p.p["ipaddress"]; found {
  39. u.Set("ipaddress", v.(string))
  40. }
  41. if v, found := p.p["keyword"]; found {
  42. u.Set("keyword", v.(string))
  43. }
  44. if v, found := p.p["name"]; found {
  45. u.Set("name", v.(string))
  46. }
  47. if v, found := p.p["page"]; found {
  48. vv := strconv.Itoa(v.(int))
  49. u.Set("page", vv)
  50. }
  51. if v, found := p.p["pagesize"]; found {
  52. vv := strconv.Itoa(v.(int))
  53. u.Set("pagesize", vv)
  54. }
  55. if v, found := p.p["path"]; found {
  56. u.Set("path", v.(string))
  57. }
  58. if v, found := p.p["podid"]; found {
  59. u.Set("podid", v.(string))
  60. }
  61. if v, found := p.p["scope"]; found {
  62. u.Set("scope", v.(string))
  63. }
  64. if v, found := p.p["zoneid"]; found {
  65. u.Set("zoneid", v.(string))
  66. }
  67. return u
  68. }
  69. func (p *ListStoragePoolsParams) SetClusterid(v string) {
  70. if p.p == nil {
  71. p.p = make(map[string]interface{})
  72. }
  73. p.p["clusterid"] = v
  74. return
  75. }
  76. func (p *ListStoragePoolsParams) SetId(v string) {
  77. if p.p == nil {
  78. p.p = make(map[string]interface{})
  79. }
  80. p.p["id"] = v
  81. return
  82. }
  83. func (p *ListStoragePoolsParams) SetIpaddress(v string) {
  84. if p.p == nil {
  85. p.p = make(map[string]interface{})
  86. }
  87. p.p["ipaddress"] = v
  88. return
  89. }
  90. func (p *ListStoragePoolsParams) SetKeyword(v string) {
  91. if p.p == nil {
  92. p.p = make(map[string]interface{})
  93. }
  94. p.p["keyword"] = v
  95. return
  96. }
  97. func (p *ListStoragePoolsParams) SetName(v string) {
  98. if p.p == nil {
  99. p.p = make(map[string]interface{})
  100. }
  101. p.p["name"] = v
  102. return
  103. }
  104. func (p *ListStoragePoolsParams) SetPage(v int) {
  105. if p.p == nil {
  106. p.p = make(map[string]interface{})
  107. }
  108. p.p["page"] = v
  109. return
  110. }
  111. func (p *ListStoragePoolsParams) SetPagesize(v int) {
  112. if p.p == nil {
  113. p.p = make(map[string]interface{})
  114. }
  115. p.p["pagesize"] = v
  116. return
  117. }
  118. func (p *ListStoragePoolsParams) SetPath(v string) {
  119. if p.p == nil {
  120. p.p = make(map[string]interface{})
  121. }
  122. p.p["path"] = v
  123. return
  124. }
  125. func (p *ListStoragePoolsParams) SetPodid(v string) {
  126. if p.p == nil {
  127. p.p = make(map[string]interface{})
  128. }
  129. p.p["podid"] = v
  130. return
  131. }
  132. func (p *ListStoragePoolsParams) SetScope(v string) {
  133. if p.p == nil {
  134. p.p = make(map[string]interface{})
  135. }
  136. p.p["scope"] = v
  137. return
  138. }
  139. func (p *ListStoragePoolsParams) SetZoneid(v string) {
  140. if p.p == nil {
  141. p.p = make(map[string]interface{})
  142. }
  143. p.p["zoneid"] = v
  144. return
  145. }
  146. // You should always use this function to get a new ListStoragePoolsParams instance,
  147. // as then you are sure you have configured all required params
  148. func (s *PoolService) NewListStoragePoolsParams() *ListStoragePoolsParams {
  149. p := &ListStoragePoolsParams{}
  150. p.p = make(map[string]interface{})
  151. return p
  152. }
  153. // This is a courtesy helper function, which in some cases may not work as expected!
  154. func (s *PoolService) GetStoragePoolID(name string, opts ...OptionFunc) (string, int, error) {
  155. p := &ListStoragePoolsParams{}
  156. p.p = make(map[string]interface{})
  157. p.p["name"] = name
  158. for _, fn := range opts {
  159. if err := fn(s.cs, p); err != nil {
  160. return "", -1, err
  161. }
  162. }
  163. l, err := s.ListStoragePools(p)
  164. if err != nil {
  165. return "", -1, err
  166. }
  167. if l.Count == 0 {
  168. return "", l.Count, fmt.Errorf("No match found for %s: %+v", name, l)
  169. }
  170. if l.Count == 1 {
  171. return l.StoragePools[0].Id, l.Count, nil
  172. }
  173. if l.Count > 1 {
  174. for _, v := range l.StoragePools {
  175. if v.Name == name {
  176. return v.Id, l.Count, nil
  177. }
  178. }
  179. }
  180. return "", l.Count, fmt.Errorf("Could not find an exact match for %s: %+v", name, l)
  181. }
  182. // This is a courtesy helper function, which in some cases may not work as expected!
  183. func (s *PoolService) GetStoragePoolByName(name string, opts ...OptionFunc) (*StoragePool, int, error) {
  184. id, count, err := s.GetStoragePoolID(name, opts...)
  185. if err != nil {
  186. return nil, count, err
  187. }
  188. r, count, err := s.GetStoragePoolByID(id, opts...)
  189. if err != nil {
  190. return nil, count, err
  191. }
  192. return r, count, nil
  193. }
  194. // This is a courtesy helper function, which in some cases may not work as expected!
  195. func (s *PoolService) GetStoragePoolByID(id string, opts ...OptionFunc) (*StoragePool, int, error) {
  196. p := &ListStoragePoolsParams{}
  197. p.p = make(map[string]interface{})
  198. p.p["id"] = id
  199. for _, fn := range opts {
  200. if err := fn(s.cs, p); err != nil {
  201. return nil, -1, err
  202. }
  203. }
  204. l, err := s.ListStoragePools(p)
  205. if err != nil {
  206. if strings.Contains(err.Error(), fmt.Sprintf(
  207. "Invalid parameter id value=%s due to incorrect long value format, "+
  208. "or entity does not exist", id)) {
  209. return nil, 0, fmt.Errorf("No match found for %s: %+v", id, l)
  210. }
  211. return nil, -1, err
  212. }
  213. if l.Count == 0 {
  214. return nil, l.Count, fmt.Errorf("No match found for %s: %+v", id, l)
  215. }
  216. if l.Count == 1 {
  217. return l.StoragePools[0], l.Count, nil
  218. }
  219. return nil, l.Count, fmt.Errorf("There is more then one result for StoragePool UUID: %s!", id)
  220. }
  221. // Lists storage pools.
  222. func (s *PoolService) ListStoragePools(p *ListStoragePoolsParams) (*ListStoragePoolsResponse, error) {
  223. resp, err := s.cs.newRequest("listStoragePools", p.toURLValues())
  224. if err != nil {
  225. return nil, err
  226. }
  227. var r ListStoragePoolsResponse
  228. if err := json.Unmarshal(resp, &r); err != nil {
  229. return nil, err
  230. }
  231. return &r, nil
  232. }
  233. type ListStoragePoolsResponse struct {
  234. Count int `json:"count"`
  235. StoragePools []*StoragePool `json:"storagepool"`
  236. }
  237. type StoragePool struct {
  238. Capacityiops int64 `json:"capacityiops,omitempty"`
  239. Clusterid string `json:"clusterid,omitempty"`
  240. Clustername string `json:"clustername,omitempty"`
  241. Created string `json:"created,omitempty"`
  242. Disksizeallocated int64 `json:"disksizeallocated,omitempty"`
  243. Disksizetotal int64 `json:"disksizetotal,omitempty"`
  244. Disksizeused int64 `json:"disksizeused,omitempty"`
  245. Hypervisor string `json:"hypervisor,omitempty"`
  246. Id string `json:"id,omitempty"`
  247. Ipaddress string `json:"ipaddress,omitempty"`
  248. Name string `json:"name,omitempty"`
  249. Overprovisionfactor string `json:"overprovisionfactor,omitempty"`
  250. Path string `json:"path,omitempty"`
  251. Podid string `json:"podid,omitempty"`
  252. Podname string `json:"podname,omitempty"`
  253. Scope string `json:"scope,omitempty"`
  254. State string `json:"state,omitempty"`
  255. Storagecapabilities map[string]string `json:"storagecapabilities,omitempty"`
  256. Suitableformigration bool `json:"suitableformigration,omitempty"`
  257. Tags string `json:"tags,omitempty"`
  258. Type string `json:"type,omitempty"`
  259. Zoneid string `json:"zoneid,omitempty"`
  260. Zonename string `json:"zonename,omitempty"`
  261. }
  262. type CreateStoragePoolParams struct {
  263. p map[string]interface{}
  264. }
  265. func (p *CreateStoragePoolParams) toURLValues() url.Values {
  266. u := url.Values{}
  267. if p.p == nil {
  268. return u
  269. }
  270. if v, found := p.p["capacitybytes"]; found {
  271. vv := strconv.FormatInt(v.(int64), 10)
  272. u.Set("capacitybytes", vv)
  273. }
  274. if v, found := p.p["capacityiops"]; found {
  275. vv := strconv.FormatInt(v.(int64), 10)
  276. u.Set("capacityiops", vv)
  277. }
  278. if v, found := p.p["clusterid"]; found {
  279. u.Set("clusterid", v.(string))
  280. }
  281. if v, found := p.p["details"]; found {
  282. i := 0
  283. for k, vv := range v.(map[string]string) {
  284. u.Set(fmt.Sprintf("details[%d].key", i), k)
  285. u.Set(fmt.Sprintf("details[%d].value", i), vv)
  286. i++
  287. }
  288. }
  289. if v, found := p.p["hypervisor"]; found {
  290. u.Set("hypervisor", v.(string))
  291. }
  292. if v, found := p.p["managed"]; found {
  293. vv := strconv.FormatBool(v.(bool))
  294. u.Set("managed", vv)
  295. }
  296. if v, found := p.p["name"]; found {
  297. u.Set("name", v.(string))
  298. }
  299. if v, found := p.p["podid"]; found {
  300. u.Set("podid", v.(string))
  301. }
  302. if v, found := p.p["provider"]; found {
  303. u.Set("provider", v.(string))
  304. }
  305. if v, found := p.p["scope"]; found {
  306. u.Set("scope", v.(string))
  307. }
  308. if v, found := p.p["tags"]; found {
  309. u.Set("tags", v.(string))
  310. }
  311. if v, found := p.p["url"]; found {
  312. u.Set("url", v.(string))
  313. }
  314. if v, found := p.p["zoneid"]; found {
  315. u.Set("zoneid", v.(string))
  316. }
  317. return u
  318. }
  319. func (p *CreateStoragePoolParams) SetCapacitybytes(v int64) {
  320. if p.p == nil {
  321. p.p = make(map[string]interface{})
  322. }
  323. p.p["capacitybytes"] = v
  324. return
  325. }
  326. func (p *CreateStoragePoolParams) SetCapacityiops(v int64) {
  327. if p.p == nil {
  328. p.p = make(map[string]interface{})
  329. }
  330. p.p["capacityiops"] = v
  331. return
  332. }
  333. func (p *CreateStoragePoolParams) SetClusterid(v string) {
  334. if p.p == nil {
  335. p.p = make(map[string]interface{})
  336. }
  337. p.p["clusterid"] = v
  338. return
  339. }
  340. func (p *CreateStoragePoolParams) SetDetails(v map[string]string) {
  341. if p.p == nil {
  342. p.p = make(map[string]interface{})
  343. }
  344. p.p["details"] = v
  345. return
  346. }
  347. func (p *CreateStoragePoolParams) SetHypervisor(v string) {
  348. if p.p == nil {
  349. p.p = make(map[string]interface{})
  350. }
  351. p.p["hypervisor"] = v
  352. return
  353. }
  354. func (p *CreateStoragePoolParams) SetManaged(v bool) {
  355. if p.p == nil {
  356. p.p = make(map[string]interface{})
  357. }
  358. p.p["managed"] = v
  359. return
  360. }
  361. func (p *CreateStoragePoolParams) SetName(v string) {
  362. if p.p == nil {
  363. p.p = make(map[string]interface{})
  364. }
  365. p.p["name"] = v
  366. return
  367. }
  368. func (p *CreateStoragePoolParams) SetPodid(v string) {
  369. if p.p == nil {
  370. p.p = make(map[string]interface{})
  371. }
  372. p.p["podid"] = v
  373. return
  374. }
  375. func (p *CreateStoragePoolParams) SetProvider(v string) {
  376. if p.p == nil {
  377. p.p = make(map[string]interface{})
  378. }
  379. p.p["provider"] = v
  380. return
  381. }
  382. func (p *CreateStoragePoolParams) SetScope(v string) {
  383. if p.p == nil {
  384. p.p = make(map[string]interface{})
  385. }
  386. p.p["scope"] = v
  387. return
  388. }
  389. func (p *CreateStoragePoolParams) SetTags(v string) {
  390. if p.p == nil {
  391. p.p = make(map[string]interface{})
  392. }
  393. p.p["tags"] = v
  394. return
  395. }
  396. func (p *CreateStoragePoolParams) SetUrl(v string) {
  397. if p.p == nil {
  398. p.p = make(map[string]interface{})
  399. }
  400. p.p["url"] = v
  401. return
  402. }
  403. func (p *CreateStoragePoolParams) SetZoneid(v string) {
  404. if p.p == nil {
  405. p.p = make(map[string]interface{})
  406. }
  407. p.p["zoneid"] = v
  408. return
  409. }
  410. // You should always use this function to get a new CreateStoragePoolParams instance,
  411. // as then you are sure you have configured all required params
  412. func (s *PoolService) NewCreateStoragePoolParams(name string, url string, zoneid string) *CreateStoragePoolParams {
  413. p := &CreateStoragePoolParams{}
  414. p.p = make(map[string]interface{})
  415. p.p["name"] = name
  416. p.p["url"] = url
  417. p.p["zoneid"] = zoneid
  418. return p
  419. }
  420. // Creates a storage pool.
  421. func (s *PoolService) CreateStoragePool(p *CreateStoragePoolParams) (*CreateStoragePoolResponse, error) {
  422. resp, err := s.cs.newRequest("createStoragePool", p.toURLValues())
  423. if err != nil {
  424. return nil, err
  425. }
  426. var r CreateStoragePoolResponse
  427. if err := json.Unmarshal(resp, &r); err != nil {
  428. return nil, err
  429. }
  430. return &r, nil
  431. }
  432. type CreateStoragePoolResponse struct {
  433. Capacityiops int64 `json:"capacityiops,omitempty"`
  434. Clusterid string `json:"clusterid,omitempty"`
  435. Clustername string `json:"clustername,omitempty"`
  436. Created string `json:"created,omitempty"`
  437. Disksizeallocated int64 `json:"disksizeallocated,omitempty"`
  438. Disksizetotal int64 `json:"disksizetotal,omitempty"`
  439. Disksizeused int64 `json:"disksizeused,omitempty"`
  440. Hypervisor string `json:"hypervisor,omitempty"`
  441. Id string `json:"id,omitempty"`
  442. Ipaddress string `json:"ipaddress,omitempty"`
  443. Name string `json:"name,omitempty"`
  444. Overprovisionfactor string `json:"overprovisionfactor,omitempty"`
  445. Path string `json:"path,omitempty"`
  446. Podid string `json:"podid,omitempty"`
  447. Podname string `json:"podname,omitempty"`
  448. Scope string `json:"scope,omitempty"`
  449. State string `json:"state,omitempty"`
  450. Storagecapabilities map[string]string `json:"storagecapabilities,omitempty"`
  451. Suitableformigration bool `json:"suitableformigration,omitempty"`
  452. Tags string `json:"tags,omitempty"`
  453. Type string `json:"type,omitempty"`
  454. Zoneid string `json:"zoneid,omitempty"`
  455. Zonename string `json:"zonename,omitempty"`
  456. }
  457. type UpdateStoragePoolParams struct {
  458. p map[string]interface{}
  459. }
  460. func (p *UpdateStoragePoolParams) toURLValues() url.Values {
  461. u := url.Values{}
  462. if p.p == nil {
  463. return u
  464. }
  465. if v, found := p.p["capacitybytes"]; found {
  466. vv := strconv.FormatInt(v.(int64), 10)
  467. u.Set("capacitybytes", vv)
  468. }
  469. if v, found := p.p["capacityiops"]; found {
  470. vv := strconv.FormatInt(v.(int64), 10)
  471. u.Set("capacityiops", vv)
  472. }
  473. if v, found := p.p["enabled"]; found {
  474. vv := strconv.FormatBool(v.(bool))
  475. u.Set("enabled", vv)
  476. }
  477. if v, found := p.p["id"]; found {
  478. u.Set("id", v.(string))
  479. }
  480. if v, found := p.p["tags"]; found {
  481. vv := strings.Join(v.([]string), ",")
  482. u.Set("tags", vv)
  483. }
  484. return u
  485. }
  486. func (p *UpdateStoragePoolParams) SetCapacitybytes(v int64) {
  487. if p.p == nil {
  488. p.p = make(map[string]interface{})
  489. }
  490. p.p["capacitybytes"] = v
  491. return
  492. }
  493. func (p *UpdateStoragePoolParams) SetCapacityiops(v int64) {
  494. if p.p == nil {
  495. p.p = make(map[string]interface{})
  496. }
  497. p.p["capacityiops"] = v
  498. return
  499. }
  500. func (p *UpdateStoragePoolParams) SetEnabled(v bool) {
  501. if p.p == nil {
  502. p.p = make(map[string]interface{})
  503. }
  504. p.p["enabled"] = v
  505. return
  506. }
  507. func (p *UpdateStoragePoolParams) SetId(v string) {
  508. if p.p == nil {
  509. p.p = make(map[string]interface{})
  510. }
  511. p.p["id"] = v
  512. return
  513. }
  514. func (p *UpdateStoragePoolParams) SetTags(v []string) {
  515. if p.p == nil {
  516. p.p = make(map[string]interface{})
  517. }
  518. p.p["tags"] = v
  519. return
  520. }
  521. // You should always use this function to get a new UpdateStoragePoolParams instance,
  522. // as then you are sure you have configured all required params
  523. func (s *PoolService) NewUpdateStoragePoolParams(id string) *UpdateStoragePoolParams {
  524. p := &UpdateStoragePoolParams{}
  525. p.p = make(map[string]interface{})
  526. p.p["id"] = id
  527. return p
  528. }
  529. // Updates a storage pool.
  530. func (s *PoolService) UpdateStoragePool(p *UpdateStoragePoolParams) (*UpdateStoragePoolResponse, error) {
  531. resp, err := s.cs.newRequest("updateStoragePool", p.toURLValues())
  532. if err != nil {
  533. return nil, err
  534. }
  535. var r UpdateStoragePoolResponse
  536. if err := json.Unmarshal(resp, &r); err != nil {
  537. return nil, err
  538. }
  539. return &r, nil
  540. }
  541. type UpdateStoragePoolResponse struct {
  542. Capacityiops int64 `json:"capacityiops,omitempty"`
  543. Clusterid string `json:"clusterid,omitempty"`
  544. Clustername string `json:"clustername,omitempty"`
  545. Created string `json:"created,omitempty"`
  546. Disksizeallocated int64 `json:"disksizeallocated,omitempty"`
  547. Disksizetotal int64 `json:"disksizetotal,omitempty"`
  548. Disksizeused int64 `json:"disksizeused,omitempty"`
  549. Hypervisor string `json:"hypervisor,omitempty"`
  550. Id string `json:"id,omitempty"`
  551. Ipaddress string `json:"ipaddress,omitempty"`
  552. Name string `json:"name,omitempty"`
  553. Overprovisionfactor string `json:"overprovisionfactor,omitempty"`
  554. Path string `json:"path,omitempty"`
  555. Podid string `json:"podid,omitempty"`
  556. Podname string `json:"podname,omitempty"`
  557. Scope string `json:"scope,omitempty"`
  558. State string `json:"state,omitempty"`
  559. Storagecapabilities map[string]string `json:"storagecapabilities,omitempty"`
  560. Suitableformigration bool `json:"suitableformigration,omitempty"`
  561. Tags string `json:"tags,omitempty"`
  562. Type string `json:"type,omitempty"`
  563. Zoneid string `json:"zoneid,omitempty"`
  564. Zonename string `json:"zonename,omitempty"`
  565. }
  566. type DeleteStoragePoolParams struct {
  567. p map[string]interface{}
  568. }
  569. func (p *DeleteStoragePoolParams) toURLValues() url.Values {
  570. u := url.Values{}
  571. if p.p == nil {
  572. return u
  573. }
  574. if v, found := p.p["forced"]; found {
  575. vv := strconv.FormatBool(v.(bool))
  576. u.Set("forced", vv)
  577. }
  578. if v, found := p.p["id"]; found {
  579. u.Set("id", v.(string))
  580. }
  581. return u
  582. }
  583. func (p *DeleteStoragePoolParams) SetForced(v bool) {
  584. if p.p == nil {
  585. p.p = make(map[string]interface{})
  586. }
  587. p.p["forced"] = v
  588. return
  589. }
  590. func (p *DeleteStoragePoolParams) SetId(v string) {
  591. if p.p == nil {
  592. p.p = make(map[string]interface{})
  593. }
  594. p.p["id"] = v
  595. return
  596. }
  597. // You should always use this function to get a new DeleteStoragePoolParams instance,
  598. // as then you are sure you have configured all required params
  599. func (s *PoolService) NewDeleteStoragePoolParams(id string) *DeleteStoragePoolParams {
  600. p := &DeleteStoragePoolParams{}
  601. p.p = make(map[string]interface{})
  602. p.p["id"] = id
  603. return p
  604. }
  605. // Deletes a storage pool.
  606. func (s *PoolService) DeleteStoragePool(p *DeleteStoragePoolParams) (*DeleteStoragePoolResponse, error) {
  607. resp, err := s.cs.newRequest("deleteStoragePool", p.toURLValues())
  608. if err != nil {
  609. return nil, err
  610. }
  611. var r DeleteStoragePoolResponse
  612. if err := json.Unmarshal(resp, &r); err != nil {
  613. return nil, err
  614. }
  615. return &r, nil
  616. }
  617. type DeleteStoragePoolResponse struct {
  618. Displaytext string `json:"displaytext,omitempty"`
  619. Success string `json:"success,omitempty"`
  620. }
  621. type FindStoragePoolsForMigrationParams struct {
  622. p map[string]interface{}
  623. }
  624. func (p *FindStoragePoolsForMigrationParams) toURLValues() url.Values {
  625. u := url.Values{}
  626. if p.p == nil {
  627. return u
  628. }
  629. if v, found := p.p["id"]; found {
  630. u.Set("id", v.(string))
  631. }
  632. if v, found := p.p["keyword"]; found {
  633. u.Set("keyword", v.(string))
  634. }
  635. if v, found := p.p["page"]; found {
  636. vv := strconv.Itoa(v.(int))
  637. u.Set("page", vv)
  638. }
  639. if v, found := p.p["pagesize"]; found {
  640. vv := strconv.Itoa(v.(int))
  641. u.Set("pagesize", vv)
  642. }
  643. return u
  644. }
  645. func (p *FindStoragePoolsForMigrationParams) SetId(v string) {
  646. if p.p == nil {
  647. p.p = make(map[string]interface{})
  648. }
  649. p.p["id"] = v
  650. return
  651. }
  652. func (p *FindStoragePoolsForMigrationParams) SetKeyword(v string) {
  653. if p.p == nil {
  654. p.p = make(map[string]interface{})
  655. }
  656. p.p["keyword"] = v
  657. return
  658. }
  659. func (p *FindStoragePoolsForMigrationParams) SetPage(v int) {
  660. if p.p == nil {
  661. p.p = make(map[string]interface{})
  662. }
  663. p.p["page"] = v
  664. return
  665. }
  666. func (p *FindStoragePoolsForMigrationParams) SetPagesize(v int) {
  667. if p.p == nil {
  668. p.p = make(map[string]interface{})
  669. }
  670. p.p["pagesize"] = v
  671. return
  672. }
  673. // You should always use this function to get a new FindStoragePoolsForMigrationParams instance,
  674. // as then you are sure you have configured all required params
  675. func (s *PoolService) NewFindStoragePoolsForMigrationParams(id string) *FindStoragePoolsForMigrationParams {
  676. p := &FindStoragePoolsForMigrationParams{}
  677. p.p = make(map[string]interface{})
  678. p.p["id"] = id
  679. return p
  680. }
  681. // Lists storage pools available for migration of a volume.
  682. func (s *PoolService) FindStoragePoolsForMigration(p *FindStoragePoolsForMigrationParams) (*FindStoragePoolsForMigrationResponse, error) {
  683. resp, err := s.cs.newRequest("findStoragePoolsForMigration", p.toURLValues())
  684. if err != nil {
  685. return nil, err
  686. }
  687. var r FindStoragePoolsForMigrationResponse
  688. if err := json.Unmarshal(resp, &r); err != nil {
  689. return nil, err
  690. }
  691. return &r, nil
  692. }
  693. type FindStoragePoolsForMigrationResponse struct {
  694. Capacityiops int64 `json:"capacityiops,omitempty"`
  695. Clusterid string `json:"clusterid,omitempty"`
  696. Clustername string `json:"clustername,omitempty"`
  697. Created string `json:"created,omitempty"`
  698. Disksizeallocated int64 `json:"disksizeallocated,omitempty"`
  699. Disksizetotal int64 `json:"disksizetotal,omitempty"`
  700. Disksizeused int64 `json:"disksizeused,omitempty"`
  701. Hypervisor string `json:"hypervisor,omitempty"`
  702. Id string `json:"id,omitempty"`
  703. Ipaddress string `json:"ipaddress,omitempty"`
  704. Name string `json:"name,omitempty"`
  705. Overprovisionfactor string `json:"overprovisionfactor,omitempty"`
  706. Path string `json:"path,omitempty"`
  707. Podid string `json:"podid,omitempty"`
  708. Podname string `json:"podname,omitempty"`
  709. Scope string `json:"scope,omitempty"`
  710. State string `json:"state,omitempty"`
  711. Storagecapabilities map[string]string `json:"storagecapabilities,omitempty"`
  712. Suitableformigration bool `json:"suitableformigration,omitempty"`
  713. Tags string `json:"tags,omitempty"`
  714. Type string `json:"type,omitempty"`
  715. Zoneid string `json:"zoneid,omitempty"`
  716. Zonename string `json:"zonename,omitempty"`
  717. }