NetworkOfferingService.go 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952
  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 CreateNetworkOfferingParams struct {
  25. p map[string]interface{}
  26. }
  27. func (p *CreateNetworkOfferingParams) toURLValues() url.Values {
  28. u := url.Values{}
  29. if p.p == nil {
  30. return u
  31. }
  32. if v, found := p.p["availability"]; found {
  33. u.Set("availability", v.(string))
  34. }
  35. if v, found := p.p["conservemode"]; found {
  36. vv := strconv.FormatBool(v.(bool))
  37. u.Set("conservemode", vv)
  38. }
  39. if v, found := p.p["details"]; found {
  40. i := 0
  41. for k, vv := range v.(map[string]string) {
  42. u.Set(fmt.Sprintf("details[%d].key", i), k)
  43. u.Set(fmt.Sprintf("details[%d].value", i), vv)
  44. i++
  45. }
  46. }
  47. if v, found := p.p["displaytext"]; found {
  48. u.Set("displaytext", v.(string))
  49. }
  50. if v, found := p.p["egressdefaultpolicy"]; found {
  51. vv := strconv.FormatBool(v.(bool))
  52. u.Set("egressdefaultpolicy", vv)
  53. }
  54. if v, found := p.p["guestiptype"]; found {
  55. u.Set("guestiptype", v.(string))
  56. }
  57. if v, found := p.p["ispersistent"]; found {
  58. vv := strconv.FormatBool(v.(bool))
  59. u.Set("ispersistent", vv)
  60. }
  61. if v, found := p.p["keepaliveenabled"]; found {
  62. vv := strconv.FormatBool(v.(bool))
  63. u.Set("keepaliveenabled", vv)
  64. }
  65. if v, found := p.p["maxconnections"]; found {
  66. vv := strconv.Itoa(v.(int))
  67. u.Set("maxconnections", vv)
  68. }
  69. if v, found := p.p["name"]; found {
  70. u.Set("name", v.(string))
  71. }
  72. if v, found := p.p["networkrate"]; found {
  73. vv := strconv.Itoa(v.(int))
  74. u.Set("networkrate", vv)
  75. }
  76. if v, found := p.p["servicecapabilitylist"]; found {
  77. i := 0
  78. for k, vv := range v.(map[string]string) {
  79. u.Set(fmt.Sprintf("servicecapabilitylist[%d].key", i), k)
  80. u.Set(fmt.Sprintf("servicecapabilitylist[%d].value", i), vv)
  81. i++
  82. }
  83. }
  84. if v, found := p.p["serviceofferingid"]; found {
  85. u.Set("serviceofferingid", v.(string))
  86. }
  87. if v, found := p.p["serviceproviderlist"]; found {
  88. i := 0
  89. for k, vv := range v.(map[string]string) {
  90. u.Set(fmt.Sprintf("serviceproviderlist[%d].service", i), k)
  91. u.Set(fmt.Sprintf("serviceproviderlist[%d].provider", i), vv)
  92. i++
  93. }
  94. }
  95. if v, found := p.p["specifyipranges"]; found {
  96. vv := strconv.FormatBool(v.(bool))
  97. u.Set("specifyipranges", vv)
  98. }
  99. if v, found := p.p["specifyvlan"]; found {
  100. vv := strconv.FormatBool(v.(bool))
  101. u.Set("specifyvlan", vv)
  102. }
  103. if v, found := p.p["supportedservices"]; found {
  104. vv := strings.Join(v.([]string), ",")
  105. u.Set("supportedservices", vv)
  106. }
  107. if v, found := p.p["tags"]; found {
  108. u.Set("tags", v.(string))
  109. }
  110. if v, found := p.p["traffictype"]; found {
  111. u.Set("traffictype", v.(string))
  112. }
  113. return u
  114. }
  115. func (p *CreateNetworkOfferingParams) SetAvailability(v string) {
  116. if p.p == nil {
  117. p.p = make(map[string]interface{})
  118. }
  119. p.p["availability"] = v
  120. return
  121. }
  122. func (p *CreateNetworkOfferingParams) SetConservemode(v bool) {
  123. if p.p == nil {
  124. p.p = make(map[string]interface{})
  125. }
  126. p.p["conservemode"] = v
  127. return
  128. }
  129. func (p *CreateNetworkOfferingParams) SetDetails(v map[string]string) {
  130. if p.p == nil {
  131. p.p = make(map[string]interface{})
  132. }
  133. p.p["details"] = v
  134. return
  135. }
  136. func (p *CreateNetworkOfferingParams) SetDisplaytext(v string) {
  137. if p.p == nil {
  138. p.p = make(map[string]interface{})
  139. }
  140. p.p["displaytext"] = v
  141. return
  142. }
  143. func (p *CreateNetworkOfferingParams) SetEgressdefaultpolicy(v bool) {
  144. if p.p == nil {
  145. p.p = make(map[string]interface{})
  146. }
  147. p.p["egressdefaultpolicy"] = v
  148. return
  149. }
  150. func (p *CreateNetworkOfferingParams) SetGuestiptype(v string) {
  151. if p.p == nil {
  152. p.p = make(map[string]interface{})
  153. }
  154. p.p["guestiptype"] = v
  155. return
  156. }
  157. func (p *CreateNetworkOfferingParams) SetIspersistent(v bool) {
  158. if p.p == nil {
  159. p.p = make(map[string]interface{})
  160. }
  161. p.p["ispersistent"] = v
  162. return
  163. }
  164. func (p *CreateNetworkOfferingParams) SetKeepaliveenabled(v bool) {
  165. if p.p == nil {
  166. p.p = make(map[string]interface{})
  167. }
  168. p.p["keepaliveenabled"] = v
  169. return
  170. }
  171. func (p *CreateNetworkOfferingParams) SetMaxconnections(v int) {
  172. if p.p == nil {
  173. p.p = make(map[string]interface{})
  174. }
  175. p.p["maxconnections"] = v
  176. return
  177. }
  178. func (p *CreateNetworkOfferingParams) SetName(v string) {
  179. if p.p == nil {
  180. p.p = make(map[string]interface{})
  181. }
  182. p.p["name"] = v
  183. return
  184. }
  185. func (p *CreateNetworkOfferingParams) SetNetworkrate(v int) {
  186. if p.p == nil {
  187. p.p = make(map[string]interface{})
  188. }
  189. p.p["networkrate"] = v
  190. return
  191. }
  192. func (p *CreateNetworkOfferingParams) SetServicecapabilitylist(v map[string]string) {
  193. if p.p == nil {
  194. p.p = make(map[string]interface{})
  195. }
  196. p.p["servicecapabilitylist"] = v
  197. return
  198. }
  199. func (p *CreateNetworkOfferingParams) SetServiceofferingid(v string) {
  200. if p.p == nil {
  201. p.p = make(map[string]interface{})
  202. }
  203. p.p["serviceofferingid"] = v
  204. return
  205. }
  206. func (p *CreateNetworkOfferingParams) SetServiceproviderlist(v map[string]string) {
  207. if p.p == nil {
  208. p.p = make(map[string]interface{})
  209. }
  210. p.p["serviceproviderlist"] = v
  211. return
  212. }
  213. func (p *CreateNetworkOfferingParams) SetSpecifyipranges(v bool) {
  214. if p.p == nil {
  215. p.p = make(map[string]interface{})
  216. }
  217. p.p["specifyipranges"] = v
  218. return
  219. }
  220. func (p *CreateNetworkOfferingParams) SetSpecifyvlan(v bool) {
  221. if p.p == nil {
  222. p.p = make(map[string]interface{})
  223. }
  224. p.p["specifyvlan"] = v
  225. return
  226. }
  227. func (p *CreateNetworkOfferingParams) SetSupportedservices(v []string) {
  228. if p.p == nil {
  229. p.p = make(map[string]interface{})
  230. }
  231. p.p["supportedservices"] = v
  232. return
  233. }
  234. func (p *CreateNetworkOfferingParams) SetTags(v string) {
  235. if p.p == nil {
  236. p.p = make(map[string]interface{})
  237. }
  238. p.p["tags"] = v
  239. return
  240. }
  241. func (p *CreateNetworkOfferingParams) SetTraffictype(v string) {
  242. if p.p == nil {
  243. p.p = make(map[string]interface{})
  244. }
  245. p.p["traffictype"] = v
  246. return
  247. }
  248. // You should always use this function to get a new CreateNetworkOfferingParams instance,
  249. // as then you are sure you have configured all required params
  250. func (s *NetworkOfferingService) NewCreateNetworkOfferingParams(displaytext string, guestiptype string, name string, supportedservices []string, traffictype string) *CreateNetworkOfferingParams {
  251. p := &CreateNetworkOfferingParams{}
  252. p.p = make(map[string]interface{})
  253. p.p["displaytext"] = displaytext
  254. p.p["guestiptype"] = guestiptype
  255. p.p["name"] = name
  256. p.p["supportedservices"] = supportedservices
  257. p.p["traffictype"] = traffictype
  258. return p
  259. }
  260. // Creates a network offering.
  261. func (s *NetworkOfferingService) CreateNetworkOffering(p *CreateNetworkOfferingParams) (*CreateNetworkOfferingResponse, error) {
  262. resp, err := s.cs.newRequest("createNetworkOffering", p.toURLValues())
  263. if err != nil {
  264. return nil, err
  265. }
  266. if resp, err = getRawValue(resp); err != nil {
  267. return nil, err
  268. }
  269. var r CreateNetworkOfferingResponse
  270. if err := json.Unmarshal(resp, &r); err != nil {
  271. return nil, err
  272. }
  273. return &r, nil
  274. }
  275. type CreateNetworkOfferingResponse struct {
  276. Availability string `json:"availability,omitempty"`
  277. Conservemode bool `json:"conservemode,omitempty"`
  278. Created string `json:"created,omitempty"`
  279. Details map[string]string `json:"details,omitempty"`
  280. Displaytext string `json:"displaytext,omitempty"`
  281. Egressdefaultpolicy bool `json:"egressdefaultpolicy,omitempty"`
  282. Forvpc bool `json:"forvpc,omitempty"`
  283. Guestiptype string `json:"guestiptype,omitempty"`
  284. Id string `json:"id,omitempty"`
  285. Isdefault bool `json:"isdefault,omitempty"`
  286. Ispersistent bool `json:"ispersistent,omitempty"`
  287. Maxconnections int `json:"maxconnections,omitempty"`
  288. Name string `json:"name,omitempty"`
  289. Networkrate int `json:"networkrate,omitempty"`
  290. Service []struct {
  291. Capability []struct {
  292. Canchooseservicecapability bool `json:"canchooseservicecapability,omitempty"`
  293. Name string `json:"name,omitempty"`
  294. Value string `json:"value,omitempty"`
  295. } `json:"capability,omitempty"`
  296. Name string `json:"name,omitempty"`
  297. Provider []struct {
  298. Canenableindividualservice bool `json:"canenableindividualservice,omitempty"`
  299. Destinationphysicalnetworkid string `json:"destinationphysicalnetworkid,omitempty"`
  300. Id string `json:"id,omitempty"`
  301. Name string `json:"name,omitempty"`
  302. Physicalnetworkid string `json:"physicalnetworkid,omitempty"`
  303. Servicelist []string `json:"servicelist,omitempty"`
  304. State string `json:"state,omitempty"`
  305. } `json:"provider,omitempty"`
  306. } `json:"service,omitempty"`
  307. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  308. Specifyipranges bool `json:"specifyipranges,omitempty"`
  309. Specifyvlan bool `json:"specifyvlan,omitempty"`
  310. State string `json:"state,omitempty"`
  311. Supportsstrechedl2subnet bool `json:"supportsstrechedl2subnet,omitempty"`
  312. Tags string `json:"tags,omitempty"`
  313. Traffictype string `json:"traffictype,omitempty"`
  314. }
  315. type UpdateNetworkOfferingParams struct {
  316. p map[string]interface{}
  317. }
  318. func (p *UpdateNetworkOfferingParams) toURLValues() url.Values {
  319. u := url.Values{}
  320. if p.p == nil {
  321. return u
  322. }
  323. if v, found := p.p["availability"]; found {
  324. u.Set("availability", v.(string))
  325. }
  326. if v, found := p.p["displaytext"]; found {
  327. u.Set("displaytext", v.(string))
  328. }
  329. if v, found := p.p["id"]; found {
  330. u.Set("id", v.(string))
  331. }
  332. if v, found := p.p["keepaliveenabled"]; found {
  333. vv := strconv.FormatBool(v.(bool))
  334. u.Set("keepaliveenabled", vv)
  335. }
  336. if v, found := p.p["maxconnections"]; found {
  337. vv := strconv.Itoa(v.(int))
  338. u.Set("maxconnections", vv)
  339. }
  340. if v, found := p.p["name"]; found {
  341. u.Set("name", v.(string))
  342. }
  343. if v, found := p.p["sortkey"]; found {
  344. vv := strconv.Itoa(v.(int))
  345. u.Set("sortkey", vv)
  346. }
  347. if v, found := p.p["state"]; found {
  348. u.Set("state", v.(string))
  349. }
  350. return u
  351. }
  352. func (p *UpdateNetworkOfferingParams) SetAvailability(v string) {
  353. if p.p == nil {
  354. p.p = make(map[string]interface{})
  355. }
  356. p.p["availability"] = v
  357. return
  358. }
  359. func (p *UpdateNetworkOfferingParams) SetDisplaytext(v string) {
  360. if p.p == nil {
  361. p.p = make(map[string]interface{})
  362. }
  363. p.p["displaytext"] = v
  364. return
  365. }
  366. func (p *UpdateNetworkOfferingParams) SetId(v string) {
  367. if p.p == nil {
  368. p.p = make(map[string]interface{})
  369. }
  370. p.p["id"] = v
  371. return
  372. }
  373. func (p *UpdateNetworkOfferingParams) SetKeepaliveenabled(v bool) {
  374. if p.p == nil {
  375. p.p = make(map[string]interface{})
  376. }
  377. p.p["keepaliveenabled"] = v
  378. return
  379. }
  380. func (p *UpdateNetworkOfferingParams) SetMaxconnections(v int) {
  381. if p.p == nil {
  382. p.p = make(map[string]interface{})
  383. }
  384. p.p["maxconnections"] = v
  385. return
  386. }
  387. func (p *UpdateNetworkOfferingParams) SetName(v string) {
  388. if p.p == nil {
  389. p.p = make(map[string]interface{})
  390. }
  391. p.p["name"] = v
  392. return
  393. }
  394. func (p *UpdateNetworkOfferingParams) SetSortkey(v int) {
  395. if p.p == nil {
  396. p.p = make(map[string]interface{})
  397. }
  398. p.p["sortkey"] = v
  399. return
  400. }
  401. func (p *UpdateNetworkOfferingParams) SetState(v string) {
  402. if p.p == nil {
  403. p.p = make(map[string]interface{})
  404. }
  405. p.p["state"] = v
  406. return
  407. }
  408. // You should always use this function to get a new UpdateNetworkOfferingParams instance,
  409. // as then you are sure you have configured all required params
  410. func (s *NetworkOfferingService) NewUpdateNetworkOfferingParams() *UpdateNetworkOfferingParams {
  411. p := &UpdateNetworkOfferingParams{}
  412. p.p = make(map[string]interface{})
  413. return p
  414. }
  415. // Updates a network offering.
  416. func (s *NetworkOfferingService) UpdateNetworkOffering(p *UpdateNetworkOfferingParams) (*UpdateNetworkOfferingResponse, error) {
  417. resp, err := s.cs.newRequest("updateNetworkOffering", p.toURLValues())
  418. if err != nil {
  419. return nil, err
  420. }
  421. var r UpdateNetworkOfferingResponse
  422. if err := json.Unmarshal(resp, &r); err != nil {
  423. return nil, err
  424. }
  425. return &r, nil
  426. }
  427. type UpdateNetworkOfferingResponse struct {
  428. Availability string `json:"availability,omitempty"`
  429. Conservemode bool `json:"conservemode,omitempty"`
  430. Created string `json:"created,omitempty"`
  431. Details map[string]string `json:"details,omitempty"`
  432. Displaytext string `json:"displaytext,omitempty"`
  433. Egressdefaultpolicy bool `json:"egressdefaultpolicy,omitempty"`
  434. Forvpc bool `json:"forvpc,omitempty"`
  435. Guestiptype string `json:"guestiptype,omitempty"`
  436. Id string `json:"id,omitempty"`
  437. Isdefault bool `json:"isdefault,omitempty"`
  438. Ispersistent bool `json:"ispersistent,omitempty"`
  439. Maxconnections int `json:"maxconnections,omitempty"`
  440. Name string `json:"name,omitempty"`
  441. Networkrate int `json:"networkrate,omitempty"`
  442. Service []struct {
  443. Capability []struct {
  444. Canchooseservicecapability bool `json:"canchooseservicecapability,omitempty"`
  445. Name string `json:"name,omitempty"`
  446. Value string `json:"value,omitempty"`
  447. } `json:"capability,omitempty"`
  448. Name string `json:"name,omitempty"`
  449. Provider []struct {
  450. Canenableindividualservice bool `json:"canenableindividualservice,omitempty"`
  451. Destinationphysicalnetworkid string `json:"destinationphysicalnetworkid,omitempty"`
  452. Id string `json:"id,omitempty"`
  453. Name string `json:"name,omitempty"`
  454. Physicalnetworkid string `json:"physicalnetworkid,omitempty"`
  455. Servicelist []string `json:"servicelist,omitempty"`
  456. State string `json:"state,omitempty"`
  457. } `json:"provider,omitempty"`
  458. } `json:"service,omitempty"`
  459. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  460. Specifyipranges bool `json:"specifyipranges,omitempty"`
  461. Specifyvlan bool `json:"specifyvlan,omitempty"`
  462. State string `json:"state,omitempty"`
  463. Supportsstrechedl2subnet bool `json:"supportsstrechedl2subnet,omitempty"`
  464. Tags string `json:"tags,omitempty"`
  465. Traffictype string `json:"traffictype,omitempty"`
  466. }
  467. type DeleteNetworkOfferingParams struct {
  468. p map[string]interface{}
  469. }
  470. func (p *DeleteNetworkOfferingParams) toURLValues() url.Values {
  471. u := url.Values{}
  472. if p.p == nil {
  473. return u
  474. }
  475. if v, found := p.p["id"]; found {
  476. u.Set("id", v.(string))
  477. }
  478. return u
  479. }
  480. func (p *DeleteNetworkOfferingParams) SetId(v string) {
  481. if p.p == nil {
  482. p.p = make(map[string]interface{})
  483. }
  484. p.p["id"] = v
  485. return
  486. }
  487. // You should always use this function to get a new DeleteNetworkOfferingParams instance,
  488. // as then you are sure you have configured all required params
  489. func (s *NetworkOfferingService) NewDeleteNetworkOfferingParams(id string) *DeleteNetworkOfferingParams {
  490. p := &DeleteNetworkOfferingParams{}
  491. p.p = make(map[string]interface{})
  492. p.p["id"] = id
  493. return p
  494. }
  495. // Deletes a network offering.
  496. func (s *NetworkOfferingService) DeleteNetworkOffering(p *DeleteNetworkOfferingParams) (*DeleteNetworkOfferingResponse, error) {
  497. resp, err := s.cs.newRequest("deleteNetworkOffering", p.toURLValues())
  498. if err != nil {
  499. return nil, err
  500. }
  501. var r DeleteNetworkOfferingResponse
  502. if err := json.Unmarshal(resp, &r); err != nil {
  503. return nil, err
  504. }
  505. return &r, nil
  506. }
  507. type DeleteNetworkOfferingResponse struct {
  508. Displaytext string `json:"displaytext,omitempty"`
  509. Success string `json:"success,omitempty"`
  510. }
  511. type ListNetworkOfferingsParams struct {
  512. p map[string]interface{}
  513. }
  514. func (p *ListNetworkOfferingsParams) toURLValues() url.Values {
  515. u := url.Values{}
  516. if p.p == nil {
  517. return u
  518. }
  519. if v, found := p.p["availability"]; found {
  520. u.Set("availability", v.(string))
  521. }
  522. if v, found := p.p["displaytext"]; found {
  523. u.Set("displaytext", v.(string))
  524. }
  525. if v, found := p.p["forvpc"]; found {
  526. vv := strconv.FormatBool(v.(bool))
  527. u.Set("forvpc", vv)
  528. }
  529. if v, found := p.p["guestiptype"]; found {
  530. u.Set("guestiptype", v.(string))
  531. }
  532. if v, found := p.p["id"]; found {
  533. u.Set("id", v.(string))
  534. }
  535. if v, found := p.p["isdefault"]; found {
  536. vv := strconv.FormatBool(v.(bool))
  537. u.Set("isdefault", vv)
  538. }
  539. if v, found := p.p["istagged"]; found {
  540. vv := strconv.FormatBool(v.(bool))
  541. u.Set("istagged", vv)
  542. }
  543. if v, found := p.p["keyword"]; found {
  544. u.Set("keyword", v.(string))
  545. }
  546. if v, found := p.p["name"]; found {
  547. u.Set("name", v.(string))
  548. }
  549. if v, found := p.p["networkid"]; found {
  550. u.Set("networkid", v.(string))
  551. }
  552. if v, found := p.p["page"]; found {
  553. vv := strconv.Itoa(v.(int))
  554. u.Set("page", vv)
  555. }
  556. if v, found := p.p["pagesize"]; found {
  557. vv := strconv.Itoa(v.(int))
  558. u.Set("pagesize", vv)
  559. }
  560. if v, found := p.p["sourcenatsupported"]; found {
  561. vv := strconv.FormatBool(v.(bool))
  562. u.Set("sourcenatsupported", vv)
  563. }
  564. if v, found := p.p["specifyipranges"]; found {
  565. vv := strconv.FormatBool(v.(bool))
  566. u.Set("specifyipranges", vv)
  567. }
  568. if v, found := p.p["specifyvlan"]; found {
  569. vv := strconv.FormatBool(v.(bool))
  570. u.Set("specifyvlan", vv)
  571. }
  572. if v, found := p.p["state"]; found {
  573. u.Set("state", v.(string))
  574. }
  575. if v, found := p.p["supportedservices"]; found {
  576. vv := strings.Join(v.([]string), ",")
  577. u.Set("supportedservices", vv)
  578. }
  579. if v, found := p.p["tags"]; found {
  580. u.Set("tags", v.(string))
  581. }
  582. if v, found := p.p["traffictype"]; found {
  583. u.Set("traffictype", v.(string))
  584. }
  585. if v, found := p.p["zoneid"]; found {
  586. u.Set("zoneid", v.(string))
  587. }
  588. return u
  589. }
  590. func (p *ListNetworkOfferingsParams) SetAvailability(v string) {
  591. if p.p == nil {
  592. p.p = make(map[string]interface{})
  593. }
  594. p.p["availability"] = v
  595. return
  596. }
  597. func (p *ListNetworkOfferingsParams) SetDisplaytext(v string) {
  598. if p.p == nil {
  599. p.p = make(map[string]interface{})
  600. }
  601. p.p["displaytext"] = v
  602. return
  603. }
  604. func (p *ListNetworkOfferingsParams) SetForvpc(v bool) {
  605. if p.p == nil {
  606. p.p = make(map[string]interface{})
  607. }
  608. p.p["forvpc"] = v
  609. return
  610. }
  611. func (p *ListNetworkOfferingsParams) SetGuestiptype(v string) {
  612. if p.p == nil {
  613. p.p = make(map[string]interface{})
  614. }
  615. p.p["guestiptype"] = v
  616. return
  617. }
  618. func (p *ListNetworkOfferingsParams) SetId(v string) {
  619. if p.p == nil {
  620. p.p = make(map[string]interface{})
  621. }
  622. p.p["id"] = v
  623. return
  624. }
  625. func (p *ListNetworkOfferingsParams) SetIsdefault(v bool) {
  626. if p.p == nil {
  627. p.p = make(map[string]interface{})
  628. }
  629. p.p["isdefault"] = v
  630. return
  631. }
  632. func (p *ListNetworkOfferingsParams) SetIstagged(v bool) {
  633. if p.p == nil {
  634. p.p = make(map[string]interface{})
  635. }
  636. p.p["istagged"] = v
  637. return
  638. }
  639. func (p *ListNetworkOfferingsParams) SetKeyword(v string) {
  640. if p.p == nil {
  641. p.p = make(map[string]interface{})
  642. }
  643. p.p["keyword"] = v
  644. return
  645. }
  646. func (p *ListNetworkOfferingsParams) SetName(v string) {
  647. if p.p == nil {
  648. p.p = make(map[string]interface{})
  649. }
  650. p.p["name"] = v
  651. return
  652. }
  653. func (p *ListNetworkOfferingsParams) SetNetworkid(v string) {
  654. if p.p == nil {
  655. p.p = make(map[string]interface{})
  656. }
  657. p.p["networkid"] = v
  658. return
  659. }
  660. func (p *ListNetworkOfferingsParams) SetPage(v int) {
  661. if p.p == nil {
  662. p.p = make(map[string]interface{})
  663. }
  664. p.p["page"] = v
  665. return
  666. }
  667. func (p *ListNetworkOfferingsParams) SetPagesize(v int) {
  668. if p.p == nil {
  669. p.p = make(map[string]interface{})
  670. }
  671. p.p["pagesize"] = v
  672. return
  673. }
  674. func (p *ListNetworkOfferingsParams) SetSourcenatsupported(v bool) {
  675. if p.p == nil {
  676. p.p = make(map[string]interface{})
  677. }
  678. p.p["sourcenatsupported"] = v
  679. return
  680. }
  681. func (p *ListNetworkOfferingsParams) SetSpecifyipranges(v bool) {
  682. if p.p == nil {
  683. p.p = make(map[string]interface{})
  684. }
  685. p.p["specifyipranges"] = v
  686. return
  687. }
  688. func (p *ListNetworkOfferingsParams) SetSpecifyvlan(v bool) {
  689. if p.p == nil {
  690. p.p = make(map[string]interface{})
  691. }
  692. p.p["specifyvlan"] = v
  693. return
  694. }
  695. func (p *ListNetworkOfferingsParams) SetState(v string) {
  696. if p.p == nil {
  697. p.p = make(map[string]interface{})
  698. }
  699. p.p["state"] = v
  700. return
  701. }
  702. func (p *ListNetworkOfferingsParams) SetSupportedservices(v []string) {
  703. if p.p == nil {
  704. p.p = make(map[string]interface{})
  705. }
  706. p.p["supportedservices"] = v
  707. return
  708. }
  709. func (p *ListNetworkOfferingsParams) SetTags(v string) {
  710. if p.p == nil {
  711. p.p = make(map[string]interface{})
  712. }
  713. p.p["tags"] = v
  714. return
  715. }
  716. func (p *ListNetworkOfferingsParams) SetTraffictype(v string) {
  717. if p.p == nil {
  718. p.p = make(map[string]interface{})
  719. }
  720. p.p["traffictype"] = v
  721. return
  722. }
  723. func (p *ListNetworkOfferingsParams) SetZoneid(v string) {
  724. if p.p == nil {
  725. p.p = make(map[string]interface{})
  726. }
  727. p.p["zoneid"] = v
  728. return
  729. }
  730. // You should always use this function to get a new ListNetworkOfferingsParams instance,
  731. // as then you are sure you have configured all required params
  732. func (s *NetworkOfferingService) NewListNetworkOfferingsParams() *ListNetworkOfferingsParams {
  733. p := &ListNetworkOfferingsParams{}
  734. p.p = make(map[string]interface{})
  735. return p
  736. }
  737. // This is a courtesy helper function, which in some cases may not work as expected!
  738. func (s *NetworkOfferingService) GetNetworkOfferingID(name string, opts ...OptionFunc) (string, int, error) {
  739. p := &ListNetworkOfferingsParams{}
  740. p.p = make(map[string]interface{})
  741. p.p["name"] = name
  742. for _, fn := range opts {
  743. if err := fn(s.cs, p); err != nil {
  744. return "", -1, err
  745. }
  746. }
  747. l, err := s.ListNetworkOfferings(p)
  748. if err != nil {
  749. return "", -1, err
  750. }
  751. if l.Count == 0 {
  752. return "", l.Count, fmt.Errorf("No match found for %s: %+v", name, l)
  753. }
  754. if l.Count == 1 {
  755. return l.NetworkOfferings[0].Id, l.Count, nil
  756. }
  757. if l.Count > 1 {
  758. for _, v := range l.NetworkOfferings {
  759. if v.Name == name {
  760. return v.Id, l.Count, nil
  761. }
  762. }
  763. }
  764. return "", l.Count, fmt.Errorf("Could not find an exact match for %s: %+v", name, l)
  765. }
  766. // This is a courtesy helper function, which in some cases may not work as expected!
  767. func (s *NetworkOfferingService) GetNetworkOfferingByName(name string, opts ...OptionFunc) (*NetworkOffering, int, error) {
  768. id, count, err := s.GetNetworkOfferingID(name, opts...)
  769. if err != nil {
  770. return nil, count, err
  771. }
  772. r, count, err := s.GetNetworkOfferingByID(id, opts...)
  773. if err != nil {
  774. return nil, count, err
  775. }
  776. return r, count, nil
  777. }
  778. // This is a courtesy helper function, which in some cases may not work as expected!
  779. func (s *NetworkOfferingService) GetNetworkOfferingByID(id string, opts ...OptionFunc) (*NetworkOffering, int, error) {
  780. p := &ListNetworkOfferingsParams{}
  781. p.p = make(map[string]interface{})
  782. p.p["id"] = id
  783. for _, fn := range opts {
  784. if err := fn(s.cs, p); err != nil {
  785. return nil, -1, err
  786. }
  787. }
  788. l, err := s.ListNetworkOfferings(p)
  789. if err != nil {
  790. if strings.Contains(err.Error(), fmt.Sprintf(
  791. "Invalid parameter id value=%s due to incorrect long value format, "+
  792. "or entity does not exist", id)) {
  793. return nil, 0, fmt.Errorf("No match found for %s: %+v", id, l)
  794. }
  795. return nil, -1, err
  796. }
  797. if l.Count == 0 {
  798. return nil, l.Count, fmt.Errorf("No match found for %s: %+v", id, l)
  799. }
  800. if l.Count == 1 {
  801. return l.NetworkOfferings[0], l.Count, nil
  802. }
  803. return nil, l.Count, fmt.Errorf("There is more then one result for NetworkOffering UUID: %s!", id)
  804. }
  805. // Lists all available network offerings.
  806. func (s *NetworkOfferingService) ListNetworkOfferings(p *ListNetworkOfferingsParams) (*ListNetworkOfferingsResponse, error) {
  807. resp, err := s.cs.newRequest("listNetworkOfferings", p.toURLValues())
  808. if err != nil {
  809. return nil, err
  810. }
  811. var r ListNetworkOfferingsResponse
  812. if err := json.Unmarshal(resp, &r); err != nil {
  813. return nil, err
  814. }
  815. return &r, nil
  816. }
  817. type ListNetworkOfferingsResponse struct {
  818. Count int `json:"count"`
  819. NetworkOfferings []*NetworkOffering `json:"networkoffering"`
  820. }
  821. type NetworkOffering struct {
  822. Availability string `json:"availability,omitempty"`
  823. Conservemode bool `json:"conservemode,omitempty"`
  824. Created string `json:"created,omitempty"`
  825. Details map[string]string `json:"details,omitempty"`
  826. Displaytext string `json:"displaytext,omitempty"`
  827. Egressdefaultpolicy bool `json:"egressdefaultpolicy,omitempty"`
  828. Forvpc bool `json:"forvpc,omitempty"`
  829. Guestiptype string `json:"guestiptype,omitempty"`
  830. Id string `json:"id,omitempty"`
  831. Isdefault bool `json:"isdefault,omitempty"`
  832. Ispersistent bool `json:"ispersistent,omitempty"`
  833. Maxconnections int `json:"maxconnections,omitempty"`
  834. Name string `json:"name,omitempty"`
  835. Networkrate int `json:"networkrate,omitempty"`
  836. Service []struct {
  837. Capability []struct {
  838. Canchooseservicecapability bool `json:"canchooseservicecapability,omitempty"`
  839. Name string `json:"name,omitempty"`
  840. Value string `json:"value,omitempty"`
  841. } `json:"capability,omitempty"`
  842. Name string `json:"name,omitempty"`
  843. Provider []struct {
  844. Canenableindividualservice bool `json:"canenableindividualservice,omitempty"`
  845. Destinationphysicalnetworkid string `json:"destinationphysicalnetworkid,omitempty"`
  846. Id string `json:"id,omitempty"`
  847. Name string `json:"name,omitempty"`
  848. Physicalnetworkid string `json:"physicalnetworkid,omitempty"`
  849. Servicelist []string `json:"servicelist,omitempty"`
  850. State string `json:"state,omitempty"`
  851. } `json:"provider,omitempty"`
  852. } `json:"service,omitempty"`
  853. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  854. Specifyipranges bool `json:"specifyipranges,omitempty"`
  855. Specifyvlan bool `json:"specifyvlan,omitempty"`
  856. State string `json:"state,omitempty"`
  857. Supportsstrechedl2subnet bool `json:"supportsstrechedl2subnet,omitempty"`
  858. Tags string `json:"tags,omitempty"`
  859. Traffictype string `json:"traffictype,omitempty"`
  860. }