NicService.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  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. "net/url"
  20. "strconv"
  21. )
  22. type AddIpToNicParams struct {
  23. p map[string]interface{}
  24. }
  25. func (p *AddIpToNicParams) toURLValues() url.Values {
  26. u := url.Values{}
  27. if p.p == nil {
  28. return u
  29. }
  30. if v, found := p.p["ipaddress"]; found {
  31. u.Set("ipaddress", v.(string))
  32. }
  33. if v, found := p.p["nicid"]; found {
  34. u.Set("nicid", v.(string))
  35. }
  36. return u
  37. }
  38. func (p *AddIpToNicParams) SetIpaddress(v string) {
  39. if p.p == nil {
  40. p.p = make(map[string]interface{})
  41. }
  42. p.p["ipaddress"] = v
  43. return
  44. }
  45. func (p *AddIpToNicParams) SetNicid(v string) {
  46. if p.p == nil {
  47. p.p = make(map[string]interface{})
  48. }
  49. p.p["nicid"] = v
  50. return
  51. }
  52. // You should always use this function to get a new AddIpToNicParams instance,
  53. // as then you are sure you have configured all required params
  54. func (s *NicService) NewAddIpToNicParams(nicid string) *AddIpToNicParams {
  55. p := &AddIpToNicParams{}
  56. p.p = make(map[string]interface{})
  57. p.p["nicid"] = nicid
  58. return p
  59. }
  60. // Assigns secondary IP to NIC
  61. func (s *NicService) AddIpToNic(p *AddIpToNicParams) (*AddIpToNicResponse, error) {
  62. resp, err := s.cs.newRequest("addIpToNic", p.toURLValues())
  63. if err != nil {
  64. return nil, err
  65. }
  66. var r AddIpToNicResponse
  67. if err := json.Unmarshal(resp, &r); err != nil {
  68. return nil, err
  69. }
  70. // If we have a async client, we need to wait for the async result
  71. if s.cs.async {
  72. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  73. if err != nil {
  74. if err == AsyncTimeoutErr {
  75. return &r, err
  76. }
  77. return nil, err
  78. }
  79. b, err = getRawValue(b)
  80. if err != nil {
  81. return nil, err
  82. }
  83. if err := json.Unmarshal(b, &r); err != nil {
  84. return nil, err
  85. }
  86. }
  87. return &r, nil
  88. }
  89. type AddIpToNicResponse struct {
  90. JobID string `json:"jobid,omitempty"`
  91. Id string `json:"id,omitempty"`
  92. Ipaddress string `json:"ipaddress,omitempty"`
  93. Networkid string `json:"networkid,omitempty"`
  94. Nicid string `json:"nicid,omitempty"`
  95. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  96. }
  97. type RemoveIpFromNicParams struct {
  98. p map[string]interface{}
  99. }
  100. func (p *RemoveIpFromNicParams) toURLValues() url.Values {
  101. u := url.Values{}
  102. if p.p == nil {
  103. return u
  104. }
  105. if v, found := p.p["id"]; found {
  106. u.Set("id", v.(string))
  107. }
  108. return u
  109. }
  110. func (p *RemoveIpFromNicParams) SetId(v string) {
  111. if p.p == nil {
  112. p.p = make(map[string]interface{})
  113. }
  114. p.p["id"] = v
  115. return
  116. }
  117. // You should always use this function to get a new RemoveIpFromNicParams instance,
  118. // as then you are sure you have configured all required params
  119. func (s *NicService) NewRemoveIpFromNicParams(id string) *RemoveIpFromNicParams {
  120. p := &RemoveIpFromNicParams{}
  121. p.p = make(map[string]interface{})
  122. p.p["id"] = id
  123. return p
  124. }
  125. // Removes secondary IP from the NIC.
  126. func (s *NicService) RemoveIpFromNic(p *RemoveIpFromNicParams) (*RemoveIpFromNicResponse, error) {
  127. resp, err := s.cs.newRequest("removeIpFromNic", p.toURLValues())
  128. if err != nil {
  129. return nil, err
  130. }
  131. var r RemoveIpFromNicResponse
  132. if err := json.Unmarshal(resp, &r); err != nil {
  133. return nil, err
  134. }
  135. // If we have a async client, we need to wait for the async result
  136. if s.cs.async {
  137. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  138. if err != nil {
  139. if err == AsyncTimeoutErr {
  140. return &r, err
  141. }
  142. return nil, err
  143. }
  144. if err := json.Unmarshal(b, &r); err != nil {
  145. return nil, err
  146. }
  147. }
  148. return &r, nil
  149. }
  150. type RemoveIpFromNicResponse struct {
  151. JobID string `json:"jobid,omitempty"`
  152. Displaytext string `json:"displaytext,omitempty"`
  153. Success bool `json:"success,omitempty"`
  154. }
  155. type UpdateVmNicIpParams struct {
  156. p map[string]interface{}
  157. }
  158. func (p *UpdateVmNicIpParams) toURLValues() url.Values {
  159. u := url.Values{}
  160. if p.p == nil {
  161. return u
  162. }
  163. if v, found := p.p["ipaddress"]; found {
  164. u.Set("ipaddress", v.(string))
  165. }
  166. if v, found := p.p["nicid"]; found {
  167. u.Set("nicid", v.(string))
  168. }
  169. return u
  170. }
  171. func (p *UpdateVmNicIpParams) SetIpaddress(v string) {
  172. if p.p == nil {
  173. p.p = make(map[string]interface{})
  174. }
  175. p.p["ipaddress"] = v
  176. return
  177. }
  178. func (p *UpdateVmNicIpParams) SetNicid(v string) {
  179. if p.p == nil {
  180. p.p = make(map[string]interface{})
  181. }
  182. p.p["nicid"] = v
  183. return
  184. }
  185. // You should always use this function to get a new UpdateVmNicIpParams instance,
  186. // as then you are sure you have configured all required params
  187. func (s *NicService) NewUpdateVmNicIpParams(nicid string) *UpdateVmNicIpParams {
  188. p := &UpdateVmNicIpParams{}
  189. p.p = make(map[string]interface{})
  190. p.p["nicid"] = nicid
  191. return p
  192. }
  193. // Update the default Ip of a VM Nic
  194. func (s *NicService) UpdateVmNicIp(p *UpdateVmNicIpParams) (*UpdateVmNicIpResponse, error) {
  195. resp, err := s.cs.newRequest("updateVmNicIp", p.toURLValues())
  196. if err != nil {
  197. return nil, err
  198. }
  199. var r UpdateVmNicIpResponse
  200. if err := json.Unmarshal(resp, &r); err != nil {
  201. return nil, err
  202. }
  203. // If we have a async client, we need to wait for the async result
  204. if s.cs.async {
  205. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  206. if err != nil {
  207. if err == AsyncTimeoutErr {
  208. return &r, err
  209. }
  210. return nil, err
  211. }
  212. b, err = getRawValue(b)
  213. if err != nil {
  214. return nil, err
  215. }
  216. if err := json.Unmarshal(b, &r); err != nil {
  217. return nil, err
  218. }
  219. }
  220. return &r, nil
  221. }
  222. type UpdateVmNicIpResponse struct {
  223. JobID string `json:"jobid,omitempty"`
  224. Account string `json:"account,omitempty"`
  225. Affinitygroup []struct {
  226. Account string `json:"account,omitempty"`
  227. Description string `json:"description,omitempty"`
  228. Domain string `json:"domain,omitempty"`
  229. Domainid string `json:"domainid,omitempty"`
  230. Id string `json:"id,omitempty"`
  231. Name string `json:"name,omitempty"`
  232. Project string `json:"project,omitempty"`
  233. Projectid string `json:"projectid,omitempty"`
  234. Type string `json:"type,omitempty"`
  235. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  236. } `json:"affinitygroup,omitempty"`
  237. Cpunumber int `json:"cpunumber,omitempty"`
  238. Cpuspeed int `json:"cpuspeed,omitempty"`
  239. Cpuused string `json:"cpuused,omitempty"`
  240. Created string `json:"created,omitempty"`
  241. Details map[string]string `json:"details,omitempty"`
  242. Diskioread int64 `json:"diskioread,omitempty"`
  243. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  244. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  245. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  246. Diskofferingid string `json:"diskofferingid,omitempty"`
  247. Diskofferingname string `json:"diskofferingname,omitempty"`
  248. Displayname string `json:"displayname,omitempty"`
  249. Displayvm bool `json:"displayvm,omitempty"`
  250. Domain string `json:"domain,omitempty"`
  251. Domainid string `json:"domainid,omitempty"`
  252. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  253. Group string `json:"group,omitempty"`
  254. Groupid string `json:"groupid,omitempty"`
  255. Guestosid string `json:"guestosid,omitempty"`
  256. Haenable bool `json:"haenable,omitempty"`
  257. Hostid string `json:"hostid,omitempty"`
  258. Hostname string `json:"hostname,omitempty"`
  259. Hypervisor string `json:"hypervisor,omitempty"`
  260. Id string `json:"id,omitempty"`
  261. Instancename string `json:"instancename,omitempty"`
  262. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  263. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  264. Isoid string `json:"isoid,omitempty"`
  265. Isoname string `json:"isoname,omitempty"`
  266. Keypair string `json:"keypair,omitempty"`
  267. Memory int `json:"memory,omitempty"`
  268. Name string `json:"name,omitempty"`
  269. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  270. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  271. Nic []struct {
  272. Broadcasturi string `json:"broadcasturi,omitempty"`
  273. Deviceid string `json:"deviceid,omitempty"`
  274. Gateway string `json:"gateway,omitempty"`
  275. Id string `json:"id,omitempty"`
  276. Ip6address string `json:"ip6address,omitempty"`
  277. Ip6cidr string `json:"ip6cidr,omitempty"`
  278. Ip6gateway string `json:"ip6gateway,omitempty"`
  279. Ipaddress string `json:"ipaddress,omitempty"`
  280. Isdefault bool `json:"isdefault,omitempty"`
  281. Isolationuri string `json:"isolationuri,omitempty"`
  282. Macaddress string `json:"macaddress,omitempty"`
  283. Netmask string `json:"netmask,omitempty"`
  284. Networkid string `json:"networkid,omitempty"`
  285. Networkname string `json:"networkname,omitempty"`
  286. Secondaryip []struct {
  287. Id string `json:"id,omitempty"`
  288. Ipaddress string `json:"ipaddress,omitempty"`
  289. } `json:"secondaryip,omitempty"`
  290. Traffictype string `json:"traffictype,omitempty"`
  291. Type string `json:"type,omitempty"`
  292. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  293. } `json:"nic,omitempty"`
  294. Ostypeid int64 `json:"ostypeid,omitempty"`
  295. Password string `json:"password,omitempty"`
  296. Passwordenabled bool `json:"passwordenabled,omitempty"`
  297. Project string `json:"project,omitempty"`
  298. Projectid string `json:"projectid,omitempty"`
  299. Publicip string `json:"publicip,omitempty"`
  300. Publicipid string `json:"publicipid,omitempty"`
  301. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  302. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  303. Securitygroup []struct {
  304. Account string `json:"account,omitempty"`
  305. Description string `json:"description,omitempty"`
  306. Domain string `json:"domain,omitempty"`
  307. Domainid string `json:"domainid,omitempty"`
  308. Egressrule []struct {
  309. Account string `json:"account,omitempty"`
  310. Cidr string `json:"cidr,omitempty"`
  311. Endport int `json:"endport,omitempty"`
  312. Icmpcode int `json:"icmpcode,omitempty"`
  313. Icmptype int `json:"icmptype,omitempty"`
  314. Protocol string `json:"protocol,omitempty"`
  315. Ruleid string `json:"ruleid,omitempty"`
  316. Securitygroupname string `json:"securitygroupname,omitempty"`
  317. Startport int `json:"startport,omitempty"`
  318. Tags []struct {
  319. Account string `json:"account,omitempty"`
  320. Customer string `json:"customer,omitempty"`
  321. Domain string `json:"domain,omitempty"`
  322. Domainid string `json:"domainid,omitempty"`
  323. Key string `json:"key,omitempty"`
  324. Project string `json:"project,omitempty"`
  325. Projectid string `json:"projectid,omitempty"`
  326. Resourceid string `json:"resourceid,omitempty"`
  327. Resourcetype string `json:"resourcetype,omitempty"`
  328. Value string `json:"value,omitempty"`
  329. } `json:"tags,omitempty"`
  330. } `json:"egressrule,omitempty"`
  331. Id string `json:"id,omitempty"`
  332. Ingressrule []struct {
  333. Account string `json:"account,omitempty"`
  334. Cidr string `json:"cidr,omitempty"`
  335. Endport int `json:"endport,omitempty"`
  336. Icmpcode int `json:"icmpcode,omitempty"`
  337. Icmptype int `json:"icmptype,omitempty"`
  338. Protocol string `json:"protocol,omitempty"`
  339. Ruleid string `json:"ruleid,omitempty"`
  340. Securitygroupname string `json:"securitygroupname,omitempty"`
  341. Startport int `json:"startport,omitempty"`
  342. Tags []struct {
  343. Account string `json:"account,omitempty"`
  344. Customer string `json:"customer,omitempty"`
  345. Domain string `json:"domain,omitempty"`
  346. Domainid string `json:"domainid,omitempty"`
  347. Key string `json:"key,omitempty"`
  348. Project string `json:"project,omitempty"`
  349. Projectid string `json:"projectid,omitempty"`
  350. Resourceid string `json:"resourceid,omitempty"`
  351. Resourcetype string `json:"resourcetype,omitempty"`
  352. Value string `json:"value,omitempty"`
  353. } `json:"tags,omitempty"`
  354. } `json:"ingressrule,omitempty"`
  355. Name string `json:"name,omitempty"`
  356. Project string `json:"project,omitempty"`
  357. Projectid string `json:"projectid,omitempty"`
  358. Tags []struct {
  359. Account string `json:"account,omitempty"`
  360. Customer string `json:"customer,omitempty"`
  361. Domain string `json:"domain,omitempty"`
  362. Domainid string `json:"domainid,omitempty"`
  363. Key string `json:"key,omitempty"`
  364. Project string `json:"project,omitempty"`
  365. Projectid string `json:"projectid,omitempty"`
  366. Resourceid string `json:"resourceid,omitempty"`
  367. Resourcetype string `json:"resourcetype,omitempty"`
  368. Value string `json:"value,omitempty"`
  369. } `json:"tags,omitempty"`
  370. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  371. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  372. } `json:"securitygroup,omitempty"`
  373. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  374. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  375. Servicestate string `json:"servicestate,omitempty"`
  376. State string `json:"state,omitempty"`
  377. Tags []struct {
  378. Account string `json:"account,omitempty"`
  379. Customer string `json:"customer,omitempty"`
  380. Domain string `json:"domain,omitempty"`
  381. Domainid string `json:"domainid,omitempty"`
  382. Key string `json:"key,omitempty"`
  383. Project string `json:"project,omitempty"`
  384. Projectid string `json:"projectid,omitempty"`
  385. Resourceid string `json:"resourceid,omitempty"`
  386. Resourcetype string `json:"resourcetype,omitempty"`
  387. Value string `json:"value,omitempty"`
  388. } `json:"tags,omitempty"`
  389. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  390. Templateid string `json:"templateid,omitempty"`
  391. Templatename string `json:"templatename,omitempty"`
  392. Userid string `json:"userid,omitempty"`
  393. Username string `json:"username,omitempty"`
  394. Vgpu string `json:"vgpu,omitempty"`
  395. Zoneid string `json:"zoneid,omitempty"`
  396. Zonename string `json:"zonename,omitempty"`
  397. }
  398. type ListNicsParams struct {
  399. p map[string]interface{}
  400. }
  401. func (p *ListNicsParams) toURLValues() url.Values {
  402. u := url.Values{}
  403. if p.p == nil {
  404. return u
  405. }
  406. if v, found := p.p["fordisplay"]; found {
  407. vv := strconv.FormatBool(v.(bool))
  408. u.Set("fordisplay", vv)
  409. }
  410. if v, found := p.p["keyword"]; found {
  411. u.Set("keyword", v.(string))
  412. }
  413. if v, found := p.p["networkid"]; found {
  414. u.Set("networkid", v.(string))
  415. }
  416. if v, found := p.p["nicid"]; found {
  417. u.Set("nicid", v.(string))
  418. }
  419. if v, found := p.p["page"]; found {
  420. vv := strconv.Itoa(v.(int))
  421. u.Set("page", vv)
  422. }
  423. if v, found := p.p["pagesize"]; found {
  424. vv := strconv.Itoa(v.(int))
  425. u.Set("pagesize", vv)
  426. }
  427. if v, found := p.p["virtualmachineid"]; found {
  428. u.Set("virtualmachineid", v.(string))
  429. }
  430. return u
  431. }
  432. func (p *ListNicsParams) SetFordisplay(v bool) {
  433. if p.p == nil {
  434. p.p = make(map[string]interface{})
  435. }
  436. p.p["fordisplay"] = v
  437. return
  438. }
  439. func (p *ListNicsParams) SetKeyword(v string) {
  440. if p.p == nil {
  441. p.p = make(map[string]interface{})
  442. }
  443. p.p["keyword"] = v
  444. return
  445. }
  446. func (p *ListNicsParams) SetNetworkid(v string) {
  447. if p.p == nil {
  448. p.p = make(map[string]interface{})
  449. }
  450. p.p["networkid"] = v
  451. return
  452. }
  453. func (p *ListNicsParams) SetNicid(v string) {
  454. if p.p == nil {
  455. p.p = make(map[string]interface{})
  456. }
  457. p.p["nicid"] = v
  458. return
  459. }
  460. func (p *ListNicsParams) SetPage(v int) {
  461. if p.p == nil {
  462. p.p = make(map[string]interface{})
  463. }
  464. p.p["page"] = v
  465. return
  466. }
  467. func (p *ListNicsParams) SetPagesize(v int) {
  468. if p.p == nil {
  469. p.p = make(map[string]interface{})
  470. }
  471. p.p["pagesize"] = v
  472. return
  473. }
  474. func (p *ListNicsParams) SetVirtualmachineid(v string) {
  475. if p.p == nil {
  476. p.p = make(map[string]interface{})
  477. }
  478. p.p["virtualmachineid"] = v
  479. return
  480. }
  481. // You should always use this function to get a new ListNicsParams instance,
  482. // as then you are sure you have configured all required params
  483. func (s *NicService) NewListNicsParams(virtualmachineid string) *ListNicsParams {
  484. p := &ListNicsParams{}
  485. p.p = make(map[string]interface{})
  486. p.p["virtualmachineid"] = virtualmachineid
  487. return p
  488. }
  489. // list the vm nics IP to NIC
  490. func (s *NicService) ListNics(p *ListNicsParams) (*ListNicsResponse, error) {
  491. resp, err := s.cs.newRequest("listNics", p.toURLValues())
  492. if err != nil {
  493. return nil, err
  494. }
  495. var r ListNicsResponse
  496. if err := json.Unmarshal(resp, &r); err != nil {
  497. return nil, err
  498. }
  499. return &r, nil
  500. }
  501. type ListNicsResponse struct {
  502. Count int `json:"count"`
  503. Nics []*Nic `json:"nic"`
  504. }
  505. type Nic struct {
  506. Broadcasturi string `json:"broadcasturi,omitempty"`
  507. Deviceid string `json:"deviceid,omitempty"`
  508. Gateway string `json:"gateway,omitempty"`
  509. Id string `json:"id,omitempty"`
  510. Ip6address string `json:"ip6address,omitempty"`
  511. Ip6cidr string `json:"ip6cidr,omitempty"`
  512. Ip6gateway string `json:"ip6gateway,omitempty"`
  513. Ipaddress string `json:"ipaddress,omitempty"`
  514. Isdefault bool `json:"isdefault,omitempty"`
  515. Isolationuri string `json:"isolationuri,omitempty"`
  516. Macaddress string `json:"macaddress,omitempty"`
  517. Netmask string `json:"netmask,omitempty"`
  518. Networkid string `json:"networkid,omitempty"`
  519. Networkname string `json:"networkname,omitempty"`
  520. Secondaryip []struct {
  521. Id string `json:"id,omitempty"`
  522. Ipaddress string `json:"ipaddress,omitempty"`
  523. } `json:"secondaryip,omitempty"`
  524. Traffictype string `json:"traffictype,omitempty"`
  525. Type string `json:"type,omitempty"`
  526. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  527. }