ZoneService.go 30 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168
  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 CreateZoneParams struct {
  25. p map[string]interface{}
  26. }
  27. func (p *CreateZoneParams) 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["dns1"]; found {
  36. u.Set("dns1", v.(string))
  37. }
  38. if v, found := p.p["dns2"]; found {
  39. u.Set("dns2", v.(string))
  40. }
  41. if v, found := p.p["domain"]; found {
  42. u.Set("domain", v.(string))
  43. }
  44. if v, found := p.p["domainid"]; found {
  45. u.Set("domainid", v.(string))
  46. }
  47. if v, found := p.p["guestcidraddress"]; found {
  48. u.Set("guestcidraddress", v.(string))
  49. }
  50. if v, found := p.p["internaldns1"]; found {
  51. u.Set("internaldns1", v.(string))
  52. }
  53. if v, found := p.p["internaldns2"]; found {
  54. u.Set("internaldns2", v.(string))
  55. }
  56. if v, found := p.p["ip6dns1"]; found {
  57. u.Set("ip6dns1", v.(string))
  58. }
  59. if v, found := p.p["ip6dns2"]; found {
  60. u.Set("ip6dns2", v.(string))
  61. }
  62. if v, found := p.p["localstorageenabled"]; found {
  63. vv := strconv.FormatBool(v.(bool))
  64. u.Set("localstorageenabled", vv)
  65. }
  66. if v, found := p.p["name"]; found {
  67. u.Set("name", v.(string))
  68. }
  69. if v, found := p.p["networktype"]; found {
  70. u.Set("networktype", v.(string))
  71. }
  72. if v, found := p.p["securitygroupenabled"]; found {
  73. vv := strconv.FormatBool(v.(bool))
  74. u.Set("securitygroupenabled", vv)
  75. }
  76. return u
  77. }
  78. func (p *CreateZoneParams) SetAllocationstate(v string) {
  79. if p.p == nil {
  80. p.p = make(map[string]interface{})
  81. }
  82. p.p["allocationstate"] = v
  83. return
  84. }
  85. func (p *CreateZoneParams) SetDns1(v string) {
  86. if p.p == nil {
  87. p.p = make(map[string]interface{})
  88. }
  89. p.p["dns1"] = v
  90. return
  91. }
  92. func (p *CreateZoneParams) SetDns2(v string) {
  93. if p.p == nil {
  94. p.p = make(map[string]interface{})
  95. }
  96. p.p["dns2"] = v
  97. return
  98. }
  99. func (p *CreateZoneParams) SetDomain(v string) {
  100. if p.p == nil {
  101. p.p = make(map[string]interface{})
  102. }
  103. p.p["domain"] = v
  104. return
  105. }
  106. func (p *CreateZoneParams) SetDomainid(v string) {
  107. if p.p == nil {
  108. p.p = make(map[string]interface{})
  109. }
  110. p.p["domainid"] = v
  111. return
  112. }
  113. func (p *CreateZoneParams) SetGuestcidraddress(v string) {
  114. if p.p == nil {
  115. p.p = make(map[string]interface{})
  116. }
  117. p.p["guestcidraddress"] = v
  118. return
  119. }
  120. func (p *CreateZoneParams) SetInternaldns1(v string) {
  121. if p.p == nil {
  122. p.p = make(map[string]interface{})
  123. }
  124. p.p["internaldns1"] = v
  125. return
  126. }
  127. func (p *CreateZoneParams) SetInternaldns2(v string) {
  128. if p.p == nil {
  129. p.p = make(map[string]interface{})
  130. }
  131. p.p["internaldns2"] = v
  132. return
  133. }
  134. func (p *CreateZoneParams) SetIp6dns1(v string) {
  135. if p.p == nil {
  136. p.p = make(map[string]interface{})
  137. }
  138. p.p["ip6dns1"] = v
  139. return
  140. }
  141. func (p *CreateZoneParams) SetIp6dns2(v string) {
  142. if p.p == nil {
  143. p.p = make(map[string]interface{})
  144. }
  145. p.p["ip6dns2"] = v
  146. return
  147. }
  148. func (p *CreateZoneParams) SetLocalstorageenabled(v bool) {
  149. if p.p == nil {
  150. p.p = make(map[string]interface{})
  151. }
  152. p.p["localstorageenabled"] = v
  153. return
  154. }
  155. func (p *CreateZoneParams) SetName(v string) {
  156. if p.p == nil {
  157. p.p = make(map[string]interface{})
  158. }
  159. p.p["name"] = v
  160. return
  161. }
  162. func (p *CreateZoneParams) SetNetworktype(v string) {
  163. if p.p == nil {
  164. p.p = make(map[string]interface{})
  165. }
  166. p.p["networktype"] = v
  167. return
  168. }
  169. func (p *CreateZoneParams) SetSecuritygroupenabled(v bool) {
  170. if p.p == nil {
  171. p.p = make(map[string]interface{})
  172. }
  173. p.p["securitygroupenabled"] = v
  174. return
  175. }
  176. // You should always use this function to get a new CreateZoneParams instance,
  177. // as then you are sure you have configured all required params
  178. func (s *ZoneService) NewCreateZoneParams(dns1 string, internaldns1 string, name string, networktype string) *CreateZoneParams {
  179. p := &CreateZoneParams{}
  180. p.p = make(map[string]interface{})
  181. p.p["dns1"] = dns1
  182. p.p["internaldns1"] = internaldns1
  183. p.p["name"] = name
  184. p.p["networktype"] = networktype
  185. return p
  186. }
  187. // Creates a Zone.
  188. func (s *ZoneService) CreateZone(p *CreateZoneParams) (*CreateZoneResponse, error) {
  189. resp, err := s.cs.newRequest("createZone", p.toURLValues())
  190. if err != nil {
  191. return nil, err
  192. }
  193. var r CreateZoneResponse
  194. if err := json.Unmarshal(resp, &r); err != nil {
  195. return nil, err
  196. }
  197. return &r, nil
  198. }
  199. type CreateZoneResponse struct {
  200. Allocationstate string `json:"allocationstate,omitempty"`
  201. Capacity []struct {
  202. Capacitytotal int64 `json:"capacitytotal,omitempty"`
  203. Capacityused int64 `json:"capacityused,omitempty"`
  204. Clusterid string `json:"clusterid,omitempty"`
  205. Clustername string `json:"clustername,omitempty"`
  206. Percentused string `json:"percentused,omitempty"`
  207. Podid string `json:"podid,omitempty"`
  208. Podname string `json:"podname,omitempty"`
  209. Type int `json:"type,omitempty"`
  210. Zoneid string `json:"zoneid,omitempty"`
  211. Zonename string `json:"zonename,omitempty"`
  212. } `json:"capacity,omitempty"`
  213. Description string `json:"description,omitempty"`
  214. Dhcpprovider string `json:"dhcpprovider,omitempty"`
  215. Displaytext string `json:"displaytext,omitempty"`
  216. Dns1 string `json:"dns1,omitempty"`
  217. Dns2 string `json:"dns2,omitempty"`
  218. Domain string `json:"domain,omitempty"`
  219. Domainid string `json:"domainid,omitempty"`
  220. Domainname string `json:"domainname,omitempty"`
  221. Guestcidraddress string `json:"guestcidraddress,omitempty"`
  222. Id string `json:"id,omitempty"`
  223. Internaldns1 string `json:"internaldns1,omitempty"`
  224. Internaldns2 string `json:"internaldns2,omitempty"`
  225. Ip6dns1 string `json:"ip6dns1,omitempty"`
  226. Ip6dns2 string `json:"ip6dns2,omitempty"`
  227. Localstorageenabled bool `json:"localstorageenabled,omitempty"`
  228. Name string `json:"name,omitempty"`
  229. Networktype string `json:"networktype,omitempty"`
  230. Resourcedetails map[string]string `json:"resourcedetails,omitempty"`
  231. Securitygroupsenabled bool `json:"securitygroupsenabled,omitempty"`
  232. Tags []struct {
  233. Account string `json:"account,omitempty"`
  234. Customer string `json:"customer,omitempty"`
  235. Domain string `json:"domain,omitempty"`
  236. Domainid string `json:"domainid,omitempty"`
  237. Key string `json:"key,omitempty"`
  238. Project string `json:"project,omitempty"`
  239. Projectid string `json:"projectid,omitempty"`
  240. Resourceid string `json:"resourceid,omitempty"`
  241. Resourcetype string `json:"resourcetype,omitempty"`
  242. Value string `json:"value,omitempty"`
  243. } `json:"tags,omitempty"`
  244. Zonetoken string `json:"zonetoken,omitempty"`
  245. }
  246. type UpdateZoneParams struct {
  247. p map[string]interface{}
  248. }
  249. func (p *UpdateZoneParams) toURLValues() url.Values {
  250. u := url.Values{}
  251. if p.p == nil {
  252. return u
  253. }
  254. if v, found := p.p["allocationstate"]; found {
  255. u.Set("allocationstate", v.(string))
  256. }
  257. if v, found := p.p["details"]; found {
  258. i := 0
  259. for k, vv := range v.(map[string]string) {
  260. u.Set(fmt.Sprintf("details[%d].key", i), k)
  261. u.Set(fmt.Sprintf("details[%d].value", i), vv)
  262. i++
  263. }
  264. }
  265. if v, found := p.p["dhcpprovider"]; found {
  266. u.Set("dhcpprovider", v.(string))
  267. }
  268. if v, found := p.p["dns1"]; found {
  269. u.Set("dns1", v.(string))
  270. }
  271. if v, found := p.p["dns2"]; found {
  272. u.Set("dns2", v.(string))
  273. }
  274. if v, found := p.p["dnssearchorder"]; found {
  275. vv := strings.Join(v.([]string), ",")
  276. u.Set("dnssearchorder", vv)
  277. }
  278. if v, found := p.p["domain"]; found {
  279. u.Set("domain", v.(string))
  280. }
  281. if v, found := p.p["guestcidraddress"]; found {
  282. u.Set("guestcidraddress", v.(string))
  283. }
  284. if v, found := p.p["id"]; found {
  285. u.Set("id", v.(string))
  286. }
  287. if v, found := p.p["internaldns1"]; found {
  288. u.Set("internaldns1", v.(string))
  289. }
  290. if v, found := p.p["internaldns2"]; found {
  291. u.Set("internaldns2", v.(string))
  292. }
  293. if v, found := p.p["ip6dns1"]; found {
  294. u.Set("ip6dns1", v.(string))
  295. }
  296. if v, found := p.p["ip6dns2"]; found {
  297. u.Set("ip6dns2", v.(string))
  298. }
  299. if v, found := p.p["ispublic"]; found {
  300. vv := strconv.FormatBool(v.(bool))
  301. u.Set("ispublic", vv)
  302. }
  303. if v, found := p.p["localstorageenabled"]; found {
  304. vv := strconv.FormatBool(v.(bool))
  305. u.Set("localstorageenabled", vv)
  306. }
  307. if v, found := p.p["name"]; found {
  308. u.Set("name", v.(string))
  309. }
  310. return u
  311. }
  312. func (p *UpdateZoneParams) SetAllocationstate(v string) {
  313. if p.p == nil {
  314. p.p = make(map[string]interface{})
  315. }
  316. p.p["allocationstate"] = v
  317. return
  318. }
  319. func (p *UpdateZoneParams) SetDetails(v map[string]string) {
  320. if p.p == nil {
  321. p.p = make(map[string]interface{})
  322. }
  323. p.p["details"] = v
  324. return
  325. }
  326. func (p *UpdateZoneParams) SetDhcpprovider(v string) {
  327. if p.p == nil {
  328. p.p = make(map[string]interface{})
  329. }
  330. p.p["dhcpprovider"] = v
  331. return
  332. }
  333. func (p *UpdateZoneParams) SetDns1(v string) {
  334. if p.p == nil {
  335. p.p = make(map[string]interface{})
  336. }
  337. p.p["dns1"] = v
  338. return
  339. }
  340. func (p *UpdateZoneParams) SetDns2(v string) {
  341. if p.p == nil {
  342. p.p = make(map[string]interface{})
  343. }
  344. p.p["dns2"] = v
  345. return
  346. }
  347. func (p *UpdateZoneParams) SetDnssearchorder(v []string) {
  348. if p.p == nil {
  349. p.p = make(map[string]interface{})
  350. }
  351. p.p["dnssearchorder"] = v
  352. return
  353. }
  354. func (p *UpdateZoneParams) SetDomain(v string) {
  355. if p.p == nil {
  356. p.p = make(map[string]interface{})
  357. }
  358. p.p["domain"] = v
  359. return
  360. }
  361. func (p *UpdateZoneParams) SetGuestcidraddress(v string) {
  362. if p.p == nil {
  363. p.p = make(map[string]interface{})
  364. }
  365. p.p["guestcidraddress"] = v
  366. return
  367. }
  368. func (p *UpdateZoneParams) SetId(v string) {
  369. if p.p == nil {
  370. p.p = make(map[string]interface{})
  371. }
  372. p.p["id"] = v
  373. return
  374. }
  375. func (p *UpdateZoneParams) SetInternaldns1(v string) {
  376. if p.p == nil {
  377. p.p = make(map[string]interface{})
  378. }
  379. p.p["internaldns1"] = v
  380. return
  381. }
  382. func (p *UpdateZoneParams) SetInternaldns2(v string) {
  383. if p.p == nil {
  384. p.p = make(map[string]interface{})
  385. }
  386. p.p["internaldns2"] = v
  387. return
  388. }
  389. func (p *UpdateZoneParams) SetIp6dns1(v string) {
  390. if p.p == nil {
  391. p.p = make(map[string]interface{})
  392. }
  393. p.p["ip6dns1"] = v
  394. return
  395. }
  396. func (p *UpdateZoneParams) SetIp6dns2(v string) {
  397. if p.p == nil {
  398. p.p = make(map[string]interface{})
  399. }
  400. p.p["ip6dns2"] = v
  401. return
  402. }
  403. func (p *UpdateZoneParams) SetIspublic(v bool) {
  404. if p.p == nil {
  405. p.p = make(map[string]interface{})
  406. }
  407. p.p["ispublic"] = v
  408. return
  409. }
  410. func (p *UpdateZoneParams) SetLocalstorageenabled(v bool) {
  411. if p.p == nil {
  412. p.p = make(map[string]interface{})
  413. }
  414. p.p["localstorageenabled"] = v
  415. return
  416. }
  417. func (p *UpdateZoneParams) SetName(v string) {
  418. if p.p == nil {
  419. p.p = make(map[string]interface{})
  420. }
  421. p.p["name"] = v
  422. return
  423. }
  424. // You should always use this function to get a new UpdateZoneParams instance,
  425. // as then you are sure you have configured all required params
  426. func (s *ZoneService) NewUpdateZoneParams(id string) *UpdateZoneParams {
  427. p := &UpdateZoneParams{}
  428. p.p = make(map[string]interface{})
  429. p.p["id"] = id
  430. return p
  431. }
  432. // Updates a Zone.
  433. func (s *ZoneService) UpdateZone(p *UpdateZoneParams) (*UpdateZoneResponse, error) {
  434. resp, err := s.cs.newRequest("updateZone", p.toURLValues())
  435. if err != nil {
  436. return nil, err
  437. }
  438. var r UpdateZoneResponse
  439. if err := json.Unmarshal(resp, &r); err != nil {
  440. return nil, err
  441. }
  442. return &r, nil
  443. }
  444. type UpdateZoneResponse struct {
  445. Allocationstate string `json:"allocationstate,omitempty"`
  446. Capacity []struct {
  447. Capacitytotal int64 `json:"capacitytotal,omitempty"`
  448. Capacityused int64 `json:"capacityused,omitempty"`
  449. Clusterid string `json:"clusterid,omitempty"`
  450. Clustername string `json:"clustername,omitempty"`
  451. Percentused string `json:"percentused,omitempty"`
  452. Podid string `json:"podid,omitempty"`
  453. Podname string `json:"podname,omitempty"`
  454. Type int `json:"type,omitempty"`
  455. Zoneid string `json:"zoneid,omitempty"`
  456. Zonename string `json:"zonename,omitempty"`
  457. } `json:"capacity,omitempty"`
  458. Description string `json:"description,omitempty"`
  459. Dhcpprovider string `json:"dhcpprovider,omitempty"`
  460. Displaytext string `json:"displaytext,omitempty"`
  461. Dns1 string `json:"dns1,omitempty"`
  462. Dns2 string `json:"dns2,omitempty"`
  463. Domain string `json:"domain,omitempty"`
  464. Domainid string `json:"domainid,omitempty"`
  465. Domainname string `json:"domainname,omitempty"`
  466. Guestcidraddress string `json:"guestcidraddress,omitempty"`
  467. Id string `json:"id,omitempty"`
  468. Internaldns1 string `json:"internaldns1,omitempty"`
  469. Internaldns2 string `json:"internaldns2,omitempty"`
  470. Ip6dns1 string `json:"ip6dns1,omitempty"`
  471. Ip6dns2 string `json:"ip6dns2,omitempty"`
  472. Localstorageenabled bool `json:"localstorageenabled,omitempty"`
  473. Name string `json:"name,omitempty"`
  474. Networktype string `json:"networktype,omitempty"`
  475. Resourcedetails map[string]string `json:"resourcedetails,omitempty"`
  476. Securitygroupsenabled bool `json:"securitygroupsenabled,omitempty"`
  477. Tags []struct {
  478. Account string `json:"account,omitempty"`
  479. Customer string `json:"customer,omitempty"`
  480. Domain string `json:"domain,omitempty"`
  481. Domainid string `json:"domainid,omitempty"`
  482. Key string `json:"key,omitempty"`
  483. Project string `json:"project,omitempty"`
  484. Projectid string `json:"projectid,omitempty"`
  485. Resourceid string `json:"resourceid,omitempty"`
  486. Resourcetype string `json:"resourcetype,omitempty"`
  487. Value string `json:"value,omitempty"`
  488. } `json:"tags,omitempty"`
  489. Zonetoken string `json:"zonetoken,omitempty"`
  490. }
  491. type DeleteZoneParams struct {
  492. p map[string]interface{}
  493. }
  494. func (p *DeleteZoneParams) toURLValues() url.Values {
  495. u := url.Values{}
  496. if p.p == nil {
  497. return u
  498. }
  499. if v, found := p.p["id"]; found {
  500. u.Set("id", v.(string))
  501. }
  502. return u
  503. }
  504. func (p *DeleteZoneParams) SetId(v string) {
  505. if p.p == nil {
  506. p.p = make(map[string]interface{})
  507. }
  508. p.p["id"] = v
  509. return
  510. }
  511. // You should always use this function to get a new DeleteZoneParams instance,
  512. // as then you are sure you have configured all required params
  513. func (s *ZoneService) NewDeleteZoneParams(id string) *DeleteZoneParams {
  514. p := &DeleteZoneParams{}
  515. p.p = make(map[string]interface{})
  516. p.p["id"] = id
  517. return p
  518. }
  519. // Deletes a Zone.
  520. func (s *ZoneService) DeleteZone(p *DeleteZoneParams) (*DeleteZoneResponse, error) {
  521. resp, err := s.cs.newRequest("deleteZone", p.toURLValues())
  522. if err != nil {
  523. return nil, err
  524. }
  525. var r DeleteZoneResponse
  526. if err := json.Unmarshal(resp, &r); err != nil {
  527. return nil, err
  528. }
  529. return &r, nil
  530. }
  531. type DeleteZoneResponse struct {
  532. Displaytext string `json:"displaytext,omitempty"`
  533. Success string `json:"success,omitempty"`
  534. }
  535. type ListZonesParams struct {
  536. p map[string]interface{}
  537. }
  538. func (p *ListZonesParams) toURLValues() url.Values {
  539. u := url.Values{}
  540. if p.p == nil {
  541. return u
  542. }
  543. if v, found := p.p["available"]; found {
  544. vv := strconv.FormatBool(v.(bool))
  545. u.Set("available", vv)
  546. }
  547. if v, found := p.p["domainid"]; found {
  548. u.Set("domainid", v.(string))
  549. }
  550. if v, found := p.p["id"]; found {
  551. u.Set("id", v.(string))
  552. }
  553. if v, found := p.p["keyword"]; found {
  554. u.Set("keyword", v.(string))
  555. }
  556. if v, found := p.p["name"]; found {
  557. u.Set("name", v.(string))
  558. }
  559. if v, found := p.p["networktype"]; found {
  560. u.Set("networktype", v.(string))
  561. }
  562. if v, found := p.p["page"]; found {
  563. vv := strconv.Itoa(v.(int))
  564. u.Set("page", vv)
  565. }
  566. if v, found := p.p["pagesize"]; found {
  567. vv := strconv.Itoa(v.(int))
  568. u.Set("pagesize", vv)
  569. }
  570. if v, found := p.p["showcapacities"]; found {
  571. vv := strconv.FormatBool(v.(bool))
  572. u.Set("showcapacities", vv)
  573. }
  574. if v, found := p.p["tags"]; found {
  575. i := 0
  576. for k, vv := range v.(map[string]string) {
  577. u.Set(fmt.Sprintf("tags[%d].key", i), k)
  578. u.Set(fmt.Sprintf("tags[%d].value", i), vv)
  579. i++
  580. }
  581. }
  582. return u
  583. }
  584. func (p *ListZonesParams) SetAvailable(v bool) {
  585. if p.p == nil {
  586. p.p = make(map[string]interface{})
  587. }
  588. p.p["available"] = v
  589. return
  590. }
  591. func (p *ListZonesParams) SetDomainid(v string) {
  592. if p.p == nil {
  593. p.p = make(map[string]interface{})
  594. }
  595. p.p["domainid"] = v
  596. return
  597. }
  598. func (p *ListZonesParams) SetId(v string) {
  599. if p.p == nil {
  600. p.p = make(map[string]interface{})
  601. }
  602. p.p["id"] = v
  603. return
  604. }
  605. func (p *ListZonesParams) SetKeyword(v string) {
  606. if p.p == nil {
  607. p.p = make(map[string]interface{})
  608. }
  609. p.p["keyword"] = v
  610. return
  611. }
  612. func (p *ListZonesParams) SetName(v string) {
  613. if p.p == nil {
  614. p.p = make(map[string]interface{})
  615. }
  616. p.p["name"] = v
  617. return
  618. }
  619. func (p *ListZonesParams) SetNetworktype(v string) {
  620. if p.p == nil {
  621. p.p = make(map[string]interface{})
  622. }
  623. p.p["networktype"] = v
  624. return
  625. }
  626. func (p *ListZonesParams) SetPage(v int) {
  627. if p.p == nil {
  628. p.p = make(map[string]interface{})
  629. }
  630. p.p["page"] = v
  631. return
  632. }
  633. func (p *ListZonesParams) SetPagesize(v int) {
  634. if p.p == nil {
  635. p.p = make(map[string]interface{})
  636. }
  637. p.p["pagesize"] = v
  638. return
  639. }
  640. func (p *ListZonesParams) SetShowcapacities(v bool) {
  641. if p.p == nil {
  642. p.p = make(map[string]interface{})
  643. }
  644. p.p["showcapacities"] = v
  645. return
  646. }
  647. func (p *ListZonesParams) SetTags(v map[string]string) {
  648. if p.p == nil {
  649. p.p = make(map[string]interface{})
  650. }
  651. p.p["tags"] = v
  652. return
  653. }
  654. // You should always use this function to get a new ListZonesParams instance,
  655. // as then you are sure you have configured all required params
  656. func (s *ZoneService) NewListZonesParams() *ListZonesParams {
  657. p := &ListZonesParams{}
  658. p.p = make(map[string]interface{})
  659. return p
  660. }
  661. // This is a courtesy helper function, which in some cases may not work as expected!
  662. func (s *ZoneService) GetZoneID(name string, opts ...OptionFunc) (string, int, error) {
  663. p := &ListZonesParams{}
  664. p.p = make(map[string]interface{})
  665. p.p["name"] = name
  666. for _, fn := range opts {
  667. if err := fn(s.cs, p); err != nil {
  668. return "", -1, err
  669. }
  670. }
  671. l, err := s.ListZones(p)
  672. if err != nil {
  673. return "", -1, err
  674. }
  675. if l.Count == 0 {
  676. return "", l.Count, fmt.Errorf("No match found for %s: %+v", name, l)
  677. }
  678. if l.Count == 1 {
  679. return l.Zones[0].Id, l.Count, nil
  680. }
  681. if l.Count > 1 {
  682. for _, v := range l.Zones {
  683. if v.Name == name {
  684. return v.Id, l.Count, nil
  685. }
  686. }
  687. }
  688. return "", l.Count, fmt.Errorf("Could not find an exact match for %s: %+v", name, l)
  689. }
  690. // This is a courtesy helper function, which in some cases may not work as expected!
  691. func (s *ZoneService) GetZoneByName(name string, opts ...OptionFunc) (*Zone, int, error) {
  692. id, count, err := s.GetZoneID(name, opts...)
  693. if err != nil {
  694. return nil, count, err
  695. }
  696. r, count, err := s.GetZoneByID(id, opts...)
  697. if err != nil {
  698. return nil, count, err
  699. }
  700. return r, count, nil
  701. }
  702. // This is a courtesy helper function, which in some cases may not work as expected!
  703. func (s *ZoneService) GetZoneByID(id string, opts ...OptionFunc) (*Zone, int, error) {
  704. p := &ListZonesParams{}
  705. p.p = make(map[string]interface{})
  706. p.p["id"] = id
  707. for _, fn := range opts {
  708. if err := fn(s.cs, p); err != nil {
  709. return nil, -1, err
  710. }
  711. }
  712. l, err := s.ListZones(p)
  713. if err != nil {
  714. if strings.Contains(err.Error(), fmt.Sprintf(
  715. "Invalid parameter id value=%s due to incorrect long value format, "+
  716. "or entity does not exist", id)) {
  717. return nil, 0, fmt.Errorf("No match found for %s: %+v", id, l)
  718. }
  719. return nil, -1, err
  720. }
  721. if l.Count == 0 {
  722. return nil, l.Count, fmt.Errorf("No match found for %s: %+v", id, l)
  723. }
  724. if l.Count == 1 {
  725. return l.Zones[0], l.Count, nil
  726. }
  727. return nil, l.Count, fmt.Errorf("There is more then one result for Zone UUID: %s!", id)
  728. }
  729. // Lists zones
  730. func (s *ZoneService) ListZones(p *ListZonesParams) (*ListZonesResponse, error) {
  731. resp, err := s.cs.newRequest("listZones", p.toURLValues())
  732. if err != nil {
  733. return nil, err
  734. }
  735. var r ListZonesResponse
  736. if err := json.Unmarshal(resp, &r); err != nil {
  737. return nil, err
  738. }
  739. return &r, nil
  740. }
  741. type ListZonesResponse struct {
  742. Count int `json:"count"`
  743. Zones []*Zone `json:"zone"`
  744. }
  745. type Zone struct {
  746. Allocationstate string `json:"allocationstate,omitempty"`
  747. Capacity []struct {
  748. Capacitytotal int64 `json:"capacitytotal,omitempty"`
  749. Capacityused int64 `json:"capacityused,omitempty"`
  750. Clusterid string `json:"clusterid,omitempty"`
  751. Clustername string `json:"clustername,omitempty"`
  752. Percentused string `json:"percentused,omitempty"`
  753. Podid string `json:"podid,omitempty"`
  754. Podname string `json:"podname,omitempty"`
  755. Type int `json:"type,omitempty"`
  756. Zoneid string `json:"zoneid,omitempty"`
  757. Zonename string `json:"zonename,omitempty"`
  758. } `json:"capacity,omitempty"`
  759. Description string `json:"description,omitempty"`
  760. Dhcpprovider string `json:"dhcpprovider,omitempty"`
  761. Displaytext string `json:"displaytext,omitempty"`
  762. Dns1 string `json:"dns1,omitempty"`
  763. Dns2 string `json:"dns2,omitempty"`
  764. Domain string `json:"domain,omitempty"`
  765. Domainid string `json:"domainid,omitempty"`
  766. Domainname string `json:"domainname,omitempty"`
  767. Guestcidraddress string `json:"guestcidraddress,omitempty"`
  768. Id string `json:"id,omitempty"`
  769. Internaldns1 string `json:"internaldns1,omitempty"`
  770. Internaldns2 string `json:"internaldns2,omitempty"`
  771. Ip6dns1 string `json:"ip6dns1,omitempty"`
  772. Ip6dns2 string `json:"ip6dns2,omitempty"`
  773. Localstorageenabled bool `json:"localstorageenabled,omitempty"`
  774. Name string `json:"name,omitempty"`
  775. Networktype string `json:"networktype,omitempty"`
  776. Resourcedetails map[string]string `json:"resourcedetails,omitempty"`
  777. Securitygroupsenabled bool `json:"securitygroupsenabled,omitempty"`
  778. Tags []struct {
  779. Account string `json:"account,omitempty"`
  780. Customer string `json:"customer,omitempty"`
  781. Domain string `json:"domain,omitempty"`
  782. Domainid string `json:"domainid,omitempty"`
  783. Key string `json:"key,omitempty"`
  784. Project string `json:"project,omitempty"`
  785. Projectid string `json:"projectid,omitempty"`
  786. Resourceid string `json:"resourceid,omitempty"`
  787. Resourcetype string `json:"resourcetype,omitempty"`
  788. Value string `json:"value,omitempty"`
  789. } `json:"tags,omitempty"`
  790. Zonetoken string `json:"zonetoken,omitempty"`
  791. }
  792. type DedicateZoneParams struct {
  793. p map[string]interface{}
  794. }
  795. func (p *DedicateZoneParams) toURLValues() url.Values {
  796. u := url.Values{}
  797. if p.p == nil {
  798. return u
  799. }
  800. if v, found := p.p["account"]; found {
  801. u.Set("account", v.(string))
  802. }
  803. if v, found := p.p["domainid"]; found {
  804. u.Set("domainid", v.(string))
  805. }
  806. if v, found := p.p["zoneid"]; found {
  807. u.Set("zoneid", v.(string))
  808. }
  809. return u
  810. }
  811. func (p *DedicateZoneParams) SetAccount(v string) {
  812. if p.p == nil {
  813. p.p = make(map[string]interface{})
  814. }
  815. p.p["account"] = v
  816. return
  817. }
  818. func (p *DedicateZoneParams) SetDomainid(v string) {
  819. if p.p == nil {
  820. p.p = make(map[string]interface{})
  821. }
  822. p.p["domainid"] = v
  823. return
  824. }
  825. func (p *DedicateZoneParams) SetZoneid(v string) {
  826. if p.p == nil {
  827. p.p = make(map[string]interface{})
  828. }
  829. p.p["zoneid"] = v
  830. return
  831. }
  832. // You should always use this function to get a new DedicateZoneParams instance,
  833. // as then you are sure you have configured all required params
  834. func (s *ZoneService) NewDedicateZoneParams(domainid string, zoneid string) *DedicateZoneParams {
  835. p := &DedicateZoneParams{}
  836. p.p = make(map[string]interface{})
  837. p.p["domainid"] = domainid
  838. p.p["zoneid"] = zoneid
  839. return p
  840. }
  841. // Dedicates a zones.
  842. func (s *ZoneService) DedicateZone(p *DedicateZoneParams) (*DedicateZoneResponse, error) {
  843. resp, err := s.cs.newRequest("dedicateZone", p.toURLValues())
  844. if err != nil {
  845. return nil, err
  846. }
  847. var r DedicateZoneResponse
  848. if err := json.Unmarshal(resp, &r); err != nil {
  849. return nil, err
  850. }
  851. // If we have a async client, we need to wait for the async result
  852. if s.cs.async {
  853. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  854. if err != nil {
  855. if err == AsyncTimeoutErr {
  856. return &r, err
  857. }
  858. return nil, err
  859. }
  860. b, err = getRawValue(b)
  861. if err != nil {
  862. return nil, err
  863. }
  864. if err := json.Unmarshal(b, &r); err != nil {
  865. return nil, err
  866. }
  867. }
  868. return &r, nil
  869. }
  870. type DedicateZoneResponse struct {
  871. JobID string `json:"jobid,omitempty"`
  872. Accountid string `json:"accountid,omitempty"`
  873. Affinitygroupid string `json:"affinitygroupid,omitempty"`
  874. Domainid string `json:"domainid,omitempty"`
  875. Id string `json:"id,omitempty"`
  876. Zoneid string `json:"zoneid,omitempty"`
  877. Zonename string `json:"zonename,omitempty"`
  878. }
  879. type ReleaseDedicatedZoneParams struct {
  880. p map[string]interface{}
  881. }
  882. func (p *ReleaseDedicatedZoneParams) toURLValues() url.Values {
  883. u := url.Values{}
  884. if p.p == nil {
  885. return u
  886. }
  887. if v, found := p.p["zoneid"]; found {
  888. u.Set("zoneid", v.(string))
  889. }
  890. return u
  891. }
  892. func (p *ReleaseDedicatedZoneParams) SetZoneid(v string) {
  893. if p.p == nil {
  894. p.p = make(map[string]interface{})
  895. }
  896. p.p["zoneid"] = v
  897. return
  898. }
  899. // You should always use this function to get a new ReleaseDedicatedZoneParams instance,
  900. // as then you are sure you have configured all required params
  901. func (s *ZoneService) NewReleaseDedicatedZoneParams(zoneid string) *ReleaseDedicatedZoneParams {
  902. p := &ReleaseDedicatedZoneParams{}
  903. p.p = make(map[string]interface{})
  904. p.p["zoneid"] = zoneid
  905. return p
  906. }
  907. // Release dedication of zone
  908. func (s *ZoneService) ReleaseDedicatedZone(p *ReleaseDedicatedZoneParams) (*ReleaseDedicatedZoneResponse, error) {
  909. resp, err := s.cs.newRequest("releaseDedicatedZone", p.toURLValues())
  910. if err != nil {
  911. return nil, err
  912. }
  913. var r ReleaseDedicatedZoneResponse
  914. if err := json.Unmarshal(resp, &r); err != nil {
  915. return nil, err
  916. }
  917. // If we have a async client, we need to wait for the async result
  918. if s.cs.async {
  919. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  920. if err != nil {
  921. if err == AsyncTimeoutErr {
  922. return &r, err
  923. }
  924. return nil, err
  925. }
  926. if err := json.Unmarshal(b, &r); err != nil {
  927. return nil, err
  928. }
  929. }
  930. return &r, nil
  931. }
  932. type ReleaseDedicatedZoneResponse struct {
  933. JobID string `json:"jobid,omitempty"`
  934. Displaytext string `json:"displaytext,omitempty"`
  935. Success bool `json:"success,omitempty"`
  936. }
  937. type ListDedicatedZonesParams struct {
  938. p map[string]interface{}
  939. }
  940. func (p *ListDedicatedZonesParams) toURLValues() url.Values {
  941. u := url.Values{}
  942. if p.p == nil {
  943. return u
  944. }
  945. if v, found := p.p["account"]; found {
  946. u.Set("account", v.(string))
  947. }
  948. if v, found := p.p["affinitygroupid"]; found {
  949. u.Set("affinitygroupid", v.(string))
  950. }
  951. if v, found := p.p["domainid"]; found {
  952. u.Set("domainid", v.(string))
  953. }
  954. if v, found := p.p["keyword"]; found {
  955. u.Set("keyword", v.(string))
  956. }
  957. if v, found := p.p["page"]; found {
  958. vv := strconv.Itoa(v.(int))
  959. u.Set("page", vv)
  960. }
  961. if v, found := p.p["pagesize"]; found {
  962. vv := strconv.Itoa(v.(int))
  963. u.Set("pagesize", vv)
  964. }
  965. if v, found := p.p["zoneid"]; found {
  966. u.Set("zoneid", v.(string))
  967. }
  968. return u
  969. }
  970. func (p *ListDedicatedZonesParams) SetAccount(v string) {
  971. if p.p == nil {
  972. p.p = make(map[string]interface{})
  973. }
  974. p.p["account"] = v
  975. return
  976. }
  977. func (p *ListDedicatedZonesParams) SetAffinitygroupid(v string) {
  978. if p.p == nil {
  979. p.p = make(map[string]interface{})
  980. }
  981. p.p["affinitygroupid"] = v
  982. return
  983. }
  984. func (p *ListDedicatedZonesParams) SetDomainid(v string) {
  985. if p.p == nil {
  986. p.p = make(map[string]interface{})
  987. }
  988. p.p["domainid"] = v
  989. return
  990. }
  991. func (p *ListDedicatedZonesParams) SetKeyword(v string) {
  992. if p.p == nil {
  993. p.p = make(map[string]interface{})
  994. }
  995. p.p["keyword"] = v
  996. return
  997. }
  998. func (p *ListDedicatedZonesParams) SetPage(v int) {
  999. if p.p == nil {
  1000. p.p = make(map[string]interface{})
  1001. }
  1002. p.p["page"] = v
  1003. return
  1004. }
  1005. func (p *ListDedicatedZonesParams) SetPagesize(v int) {
  1006. if p.p == nil {
  1007. p.p = make(map[string]interface{})
  1008. }
  1009. p.p["pagesize"] = v
  1010. return
  1011. }
  1012. func (p *ListDedicatedZonesParams) SetZoneid(v string) {
  1013. if p.p == nil {
  1014. p.p = make(map[string]interface{})
  1015. }
  1016. p.p["zoneid"] = v
  1017. return
  1018. }
  1019. // You should always use this function to get a new ListDedicatedZonesParams instance,
  1020. // as then you are sure you have configured all required params
  1021. func (s *ZoneService) NewListDedicatedZonesParams() *ListDedicatedZonesParams {
  1022. p := &ListDedicatedZonesParams{}
  1023. p.p = make(map[string]interface{})
  1024. return p
  1025. }
  1026. // List dedicated zones.
  1027. func (s *ZoneService) ListDedicatedZones(p *ListDedicatedZonesParams) (*ListDedicatedZonesResponse, error) {
  1028. resp, err := s.cs.newRequest("listDedicatedZones", p.toURLValues())
  1029. if err != nil {
  1030. return nil, err
  1031. }
  1032. var r ListDedicatedZonesResponse
  1033. if err := json.Unmarshal(resp, &r); err != nil {
  1034. return nil, err
  1035. }
  1036. return &r, nil
  1037. }
  1038. type ListDedicatedZonesResponse struct {
  1039. Count int `json:"count"`
  1040. DedicatedZones []*DedicatedZone `json:"dedicatedzone"`
  1041. }
  1042. type DedicatedZone struct {
  1043. Accountid string `json:"accountid,omitempty"`
  1044. Affinitygroupid string `json:"affinitygroupid,omitempty"`
  1045. Domainid string `json:"domainid,omitempty"`
  1046. Id string `json:"id,omitempty"`
  1047. Zoneid string `json:"zoneid,omitempty"`
  1048. Zonename string `json:"zonename,omitempty"`
  1049. }