VirtualMachineService.go 214 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446
  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 DeployVirtualMachineParams struct {
  25. p map[string]interface{}
  26. }
  27. func (p *DeployVirtualMachineParams) toURLValues() url.Values {
  28. u := url.Values{}
  29. if p.p == nil {
  30. return u
  31. }
  32. if v, found := p.p["account"]; found {
  33. u.Set("account", v.(string))
  34. }
  35. if v, found := p.p["affinitygroupids"]; found {
  36. vv := strings.Join(v.([]string), ",")
  37. u.Set("affinitygroupids", vv)
  38. }
  39. if v, found := p.p["affinitygroupnames"]; found {
  40. vv := strings.Join(v.([]string), ",")
  41. u.Set("affinitygroupnames", vv)
  42. }
  43. if v, found := p.p["customid"]; found {
  44. u.Set("customid", v.(string))
  45. }
  46. if v, found := p.p["deploymentplanner"]; found {
  47. u.Set("deploymentplanner", v.(string))
  48. }
  49. if v, found := p.p["details"]; found {
  50. i := 0
  51. for k, vv := range v.(map[string]string) {
  52. u.Set(fmt.Sprintf("details[%d].key", i), k)
  53. u.Set(fmt.Sprintf("details[%d].value", i), vv)
  54. i++
  55. }
  56. }
  57. if v, found := p.p["diskofferingid"]; found {
  58. u.Set("diskofferingid", v.(string))
  59. }
  60. if v, found := p.p["displayname"]; found {
  61. u.Set("displayname", v.(string))
  62. }
  63. if v, found := p.p["displayvm"]; found {
  64. vv := strconv.FormatBool(v.(bool))
  65. u.Set("displayvm", vv)
  66. }
  67. if v, found := p.p["domainid"]; found {
  68. u.Set("domainid", v.(string))
  69. }
  70. if v, found := p.p["group"]; found {
  71. u.Set("group", v.(string))
  72. }
  73. if v, found := p.p["hostid"]; found {
  74. u.Set("hostid", v.(string))
  75. }
  76. if v, found := p.p["hypervisor"]; found {
  77. u.Set("hypervisor", v.(string))
  78. }
  79. if v, found := p.p["ip6address"]; found {
  80. u.Set("ip6address", v.(string))
  81. }
  82. if v, found := p.p["ipaddress"]; found {
  83. u.Set("ipaddress", v.(string))
  84. }
  85. if v, found := p.p["iptonetworklist"]; found {
  86. i := 0
  87. for k, vv := range v.(map[string]string) {
  88. u.Set(fmt.Sprintf("iptonetworklist[%d].key", i), k)
  89. u.Set(fmt.Sprintf("iptonetworklist[%d].value", i), vv)
  90. i++
  91. }
  92. }
  93. if v, found := p.p["keyboard"]; found {
  94. u.Set("keyboard", v.(string))
  95. }
  96. if v, found := p.p["keypair"]; found {
  97. u.Set("keypair", v.(string))
  98. }
  99. if v, found := p.p["name"]; found {
  100. u.Set("name", v.(string))
  101. }
  102. if v, found := p.p["networkids"]; found {
  103. vv := strings.Join(v.([]string), ",")
  104. u.Set("networkids", vv)
  105. }
  106. if v, found := p.p["projectid"]; found {
  107. u.Set("projectid", v.(string))
  108. }
  109. if v, found := p.p["rootdisksize"]; found {
  110. vv := strconv.FormatInt(v.(int64), 10)
  111. u.Set("rootdisksize", vv)
  112. }
  113. if v, found := p.p["securitygroupids"]; found {
  114. vv := strings.Join(v.([]string), ",")
  115. u.Set("securitygroupids", vv)
  116. }
  117. if v, found := p.p["securitygroupnames"]; found {
  118. vv := strings.Join(v.([]string), ",")
  119. u.Set("securitygroupnames", vv)
  120. }
  121. if v, found := p.p["serviceofferingid"]; found {
  122. u.Set("serviceofferingid", v.(string))
  123. }
  124. if v, found := p.p["size"]; found {
  125. vv := strconv.FormatInt(v.(int64), 10)
  126. u.Set("size", vv)
  127. }
  128. if v, found := p.p["startvm"]; found {
  129. vv := strconv.FormatBool(v.(bool))
  130. u.Set("startvm", vv)
  131. }
  132. if v, found := p.p["templateid"]; found {
  133. u.Set("templateid", v.(string))
  134. }
  135. if v, found := p.p["userdata"]; found {
  136. u.Set("userdata", v.(string))
  137. }
  138. if v, found := p.p["zoneid"]; found {
  139. u.Set("zoneid", v.(string))
  140. }
  141. return u
  142. }
  143. func (p *DeployVirtualMachineParams) SetAccount(v string) {
  144. if p.p == nil {
  145. p.p = make(map[string]interface{})
  146. }
  147. p.p["account"] = v
  148. return
  149. }
  150. func (p *DeployVirtualMachineParams) SetAffinitygroupids(v []string) {
  151. if p.p == nil {
  152. p.p = make(map[string]interface{})
  153. }
  154. p.p["affinitygroupids"] = v
  155. return
  156. }
  157. func (p *DeployVirtualMachineParams) SetAffinitygroupnames(v []string) {
  158. if p.p == nil {
  159. p.p = make(map[string]interface{})
  160. }
  161. p.p["affinitygroupnames"] = v
  162. return
  163. }
  164. func (p *DeployVirtualMachineParams) SetCustomid(v string) {
  165. if p.p == nil {
  166. p.p = make(map[string]interface{})
  167. }
  168. p.p["customid"] = v
  169. return
  170. }
  171. func (p *DeployVirtualMachineParams) SetDeploymentplanner(v string) {
  172. if p.p == nil {
  173. p.p = make(map[string]interface{})
  174. }
  175. p.p["deploymentplanner"] = v
  176. return
  177. }
  178. func (p *DeployVirtualMachineParams) SetDetails(v map[string]string) {
  179. if p.p == nil {
  180. p.p = make(map[string]interface{})
  181. }
  182. p.p["details"] = v
  183. return
  184. }
  185. func (p *DeployVirtualMachineParams) SetDiskofferingid(v string) {
  186. if p.p == nil {
  187. p.p = make(map[string]interface{})
  188. }
  189. p.p["diskofferingid"] = v
  190. return
  191. }
  192. func (p *DeployVirtualMachineParams) SetDisplayname(v string) {
  193. if p.p == nil {
  194. p.p = make(map[string]interface{})
  195. }
  196. p.p["displayname"] = v
  197. return
  198. }
  199. func (p *DeployVirtualMachineParams) SetDisplayvm(v bool) {
  200. if p.p == nil {
  201. p.p = make(map[string]interface{})
  202. }
  203. p.p["displayvm"] = v
  204. return
  205. }
  206. func (p *DeployVirtualMachineParams) SetDomainid(v string) {
  207. if p.p == nil {
  208. p.p = make(map[string]interface{})
  209. }
  210. p.p["domainid"] = v
  211. return
  212. }
  213. func (p *DeployVirtualMachineParams) SetGroup(v string) {
  214. if p.p == nil {
  215. p.p = make(map[string]interface{})
  216. }
  217. p.p["group"] = v
  218. return
  219. }
  220. func (p *DeployVirtualMachineParams) SetHostid(v string) {
  221. if p.p == nil {
  222. p.p = make(map[string]interface{})
  223. }
  224. p.p["hostid"] = v
  225. return
  226. }
  227. func (p *DeployVirtualMachineParams) SetHypervisor(v string) {
  228. if p.p == nil {
  229. p.p = make(map[string]interface{})
  230. }
  231. p.p["hypervisor"] = v
  232. return
  233. }
  234. func (p *DeployVirtualMachineParams) SetIp6address(v string) {
  235. if p.p == nil {
  236. p.p = make(map[string]interface{})
  237. }
  238. p.p["ip6address"] = v
  239. return
  240. }
  241. func (p *DeployVirtualMachineParams) SetIpaddress(v string) {
  242. if p.p == nil {
  243. p.p = make(map[string]interface{})
  244. }
  245. p.p["ipaddress"] = v
  246. return
  247. }
  248. func (p *DeployVirtualMachineParams) SetIptonetworklist(v map[string]string) {
  249. if p.p == nil {
  250. p.p = make(map[string]interface{})
  251. }
  252. p.p["iptonetworklist"] = v
  253. return
  254. }
  255. func (p *DeployVirtualMachineParams) SetKeyboard(v string) {
  256. if p.p == nil {
  257. p.p = make(map[string]interface{})
  258. }
  259. p.p["keyboard"] = v
  260. return
  261. }
  262. func (p *DeployVirtualMachineParams) SetKeypair(v string) {
  263. if p.p == nil {
  264. p.p = make(map[string]interface{})
  265. }
  266. p.p["keypair"] = v
  267. return
  268. }
  269. func (p *DeployVirtualMachineParams) SetName(v string) {
  270. if p.p == nil {
  271. p.p = make(map[string]interface{})
  272. }
  273. p.p["name"] = v
  274. return
  275. }
  276. func (p *DeployVirtualMachineParams) SetNetworkids(v []string) {
  277. if p.p == nil {
  278. p.p = make(map[string]interface{})
  279. }
  280. p.p["networkids"] = v
  281. return
  282. }
  283. func (p *DeployVirtualMachineParams) SetProjectid(v string) {
  284. if p.p == nil {
  285. p.p = make(map[string]interface{})
  286. }
  287. p.p["projectid"] = v
  288. return
  289. }
  290. func (p *DeployVirtualMachineParams) SetRootdisksize(v int64) {
  291. if p.p == nil {
  292. p.p = make(map[string]interface{})
  293. }
  294. p.p["rootdisksize"] = v
  295. return
  296. }
  297. func (p *DeployVirtualMachineParams) SetSecuritygroupids(v []string) {
  298. if p.p == nil {
  299. p.p = make(map[string]interface{})
  300. }
  301. p.p["securitygroupids"] = v
  302. return
  303. }
  304. func (p *DeployVirtualMachineParams) SetSecuritygroupnames(v []string) {
  305. if p.p == nil {
  306. p.p = make(map[string]interface{})
  307. }
  308. p.p["securitygroupnames"] = v
  309. return
  310. }
  311. func (p *DeployVirtualMachineParams) SetServiceofferingid(v string) {
  312. if p.p == nil {
  313. p.p = make(map[string]interface{})
  314. }
  315. p.p["serviceofferingid"] = v
  316. return
  317. }
  318. func (p *DeployVirtualMachineParams) SetSize(v int64) {
  319. if p.p == nil {
  320. p.p = make(map[string]interface{})
  321. }
  322. p.p["size"] = v
  323. return
  324. }
  325. func (p *DeployVirtualMachineParams) SetStartvm(v bool) {
  326. if p.p == nil {
  327. p.p = make(map[string]interface{})
  328. }
  329. p.p["startvm"] = v
  330. return
  331. }
  332. func (p *DeployVirtualMachineParams) SetTemplateid(v string) {
  333. if p.p == nil {
  334. p.p = make(map[string]interface{})
  335. }
  336. p.p["templateid"] = v
  337. return
  338. }
  339. func (p *DeployVirtualMachineParams) SetUserdata(v string) {
  340. if p.p == nil {
  341. p.p = make(map[string]interface{})
  342. }
  343. p.p["userdata"] = v
  344. return
  345. }
  346. func (p *DeployVirtualMachineParams) SetZoneid(v string) {
  347. if p.p == nil {
  348. p.p = make(map[string]interface{})
  349. }
  350. p.p["zoneid"] = v
  351. return
  352. }
  353. // You should always use this function to get a new DeployVirtualMachineParams instance,
  354. // as then you are sure you have configured all required params
  355. func (s *VirtualMachineService) NewDeployVirtualMachineParams(serviceofferingid string, templateid string, zoneid string) *DeployVirtualMachineParams {
  356. p := &DeployVirtualMachineParams{}
  357. p.p = make(map[string]interface{})
  358. p.p["serviceofferingid"] = serviceofferingid
  359. p.p["templateid"] = templateid
  360. p.p["zoneid"] = zoneid
  361. return p
  362. }
  363. // Creates and automatically starts a virtual machine based on a service offering, disk offering, and template.
  364. func (s *VirtualMachineService) DeployVirtualMachine(p *DeployVirtualMachineParams) (*DeployVirtualMachineResponse, error) {
  365. resp, err := s.cs.newRequest("deployVirtualMachine", p.toURLValues())
  366. if err != nil {
  367. return nil, err
  368. }
  369. var r DeployVirtualMachineResponse
  370. if err := json.Unmarshal(resp, &r); err != nil {
  371. return nil, err
  372. }
  373. // If we have a async client, we need to wait for the async result
  374. if s.cs.async {
  375. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  376. if err != nil {
  377. if err == AsyncTimeoutErr {
  378. return &r, err
  379. }
  380. return nil, err
  381. }
  382. b, err = getRawValue(b)
  383. if err != nil {
  384. return nil, err
  385. }
  386. if err := json.Unmarshal(b, &r); err != nil {
  387. return nil, err
  388. }
  389. }
  390. return &r, nil
  391. }
  392. type DeployVirtualMachineResponse struct {
  393. JobID string `json:"jobid,omitempty"`
  394. Account string `json:"account,omitempty"`
  395. Affinitygroup []struct {
  396. Account string `json:"account,omitempty"`
  397. Description string `json:"description,omitempty"`
  398. Domain string `json:"domain,omitempty"`
  399. Domainid string `json:"domainid,omitempty"`
  400. Id string `json:"id,omitempty"`
  401. Name string `json:"name,omitempty"`
  402. Project string `json:"project,omitempty"`
  403. Projectid string `json:"projectid,omitempty"`
  404. Type string `json:"type,omitempty"`
  405. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  406. } `json:"affinitygroup,omitempty"`
  407. Cpunumber int `json:"cpunumber,omitempty"`
  408. Cpuspeed int `json:"cpuspeed,omitempty"`
  409. Cpuused string `json:"cpuused,omitempty"`
  410. Created string `json:"created,omitempty"`
  411. Details map[string]string `json:"details,omitempty"`
  412. Diskioread int64 `json:"diskioread,omitempty"`
  413. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  414. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  415. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  416. Diskofferingid string `json:"diskofferingid,omitempty"`
  417. Diskofferingname string `json:"diskofferingname,omitempty"`
  418. Displayname string `json:"displayname,omitempty"`
  419. Displayvm bool `json:"displayvm,omitempty"`
  420. Domain string `json:"domain,omitempty"`
  421. Domainid string `json:"domainid,omitempty"`
  422. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  423. Group string `json:"group,omitempty"`
  424. Groupid string `json:"groupid,omitempty"`
  425. Guestosid string `json:"guestosid,omitempty"`
  426. Haenable bool `json:"haenable,omitempty"`
  427. Hostid string `json:"hostid,omitempty"`
  428. Hostname string `json:"hostname,omitempty"`
  429. Hypervisor string `json:"hypervisor,omitempty"`
  430. Id string `json:"id,omitempty"`
  431. Instancename string `json:"instancename,omitempty"`
  432. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  433. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  434. Isoid string `json:"isoid,omitempty"`
  435. Isoname string `json:"isoname,omitempty"`
  436. Keypair string `json:"keypair,omitempty"`
  437. Memory int `json:"memory,omitempty"`
  438. Name string `json:"name,omitempty"`
  439. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  440. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  441. Nic []struct {
  442. Broadcasturi string `json:"broadcasturi,omitempty"`
  443. Deviceid string `json:"deviceid,omitempty"`
  444. Gateway string `json:"gateway,omitempty"`
  445. Id string `json:"id,omitempty"`
  446. Ip6address string `json:"ip6address,omitempty"`
  447. Ip6cidr string `json:"ip6cidr,omitempty"`
  448. Ip6gateway string `json:"ip6gateway,omitempty"`
  449. Ipaddress string `json:"ipaddress,omitempty"`
  450. Isdefault bool `json:"isdefault,omitempty"`
  451. Isolationuri string `json:"isolationuri,omitempty"`
  452. Macaddress string `json:"macaddress,omitempty"`
  453. Netmask string `json:"netmask,omitempty"`
  454. Networkid string `json:"networkid,omitempty"`
  455. Networkname string `json:"networkname,omitempty"`
  456. Secondaryip []struct {
  457. Id string `json:"id,omitempty"`
  458. Ipaddress string `json:"ipaddress,omitempty"`
  459. } `json:"secondaryip,omitempty"`
  460. Traffictype string `json:"traffictype,omitempty"`
  461. Type string `json:"type,omitempty"`
  462. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  463. } `json:"nic,omitempty"`
  464. Ostypeid int64 `json:"ostypeid,omitempty"`
  465. Password string `json:"password,omitempty"`
  466. Passwordenabled bool `json:"passwordenabled,omitempty"`
  467. Project string `json:"project,omitempty"`
  468. Projectid string `json:"projectid,omitempty"`
  469. Publicip string `json:"publicip,omitempty"`
  470. Publicipid string `json:"publicipid,omitempty"`
  471. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  472. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  473. Securitygroup []struct {
  474. Account string `json:"account,omitempty"`
  475. Description string `json:"description,omitempty"`
  476. Domain string `json:"domain,omitempty"`
  477. Domainid string `json:"domainid,omitempty"`
  478. Egressrule []struct {
  479. Account string `json:"account,omitempty"`
  480. Cidr string `json:"cidr,omitempty"`
  481. Endport int `json:"endport,omitempty"`
  482. Icmpcode int `json:"icmpcode,omitempty"`
  483. Icmptype int `json:"icmptype,omitempty"`
  484. Protocol string `json:"protocol,omitempty"`
  485. Ruleid string `json:"ruleid,omitempty"`
  486. Securitygroupname string `json:"securitygroupname,omitempty"`
  487. Startport int `json:"startport,omitempty"`
  488. Tags []struct {
  489. Account string `json:"account,omitempty"`
  490. Customer string `json:"customer,omitempty"`
  491. Domain string `json:"domain,omitempty"`
  492. Domainid string `json:"domainid,omitempty"`
  493. Key string `json:"key,omitempty"`
  494. Project string `json:"project,omitempty"`
  495. Projectid string `json:"projectid,omitempty"`
  496. Resourceid string `json:"resourceid,omitempty"`
  497. Resourcetype string `json:"resourcetype,omitempty"`
  498. Value string `json:"value,omitempty"`
  499. } `json:"tags,omitempty"`
  500. } `json:"egressrule,omitempty"`
  501. Id string `json:"id,omitempty"`
  502. Ingressrule []struct {
  503. Account string `json:"account,omitempty"`
  504. Cidr string `json:"cidr,omitempty"`
  505. Endport int `json:"endport,omitempty"`
  506. Icmpcode int `json:"icmpcode,omitempty"`
  507. Icmptype int `json:"icmptype,omitempty"`
  508. Protocol string `json:"protocol,omitempty"`
  509. Ruleid string `json:"ruleid,omitempty"`
  510. Securitygroupname string `json:"securitygroupname,omitempty"`
  511. Startport int `json:"startport,omitempty"`
  512. Tags []struct {
  513. Account string `json:"account,omitempty"`
  514. Customer string `json:"customer,omitempty"`
  515. Domain string `json:"domain,omitempty"`
  516. Domainid string `json:"domainid,omitempty"`
  517. Key string `json:"key,omitempty"`
  518. Project string `json:"project,omitempty"`
  519. Projectid string `json:"projectid,omitempty"`
  520. Resourceid string `json:"resourceid,omitempty"`
  521. Resourcetype string `json:"resourcetype,omitempty"`
  522. Value string `json:"value,omitempty"`
  523. } `json:"tags,omitempty"`
  524. } `json:"ingressrule,omitempty"`
  525. Name string `json:"name,omitempty"`
  526. Project string `json:"project,omitempty"`
  527. Projectid string `json:"projectid,omitempty"`
  528. Tags []struct {
  529. Account string `json:"account,omitempty"`
  530. Customer string `json:"customer,omitempty"`
  531. Domain string `json:"domain,omitempty"`
  532. Domainid string `json:"domainid,omitempty"`
  533. Key string `json:"key,omitempty"`
  534. Project string `json:"project,omitempty"`
  535. Projectid string `json:"projectid,omitempty"`
  536. Resourceid string `json:"resourceid,omitempty"`
  537. Resourcetype string `json:"resourcetype,omitempty"`
  538. Value string `json:"value,omitempty"`
  539. } `json:"tags,omitempty"`
  540. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  541. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  542. } `json:"securitygroup,omitempty"`
  543. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  544. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  545. Servicestate string `json:"servicestate,omitempty"`
  546. State string `json:"state,omitempty"`
  547. Tags []struct {
  548. Account string `json:"account,omitempty"`
  549. Customer string `json:"customer,omitempty"`
  550. Domain string `json:"domain,omitempty"`
  551. Domainid string `json:"domainid,omitempty"`
  552. Key string `json:"key,omitempty"`
  553. Project string `json:"project,omitempty"`
  554. Projectid string `json:"projectid,omitempty"`
  555. Resourceid string `json:"resourceid,omitempty"`
  556. Resourcetype string `json:"resourcetype,omitempty"`
  557. Value string `json:"value,omitempty"`
  558. } `json:"tags,omitempty"`
  559. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  560. Templateid string `json:"templateid,omitempty"`
  561. Templatename string `json:"templatename,omitempty"`
  562. Userid string `json:"userid,omitempty"`
  563. Username string `json:"username,omitempty"`
  564. Vgpu string `json:"vgpu,omitempty"`
  565. Zoneid string `json:"zoneid,omitempty"`
  566. Zonename string `json:"zonename,omitempty"`
  567. }
  568. type DestroyVirtualMachineParams struct {
  569. p map[string]interface{}
  570. }
  571. func (p *DestroyVirtualMachineParams) toURLValues() url.Values {
  572. u := url.Values{}
  573. if p.p == nil {
  574. return u
  575. }
  576. if v, found := p.p["expunge"]; found {
  577. vv := strconv.FormatBool(v.(bool))
  578. u.Set("expunge", vv)
  579. }
  580. if v, found := p.p["id"]; found {
  581. u.Set("id", v.(string))
  582. }
  583. return u
  584. }
  585. func (p *DestroyVirtualMachineParams) SetExpunge(v bool) {
  586. if p.p == nil {
  587. p.p = make(map[string]interface{})
  588. }
  589. p.p["expunge"] = v
  590. return
  591. }
  592. func (p *DestroyVirtualMachineParams) SetId(v string) {
  593. if p.p == nil {
  594. p.p = make(map[string]interface{})
  595. }
  596. p.p["id"] = v
  597. return
  598. }
  599. // You should always use this function to get a new DestroyVirtualMachineParams instance,
  600. // as then you are sure you have configured all required params
  601. func (s *VirtualMachineService) NewDestroyVirtualMachineParams(id string) *DestroyVirtualMachineParams {
  602. p := &DestroyVirtualMachineParams{}
  603. p.p = make(map[string]interface{})
  604. p.p["id"] = id
  605. return p
  606. }
  607. // Destroys a virtual machine.
  608. func (s *VirtualMachineService) DestroyVirtualMachine(p *DestroyVirtualMachineParams) (*DestroyVirtualMachineResponse, error) {
  609. resp, err := s.cs.newRequest("destroyVirtualMachine", p.toURLValues())
  610. if err != nil {
  611. return nil, err
  612. }
  613. var r DestroyVirtualMachineResponse
  614. if err := json.Unmarshal(resp, &r); err != nil {
  615. return nil, err
  616. }
  617. // If we have a async client, we need to wait for the async result
  618. if s.cs.async {
  619. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  620. if err != nil {
  621. if err == AsyncTimeoutErr {
  622. return &r, err
  623. }
  624. return nil, err
  625. }
  626. b, err = getRawValue(b)
  627. if err != nil {
  628. return nil, err
  629. }
  630. if err := json.Unmarshal(b, &r); err != nil {
  631. return nil, err
  632. }
  633. }
  634. return &r, nil
  635. }
  636. type DestroyVirtualMachineResponse struct {
  637. JobID string `json:"jobid,omitempty"`
  638. Account string `json:"account,omitempty"`
  639. Affinitygroup []struct {
  640. Account string `json:"account,omitempty"`
  641. Description string `json:"description,omitempty"`
  642. Domain string `json:"domain,omitempty"`
  643. Domainid string `json:"domainid,omitempty"`
  644. Id string `json:"id,omitempty"`
  645. Name string `json:"name,omitempty"`
  646. Project string `json:"project,omitempty"`
  647. Projectid string `json:"projectid,omitempty"`
  648. Type string `json:"type,omitempty"`
  649. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  650. } `json:"affinitygroup,omitempty"`
  651. Cpunumber int `json:"cpunumber,omitempty"`
  652. Cpuspeed int `json:"cpuspeed,omitempty"`
  653. Cpuused string `json:"cpuused,omitempty"`
  654. Created string `json:"created,omitempty"`
  655. Details map[string]string `json:"details,omitempty"`
  656. Diskioread int64 `json:"diskioread,omitempty"`
  657. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  658. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  659. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  660. Diskofferingid string `json:"diskofferingid,omitempty"`
  661. Diskofferingname string `json:"diskofferingname,omitempty"`
  662. Displayname string `json:"displayname,omitempty"`
  663. Displayvm bool `json:"displayvm,omitempty"`
  664. Domain string `json:"domain,omitempty"`
  665. Domainid string `json:"domainid,omitempty"`
  666. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  667. Group string `json:"group,omitempty"`
  668. Groupid string `json:"groupid,omitempty"`
  669. Guestosid string `json:"guestosid,omitempty"`
  670. Haenable bool `json:"haenable,omitempty"`
  671. Hostid string `json:"hostid,omitempty"`
  672. Hostname string `json:"hostname,omitempty"`
  673. Hypervisor string `json:"hypervisor,omitempty"`
  674. Id string `json:"id,omitempty"`
  675. Instancename string `json:"instancename,omitempty"`
  676. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  677. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  678. Isoid string `json:"isoid,omitempty"`
  679. Isoname string `json:"isoname,omitempty"`
  680. Keypair string `json:"keypair,omitempty"`
  681. Memory int `json:"memory,omitempty"`
  682. Name string `json:"name,omitempty"`
  683. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  684. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  685. Nic []struct {
  686. Broadcasturi string `json:"broadcasturi,omitempty"`
  687. Deviceid string `json:"deviceid,omitempty"`
  688. Gateway string `json:"gateway,omitempty"`
  689. Id string `json:"id,omitempty"`
  690. Ip6address string `json:"ip6address,omitempty"`
  691. Ip6cidr string `json:"ip6cidr,omitempty"`
  692. Ip6gateway string `json:"ip6gateway,omitempty"`
  693. Ipaddress string `json:"ipaddress,omitempty"`
  694. Isdefault bool `json:"isdefault,omitempty"`
  695. Isolationuri string `json:"isolationuri,omitempty"`
  696. Macaddress string `json:"macaddress,omitempty"`
  697. Netmask string `json:"netmask,omitempty"`
  698. Networkid string `json:"networkid,omitempty"`
  699. Networkname string `json:"networkname,omitempty"`
  700. Secondaryip []struct {
  701. Id string `json:"id,omitempty"`
  702. Ipaddress string `json:"ipaddress,omitempty"`
  703. } `json:"secondaryip,omitempty"`
  704. Traffictype string `json:"traffictype,omitempty"`
  705. Type string `json:"type,omitempty"`
  706. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  707. } `json:"nic,omitempty"`
  708. Ostypeid int64 `json:"ostypeid,omitempty"`
  709. Password string `json:"password,omitempty"`
  710. Passwordenabled bool `json:"passwordenabled,omitempty"`
  711. Project string `json:"project,omitempty"`
  712. Projectid string `json:"projectid,omitempty"`
  713. Publicip string `json:"publicip,omitempty"`
  714. Publicipid string `json:"publicipid,omitempty"`
  715. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  716. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  717. Securitygroup []struct {
  718. Account string `json:"account,omitempty"`
  719. Description string `json:"description,omitempty"`
  720. Domain string `json:"domain,omitempty"`
  721. Domainid string `json:"domainid,omitempty"`
  722. Egressrule []struct {
  723. Account string `json:"account,omitempty"`
  724. Cidr string `json:"cidr,omitempty"`
  725. Endport int `json:"endport,omitempty"`
  726. Icmpcode int `json:"icmpcode,omitempty"`
  727. Icmptype int `json:"icmptype,omitempty"`
  728. Protocol string `json:"protocol,omitempty"`
  729. Ruleid string `json:"ruleid,omitempty"`
  730. Securitygroupname string `json:"securitygroupname,omitempty"`
  731. Startport int `json:"startport,omitempty"`
  732. Tags []struct {
  733. Account string `json:"account,omitempty"`
  734. Customer string `json:"customer,omitempty"`
  735. Domain string `json:"domain,omitempty"`
  736. Domainid string `json:"domainid,omitempty"`
  737. Key string `json:"key,omitempty"`
  738. Project string `json:"project,omitempty"`
  739. Projectid string `json:"projectid,omitempty"`
  740. Resourceid string `json:"resourceid,omitempty"`
  741. Resourcetype string `json:"resourcetype,omitempty"`
  742. Value string `json:"value,omitempty"`
  743. } `json:"tags,omitempty"`
  744. } `json:"egressrule,omitempty"`
  745. Id string `json:"id,omitempty"`
  746. Ingressrule []struct {
  747. Account string `json:"account,omitempty"`
  748. Cidr string `json:"cidr,omitempty"`
  749. Endport int `json:"endport,omitempty"`
  750. Icmpcode int `json:"icmpcode,omitempty"`
  751. Icmptype int `json:"icmptype,omitempty"`
  752. Protocol string `json:"protocol,omitempty"`
  753. Ruleid string `json:"ruleid,omitempty"`
  754. Securitygroupname string `json:"securitygroupname,omitempty"`
  755. Startport int `json:"startport,omitempty"`
  756. Tags []struct {
  757. Account string `json:"account,omitempty"`
  758. Customer string `json:"customer,omitempty"`
  759. Domain string `json:"domain,omitempty"`
  760. Domainid string `json:"domainid,omitempty"`
  761. Key string `json:"key,omitempty"`
  762. Project string `json:"project,omitempty"`
  763. Projectid string `json:"projectid,omitempty"`
  764. Resourceid string `json:"resourceid,omitempty"`
  765. Resourcetype string `json:"resourcetype,omitempty"`
  766. Value string `json:"value,omitempty"`
  767. } `json:"tags,omitempty"`
  768. } `json:"ingressrule,omitempty"`
  769. Name string `json:"name,omitempty"`
  770. Project string `json:"project,omitempty"`
  771. Projectid string `json:"projectid,omitempty"`
  772. Tags []struct {
  773. Account string `json:"account,omitempty"`
  774. Customer string `json:"customer,omitempty"`
  775. Domain string `json:"domain,omitempty"`
  776. Domainid string `json:"domainid,omitempty"`
  777. Key string `json:"key,omitempty"`
  778. Project string `json:"project,omitempty"`
  779. Projectid string `json:"projectid,omitempty"`
  780. Resourceid string `json:"resourceid,omitempty"`
  781. Resourcetype string `json:"resourcetype,omitempty"`
  782. Value string `json:"value,omitempty"`
  783. } `json:"tags,omitempty"`
  784. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  785. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  786. } `json:"securitygroup,omitempty"`
  787. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  788. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  789. Servicestate string `json:"servicestate,omitempty"`
  790. State string `json:"state,omitempty"`
  791. Tags []struct {
  792. Account string `json:"account,omitempty"`
  793. Customer string `json:"customer,omitempty"`
  794. Domain string `json:"domain,omitempty"`
  795. Domainid string `json:"domainid,omitempty"`
  796. Key string `json:"key,omitempty"`
  797. Project string `json:"project,omitempty"`
  798. Projectid string `json:"projectid,omitempty"`
  799. Resourceid string `json:"resourceid,omitempty"`
  800. Resourcetype string `json:"resourcetype,omitempty"`
  801. Value string `json:"value,omitempty"`
  802. } `json:"tags,omitempty"`
  803. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  804. Templateid string `json:"templateid,omitempty"`
  805. Templatename string `json:"templatename,omitempty"`
  806. Userid string `json:"userid,omitempty"`
  807. Username string `json:"username,omitempty"`
  808. Vgpu string `json:"vgpu,omitempty"`
  809. Zoneid string `json:"zoneid,omitempty"`
  810. Zonename string `json:"zonename,omitempty"`
  811. }
  812. type RebootVirtualMachineParams struct {
  813. p map[string]interface{}
  814. }
  815. func (p *RebootVirtualMachineParams) toURLValues() url.Values {
  816. u := url.Values{}
  817. if p.p == nil {
  818. return u
  819. }
  820. if v, found := p.p["id"]; found {
  821. u.Set("id", v.(string))
  822. }
  823. return u
  824. }
  825. func (p *RebootVirtualMachineParams) SetId(v string) {
  826. if p.p == nil {
  827. p.p = make(map[string]interface{})
  828. }
  829. p.p["id"] = v
  830. return
  831. }
  832. // You should always use this function to get a new RebootVirtualMachineParams instance,
  833. // as then you are sure you have configured all required params
  834. func (s *VirtualMachineService) NewRebootVirtualMachineParams(id string) *RebootVirtualMachineParams {
  835. p := &RebootVirtualMachineParams{}
  836. p.p = make(map[string]interface{})
  837. p.p["id"] = id
  838. return p
  839. }
  840. // Reboots a virtual machine.
  841. func (s *VirtualMachineService) RebootVirtualMachine(p *RebootVirtualMachineParams) (*RebootVirtualMachineResponse, error) {
  842. resp, err := s.cs.newRequest("rebootVirtualMachine", p.toURLValues())
  843. if err != nil {
  844. return nil, err
  845. }
  846. var r RebootVirtualMachineResponse
  847. if err := json.Unmarshal(resp, &r); err != nil {
  848. return nil, err
  849. }
  850. // If we have a async client, we need to wait for the async result
  851. if s.cs.async {
  852. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  853. if err != nil {
  854. if err == AsyncTimeoutErr {
  855. return &r, err
  856. }
  857. return nil, err
  858. }
  859. b, err = getRawValue(b)
  860. if err != nil {
  861. return nil, err
  862. }
  863. if err := json.Unmarshal(b, &r); err != nil {
  864. return nil, err
  865. }
  866. }
  867. return &r, nil
  868. }
  869. type RebootVirtualMachineResponse struct {
  870. JobID string `json:"jobid,omitempty"`
  871. Account string `json:"account,omitempty"`
  872. Affinitygroup []struct {
  873. Account string `json:"account,omitempty"`
  874. Description string `json:"description,omitempty"`
  875. Domain string `json:"domain,omitempty"`
  876. Domainid string `json:"domainid,omitempty"`
  877. Id string `json:"id,omitempty"`
  878. Name string `json:"name,omitempty"`
  879. Project string `json:"project,omitempty"`
  880. Projectid string `json:"projectid,omitempty"`
  881. Type string `json:"type,omitempty"`
  882. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  883. } `json:"affinitygroup,omitempty"`
  884. Cpunumber int `json:"cpunumber,omitempty"`
  885. Cpuspeed int `json:"cpuspeed,omitempty"`
  886. Cpuused string `json:"cpuused,omitempty"`
  887. Created string `json:"created,omitempty"`
  888. Details map[string]string `json:"details,omitempty"`
  889. Diskioread int64 `json:"diskioread,omitempty"`
  890. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  891. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  892. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  893. Diskofferingid string `json:"diskofferingid,omitempty"`
  894. Diskofferingname string `json:"diskofferingname,omitempty"`
  895. Displayname string `json:"displayname,omitempty"`
  896. Displayvm bool `json:"displayvm,omitempty"`
  897. Domain string `json:"domain,omitempty"`
  898. Domainid string `json:"domainid,omitempty"`
  899. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  900. Group string `json:"group,omitempty"`
  901. Groupid string `json:"groupid,omitempty"`
  902. Guestosid string `json:"guestosid,omitempty"`
  903. Haenable bool `json:"haenable,omitempty"`
  904. Hostid string `json:"hostid,omitempty"`
  905. Hostname string `json:"hostname,omitempty"`
  906. Hypervisor string `json:"hypervisor,omitempty"`
  907. Id string `json:"id,omitempty"`
  908. Instancename string `json:"instancename,omitempty"`
  909. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  910. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  911. Isoid string `json:"isoid,omitempty"`
  912. Isoname string `json:"isoname,omitempty"`
  913. Keypair string `json:"keypair,omitempty"`
  914. Memory int `json:"memory,omitempty"`
  915. Name string `json:"name,omitempty"`
  916. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  917. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  918. Nic []struct {
  919. Broadcasturi string `json:"broadcasturi,omitempty"`
  920. Deviceid string `json:"deviceid,omitempty"`
  921. Gateway string `json:"gateway,omitempty"`
  922. Id string `json:"id,omitempty"`
  923. Ip6address string `json:"ip6address,omitempty"`
  924. Ip6cidr string `json:"ip6cidr,omitempty"`
  925. Ip6gateway string `json:"ip6gateway,omitempty"`
  926. Ipaddress string `json:"ipaddress,omitempty"`
  927. Isdefault bool `json:"isdefault,omitempty"`
  928. Isolationuri string `json:"isolationuri,omitempty"`
  929. Macaddress string `json:"macaddress,omitempty"`
  930. Netmask string `json:"netmask,omitempty"`
  931. Networkid string `json:"networkid,omitempty"`
  932. Networkname string `json:"networkname,omitempty"`
  933. Secondaryip []struct {
  934. Id string `json:"id,omitempty"`
  935. Ipaddress string `json:"ipaddress,omitempty"`
  936. } `json:"secondaryip,omitempty"`
  937. Traffictype string `json:"traffictype,omitempty"`
  938. Type string `json:"type,omitempty"`
  939. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  940. } `json:"nic,omitempty"`
  941. Ostypeid int64 `json:"ostypeid,omitempty"`
  942. Password string `json:"password,omitempty"`
  943. Passwordenabled bool `json:"passwordenabled,omitempty"`
  944. Project string `json:"project,omitempty"`
  945. Projectid string `json:"projectid,omitempty"`
  946. Publicip string `json:"publicip,omitempty"`
  947. Publicipid string `json:"publicipid,omitempty"`
  948. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  949. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  950. Securitygroup []struct {
  951. Account string `json:"account,omitempty"`
  952. Description string `json:"description,omitempty"`
  953. Domain string `json:"domain,omitempty"`
  954. Domainid string `json:"domainid,omitempty"`
  955. Egressrule []struct {
  956. Account string `json:"account,omitempty"`
  957. Cidr string `json:"cidr,omitempty"`
  958. Endport int `json:"endport,omitempty"`
  959. Icmpcode int `json:"icmpcode,omitempty"`
  960. Icmptype int `json:"icmptype,omitempty"`
  961. Protocol string `json:"protocol,omitempty"`
  962. Ruleid string `json:"ruleid,omitempty"`
  963. Securitygroupname string `json:"securitygroupname,omitempty"`
  964. Startport int `json:"startport,omitempty"`
  965. Tags []struct {
  966. Account string `json:"account,omitempty"`
  967. Customer string `json:"customer,omitempty"`
  968. Domain string `json:"domain,omitempty"`
  969. Domainid string `json:"domainid,omitempty"`
  970. Key string `json:"key,omitempty"`
  971. Project string `json:"project,omitempty"`
  972. Projectid string `json:"projectid,omitempty"`
  973. Resourceid string `json:"resourceid,omitempty"`
  974. Resourcetype string `json:"resourcetype,omitempty"`
  975. Value string `json:"value,omitempty"`
  976. } `json:"tags,omitempty"`
  977. } `json:"egressrule,omitempty"`
  978. Id string `json:"id,omitempty"`
  979. Ingressrule []struct {
  980. Account string `json:"account,omitempty"`
  981. Cidr string `json:"cidr,omitempty"`
  982. Endport int `json:"endport,omitempty"`
  983. Icmpcode int `json:"icmpcode,omitempty"`
  984. Icmptype int `json:"icmptype,omitempty"`
  985. Protocol string `json:"protocol,omitempty"`
  986. Ruleid string `json:"ruleid,omitempty"`
  987. Securitygroupname string `json:"securitygroupname,omitempty"`
  988. Startport int `json:"startport,omitempty"`
  989. Tags []struct {
  990. Account string `json:"account,omitempty"`
  991. Customer string `json:"customer,omitempty"`
  992. Domain string `json:"domain,omitempty"`
  993. Domainid string `json:"domainid,omitempty"`
  994. Key string `json:"key,omitempty"`
  995. Project string `json:"project,omitempty"`
  996. Projectid string `json:"projectid,omitempty"`
  997. Resourceid string `json:"resourceid,omitempty"`
  998. Resourcetype string `json:"resourcetype,omitempty"`
  999. Value string `json:"value,omitempty"`
  1000. } `json:"tags,omitempty"`
  1001. } `json:"ingressrule,omitempty"`
  1002. Name string `json:"name,omitempty"`
  1003. Project string `json:"project,omitempty"`
  1004. Projectid string `json:"projectid,omitempty"`
  1005. Tags []struct {
  1006. Account string `json:"account,omitempty"`
  1007. Customer string `json:"customer,omitempty"`
  1008. Domain string `json:"domain,omitempty"`
  1009. Domainid string `json:"domainid,omitempty"`
  1010. Key string `json:"key,omitempty"`
  1011. Project string `json:"project,omitempty"`
  1012. Projectid string `json:"projectid,omitempty"`
  1013. Resourceid string `json:"resourceid,omitempty"`
  1014. Resourcetype string `json:"resourcetype,omitempty"`
  1015. Value string `json:"value,omitempty"`
  1016. } `json:"tags,omitempty"`
  1017. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  1018. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  1019. } `json:"securitygroup,omitempty"`
  1020. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  1021. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  1022. Servicestate string `json:"servicestate,omitempty"`
  1023. State string `json:"state,omitempty"`
  1024. Tags []struct {
  1025. Account string `json:"account,omitempty"`
  1026. Customer string `json:"customer,omitempty"`
  1027. Domain string `json:"domain,omitempty"`
  1028. Domainid string `json:"domainid,omitempty"`
  1029. Key string `json:"key,omitempty"`
  1030. Project string `json:"project,omitempty"`
  1031. Projectid string `json:"projectid,omitempty"`
  1032. Resourceid string `json:"resourceid,omitempty"`
  1033. Resourcetype string `json:"resourcetype,omitempty"`
  1034. Value string `json:"value,omitempty"`
  1035. } `json:"tags,omitempty"`
  1036. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  1037. Templateid string `json:"templateid,omitempty"`
  1038. Templatename string `json:"templatename,omitempty"`
  1039. Userid string `json:"userid,omitempty"`
  1040. Username string `json:"username,omitempty"`
  1041. Vgpu string `json:"vgpu,omitempty"`
  1042. Zoneid string `json:"zoneid,omitempty"`
  1043. Zonename string `json:"zonename,omitempty"`
  1044. }
  1045. type StartVirtualMachineParams struct {
  1046. p map[string]interface{}
  1047. }
  1048. func (p *StartVirtualMachineParams) toURLValues() url.Values {
  1049. u := url.Values{}
  1050. if p.p == nil {
  1051. return u
  1052. }
  1053. if v, found := p.p["deploymentplanner"]; found {
  1054. u.Set("deploymentplanner", v.(string))
  1055. }
  1056. if v, found := p.p["hostid"]; found {
  1057. u.Set("hostid", v.(string))
  1058. }
  1059. if v, found := p.p["id"]; found {
  1060. u.Set("id", v.(string))
  1061. }
  1062. return u
  1063. }
  1064. func (p *StartVirtualMachineParams) SetDeploymentplanner(v string) {
  1065. if p.p == nil {
  1066. p.p = make(map[string]interface{})
  1067. }
  1068. p.p["deploymentplanner"] = v
  1069. return
  1070. }
  1071. func (p *StartVirtualMachineParams) SetHostid(v string) {
  1072. if p.p == nil {
  1073. p.p = make(map[string]interface{})
  1074. }
  1075. p.p["hostid"] = v
  1076. return
  1077. }
  1078. func (p *StartVirtualMachineParams) SetId(v string) {
  1079. if p.p == nil {
  1080. p.p = make(map[string]interface{})
  1081. }
  1082. p.p["id"] = v
  1083. return
  1084. }
  1085. // You should always use this function to get a new StartVirtualMachineParams instance,
  1086. // as then you are sure you have configured all required params
  1087. func (s *VirtualMachineService) NewStartVirtualMachineParams(id string) *StartVirtualMachineParams {
  1088. p := &StartVirtualMachineParams{}
  1089. p.p = make(map[string]interface{})
  1090. p.p["id"] = id
  1091. return p
  1092. }
  1093. // Starts a virtual machine.
  1094. func (s *VirtualMachineService) StartVirtualMachine(p *StartVirtualMachineParams) (*StartVirtualMachineResponse, error) {
  1095. resp, err := s.cs.newRequest("startVirtualMachine", p.toURLValues())
  1096. if err != nil {
  1097. return nil, err
  1098. }
  1099. var r StartVirtualMachineResponse
  1100. if err := json.Unmarshal(resp, &r); err != nil {
  1101. return nil, err
  1102. }
  1103. // If we have a async client, we need to wait for the async result
  1104. if s.cs.async {
  1105. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  1106. if err != nil {
  1107. if err == AsyncTimeoutErr {
  1108. return &r, err
  1109. }
  1110. return nil, err
  1111. }
  1112. b, err = getRawValue(b)
  1113. if err != nil {
  1114. return nil, err
  1115. }
  1116. if err := json.Unmarshal(b, &r); err != nil {
  1117. return nil, err
  1118. }
  1119. }
  1120. return &r, nil
  1121. }
  1122. type StartVirtualMachineResponse struct {
  1123. JobID string `json:"jobid,omitempty"`
  1124. Account string `json:"account,omitempty"`
  1125. Affinitygroup []struct {
  1126. Account string `json:"account,omitempty"`
  1127. Description string `json:"description,omitempty"`
  1128. Domain string `json:"domain,omitempty"`
  1129. Domainid string `json:"domainid,omitempty"`
  1130. Id string `json:"id,omitempty"`
  1131. Name string `json:"name,omitempty"`
  1132. Project string `json:"project,omitempty"`
  1133. Projectid string `json:"projectid,omitempty"`
  1134. Type string `json:"type,omitempty"`
  1135. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  1136. } `json:"affinitygroup,omitempty"`
  1137. Cpunumber int `json:"cpunumber,omitempty"`
  1138. Cpuspeed int `json:"cpuspeed,omitempty"`
  1139. Cpuused string `json:"cpuused,omitempty"`
  1140. Created string `json:"created,omitempty"`
  1141. Details map[string]string `json:"details,omitempty"`
  1142. Diskioread int64 `json:"diskioread,omitempty"`
  1143. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  1144. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  1145. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  1146. Diskofferingid string `json:"diskofferingid,omitempty"`
  1147. Diskofferingname string `json:"diskofferingname,omitempty"`
  1148. Displayname string `json:"displayname,omitempty"`
  1149. Displayvm bool `json:"displayvm,omitempty"`
  1150. Domain string `json:"domain,omitempty"`
  1151. Domainid string `json:"domainid,omitempty"`
  1152. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  1153. Group string `json:"group,omitempty"`
  1154. Groupid string `json:"groupid,omitempty"`
  1155. Guestosid string `json:"guestosid,omitempty"`
  1156. Haenable bool `json:"haenable,omitempty"`
  1157. Hostid string `json:"hostid,omitempty"`
  1158. Hostname string `json:"hostname,omitempty"`
  1159. Hypervisor string `json:"hypervisor,omitempty"`
  1160. Id string `json:"id,omitempty"`
  1161. Instancename string `json:"instancename,omitempty"`
  1162. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  1163. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  1164. Isoid string `json:"isoid,omitempty"`
  1165. Isoname string `json:"isoname,omitempty"`
  1166. Keypair string `json:"keypair,omitempty"`
  1167. Memory int `json:"memory,omitempty"`
  1168. Name string `json:"name,omitempty"`
  1169. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  1170. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  1171. Nic []struct {
  1172. Broadcasturi string `json:"broadcasturi,omitempty"`
  1173. Deviceid string `json:"deviceid,omitempty"`
  1174. Gateway string `json:"gateway,omitempty"`
  1175. Id string `json:"id,omitempty"`
  1176. Ip6address string `json:"ip6address,omitempty"`
  1177. Ip6cidr string `json:"ip6cidr,omitempty"`
  1178. Ip6gateway string `json:"ip6gateway,omitempty"`
  1179. Ipaddress string `json:"ipaddress,omitempty"`
  1180. Isdefault bool `json:"isdefault,omitempty"`
  1181. Isolationuri string `json:"isolationuri,omitempty"`
  1182. Macaddress string `json:"macaddress,omitempty"`
  1183. Netmask string `json:"netmask,omitempty"`
  1184. Networkid string `json:"networkid,omitempty"`
  1185. Networkname string `json:"networkname,omitempty"`
  1186. Secondaryip []struct {
  1187. Id string `json:"id,omitempty"`
  1188. Ipaddress string `json:"ipaddress,omitempty"`
  1189. } `json:"secondaryip,omitempty"`
  1190. Traffictype string `json:"traffictype,omitempty"`
  1191. Type string `json:"type,omitempty"`
  1192. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  1193. } `json:"nic,omitempty"`
  1194. Ostypeid int64 `json:"ostypeid,omitempty"`
  1195. Password string `json:"password,omitempty"`
  1196. Passwordenabled bool `json:"passwordenabled,omitempty"`
  1197. Project string `json:"project,omitempty"`
  1198. Projectid string `json:"projectid,omitempty"`
  1199. Publicip string `json:"publicip,omitempty"`
  1200. Publicipid string `json:"publicipid,omitempty"`
  1201. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  1202. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  1203. Securitygroup []struct {
  1204. Account string `json:"account,omitempty"`
  1205. Description string `json:"description,omitempty"`
  1206. Domain string `json:"domain,omitempty"`
  1207. Domainid string `json:"domainid,omitempty"`
  1208. Egressrule []struct {
  1209. Account string `json:"account,omitempty"`
  1210. Cidr string `json:"cidr,omitempty"`
  1211. Endport int `json:"endport,omitempty"`
  1212. Icmpcode int `json:"icmpcode,omitempty"`
  1213. Icmptype int `json:"icmptype,omitempty"`
  1214. Protocol string `json:"protocol,omitempty"`
  1215. Ruleid string `json:"ruleid,omitempty"`
  1216. Securitygroupname string `json:"securitygroupname,omitempty"`
  1217. Startport int `json:"startport,omitempty"`
  1218. Tags []struct {
  1219. Account string `json:"account,omitempty"`
  1220. Customer string `json:"customer,omitempty"`
  1221. Domain string `json:"domain,omitempty"`
  1222. Domainid string `json:"domainid,omitempty"`
  1223. Key string `json:"key,omitempty"`
  1224. Project string `json:"project,omitempty"`
  1225. Projectid string `json:"projectid,omitempty"`
  1226. Resourceid string `json:"resourceid,omitempty"`
  1227. Resourcetype string `json:"resourcetype,omitempty"`
  1228. Value string `json:"value,omitempty"`
  1229. } `json:"tags,omitempty"`
  1230. } `json:"egressrule,omitempty"`
  1231. Id string `json:"id,omitempty"`
  1232. Ingressrule []struct {
  1233. Account string `json:"account,omitempty"`
  1234. Cidr string `json:"cidr,omitempty"`
  1235. Endport int `json:"endport,omitempty"`
  1236. Icmpcode int `json:"icmpcode,omitempty"`
  1237. Icmptype int `json:"icmptype,omitempty"`
  1238. Protocol string `json:"protocol,omitempty"`
  1239. Ruleid string `json:"ruleid,omitempty"`
  1240. Securitygroupname string `json:"securitygroupname,omitempty"`
  1241. Startport int `json:"startport,omitempty"`
  1242. Tags []struct {
  1243. Account string `json:"account,omitempty"`
  1244. Customer string `json:"customer,omitempty"`
  1245. Domain string `json:"domain,omitempty"`
  1246. Domainid string `json:"domainid,omitempty"`
  1247. Key string `json:"key,omitempty"`
  1248. Project string `json:"project,omitempty"`
  1249. Projectid string `json:"projectid,omitempty"`
  1250. Resourceid string `json:"resourceid,omitempty"`
  1251. Resourcetype string `json:"resourcetype,omitempty"`
  1252. Value string `json:"value,omitempty"`
  1253. } `json:"tags,omitempty"`
  1254. } `json:"ingressrule,omitempty"`
  1255. Name string `json:"name,omitempty"`
  1256. Project string `json:"project,omitempty"`
  1257. Projectid string `json:"projectid,omitempty"`
  1258. Tags []struct {
  1259. Account string `json:"account,omitempty"`
  1260. Customer string `json:"customer,omitempty"`
  1261. Domain string `json:"domain,omitempty"`
  1262. Domainid string `json:"domainid,omitempty"`
  1263. Key string `json:"key,omitempty"`
  1264. Project string `json:"project,omitempty"`
  1265. Projectid string `json:"projectid,omitempty"`
  1266. Resourceid string `json:"resourceid,omitempty"`
  1267. Resourcetype string `json:"resourcetype,omitempty"`
  1268. Value string `json:"value,omitempty"`
  1269. } `json:"tags,omitempty"`
  1270. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  1271. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  1272. } `json:"securitygroup,omitempty"`
  1273. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  1274. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  1275. Servicestate string `json:"servicestate,omitempty"`
  1276. State string `json:"state,omitempty"`
  1277. Tags []struct {
  1278. Account string `json:"account,omitempty"`
  1279. Customer string `json:"customer,omitempty"`
  1280. Domain string `json:"domain,omitempty"`
  1281. Domainid string `json:"domainid,omitempty"`
  1282. Key string `json:"key,omitempty"`
  1283. Project string `json:"project,omitempty"`
  1284. Projectid string `json:"projectid,omitempty"`
  1285. Resourceid string `json:"resourceid,omitempty"`
  1286. Resourcetype string `json:"resourcetype,omitempty"`
  1287. Value string `json:"value,omitempty"`
  1288. } `json:"tags,omitempty"`
  1289. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  1290. Templateid string `json:"templateid,omitempty"`
  1291. Templatename string `json:"templatename,omitempty"`
  1292. Userid string `json:"userid,omitempty"`
  1293. Username string `json:"username,omitempty"`
  1294. Vgpu string `json:"vgpu,omitempty"`
  1295. Zoneid string `json:"zoneid,omitempty"`
  1296. Zonename string `json:"zonename,omitempty"`
  1297. }
  1298. type StopVirtualMachineParams struct {
  1299. p map[string]interface{}
  1300. }
  1301. func (p *StopVirtualMachineParams) toURLValues() url.Values {
  1302. u := url.Values{}
  1303. if p.p == nil {
  1304. return u
  1305. }
  1306. if v, found := p.p["forced"]; found {
  1307. vv := strconv.FormatBool(v.(bool))
  1308. u.Set("forced", vv)
  1309. }
  1310. if v, found := p.p["id"]; found {
  1311. u.Set("id", v.(string))
  1312. }
  1313. return u
  1314. }
  1315. func (p *StopVirtualMachineParams) SetForced(v bool) {
  1316. if p.p == nil {
  1317. p.p = make(map[string]interface{})
  1318. }
  1319. p.p["forced"] = v
  1320. return
  1321. }
  1322. func (p *StopVirtualMachineParams) SetId(v string) {
  1323. if p.p == nil {
  1324. p.p = make(map[string]interface{})
  1325. }
  1326. p.p["id"] = v
  1327. return
  1328. }
  1329. // You should always use this function to get a new StopVirtualMachineParams instance,
  1330. // as then you are sure you have configured all required params
  1331. func (s *VirtualMachineService) NewStopVirtualMachineParams(id string) *StopVirtualMachineParams {
  1332. p := &StopVirtualMachineParams{}
  1333. p.p = make(map[string]interface{})
  1334. p.p["id"] = id
  1335. return p
  1336. }
  1337. // Stops a virtual machine.
  1338. func (s *VirtualMachineService) StopVirtualMachine(p *StopVirtualMachineParams) (*StopVirtualMachineResponse, error) {
  1339. resp, err := s.cs.newRequest("stopVirtualMachine", p.toURLValues())
  1340. if err != nil {
  1341. return nil, err
  1342. }
  1343. var r StopVirtualMachineResponse
  1344. if err := json.Unmarshal(resp, &r); err != nil {
  1345. return nil, err
  1346. }
  1347. // If we have a async client, we need to wait for the async result
  1348. if s.cs.async {
  1349. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  1350. if err != nil {
  1351. if err == AsyncTimeoutErr {
  1352. return &r, err
  1353. }
  1354. return nil, err
  1355. }
  1356. b, err = getRawValue(b)
  1357. if err != nil {
  1358. return nil, err
  1359. }
  1360. if err := json.Unmarshal(b, &r); err != nil {
  1361. return nil, err
  1362. }
  1363. }
  1364. return &r, nil
  1365. }
  1366. type StopVirtualMachineResponse struct {
  1367. JobID string `json:"jobid,omitempty"`
  1368. Account string `json:"account,omitempty"`
  1369. Affinitygroup []struct {
  1370. Account string `json:"account,omitempty"`
  1371. Description string `json:"description,omitempty"`
  1372. Domain string `json:"domain,omitempty"`
  1373. Domainid string `json:"domainid,omitempty"`
  1374. Id string `json:"id,omitempty"`
  1375. Name string `json:"name,omitempty"`
  1376. Project string `json:"project,omitempty"`
  1377. Projectid string `json:"projectid,omitempty"`
  1378. Type string `json:"type,omitempty"`
  1379. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  1380. } `json:"affinitygroup,omitempty"`
  1381. Cpunumber int `json:"cpunumber,omitempty"`
  1382. Cpuspeed int `json:"cpuspeed,omitempty"`
  1383. Cpuused string `json:"cpuused,omitempty"`
  1384. Created string `json:"created,omitempty"`
  1385. Details map[string]string `json:"details,omitempty"`
  1386. Diskioread int64 `json:"diskioread,omitempty"`
  1387. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  1388. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  1389. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  1390. Diskofferingid string `json:"diskofferingid,omitempty"`
  1391. Diskofferingname string `json:"diskofferingname,omitempty"`
  1392. Displayname string `json:"displayname,omitempty"`
  1393. Displayvm bool `json:"displayvm,omitempty"`
  1394. Domain string `json:"domain,omitempty"`
  1395. Domainid string `json:"domainid,omitempty"`
  1396. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  1397. Group string `json:"group,omitempty"`
  1398. Groupid string `json:"groupid,omitempty"`
  1399. Guestosid string `json:"guestosid,omitempty"`
  1400. Haenable bool `json:"haenable,omitempty"`
  1401. Hostid string `json:"hostid,omitempty"`
  1402. Hostname string `json:"hostname,omitempty"`
  1403. Hypervisor string `json:"hypervisor,omitempty"`
  1404. Id string `json:"id,omitempty"`
  1405. Instancename string `json:"instancename,omitempty"`
  1406. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  1407. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  1408. Isoid string `json:"isoid,omitempty"`
  1409. Isoname string `json:"isoname,omitempty"`
  1410. Keypair string `json:"keypair,omitempty"`
  1411. Memory int `json:"memory,omitempty"`
  1412. Name string `json:"name,omitempty"`
  1413. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  1414. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  1415. Nic []struct {
  1416. Broadcasturi string `json:"broadcasturi,omitempty"`
  1417. Deviceid string `json:"deviceid,omitempty"`
  1418. Gateway string `json:"gateway,omitempty"`
  1419. Id string `json:"id,omitempty"`
  1420. Ip6address string `json:"ip6address,omitempty"`
  1421. Ip6cidr string `json:"ip6cidr,omitempty"`
  1422. Ip6gateway string `json:"ip6gateway,omitempty"`
  1423. Ipaddress string `json:"ipaddress,omitempty"`
  1424. Isdefault bool `json:"isdefault,omitempty"`
  1425. Isolationuri string `json:"isolationuri,omitempty"`
  1426. Macaddress string `json:"macaddress,omitempty"`
  1427. Netmask string `json:"netmask,omitempty"`
  1428. Networkid string `json:"networkid,omitempty"`
  1429. Networkname string `json:"networkname,omitempty"`
  1430. Secondaryip []struct {
  1431. Id string `json:"id,omitempty"`
  1432. Ipaddress string `json:"ipaddress,omitempty"`
  1433. } `json:"secondaryip,omitempty"`
  1434. Traffictype string `json:"traffictype,omitempty"`
  1435. Type string `json:"type,omitempty"`
  1436. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  1437. } `json:"nic,omitempty"`
  1438. Ostypeid int64 `json:"ostypeid,omitempty"`
  1439. Password string `json:"password,omitempty"`
  1440. Passwordenabled bool `json:"passwordenabled,omitempty"`
  1441. Project string `json:"project,omitempty"`
  1442. Projectid string `json:"projectid,omitempty"`
  1443. Publicip string `json:"publicip,omitempty"`
  1444. Publicipid string `json:"publicipid,omitempty"`
  1445. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  1446. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  1447. Securitygroup []struct {
  1448. Account string `json:"account,omitempty"`
  1449. Description string `json:"description,omitempty"`
  1450. Domain string `json:"domain,omitempty"`
  1451. Domainid string `json:"domainid,omitempty"`
  1452. Egressrule []struct {
  1453. Account string `json:"account,omitempty"`
  1454. Cidr string `json:"cidr,omitempty"`
  1455. Endport int `json:"endport,omitempty"`
  1456. Icmpcode int `json:"icmpcode,omitempty"`
  1457. Icmptype int `json:"icmptype,omitempty"`
  1458. Protocol string `json:"protocol,omitempty"`
  1459. Ruleid string `json:"ruleid,omitempty"`
  1460. Securitygroupname string `json:"securitygroupname,omitempty"`
  1461. Startport int `json:"startport,omitempty"`
  1462. Tags []struct {
  1463. Account string `json:"account,omitempty"`
  1464. Customer string `json:"customer,omitempty"`
  1465. Domain string `json:"domain,omitempty"`
  1466. Domainid string `json:"domainid,omitempty"`
  1467. Key string `json:"key,omitempty"`
  1468. Project string `json:"project,omitempty"`
  1469. Projectid string `json:"projectid,omitempty"`
  1470. Resourceid string `json:"resourceid,omitempty"`
  1471. Resourcetype string `json:"resourcetype,omitempty"`
  1472. Value string `json:"value,omitempty"`
  1473. } `json:"tags,omitempty"`
  1474. } `json:"egressrule,omitempty"`
  1475. Id string `json:"id,omitempty"`
  1476. Ingressrule []struct {
  1477. Account string `json:"account,omitempty"`
  1478. Cidr string `json:"cidr,omitempty"`
  1479. Endport int `json:"endport,omitempty"`
  1480. Icmpcode int `json:"icmpcode,omitempty"`
  1481. Icmptype int `json:"icmptype,omitempty"`
  1482. Protocol string `json:"protocol,omitempty"`
  1483. Ruleid string `json:"ruleid,omitempty"`
  1484. Securitygroupname string `json:"securitygroupname,omitempty"`
  1485. Startport int `json:"startport,omitempty"`
  1486. Tags []struct {
  1487. Account string `json:"account,omitempty"`
  1488. Customer string `json:"customer,omitempty"`
  1489. Domain string `json:"domain,omitempty"`
  1490. Domainid string `json:"domainid,omitempty"`
  1491. Key string `json:"key,omitempty"`
  1492. Project string `json:"project,omitempty"`
  1493. Projectid string `json:"projectid,omitempty"`
  1494. Resourceid string `json:"resourceid,omitempty"`
  1495. Resourcetype string `json:"resourcetype,omitempty"`
  1496. Value string `json:"value,omitempty"`
  1497. } `json:"tags,omitempty"`
  1498. } `json:"ingressrule,omitempty"`
  1499. Name string `json:"name,omitempty"`
  1500. Project string `json:"project,omitempty"`
  1501. Projectid string `json:"projectid,omitempty"`
  1502. Tags []struct {
  1503. Account string `json:"account,omitempty"`
  1504. Customer string `json:"customer,omitempty"`
  1505. Domain string `json:"domain,omitempty"`
  1506. Domainid string `json:"domainid,omitempty"`
  1507. Key string `json:"key,omitempty"`
  1508. Project string `json:"project,omitempty"`
  1509. Projectid string `json:"projectid,omitempty"`
  1510. Resourceid string `json:"resourceid,omitempty"`
  1511. Resourcetype string `json:"resourcetype,omitempty"`
  1512. Value string `json:"value,omitempty"`
  1513. } `json:"tags,omitempty"`
  1514. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  1515. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  1516. } `json:"securitygroup,omitempty"`
  1517. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  1518. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  1519. Servicestate string `json:"servicestate,omitempty"`
  1520. State string `json:"state,omitempty"`
  1521. Tags []struct {
  1522. Account string `json:"account,omitempty"`
  1523. Customer string `json:"customer,omitempty"`
  1524. Domain string `json:"domain,omitempty"`
  1525. Domainid string `json:"domainid,omitempty"`
  1526. Key string `json:"key,omitempty"`
  1527. Project string `json:"project,omitempty"`
  1528. Projectid string `json:"projectid,omitempty"`
  1529. Resourceid string `json:"resourceid,omitempty"`
  1530. Resourcetype string `json:"resourcetype,omitempty"`
  1531. Value string `json:"value,omitempty"`
  1532. } `json:"tags,omitempty"`
  1533. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  1534. Templateid string `json:"templateid,omitempty"`
  1535. Templatename string `json:"templatename,omitempty"`
  1536. Userid string `json:"userid,omitempty"`
  1537. Username string `json:"username,omitempty"`
  1538. Vgpu string `json:"vgpu,omitempty"`
  1539. Zoneid string `json:"zoneid,omitempty"`
  1540. Zonename string `json:"zonename,omitempty"`
  1541. }
  1542. type ResetPasswordForVirtualMachineParams struct {
  1543. p map[string]interface{}
  1544. }
  1545. func (p *ResetPasswordForVirtualMachineParams) toURLValues() url.Values {
  1546. u := url.Values{}
  1547. if p.p == nil {
  1548. return u
  1549. }
  1550. if v, found := p.p["id"]; found {
  1551. u.Set("id", v.(string))
  1552. }
  1553. return u
  1554. }
  1555. func (p *ResetPasswordForVirtualMachineParams) SetId(v string) {
  1556. if p.p == nil {
  1557. p.p = make(map[string]interface{})
  1558. }
  1559. p.p["id"] = v
  1560. return
  1561. }
  1562. // You should always use this function to get a new ResetPasswordForVirtualMachineParams instance,
  1563. // as then you are sure you have configured all required params
  1564. func (s *VirtualMachineService) NewResetPasswordForVirtualMachineParams(id string) *ResetPasswordForVirtualMachineParams {
  1565. p := &ResetPasswordForVirtualMachineParams{}
  1566. p.p = make(map[string]interface{})
  1567. p.p["id"] = id
  1568. return p
  1569. }
  1570. // Resets the password for virtual machine. The virtual machine must be in a "Stopped" state and the template must already support this feature for this command to take effect. [async]
  1571. func (s *VirtualMachineService) ResetPasswordForVirtualMachine(p *ResetPasswordForVirtualMachineParams) (*ResetPasswordForVirtualMachineResponse, error) {
  1572. resp, err := s.cs.newRequest("resetPasswordForVirtualMachine", p.toURLValues())
  1573. if err != nil {
  1574. return nil, err
  1575. }
  1576. var r ResetPasswordForVirtualMachineResponse
  1577. if err := json.Unmarshal(resp, &r); err != nil {
  1578. return nil, err
  1579. }
  1580. // If we have a async client, we need to wait for the async result
  1581. if s.cs.async {
  1582. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  1583. if err != nil {
  1584. if err == AsyncTimeoutErr {
  1585. return &r, err
  1586. }
  1587. return nil, err
  1588. }
  1589. b, err = getRawValue(b)
  1590. if err != nil {
  1591. return nil, err
  1592. }
  1593. if err := json.Unmarshal(b, &r); err != nil {
  1594. return nil, err
  1595. }
  1596. }
  1597. return &r, nil
  1598. }
  1599. type ResetPasswordForVirtualMachineResponse struct {
  1600. JobID string `json:"jobid,omitempty"`
  1601. Account string `json:"account,omitempty"`
  1602. Affinitygroup []struct {
  1603. Account string `json:"account,omitempty"`
  1604. Description string `json:"description,omitempty"`
  1605. Domain string `json:"domain,omitempty"`
  1606. Domainid string `json:"domainid,omitempty"`
  1607. Id string `json:"id,omitempty"`
  1608. Name string `json:"name,omitempty"`
  1609. Project string `json:"project,omitempty"`
  1610. Projectid string `json:"projectid,omitempty"`
  1611. Type string `json:"type,omitempty"`
  1612. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  1613. } `json:"affinitygroup,omitempty"`
  1614. Cpunumber int `json:"cpunumber,omitempty"`
  1615. Cpuspeed int `json:"cpuspeed,omitempty"`
  1616. Cpuused string `json:"cpuused,omitempty"`
  1617. Created string `json:"created,omitempty"`
  1618. Details map[string]string `json:"details,omitempty"`
  1619. Diskioread int64 `json:"diskioread,omitempty"`
  1620. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  1621. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  1622. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  1623. Diskofferingid string `json:"diskofferingid,omitempty"`
  1624. Diskofferingname string `json:"diskofferingname,omitempty"`
  1625. Displayname string `json:"displayname,omitempty"`
  1626. Displayvm bool `json:"displayvm,omitempty"`
  1627. Domain string `json:"domain,omitempty"`
  1628. Domainid string `json:"domainid,omitempty"`
  1629. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  1630. Group string `json:"group,omitempty"`
  1631. Groupid string `json:"groupid,omitempty"`
  1632. Guestosid string `json:"guestosid,omitempty"`
  1633. Haenable bool `json:"haenable,omitempty"`
  1634. Hostid string `json:"hostid,omitempty"`
  1635. Hostname string `json:"hostname,omitempty"`
  1636. Hypervisor string `json:"hypervisor,omitempty"`
  1637. Id string `json:"id,omitempty"`
  1638. Instancename string `json:"instancename,omitempty"`
  1639. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  1640. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  1641. Isoid string `json:"isoid,omitempty"`
  1642. Isoname string `json:"isoname,omitempty"`
  1643. Keypair string `json:"keypair,omitempty"`
  1644. Memory int `json:"memory,omitempty"`
  1645. Name string `json:"name,omitempty"`
  1646. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  1647. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  1648. Nic []struct {
  1649. Broadcasturi string `json:"broadcasturi,omitempty"`
  1650. Deviceid string `json:"deviceid,omitempty"`
  1651. Gateway string `json:"gateway,omitempty"`
  1652. Id string `json:"id,omitempty"`
  1653. Ip6address string `json:"ip6address,omitempty"`
  1654. Ip6cidr string `json:"ip6cidr,omitempty"`
  1655. Ip6gateway string `json:"ip6gateway,omitempty"`
  1656. Ipaddress string `json:"ipaddress,omitempty"`
  1657. Isdefault bool `json:"isdefault,omitempty"`
  1658. Isolationuri string `json:"isolationuri,omitempty"`
  1659. Macaddress string `json:"macaddress,omitempty"`
  1660. Netmask string `json:"netmask,omitempty"`
  1661. Networkid string `json:"networkid,omitempty"`
  1662. Networkname string `json:"networkname,omitempty"`
  1663. Secondaryip []struct {
  1664. Id string `json:"id,omitempty"`
  1665. Ipaddress string `json:"ipaddress,omitempty"`
  1666. } `json:"secondaryip,omitempty"`
  1667. Traffictype string `json:"traffictype,omitempty"`
  1668. Type string `json:"type,omitempty"`
  1669. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  1670. } `json:"nic,omitempty"`
  1671. Ostypeid int64 `json:"ostypeid,omitempty"`
  1672. Password string `json:"password,omitempty"`
  1673. Passwordenabled bool `json:"passwordenabled,omitempty"`
  1674. Project string `json:"project,omitempty"`
  1675. Projectid string `json:"projectid,omitempty"`
  1676. Publicip string `json:"publicip,omitempty"`
  1677. Publicipid string `json:"publicipid,omitempty"`
  1678. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  1679. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  1680. Securitygroup []struct {
  1681. Account string `json:"account,omitempty"`
  1682. Description string `json:"description,omitempty"`
  1683. Domain string `json:"domain,omitempty"`
  1684. Domainid string `json:"domainid,omitempty"`
  1685. Egressrule []struct {
  1686. Account string `json:"account,omitempty"`
  1687. Cidr string `json:"cidr,omitempty"`
  1688. Endport int `json:"endport,omitempty"`
  1689. Icmpcode int `json:"icmpcode,omitempty"`
  1690. Icmptype int `json:"icmptype,omitempty"`
  1691. Protocol string `json:"protocol,omitempty"`
  1692. Ruleid string `json:"ruleid,omitempty"`
  1693. Securitygroupname string `json:"securitygroupname,omitempty"`
  1694. Startport int `json:"startport,omitempty"`
  1695. Tags []struct {
  1696. Account string `json:"account,omitempty"`
  1697. Customer string `json:"customer,omitempty"`
  1698. Domain string `json:"domain,omitempty"`
  1699. Domainid string `json:"domainid,omitempty"`
  1700. Key string `json:"key,omitempty"`
  1701. Project string `json:"project,omitempty"`
  1702. Projectid string `json:"projectid,omitempty"`
  1703. Resourceid string `json:"resourceid,omitempty"`
  1704. Resourcetype string `json:"resourcetype,omitempty"`
  1705. Value string `json:"value,omitempty"`
  1706. } `json:"tags,omitempty"`
  1707. } `json:"egressrule,omitempty"`
  1708. Id string `json:"id,omitempty"`
  1709. Ingressrule []struct {
  1710. Account string `json:"account,omitempty"`
  1711. Cidr string `json:"cidr,omitempty"`
  1712. Endport int `json:"endport,omitempty"`
  1713. Icmpcode int `json:"icmpcode,omitempty"`
  1714. Icmptype int `json:"icmptype,omitempty"`
  1715. Protocol string `json:"protocol,omitempty"`
  1716. Ruleid string `json:"ruleid,omitempty"`
  1717. Securitygroupname string `json:"securitygroupname,omitempty"`
  1718. Startport int `json:"startport,omitempty"`
  1719. Tags []struct {
  1720. Account string `json:"account,omitempty"`
  1721. Customer string `json:"customer,omitempty"`
  1722. Domain string `json:"domain,omitempty"`
  1723. Domainid string `json:"domainid,omitempty"`
  1724. Key string `json:"key,omitempty"`
  1725. Project string `json:"project,omitempty"`
  1726. Projectid string `json:"projectid,omitempty"`
  1727. Resourceid string `json:"resourceid,omitempty"`
  1728. Resourcetype string `json:"resourcetype,omitempty"`
  1729. Value string `json:"value,omitempty"`
  1730. } `json:"tags,omitempty"`
  1731. } `json:"ingressrule,omitempty"`
  1732. Name string `json:"name,omitempty"`
  1733. Project string `json:"project,omitempty"`
  1734. Projectid string `json:"projectid,omitempty"`
  1735. Tags []struct {
  1736. Account string `json:"account,omitempty"`
  1737. Customer string `json:"customer,omitempty"`
  1738. Domain string `json:"domain,omitempty"`
  1739. Domainid string `json:"domainid,omitempty"`
  1740. Key string `json:"key,omitempty"`
  1741. Project string `json:"project,omitempty"`
  1742. Projectid string `json:"projectid,omitempty"`
  1743. Resourceid string `json:"resourceid,omitempty"`
  1744. Resourcetype string `json:"resourcetype,omitempty"`
  1745. Value string `json:"value,omitempty"`
  1746. } `json:"tags,omitempty"`
  1747. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  1748. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  1749. } `json:"securitygroup,omitempty"`
  1750. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  1751. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  1752. Servicestate string `json:"servicestate,omitempty"`
  1753. State string `json:"state,omitempty"`
  1754. Tags []struct {
  1755. Account string `json:"account,omitempty"`
  1756. Customer string `json:"customer,omitempty"`
  1757. Domain string `json:"domain,omitempty"`
  1758. Domainid string `json:"domainid,omitempty"`
  1759. Key string `json:"key,omitempty"`
  1760. Project string `json:"project,omitempty"`
  1761. Projectid string `json:"projectid,omitempty"`
  1762. Resourceid string `json:"resourceid,omitempty"`
  1763. Resourcetype string `json:"resourcetype,omitempty"`
  1764. Value string `json:"value,omitempty"`
  1765. } `json:"tags,omitempty"`
  1766. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  1767. Templateid string `json:"templateid,omitempty"`
  1768. Templatename string `json:"templatename,omitempty"`
  1769. Userid string `json:"userid,omitempty"`
  1770. Username string `json:"username,omitempty"`
  1771. Vgpu string `json:"vgpu,omitempty"`
  1772. Zoneid string `json:"zoneid,omitempty"`
  1773. Zonename string `json:"zonename,omitempty"`
  1774. }
  1775. type UpdateVirtualMachineParams struct {
  1776. p map[string]interface{}
  1777. }
  1778. func (p *UpdateVirtualMachineParams) toURLValues() url.Values {
  1779. u := url.Values{}
  1780. if p.p == nil {
  1781. return u
  1782. }
  1783. if v, found := p.p["customid"]; found {
  1784. u.Set("customid", v.(string))
  1785. }
  1786. if v, found := p.p["details"]; found {
  1787. i := 0
  1788. for k, vv := range v.(map[string]string) {
  1789. u.Set(fmt.Sprintf("details[%d].key", i), k)
  1790. u.Set(fmt.Sprintf("details[%d].value", i), vv)
  1791. i++
  1792. }
  1793. }
  1794. if v, found := p.p["displayname"]; found {
  1795. u.Set("displayname", v.(string))
  1796. }
  1797. if v, found := p.p["displayvm"]; found {
  1798. vv := strconv.FormatBool(v.(bool))
  1799. u.Set("displayvm", vv)
  1800. }
  1801. if v, found := p.p["group"]; found {
  1802. u.Set("group", v.(string))
  1803. }
  1804. if v, found := p.p["haenable"]; found {
  1805. vv := strconv.FormatBool(v.(bool))
  1806. u.Set("haenable", vv)
  1807. }
  1808. if v, found := p.p["id"]; found {
  1809. u.Set("id", v.(string))
  1810. }
  1811. if v, found := p.p["instancename"]; found {
  1812. u.Set("instancename", v.(string))
  1813. }
  1814. if v, found := p.p["isdynamicallyscalable"]; found {
  1815. vv := strconv.FormatBool(v.(bool))
  1816. u.Set("isdynamicallyscalable", vv)
  1817. }
  1818. if v, found := p.p["name"]; found {
  1819. u.Set("name", v.(string))
  1820. }
  1821. if v, found := p.p["ostypeid"]; found {
  1822. u.Set("ostypeid", v.(string))
  1823. }
  1824. if v, found := p.p["userdata"]; found {
  1825. u.Set("userdata", v.(string))
  1826. }
  1827. return u
  1828. }
  1829. func (p *UpdateVirtualMachineParams) SetCustomid(v string) {
  1830. if p.p == nil {
  1831. p.p = make(map[string]interface{})
  1832. }
  1833. p.p["customid"] = v
  1834. return
  1835. }
  1836. func (p *UpdateVirtualMachineParams) SetDetails(v map[string]string) {
  1837. if p.p == nil {
  1838. p.p = make(map[string]interface{})
  1839. }
  1840. p.p["details"] = v
  1841. return
  1842. }
  1843. func (p *UpdateVirtualMachineParams) SetDisplayname(v string) {
  1844. if p.p == nil {
  1845. p.p = make(map[string]interface{})
  1846. }
  1847. p.p["displayname"] = v
  1848. return
  1849. }
  1850. func (p *UpdateVirtualMachineParams) SetDisplayvm(v bool) {
  1851. if p.p == nil {
  1852. p.p = make(map[string]interface{})
  1853. }
  1854. p.p["displayvm"] = v
  1855. return
  1856. }
  1857. func (p *UpdateVirtualMachineParams) SetGroup(v string) {
  1858. if p.p == nil {
  1859. p.p = make(map[string]interface{})
  1860. }
  1861. p.p["group"] = v
  1862. return
  1863. }
  1864. func (p *UpdateVirtualMachineParams) SetHaenable(v bool) {
  1865. if p.p == nil {
  1866. p.p = make(map[string]interface{})
  1867. }
  1868. p.p["haenable"] = v
  1869. return
  1870. }
  1871. func (p *UpdateVirtualMachineParams) SetId(v string) {
  1872. if p.p == nil {
  1873. p.p = make(map[string]interface{})
  1874. }
  1875. p.p["id"] = v
  1876. return
  1877. }
  1878. func (p *UpdateVirtualMachineParams) SetInstancename(v string) {
  1879. if p.p == nil {
  1880. p.p = make(map[string]interface{})
  1881. }
  1882. p.p["instancename"] = v
  1883. return
  1884. }
  1885. func (p *UpdateVirtualMachineParams) SetIsdynamicallyscalable(v bool) {
  1886. if p.p == nil {
  1887. p.p = make(map[string]interface{})
  1888. }
  1889. p.p["isdynamicallyscalable"] = v
  1890. return
  1891. }
  1892. func (p *UpdateVirtualMachineParams) SetName(v string) {
  1893. if p.p == nil {
  1894. p.p = make(map[string]interface{})
  1895. }
  1896. p.p["name"] = v
  1897. return
  1898. }
  1899. func (p *UpdateVirtualMachineParams) SetOstypeid(v string) {
  1900. if p.p == nil {
  1901. p.p = make(map[string]interface{})
  1902. }
  1903. p.p["ostypeid"] = v
  1904. return
  1905. }
  1906. func (p *UpdateVirtualMachineParams) SetUserdata(v string) {
  1907. if p.p == nil {
  1908. p.p = make(map[string]interface{})
  1909. }
  1910. p.p["userdata"] = v
  1911. return
  1912. }
  1913. // You should always use this function to get a new UpdateVirtualMachineParams instance,
  1914. // as then you are sure you have configured all required params
  1915. func (s *VirtualMachineService) NewUpdateVirtualMachineParams(id string) *UpdateVirtualMachineParams {
  1916. p := &UpdateVirtualMachineParams{}
  1917. p.p = make(map[string]interface{})
  1918. p.p["id"] = id
  1919. return p
  1920. }
  1921. // Updates properties of a virtual machine. The VM has to be stopped and restarted for the new properties to take effect. UpdateVirtualMachine does not first check whether the VM is stopped. Therefore, stop the VM manually before issuing this call.
  1922. func (s *VirtualMachineService) UpdateVirtualMachine(p *UpdateVirtualMachineParams) (*UpdateVirtualMachineResponse, error) {
  1923. resp, err := s.cs.newRequest("updateVirtualMachine", p.toURLValues())
  1924. if err != nil {
  1925. return nil, err
  1926. }
  1927. var r UpdateVirtualMachineResponse
  1928. if err := json.Unmarshal(resp, &r); err != nil {
  1929. return nil, err
  1930. }
  1931. return &r, nil
  1932. }
  1933. type UpdateVirtualMachineResponse struct {
  1934. Account string `json:"account,omitempty"`
  1935. Affinitygroup []struct {
  1936. Account string `json:"account,omitempty"`
  1937. Description string `json:"description,omitempty"`
  1938. Domain string `json:"domain,omitempty"`
  1939. Domainid string `json:"domainid,omitempty"`
  1940. Id string `json:"id,omitempty"`
  1941. Name string `json:"name,omitempty"`
  1942. Project string `json:"project,omitempty"`
  1943. Projectid string `json:"projectid,omitempty"`
  1944. Type string `json:"type,omitempty"`
  1945. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  1946. } `json:"affinitygroup,omitempty"`
  1947. Cpunumber int `json:"cpunumber,omitempty"`
  1948. Cpuspeed int `json:"cpuspeed,omitempty"`
  1949. Cpuused string `json:"cpuused,omitempty"`
  1950. Created string `json:"created,omitempty"`
  1951. Details map[string]string `json:"details,omitempty"`
  1952. Diskioread int64 `json:"diskioread,omitempty"`
  1953. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  1954. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  1955. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  1956. Diskofferingid string `json:"diskofferingid,omitempty"`
  1957. Diskofferingname string `json:"diskofferingname,omitempty"`
  1958. Displayname string `json:"displayname,omitempty"`
  1959. Displayvm bool `json:"displayvm,omitempty"`
  1960. Domain string `json:"domain,omitempty"`
  1961. Domainid string `json:"domainid,omitempty"`
  1962. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  1963. Group string `json:"group,omitempty"`
  1964. Groupid string `json:"groupid,omitempty"`
  1965. Guestosid string `json:"guestosid,omitempty"`
  1966. Haenable bool `json:"haenable,omitempty"`
  1967. Hostid string `json:"hostid,omitempty"`
  1968. Hostname string `json:"hostname,omitempty"`
  1969. Hypervisor string `json:"hypervisor,omitempty"`
  1970. Id string `json:"id,omitempty"`
  1971. Instancename string `json:"instancename,omitempty"`
  1972. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  1973. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  1974. Isoid string `json:"isoid,omitempty"`
  1975. Isoname string `json:"isoname,omitempty"`
  1976. Keypair string `json:"keypair,omitempty"`
  1977. Memory int `json:"memory,omitempty"`
  1978. Name string `json:"name,omitempty"`
  1979. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  1980. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  1981. Nic []struct {
  1982. Broadcasturi string `json:"broadcasturi,omitempty"`
  1983. Deviceid string `json:"deviceid,omitempty"`
  1984. Gateway string `json:"gateway,omitempty"`
  1985. Id string `json:"id,omitempty"`
  1986. Ip6address string `json:"ip6address,omitempty"`
  1987. Ip6cidr string `json:"ip6cidr,omitempty"`
  1988. Ip6gateway string `json:"ip6gateway,omitempty"`
  1989. Ipaddress string `json:"ipaddress,omitempty"`
  1990. Isdefault bool `json:"isdefault,omitempty"`
  1991. Isolationuri string `json:"isolationuri,omitempty"`
  1992. Macaddress string `json:"macaddress,omitempty"`
  1993. Netmask string `json:"netmask,omitempty"`
  1994. Networkid string `json:"networkid,omitempty"`
  1995. Networkname string `json:"networkname,omitempty"`
  1996. Secondaryip []struct {
  1997. Id string `json:"id,omitempty"`
  1998. Ipaddress string `json:"ipaddress,omitempty"`
  1999. } `json:"secondaryip,omitempty"`
  2000. Traffictype string `json:"traffictype,omitempty"`
  2001. Type string `json:"type,omitempty"`
  2002. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  2003. } `json:"nic,omitempty"`
  2004. Ostypeid int64 `json:"ostypeid,omitempty"`
  2005. Password string `json:"password,omitempty"`
  2006. Passwordenabled bool `json:"passwordenabled,omitempty"`
  2007. Project string `json:"project,omitempty"`
  2008. Projectid string `json:"projectid,omitempty"`
  2009. Publicip string `json:"publicip,omitempty"`
  2010. Publicipid string `json:"publicipid,omitempty"`
  2011. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  2012. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  2013. Securitygroup []struct {
  2014. Account string `json:"account,omitempty"`
  2015. Description string `json:"description,omitempty"`
  2016. Domain string `json:"domain,omitempty"`
  2017. Domainid string `json:"domainid,omitempty"`
  2018. Egressrule []struct {
  2019. Account string `json:"account,omitempty"`
  2020. Cidr string `json:"cidr,omitempty"`
  2021. Endport int `json:"endport,omitempty"`
  2022. Icmpcode int `json:"icmpcode,omitempty"`
  2023. Icmptype int `json:"icmptype,omitempty"`
  2024. Protocol string `json:"protocol,omitempty"`
  2025. Ruleid string `json:"ruleid,omitempty"`
  2026. Securitygroupname string `json:"securitygroupname,omitempty"`
  2027. Startport int `json:"startport,omitempty"`
  2028. Tags []struct {
  2029. Account string `json:"account,omitempty"`
  2030. Customer string `json:"customer,omitempty"`
  2031. Domain string `json:"domain,omitempty"`
  2032. Domainid string `json:"domainid,omitempty"`
  2033. Key string `json:"key,omitempty"`
  2034. Project string `json:"project,omitempty"`
  2035. Projectid string `json:"projectid,omitempty"`
  2036. Resourceid string `json:"resourceid,omitempty"`
  2037. Resourcetype string `json:"resourcetype,omitempty"`
  2038. Value string `json:"value,omitempty"`
  2039. } `json:"tags,omitempty"`
  2040. } `json:"egressrule,omitempty"`
  2041. Id string `json:"id,omitempty"`
  2042. Ingressrule []struct {
  2043. Account string `json:"account,omitempty"`
  2044. Cidr string `json:"cidr,omitempty"`
  2045. Endport int `json:"endport,omitempty"`
  2046. Icmpcode int `json:"icmpcode,omitempty"`
  2047. Icmptype int `json:"icmptype,omitempty"`
  2048. Protocol string `json:"protocol,omitempty"`
  2049. Ruleid string `json:"ruleid,omitempty"`
  2050. Securitygroupname string `json:"securitygroupname,omitempty"`
  2051. Startport int `json:"startport,omitempty"`
  2052. Tags []struct {
  2053. Account string `json:"account,omitempty"`
  2054. Customer string `json:"customer,omitempty"`
  2055. Domain string `json:"domain,omitempty"`
  2056. Domainid string `json:"domainid,omitempty"`
  2057. Key string `json:"key,omitempty"`
  2058. Project string `json:"project,omitempty"`
  2059. Projectid string `json:"projectid,omitempty"`
  2060. Resourceid string `json:"resourceid,omitempty"`
  2061. Resourcetype string `json:"resourcetype,omitempty"`
  2062. Value string `json:"value,omitempty"`
  2063. } `json:"tags,omitempty"`
  2064. } `json:"ingressrule,omitempty"`
  2065. Name string `json:"name,omitempty"`
  2066. Project string `json:"project,omitempty"`
  2067. Projectid string `json:"projectid,omitempty"`
  2068. Tags []struct {
  2069. Account string `json:"account,omitempty"`
  2070. Customer string `json:"customer,omitempty"`
  2071. Domain string `json:"domain,omitempty"`
  2072. Domainid string `json:"domainid,omitempty"`
  2073. Key string `json:"key,omitempty"`
  2074. Project string `json:"project,omitempty"`
  2075. Projectid string `json:"projectid,omitempty"`
  2076. Resourceid string `json:"resourceid,omitempty"`
  2077. Resourcetype string `json:"resourcetype,omitempty"`
  2078. Value string `json:"value,omitempty"`
  2079. } `json:"tags,omitempty"`
  2080. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  2081. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  2082. } `json:"securitygroup,omitempty"`
  2083. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  2084. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  2085. Servicestate string `json:"servicestate,omitempty"`
  2086. State string `json:"state,omitempty"`
  2087. Tags []struct {
  2088. Account string `json:"account,omitempty"`
  2089. Customer string `json:"customer,omitempty"`
  2090. Domain string `json:"domain,omitempty"`
  2091. Domainid string `json:"domainid,omitempty"`
  2092. Key string `json:"key,omitempty"`
  2093. Project string `json:"project,omitempty"`
  2094. Projectid string `json:"projectid,omitempty"`
  2095. Resourceid string `json:"resourceid,omitempty"`
  2096. Resourcetype string `json:"resourcetype,omitempty"`
  2097. Value string `json:"value,omitempty"`
  2098. } `json:"tags,omitempty"`
  2099. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  2100. Templateid string `json:"templateid,omitempty"`
  2101. Templatename string `json:"templatename,omitempty"`
  2102. Userid string `json:"userid,omitempty"`
  2103. Username string `json:"username,omitempty"`
  2104. Vgpu string `json:"vgpu,omitempty"`
  2105. Zoneid string `json:"zoneid,omitempty"`
  2106. Zonename string `json:"zonename,omitempty"`
  2107. }
  2108. type ListVirtualMachinesParams struct {
  2109. p map[string]interface{}
  2110. }
  2111. func (p *ListVirtualMachinesParams) toURLValues() url.Values {
  2112. u := url.Values{}
  2113. if p.p == nil {
  2114. return u
  2115. }
  2116. if v, found := p.p["account"]; found {
  2117. u.Set("account", v.(string))
  2118. }
  2119. if v, found := p.p["affinitygroupid"]; found {
  2120. u.Set("affinitygroupid", v.(string))
  2121. }
  2122. if v, found := p.p["details"]; found {
  2123. vv := strings.Join(v.([]string), ",")
  2124. u.Set("details", vv)
  2125. }
  2126. if v, found := p.p["displayvm"]; found {
  2127. vv := strconv.FormatBool(v.(bool))
  2128. u.Set("displayvm", vv)
  2129. }
  2130. if v, found := p.p["domainid"]; found {
  2131. u.Set("domainid", v.(string))
  2132. }
  2133. if v, found := p.p["forvirtualnetwork"]; found {
  2134. vv := strconv.FormatBool(v.(bool))
  2135. u.Set("forvirtualnetwork", vv)
  2136. }
  2137. if v, found := p.p["groupid"]; found {
  2138. u.Set("groupid", v.(string))
  2139. }
  2140. if v, found := p.p["hostid"]; found {
  2141. u.Set("hostid", v.(string))
  2142. }
  2143. if v, found := p.p["hostid"]; found {
  2144. u.Set("hostid", v.(string))
  2145. }
  2146. if v, found := p.p["hypervisor"]; found {
  2147. u.Set("hypervisor", v.(string))
  2148. }
  2149. if v, found := p.p["id"]; found {
  2150. u.Set("id", v.(string))
  2151. }
  2152. if v, found := p.p["ids"]; found {
  2153. vv := strings.Join(v.([]string), ",")
  2154. u.Set("ids", vv)
  2155. }
  2156. if v, found := p.p["isoid"]; found {
  2157. u.Set("isoid", v.(string))
  2158. }
  2159. if v, found := p.p["isrecursive"]; found {
  2160. vv := strconv.FormatBool(v.(bool))
  2161. u.Set("isrecursive", vv)
  2162. }
  2163. if v, found := p.p["keypair"]; found {
  2164. u.Set("keypair", v.(string))
  2165. }
  2166. if v, found := p.p["keyword"]; found {
  2167. u.Set("keyword", v.(string))
  2168. }
  2169. if v, found := p.p["listall"]; found {
  2170. vv := strconv.FormatBool(v.(bool))
  2171. u.Set("listall", vv)
  2172. }
  2173. if v, found := p.p["name"]; found {
  2174. u.Set("name", v.(string))
  2175. }
  2176. if v, found := p.p["networkid"]; found {
  2177. u.Set("networkid", v.(string))
  2178. }
  2179. if v, found := p.p["page"]; found {
  2180. vv := strconv.Itoa(v.(int))
  2181. u.Set("page", vv)
  2182. }
  2183. if v, found := p.p["pagesize"]; found {
  2184. vv := strconv.Itoa(v.(int))
  2185. u.Set("pagesize", vv)
  2186. }
  2187. if v, found := p.p["podid"]; found {
  2188. u.Set("podid", v.(string))
  2189. }
  2190. if v, found := p.p["podid"]; found {
  2191. u.Set("podid", v.(string))
  2192. }
  2193. if v, found := p.p["projectid"]; found {
  2194. u.Set("projectid", v.(string))
  2195. }
  2196. if v, found := p.p["serviceofferingid"]; found {
  2197. u.Set("serviceofferingid", v.(string))
  2198. }
  2199. if v, found := p.p["state"]; found {
  2200. u.Set("state", v.(string))
  2201. }
  2202. if v, found := p.p["storageid"]; found {
  2203. u.Set("storageid", v.(string))
  2204. }
  2205. if v, found := p.p["storageid"]; found {
  2206. u.Set("storageid", v.(string))
  2207. }
  2208. if v, found := p.p["tags"]; found {
  2209. i := 0
  2210. for k, vv := range v.(map[string]string) {
  2211. u.Set(fmt.Sprintf("tags[%d].key", i), k)
  2212. u.Set(fmt.Sprintf("tags[%d].value", i), vv)
  2213. i++
  2214. }
  2215. }
  2216. if v, found := p.p["templateid"]; found {
  2217. u.Set("templateid", v.(string))
  2218. }
  2219. if v, found := p.p["userid"]; found {
  2220. u.Set("userid", v.(string))
  2221. }
  2222. if v, found := p.p["vpcid"]; found {
  2223. u.Set("vpcid", v.(string))
  2224. }
  2225. if v, found := p.p["zoneid"]; found {
  2226. u.Set("zoneid", v.(string))
  2227. }
  2228. return u
  2229. }
  2230. func (p *ListVirtualMachinesParams) SetAccount(v string) {
  2231. if p.p == nil {
  2232. p.p = make(map[string]interface{})
  2233. }
  2234. p.p["account"] = v
  2235. return
  2236. }
  2237. func (p *ListVirtualMachinesParams) SetAffinitygroupid(v string) {
  2238. if p.p == nil {
  2239. p.p = make(map[string]interface{})
  2240. }
  2241. p.p["affinitygroupid"] = v
  2242. return
  2243. }
  2244. func (p *ListVirtualMachinesParams) SetDetails(v []string) {
  2245. if p.p == nil {
  2246. p.p = make(map[string]interface{})
  2247. }
  2248. p.p["details"] = v
  2249. return
  2250. }
  2251. func (p *ListVirtualMachinesParams) SetDisplayvm(v bool) {
  2252. if p.p == nil {
  2253. p.p = make(map[string]interface{})
  2254. }
  2255. p.p["displayvm"] = v
  2256. return
  2257. }
  2258. func (p *ListVirtualMachinesParams) SetDomainid(v string) {
  2259. if p.p == nil {
  2260. p.p = make(map[string]interface{})
  2261. }
  2262. p.p["domainid"] = v
  2263. return
  2264. }
  2265. func (p *ListVirtualMachinesParams) SetForvirtualnetwork(v bool) {
  2266. if p.p == nil {
  2267. p.p = make(map[string]interface{})
  2268. }
  2269. p.p["forvirtualnetwork"] = v
  2270. return
  2271. }
  2272. func (p *ListVirtualMachinesParams) SetGroupid(v string) {
  2273. if p.p == nil {
  2274. p.p = make(map[string]interface{})
  2275. }
  2276. p.p["groupid"] = v
  2277. return
  2278. }
  2279. func (p *ListVirtualMachinesParams) SetHostid(v string) {
  2280. if p.p == nil {
  2281. p.p = make(map[string]interface{})
  2282. }
  2283. p.p["hostid"] = v
  2284. return
  2285. }
  2286. func (p *ListVirtualMachinesParams) SetHypervisor(v string) {
  2287. if p.p == nil {
  2288. p.p = make(map[string]interface{})
  2289. }
  2290. p.p["hypervisor"] = v
  2291. return
  2292. }
  2293. func (p *ListVirtualMachinesParams) SetId(v string) {
  2294. if p.p == nil {
  2295. p.p = make(map[string]interface{})
  2296. }
  2297. p.p["id"] = v
  2298. return
  2299. }
  2300. func (p *ListVirtualMachinesParams) SetIds(v []string) {
  2301. if p.p == nil {
  2302. p.p = make(map[string]interface{})
  2303. }
  2304. p.p["ids"] = v
  2305. return
  2306. }
  2307. func (p *ListVirtualMachinesParams) SetIsoid(v string) {
  2308. if p.p == nil {
  2309. p.p = make(map[string]interface{})
  2310. }
  2311. p.p["isoid"] = v
  2312. return
  2313. }
  2314. func (p *ListVirtualMachinesParams) SetIsrecursive(v bool) {
  2315. if p.p == nil {
  2316. p.p = make(map[string]interface{})
  2317. }
  2318. p.p["isrecursive"] = v
  2319. return
  2320. }
  2321. func (p *ListVirtualMachinesParams) SetKeypair(v string) {
  2322. if p.p == nil {
  2323. p.p = make(map[string]interface{})
  2324. }
  2325. p.p["keypair"] = v
  2326. return
  2327. }
  2328. func (p *ListVirtualMachinesParams) SetKeyword(v string) {
  2329. if p.p == nil {
  2330. p.p = make(map[string]interface{})
  2331. }
  2332. p.p["keyword"] = v
  2333. return
  2334. }
  2335. func (p *ListVirtualMachinesParams) SetListall(v bool) {
  2336. if p.p == nil {
  2337. p.p = make(map[string]interface{})
  2338. }
  2339. p.p["listall"] = v
  2340. return
  2341. }
  2342. func (p *ListVirtualMachinesParams) SetName(v string) {
  2343. if p.p == nil {
  2344. p.p = make(map[string]interface{})
  2345. }
  2346. p.p["name"] = v
  2347. return
  2348. }
  2349. func (p *ListVirtualMachinesParams) SetNetworkid(v string) {
  2350. if p.p == nil {
  2351. p.p = make(map[string]interface{})
  2352. }
  2353. p.p["networkid"] = v
  2354. return
  2355. }
  2356. func (p *ListVirtualMachinesParams) SetPage(v int) {
  2357. if p.p == nil {
  2358. p.p = make(map[string]interface{})
  2359. }
  2360. p.p["page"] = v
  2361. return
  2362. }
  2363. func (p *ListVirtualMachinesParams) SetPagesize(v int) {
  2364. if p.p == nil {
  2365. p.p = make(map[string]interface{})
  2366. }
  2367. p.p["pagesize"] = v
  2368. return
  2369. }
  2370. func (p *ListVirtualMachinesParams) SetPodid(v string) {
  2371. if p.p == nil {
  2372. p.p = make(map[string]interface{})
  2373. }
  2374. p.p["podid"] = v
  2375. return
  2376. }
  2377. func (p *ListVirtualMachinesParams) SetProjectid(v string) {
  2378. if p.p == nil {
  2379. p.p = make(map[string]interface{})
  2380. }
  2381. p.p["projectid"] = v
  2382. return
  2383. }
  2384. func (p *ListVirtualMachinesParams) SetServiceofferingid(v string) {
  2385. if p.p == nil {
  2386. p.p = make(map[string]interface{})
  2387. }
  2388. p.p["serviceofferingid"] = v
  2389. return
  2390. }
  2391. func (p *ListVirtualMachinesParams) SetState(v string) {
  2392. if p.p == nil {
  2393. p.p = make(map[string]interface{})
  2394. }
  2395. p.p["state"] = v
  2396. return
  2397. }
  2398. func (p *ListVirtualMachinesParams) SetStorageid(v string) {
  2399. if p.p == nil {
  2400. p.p = make(map[string]interface{})
  2401. }
  2402. p.p["storageid"] = v
  2403. return
  2404. }
  2405. func (p *ListVirtualMachinesParams) SetTags(v map[string]string) {
  2406. if p.p == nil {
  2407. p.p = make(map[string]interface{})
  2408. }
  2409. p.p["tags"] = v
  2410. return
  2411. }
  2412. func (p *ListVirtualMachinesParams) SetTemplateid(v string) {
  2413. if p.p == nil {
  2414. p.p = make(map[string]interface{})
  2415. }
  2416. p.p["templateid"] = v
  2417. return
  2418. }
  2419. func (p *ListVirtualMachinesParams) SetUserid(v string) {
  2420. if p.p == nil {
  2421. p.p = make(map[string]interface{})
  2422. }
  2423. p.p["userid"] = v
  2424. return
  2425. }
  2426. func (p *ListVirtualMachinesParams) SetVpcid(v string) {
  2427. if p.p == nil {
  2428. p.p = make(map[string]interface{})
  2429. }
  2430. p.p["vpcid"] = v
  2431. return
  2432. }
  2433. func (p *ListVirtualMachinesParams) SetZoneid(v string) {
  2434. if p.p == nil {
  2435. p.p = make(map[string]interface{})
  2436. }
  2437. p.p["zoneid"] = v
  2438. return
  2439. }
  2440. // You should always use this function to get a new ListVirtualMachinesParams instance,
  2441. // as then you are sure you have configured all required params
  2442. func (s *VirtualMachineService) NewListVirtualMachinesParams() *ListVirtualMachinesParams {
  2443. p := &ListVirtualMachinesParams{}
  2444. p.p = make(map[string]interface{})
  2445. return p
  2446. }
  2447. // This is a courtesy helper function, which in some cases may not work as expected!
  2448. func (s *VirtualMachineService) GetVirtualMachineID(name string, opts ...OptionFunc) (string, int, error) {
  2449. p := &ListVirtualMachinesParams{}
  2450. p.p = make(map[string]interface{})
  2451. p.p["name"] = name
  2452. for _, fn := range opts {
  2453. if err := fn(s.cs, p); err != nil {
  2454. return "", -1, err
  2455. }
  2456. }
  2457. l, err := s.ListVirtualMachines(p)
  2458. if err != nil {
  2459. return "", -1, err
  2460. }
  2461. if l.Count == 0 {
  2462. return "", l.Count, fmt.Errorf("No match found for %s: %+v", name, l)
  2463. }
  2464. if l.Count == 1 {
  2465. return l.VirtualMachines[0].Id, l.Count, nil
  2466. }
  2467. if l.Count > 1 {
  2468. for _, v := range l.VirtualMachines {
  2469. if v.Name == name {
  2470. return v.Id, l.Count, nil
  2471. }
  2472. }
  2473. }
  2474. return "", l.Count, fmt.Errorf("Could not find an exact match for %s: %+v", name, l)
  2475. }
  2476. // This is a courtesy helper function, which in some cases may not work as expected!
  2477. func (s *VirtualMachineService) GetVirtualMachineByName(name string, opts ...OptionFunc) (*VirtualMachine, int, error) {
  2478. id, count, err := s.GetVirtualMachineID(name, opts...)
  2479. if err != nil {
  2480. return nil, count, err
  2481. }
  2482. r, count, err := s.GetVirtualMachineByID(id, opts...)
  2483. if err != nil {
  2484. return nil, count, err
  2485. }
  2486. return r, count, nil
  2487. }
  2488. // This is a courtesy helper function, which in some cases may not work as expected!
  2489. func (s *VirtualMachineService) GetVirtualMachineByID(id string, opts ...OptionFunc) (*VirtualMachine, int, error) {
  2490. p := &ListVirtualMachinesParams{}
  2491. p.p = make(map[string]interface{})
  2492. p.p["id"] = id
  2493. for _, fn := range opts {
  2494. if err := fn(s.cs, p); err != nil {
  2495. return nil, -1, err
  2496. }
  2497. }
  2498. l, err := s.ListVirtualMachines(p)
  2499. if err != nil {
  2500. if strings.Contains(err.Error(), fmt.Sprintf(
  2501. "Invalid parameter id value=%s due to incorrect long value format, "+
  2502. "or entity does not exist", id)) {
  2503. return nil, 0, fmt.Errorf("No match found for %s: %+v", id, l)
  2504. }
  2505. return nil, -1, err
  2506. }
  2507. if l.Count == 0 {
  2508. return nil, l.Count, fmt.Errorf("No match found for %s: %+v", id, l)
  2509. }
  2510. if l.Count == 1 {
  2511. return l.VirtualMachines[0], l.Count, nil
  2512. }
  2513. return nil, l.Count, fmt.Errorf("There is more then one result for VirtualMachine UUID: %s!", id)
  2514. }
  2515. // List the virtual machines owned by the account.
  2516. func (s *VirtualMachineService) ListVirtualMachines(p *ListVirtualMachinesParams) (*ListVirtualMachinesResponse, error) {
  2517. resp, err := s.cs.newRequest("listVirtualMachines", p.toURLValues())
  2518. if err != nil {
  2519. return nil, err
  2520. }
  2521. var r ListVirtualMachinesResponse
  2522. if err := json.Unmarshal(resp, &r); err != nil {
  2523. return nil, err
  2524. }
  2525. return &r, nil
  2526. }
  2527. type ListVirtualMachinesResponse struct {
  2528. Count int `json:"count"`
  2529. VirtualMachines []*VirtualMachine `json:"virtualmachine"`
  2530. }
  2531. type VirtualMachine struct {
  2532. Account string `json:"account,omitempty"`
  2533. Affinitygroup []struct {
  2534. Account string `json:"account,omitempty"`
  2535. Description string `json:"description,omitempty"`
  2536. Domain string `json:"domain,omitempty"`
  2537. Domainid string `json:"domainid,omitempty"`
  2538. Id string `json:"id,omitempty"`
  2539. Name string `json:"name,omitempty"`
  2540. Project string `json:"project,omitempty"`
  2541. Projectid string `json:"projectid,omitempty"`
  2542. Type string `json:"type,omitempty"`
  2543. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  2544. } `json:"affinitygroup,omitempty"`
  2545. Cpunumber int `json:"cpunumber,omitempty"`
  2546. Cpuspeed int `json:"cpuspeed,omitempty"`
  2547. Cpuused string `json:"cpuused,omitempty"`
  2548. Created string `json:"created,omitempty"`
  2549. Details map[string]string `json:"details,omitempty"`
  2550. Diskioread int64 `json:"diskioread,omitempty"`
  2551. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  2552. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  2553. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  2554. Diskofferingid string `json:"diskofferingid,omitempty"`
  2555. Diskofferingname string `json:"diskofferingname,omitempty"`
  2556. Displayname string `json:"displayname,omitempty"`
  2557. Displayvm bool `json:"displayvm,omitempty"`
  2558. Domain string `json:"domain,omitempty"`
  2559. Domainid string `json:"domainid,omitempty"`
  2560. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  2561. Group string `json:"group,omitempty"`
  2562. Groupid string `json:"groupid,omitempty"`
  2563. Guestosid string `json:"guestosid,omitempty"`
  2564. Haenable bool `json:"haenable,omitempty"`
  2565. Hostid string `json:"hostid,omitempty"`
  2566. Hostname string `json:"hostname,omitempty"`
  2567. Hypervisor string `json:"hypervisor,omitempty"`
  2568. Id string `json:"id,omitempty"`
  2569. Instancename string `json:"instancename,omitempty"`
  2570. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  2571. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  2572. Isoid string `json:"isoid,omitempty"`
  2573. Isoname string `json:"isoname,omitempty"`
  2574. Keypair string `json:"keypair,omitempty"`
  2575. Memory int `json:"memory,omitempty"`
  2576. Name string `json:"name,omitempty"`
  2577. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  2578. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  2579. Nic []struct {
  2580. Broadcasturi string `json:"broadcasturi,omitempty"`
  2581. Deviceid string `json:"deviceid,omitempty"`
  2582. Gateway string `json:"gateway,omitempty"`
  2583. Id string `json:"id,omitempty"`
  2584. Ip6address string `json:"ip6address,omitempty"`
  2585. Ip6cidr string `json:"ip6cidr,omitempty"`
  2586. Ip6gateway string `json:"ip6gateway,omitempty"`
  2587. Ipaddress string `json:"ipaddress,omitempty"`
  2588. Isdefault bool `json:"isdefault,omitempty"`
  2589. Isolationuri string `json:"isolationuri,omitempty"`
  2590. Macaddress string `json:"macaddress,omitempty"`
  2591. Netmask string `json:"netmask,omitempty"`
  2592. Networkid string `json:"networkid,omitempty"`
  2593. Networkname string `json:"networkname,omitempty"`
  2594. Secondaryip []struct {
  2595. Id string `json:"id,omitempty"`
  2596. Ipaddress string `json:"ipaddress,omitempty"`
  2597. } `json:"secondaryip,omitempty"`
  2598. Traffictype string `json:"traffictype,omitempty"`
  2599. Type string `json:"type,omitempty"`
  2600. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  2601. } `json:"nic,omitempty"`
  2602. Ostypeid int64 `json:"ostypeid,omitempty"`
  2603. Password string `json:"password,omitempty"`
  2604. Passwordenabled bool `json:"passwordenabled,omitempty"`
  2605. Project string `json:"project,omitempty"`
  2606. Projectid string `json:"projectid,omitempty"`
  2607. Publicip string `json:"publicip,omitempty"`
  2608. Publicipid string `json:"publicipid,omitempty"`
  2609. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  2610. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  2611. Securitygroup []struct {
  2612. Account string `json:"account,omitempty"`
  2613. Description string `json:"description,omitempty"`
  2614. Domain string `json:"domain,omitempty"`
  2615. Domainid string `json:"domainid,omitempty"`
  2616. Egressrule []struct {
  2617. Account string `json:"account,omitempty"`
  2618. Cidr string `json:"cidr,omitempty"`
  2619. Endport int `json:"endport,omitempty"`
  2620. Icmpcode int `json:"icmpcode,omitempty"`
  2621. Icmptype int `json:"icmptype,omitempty"`
  2622. Protocol string `json:"protocol,omitempty"`
  2623. Ruleid string `json:"ruleid,omitempty"`
  2624. Securitygroupname string `json:"securitygroupname,omitempty"`
  2625. Startport int `json:"startport,omitempty"`
  2626. Tags []struct {
  2627. Account string `json:"account,omitempty"`
  2628. Customer string `json:"customer,omitempty"`
  2629. Domain string `json:"domain,omitempty"`
  2630. Domainid string `json:"domainid,omitempty"`
  2631. Key string `json:"key,omitempty"`
  2632. Project string `json:"project,omitempty"`
  2633. Projectid string `json:"projectid,omitempty"`
  2634. Resourceid string `json:"resourceid,omitempty"`
  2635. Resourcetype string `json:"resourcetype,omitempty"`
  2636. Value string `json:"value,omitempty"`
  2637. } `json:"tags,omitempty"`
  2638. } `json:"egressrule,omitempty"`
  2639. Id string `json:"id,omitempty"`
  2640. Ingressrule []struct {
  2641. Account string `json:"account,omitempty"`
  2642. Cidr string `json:"cidr,omitempty"`
  2643. Endport int `json:"endport,omitempty"`
  2644. Icmpcode int `json:"icmpcode,omitempty"`
  2645. Icmptype int `json:"icmptype,omitempty"`
  2646. Protocol string `json:"protocol,omitempty"`
  2647. Ruleid string `json:"ruleid,omitempty"`
  2648. Securitygroupname string `json:"securitygroupname,omitempty"`
  2649. Startport int `json:"startport,omitempty"`
  2650. Tags []struct {
  2651. Account string `json:"account,omitempty"`
  2652. Customer string `json:"customer,omitempty"`
  2653. Domain string `json:"domain,omitempty"`
  2654. Domainid string `json:"domainid,omitempty"`
  2655. Key string `json:"key,omitempty"`
  2656. Project string `json:"project,omitempty"`
  2657. Projectid string `json:"projectid,omitempty"`
  2658. Resourceid string `json:"resourceid,omitempty"`
  2659. Resourcetype string `json:"resourcetype,omitempty"`
  2660. Value string `json:"value,omitempty"`
  2661. } `json:"tags,omitempty"`
  2662. } `json:"ingressrule,omitempty"`
  2663. Name string `json:"name,omitempty"`
  2664. Project string `json:"project,omitempty"`
  2665. Projectid string `json:"projectid,omitempty"`
  2666. Tags []struct {
  2667. Account string `json:"account,omitempty"`
  2668. Customer string `json:"customer,omitempty"`
  2669. Domain string `json:"domain,omitempty"`
  2670. Domainid string `json:"domainid,omitempty"`
  2671. Key string `json:"key,omitempty"`
  2672. Project string `json:"project,omitempty"`
  2673. Projectid string `json:"projectid,omitempty"`
  2674. Resourceid string `json:"resourceid,omitempty"`
  2675. Resourcetype string `json:"resourcetype,omitempty"`
  2676. Value string `json:"value,omitempty"`
  2677. } `json:"tags,omitempty"`
  2678. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  2679. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  2680. } `json:"securitygroup,omitempty"`
  2681. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  2682. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  2683. Servicestate string `json:"servicestate,omitempty"`
  2684. State string `json:"state,omitempty"`
  2685. Tags []struct {
  2686. Account string `json:"account,omitempty"`
  2687. Customer string `json:"customer,omitempty"`
  2688. Domain string `json:"domain,omitempty"`
  2689. Domainid string `json:"domainid,omitempty"`
  2690. Key string `json:"key,omitempty"`
  2691. Project string `json:"project,omitempty"`
  2692. Projectid string `json:"projectid,omitempty"`
  2693. Resourceid string `json:"resourceid,omitempty"`
  2694. Resourcetype string `json:"resourcetype,omitempty"`
  2695. Value string `json:"value,omitempty"`
  2696. } `json:"tags,omitempty"`
  2697. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  2698. Templateid string `json:"templateid,omitempty"`
  2699. Templatename string `json:"templatename,omitempty"`
  2700. Userid string `json:"userid,omitempty"`
  2701. Username string `json:"username,omitempty"`
  2702. Vgpu string `json:"vgpu,omitempty"`
  2703. Zoneid string `json:"zoneid,omitempty"`
  2704. Zonename string `json:"zonename,omitempty"`
  2705. }
  2706. type GetVMPasswordParams struct {
  2707. p map[string]interface{}
  2708. }
  2709. func (p *GetVMPasswordParams) toURLValues() url.Values {
  2710. u := url.Values{}
  2711. if p.p == nil {
  2712. return u
  2713. }
  2714. if v, found := p.p["id"]; found {
  2715. u.Set("id", v.(string))
  2716. }
  2717. return u
  2718. }
  2719. func (p *GetVMPasswordParams) SetId(v string) {
  2720. if p.p == nil {
  2721. p.p = make(map[string]interface{})
  2722. }
  2723. p.p["id"] = v
  2724. return
  2725. }
  2726. // You should always use this function to get a new GetVMPasswordParams instance,
  2727. // as then you are sure you have configured all required params
  2728. func (s *VirtualMachineService) NewGetVMPasswordParams(id string) *GetVMPasswordParams {
  2729. p := &GetVMPasswordParams{}
  2730. p.p = make(map[string]interface{})
  2731. p.p["id"] = id
  2732. return p
  2733. }
  2734. // Returns an encrypted password for the VM
  2735. func (s *VirtualMachineService) GetVMPassword(p *GetVMPasswordParams) (*GetVMPasswordResponse, error) {
  2736. resp, err := s.cs.newRequest("getVMPassword", p.toURLValues())
  2737. if err != nil {
  2738. return nil, err
  2739. }
  2740. var r GetVMPasswordResponse
  2741. if err := json.Unmarshal(resp, &r); err != nil {
  2742. return nil, err
  2743. }
  2744. return &r, nil
  2745. }
  2746. type GetVMPasswordResponse struct {
  2747. Encryptedpassword string `json:"encryptedpassword,omitempty"`
  2748. }
  2749. type RestoreVirtualMachineParams struct {
  2750. p map[string]interface{}
  2751. }
  2752. func (p *RestoreVirtualMachineParams) toURLValues() url.Values {
  2753. u := url.Values{}
  2754. if p.p == nil {
  2755. return u
  2756. }
  2757. if v, found := p.p["templateid"]; found {
  2758. u.Set("templateid", v.(string))
  2759. }
  2760. if v, found := p.p["virtualmachineid"]; found {
  2761. u.Set("virtualmachineid", v.(string))
  2762. }
  2763. return u
  2764. }
  2765. func (p *RestoreVirtualMachineParams) SetTemplateid(v string) {
  2766. if p.p == nil {
  2767. p.p = make(map[string]interface{})
  2768. }
  2769. p.p["templateid"] = v
  2770. return
  2771. }
  2772. func (p *RestoreVirtualMachineParams) SetVirtualmachineid(v string) {
  2773. if p.p == nil {
  2774. p.p = make(map[string]interface{})
  2775. }
  2776. p.p["virtualmachineid"] = v
  2777. return
  2778. }
  2779. // You should always use this function to get a new RestoreVirtualMachineParams instance,
  2780. // as then you are sure you have configured all required params
  2781. func (s *VirtualMachineService) NewRestoreVirtualMachineParams(virtualmachineid string) *RestoreVirtualMachineParams {
  2782. p := &RestoreVirtualMachineParams{}
  2783. p.p = make(map[string]interface{})
  2784. p.p["virtualmachineid"] = virtualmachineid
  2785. return p
  2786. }
  2787. // Restore a VM to original template/ISO or new template/ISO
  2788. func (s *VirtualMachineService) RestoreVirtualMachine(p *RestoreVirtualMachineParams) (*RestoreVirtualMachineResponse, error) {
  2789. resp, err := s.cs.newRequest("restoreVirtualMachine", p.toURLValues())
  2790. if err != nil {
  2791. return nil, err
  2792. }
  2793. var r RestoreVirtualMachineResponse
  2794. if err := json.Unmarshal(resp, &r); err != nil {
  2795. return nil, err
  2796. }
  2797. // If we have a async client, we need to wait for the async result
  2798. if s.cs.async {
  2799. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  2800. if err != nil {
  2801. if err == AsyncTimeoutErr {
  2802. return &r, err
  2803. }
  2804. return nil, err
  2805. }
  2806. b, err = getRawValue(b)
  2807. if err != nil {
  2808. return nil, err
  2809. }
  2810. if err := json.Unmarshal(b, &r); err != nil {
  2811. return nil, err
  2812. }
  2813. }
  2814. return &r, nil
  2815. }
  2816. type RestoreVirtualMachineResponse struct {
  2817. JobID string `json:"jobid,omitempty"`
  2818. Account string `json:"account,omitempty"`
  2819. Affinitygroup []struct {
  2820. Account string `json:"account,omitempty"`
  2821. Description string `json:"description,omitempty"`
  2822. Domain string `json:"domain,omitempty"`
  2823. Domainid string `json:"domainid,omitempty"`
  2824. Id string `json:"id,omitempty"`
  2825. Name string `json:"name,omitempty"`
  2826. Project string `json:"project,omitempty"`
  2827. Projectid string `json:"projectid,omitempty"`
  2828. Type string `json:"type,omitempty"`
  2829. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  2830. } `json:"affinitygroup,omitempty"`
  2831. Cpunumber int `json:"cpunumber,omitempty"`
  2832. Cpuspeed int `json:"cpuspeed,omitempty"`
  2833. Cpuused string `json:"cpuused,omitempty"`
  2834. Created string `json:"created,omitempty"`
  2835. Details map[string]string `json:"details,omitempty"`
  2836. Diskioread int64 `json:"diskioread,omitempty"`
  2837. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  2838. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  2839. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  2840. Diskofferingid string `json:"diskofferingid,omitempty"`
  2841. Diskofferingname string `json:"diskofferingname,omitempty"`
  2842. Displayname string `json:"displayname,omitempty"`
  2843. Displayvm bool `json:"displayvm,omitempty"`
  2844. Domain string `json:"domain,omitempty"`
  2845. Domainid string `json:"domainid,omitempty"`
  2846. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  2847. Group string `json:"group,omitempty"`
  2848. Groupid string `json:"groupid,omitempty"`
  2849. Guestosid string `json:"guestosid,omitempty"`
  2850. Haenable bool `json:"haenable,omitempty"`
  2851. Hostid string `json:"hostid,omitempty"`
  2852. Hostname string `json:"hostname,omitempty"`
  2853. Hypervisor string `json:"hypervisor,omitempty"`
  2854. Id string `json:"id,omitempty"`
  2855. Instancename string `json:"instancename,omitempty"`
  2856. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  2857. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  2858. Isoid string `json:"isoid,omitempty"`
  2859. Isoname string `json:"isoname,omitempty"`
  2860. Keypair string `json:"keypair,omitempty"`
  2861. Memory int `json:"memory,omitempty"`
  2862. Name string `json:"name,omitempty"`
  2863. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  2864. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  2865. Nic []struct {
  2866. Broadcasturi string `json:"broadcasturi,omitempty"`
  2867. Deviceid string `json:"deviceid,omitempty"`
  2868. Gateway string `json:"gateway,omitempty"`
  2869. Id string `json:"id,omitempty"`
  2870. Ip6address string `json:"ip6address,omitempty"`
  2871. Ip6cidr string `json:"ip6cidr,omitempty"`
  2872. Ip6gateway string `json:"ip6gateway,omitempty"`
  2873. Ipaddress string `json:"ipaddress,omitempty"`
  2874. Isdefault bool `json:"isdefault,omitempty"`
  2875. Isolationuri string `json:"isolationuri,omitempty"`
  2876. Macaddress string `json:"macaddress,omitempty"`
  2877. Netmask string `json:"netmask,omitempty"`
  2878. Networkid string `json:"networkid,omitempty"`
  2879. Networkname string `json:"networkname,omitempty"`
  2880. Secondaryip []struct {
  2881. Id string `json:"id,omitempty"`
  2882. Ipaddress string `json:"ipaddress,omitempty"`
  2883. } `json:"secondaryip,omitempty"`
  2884. Traffictype string `json:"traffictype,omitempty"`
  2885. Type string `json:"type,omitempty"`
  2886. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  2887. } `json:"nic,omitempty"`
  2888. Ostypeid int64 `json:"ostypeid,omitempty"`
  2889. Password string `json:"password,omitempty"`
  2890. Passwordenabled bool `json:"passwordenabled,omitempty"`
  2891. Project string `json:"project,omitempty"`
  2892. Projectid string `json:"projectid,omitempty"`
  2893. Publicip string `json:"publicip,omitempty"`
  2894. Publicipid string `json:"publicipid,omitempty"`
  2895. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  2896. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  2897. Securitygroup []struct {
  2898. Account string `json:"account,omitempty"`
  2899. Description string `json:"description,omitempty"`
  2900. Domain string `json:"domain,omitempty"`
  2901. Domainid string `json:"domainid,omitempty"`
  2902. Egressrule []struct {
  2903. Account string `json:"account,omitempty"`
  2904. Cidr string `json:"cidr,omitempty"`
  2905. Endport int `json:"endport,omitempty"`
  2906. Icmpcode int `json:"icmpcode,omitempty"`
  2907. Icmptype int `json:"icmptype,omitempty"`
  2908. Protocol string `json:"protocol,omitempty"`
  2909. Ruleid string `json:"ruleid,omitempty"`
  2910. Securitygroupname string `json:"securitygroupname,omitempty"`
  2911. Startport int `json:"startport,omitempty"`
  2912. Tags []struct {
  2913. Account string `json:"account,omitempty"`
  2914. Customer string `json:"customer,omitempty"`
  2915. Domain string `json:"domain,omitempty"`
  2916. Domainid string `json:"domainid,omitempty"`
  2917. Key string `json:"key,omitempty"`
  2918. Project string `json:"project,omitempty"`
  2919. Projectid string `json:"projectid,omitempty"`
  2920. Resourceid string `json:"resourceid,omitempty"`
  2921. Resourcetype string `json:"resourcetype,omitempty"`
  2922. Value string `json:"value,omitempty"`
  2923. } `json:"tags,omitempty"`
  2924. } `json:"egressrule,omitempty"`
  2925. Id string `json:"id,omitempty"`
  2926. Ingressrule []struct {
  2927. Account string `json:"account,omitempty"`
  2928. Cidr string `json:"cidr,omitempty"`
  2929. Endport int `json:"endport,omitempty"`
  2930. Icmpcode int `json:"icmpcode,omitempty"`
  2931. Icmptype int `json:"icmptype,omitempty"`
  2932. Protocol string `json:"protocol,omitempty"`
  2933. Ruleid string `json:"ruleid,omitempty"`
  2934. Securitygroupname string `json:"securitygroupname,omitempty"`
  2935. Startport int `json:"startport,omitempty"`
  2936. Tags []struct {
  2937. Account string `json:"account,omitempty"`
  2938. Customer string `json:"customer,omitempty"`
  2939. Domain string `json:"domain,omitempty"`
  2940. Domainid string `json:"domainid,omitempty"`
  2941. Key string `json:"key,omitempty"`
  2942. Project string `json:"project,omitempty"`
  2943. Projectid string `json:"projectid,omitempty"`
  2944. Resourceid string `json:"resourceid,omitempty"`
  2945. Resourcetype string `json:"resourcetype,omitempty"`
  2946. Value string `json:"value,omitempty"`
  2947. } `json:"tags,omitempty"`
  2948. } `json:"ingressrule,omitempty"`
  2949. Name string `json:"name,omitempty"`
  2950. Project string `json:"project,omitempty"`
  2951. Projectid string `json:"projectid,omitempty"`
  2952. Tags []struct {
  2953. Account string `json:"account,omitempty"`
  2954. Customer string `json:"customer,omitempty"`
  2955. Domain string `json:"domain,omitempty"`
  2956. Domainid string `json:"domainid,omitempty"`
  2957. Key string `json:"key,omitempty"`
  2958. Project string `json:"project,omitempty"`
  2959. Projectid string `json:"projectid,omitempty"`
  2960. Resourceid string `json:"resourceid,omitempty"`
  2961. Resourcetype string `json:"resourcetype,omitempty"`
  2962. Value string `json:"value,omitempty"`
  2963. } `json:"tags,omitempty"`
  2964. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  2965. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  2966. } `json:"securitygroup,omitempty"`
  2967. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  2968. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  2969. Servicestate string `json:"servicestate,omitempty"`
  2970. State string `json:"state,omitempty"`
  2971. Tags []struct {
  2972. Account string `json:"account,omitempty"`
  2973. Customer string `json:"customer,omitempty"`
  2974. Domain string `json:"domain,omitempty"`
  2975. Domainid string `json:"domainid,omitempty"`
  2976. Key string `json:"key,omitempty"`
  2977. Project string `json:"project,omitempty"`
  2978. Projectid string `json:"projectid,omitempty"`
  2979. Resourceid string `json:"resourceid,omitempty"`
  2980. Resourcetype string `json:"resourcetype,omitempty"`
  2981. Value string `json:"value,omitempty"`
  2982. } `json:"tags,omitempty"`
  2983. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  2984. Templateid string `json:"templateid,omitempty"`
  2985. Templatename string `json:"templatename,omitempty"`
  2986. Userid string `json:"userid,omitempty"`
  2987. Username string `json:"username,omitempty"`
  2988. Vgpu string `json:"vgpu,omitempty"`
  2989. Zoneid string `json:"zoneid,omitempty"`
  2990. Zonename string `json:"zonename,omitempty"`
  2991. }
  2992. type ChangeServiceForVirtualMachineParams struct {
  2993. p map[string]interface{}
  2994. }
  2995. func (p *ChangeServiceForVirtualMachineParams) toURLValues() url.Values {
  2996. u := url.Values{}
  2997. if p.p == nil {
  2998. return u
  2999. }
  3000. if v, found := p.p["details"]; found {
  3001. i := 0
  3002. for k, vv := range v.(map[string]string) {
  3003. u.Set(fmt.Sprintf("details[%d].key", i), k)
  3004. u.Set(fmt.Sprintf("details[%d].value", i), vv)
  3005. i++
  3006. }
  3007. }
  3008. if v, found := p.p["id"]; found {
  3009. u.Set("id", v.(string))
  3010. }
  3011. if v, found := p.p["serviceofferingid"]; found {
  3012. u.Set("serviceofferingid", v.(string))
  3013. }
  3014. return u
  3015. }
  3016. func (p *ChangeServiceForVirtualMachineParams) SetDetails(v map[string]string) {
  3017. if p.p == nil {
  3018. p.p = make(map[string]interface{})
  3019. }
  3020. p.p["details"] = v
  3021. return
  3022. }
  3023. func (p *ChangeServiceForVirtualMachineParams) SetId(v string) {
  3024. if p.p == nil {
  3025. p.p = make(map[string]interface{})
  3026. }
  3027. p.p["id"] = v
  3028. return
  3029. }
  3030. func (p *ChangeServiceForVirtualMachineParams) SetServiceofferingid(v string) {
  3031. if p.p == nil {
  3032. p.p = make(map[string]interface{})
  3033. }
  3034. p.p["serviceofferingid"] = v
  3035. return
  3036. }
  3037. // You should always use this function to get a new ChangeServiceForVirtualMachineParams instance,
  3038. // as then you are sure you have configured all required params
  3039. func (s *VirtualMachineService) NewChangeServiceForVirtualMachineParams(id string, serviceofferingid string) *ChangeServiceForVirtualMachineParams {
  3040. p := &ChangeServiceForVirtualMachineParams{}
  3041. p.p = make(map[string]interface{})
  3042. p.p["id"] = id
  3043. p.p["serviceofferingid"] = serviceofferingid
  3044. return p
  3045. }
  3046. // Changes the service offering for a virtual machine. The virtual machine must be in a "Stopped" state for this command to take effect.
  3047. func (s *VirtualMachineService) ChangeServiceForVirtualMachine(p *ChangeServiceForVirtualMachineParams) (*ChangeServiceForVirtualMachineResponse, error) {
  3048. resp, err := s.cs.newRequest("changeServiceForVirtualMachine", p.toURLValues())
  3049. if err != nil {
  3050. return nil, err
  3051. }
  3052. var r ChangeServiceForVirtualMachineResponse
  3053. if err := json.Unmarshal(resp, &r); err != nil {
  3054. return nil, err
  3055. }
  3056. return &r, nil
  3057. }
  3058. type ChangeServiceForVirtualMachineResponse struct {
  3059. Account string `json:"account,omitempty"`
  3060. Affinitygroup []struct {
  3061. Account string `json:"account,omitempty"`
  3062. Description string `json:"description,omitempty"`
  3063. Domain string `json:"domain,omitempty"`
  3064. Domainid string `json:"domainid,omitempty"`
  3065. Id string `json:"id,omitempty"`
  3066. Name string `json:"name,omitempty"`
  3067. Project string `json:"project,omitempty"`
  3068. Projectid string `json:"projectid,omitempty"`
  3069. Type string `json:"type,omitempty"`
  3070. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  3071. } `json:"affinitygroup,omitempty"`
  3072. Cpunumber int `json:"cpunumber,omitempty"`
  3073. Cpuspeed int `json:"cpuspeed,omitempty"`
  3074. Cpuused string `json:"cpuused,omitempty"`
  3075. Created string `json:"created,omitempty"`
  3076. Details map[string]string `json:"details,omitempty"`
  3077. Diskioread int64 `json:"diskioread,omitempty"`
  3078. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  3079. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  3080. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  3081. Diskofferingid string `json:"diskofferingid,omitempty"`
  3082. Diskofferingname string `json:"diskofferingname,omitempty"`
  3083. Displayname string `json:"displayname,omitempty"`
  3084. Displayvm bool `json:"displayvm,omitempty"`
  3085. Domain string `json:"domain,omitempty"`
  3086. Domainid string `json:"domainid,omitempty"`
  3087. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  3088. Group string `json:"group,omitempty"`
  3089. Groupid string `json:"groupid,omitempty"`
  3090. Guestosid string `json:"guestosid,omitempty"`
  3091. Haenable bool `json:"haenable,omitempty"`
  3092. Hostid string `json:"hostid,omitempty"`
  3093. Hostname string `json:"hostname,omitempty"`
  3094. Hypervisor string `json:"hypervisor,omitempty"`
  3095. Id string `json:"id,omitempty"`
  3096. Instancename string `json:"instancename,omitempty"`
  3097. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  3098. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  3099. Isoid string `json:"isoid,omitempty"`
  3100. Isoname string `json:"isoname,omitempty"`
  3101. Keypair string `json:"keypair,omitempty"`
  3102. Memory int `json:"memory,omitempty"`
  3103. Name string `json:"name,omitempty"`
  3104. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  3105. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  3106. Nic []struct {
  3107. Broadcasturi string `json:"broadcasturi,omitempty"`
  3108. Deviceid string `json:"deviceid,omitempty"`
  3109. Gateway string `json:"gateway,omitempty"`
  3110. Id string `json:"id,omitempty"`
  3111. Ip6address string `json:"ip6address,omitempty"`
  3112. Ip6cidr string `json:"ip6cidr,omitempty"`
  3113. Ip6gateway string `json:"ip6gateway,omitempty"`
  3114. Ipaddress string `json:"ipaddress,omitempty"`
  3115. Isdefault bool `json:"isdefault,omitempty"`
  3116. Isolationuri string `json:"isolationuri,omitempty"`
  3117. Macaddress string `json:"macaddress,omitempty"`
  3118. Netmask string `json:"netmask,omitempty"`
  3119. Networkid string `json:"networkid,omitempty"`
  3120. Networkname string `json:"networkname,omitempty"`
  3121. Secondaryip []struct {
  3122. Id string `json:"id,omitempty"`
  3123. Ipaddress string `json:"ipaddress,omitempty"`
  3124. } `json:"secondaryip,omitempty"`
  3125. Traffictype string `json:"traffictype,omitempty"`
  3126. Type string `json:"type,omitempty"`
  3127. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  3128. } `json:"nic,omitempty"`
  3129. Ostypeid int64 `json:"ostypeid,omitempty"`
  3130. Password string `json:"password,omitempty"`
  3131. Passwordenabled bool `json:"passwordenabled,omitempty"`
  3132. Project string `json:"project,omitempty"`
  3133. Projectid string `json:"projectid,omitempty"`
  3134. Publicip string `json:"publicip,omitempty"`
  3135. Publicipid string `json:"publicipid,omitempty"`
  3136. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  3137. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  3138. Securitygroup []struct {
  3139. Account string `json:"account,omitempty"`
  3140. Description string `json:"description,omitempty"`
  3141. Domain string `json:"domain,omitempty"`
  3142. Domainid string `json:"domainid,omitempty"`
  3143. Egressrule []struct {
  3144. Account string `json:"account,omitempty"`
  3145. Cidr string `json:"cidr,omitempty"`
  3146. Endport int `json:"endport,omitempty"`
  3147. Icmpcode int `json:"icmpcode,omitempty"`
  3148. Icmptype int `json:"icmptype,omitempty"`
  3149. Protocol string `json:"protocol,omitempty"`
  3150. Ruleid string `json:"ruleid,omitempty"`
  3151. Securitygroupname string `json:"securitygroupname,omitempty"`
  3152. Startport int `json:"startport,omitempty"`
  3153. Tags []struct {
  3154. Account string `json:"account,omitempty"`
  3155. Customer string `json:"customer,omitempty"`
  3156. Domain string `json:"domain,omitempty"`
  3157. Domainid string `json:"domainid,omitempty"`
  3158. Key string `json:"key,omitempty"`
  3159. Project string `json:"project,omitempty"`
  3160. Projectid string `json:"projectid,omitempty"`
  3161. Resourceid string `json:"resourceid,omitempty"`
  3162. Resourcetype string `json:"resourcetype,omitempty"`
  3163. Value string `json:"value,omitempty"`
  3164. } `json:"tags,omitempty"`
  3165. } `json:"egressrule,omitempty"`
  3166. Id string `json:"id,omitempty"`
  3167. Ingressrule []struct {
  3168. Account string `json:"account,omitempty"`
  3169. Cidr string `json:"cidr,omitempty"`
  3170. Endport int `json:"endport,omitempty"`
  3171. Icmpcode int `json:"icmpcode,omitempty"`
  3172. Icmptype int `json:"icmptype,omitempty"`
  3173. Protocol string `json:"protocol,omitempty"`
  3174. Ruleid string `json:"ruleid,omitempty"`
  3175. Securitygroupname string `json:"securitygroupname,omitempty"`
  3176. Startport int `json:"startport,omitempty"`
  3177. Tags []struct {
  3178. Account string `json:"account,omitempty"`
  3179. Customer string `json:"customer,omitempty"`
  3180. Domain string `json:"domain,omitempty"`
  3181. Domainid string `json:"domainid,omitempty"`
  3182. Key string `json:"key,omitempty"`
  3183. Project string `json:"project,omitempty"`
  3184. Projectid string `json:"projectid,omitempty"`
  3185. Resourceid string `json:"resourceid,omitempty"`
  3186. Resourcetype string `json:"resourcetype,omitempty"`
  3187. Value string `json:"value,omitempty"`
  3188. } `json:"tags,omitempty"`
  3189. } `json:"ingressrule,omitempty"`
  3190. Name string `json:"name,omitempty"`
  3191. Project string `json:"project,omitempty"`
  3192. Projectid string `json:"projectid,omitempty"`
  3193. Tags []struct {
  3194. Account string `json:"account,omitempty"`
  3195. Customer string `json:"customer,omitempty"`
  3196. Domain string `json:"domain,omitempty"`
  3197. Domainid string `json:"domainid,omitempty"`
  3198. Key string `json:"key,omitempty"`
  3199. Project string `json:"project,omitempty"`
  3200. Projectid string `json:"projectid,omitempty"`
  3201. Resourceid string `json:"resourceid,omitempty"`
  3202. Resourcetype string `json:"resourcetype,omitempty"`
  3203. Value string `json:"value,omitempty"`
  3204. } `json:"tags,omitempty"`
  3205. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  3206. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  3207. } `json:"securitygroup,omitempty"`
  3208. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  3209. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  3210. Servicestate string `json:"servicestate,omitempty"`
  3211. State string `json:"state,omitempty"`
  3212. Tags []struct {
  3213. Account string `json:"account,omitempty"`
  3214. Customer string `json:"customer,omitempty"`
  3215. Domain string `json:"domain,omitempty"`
  3216. Domainid string `json:"domainid,omitempty"`
  3217. Key string `json:"key,omitempty"`
  3218. Project string `json:"project,omitempty"`
  3219. Projectid string `json:"projectid,omitempty"`
  3220. Resourceid string `json:"resourceid,omitempty"`
  3221. Resourcetype string `json:"resourcetype,omitempty"`
  3222. Value string `json:"value,omitempty"`
  3223. } `json:"tags,omitempty"`
  3224. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  3225. Templateid string `json:"templateid,omitempty"`
  3226. Templatename string `json:"templatename,omitempty"`
  3227. Userid string `json:"userid,omitempty"`
  3228. Username string `json:"username,omitempty"`
  3229. Vgpu string `json:"vgpu,omitempty"`
  3230. Zoneid string `json:"zoneid,omitempty"`
  3231. Zonename string `json:"zonename,omitempty"`
  3232. }
  3233. type ScaleVirtualMachineParams struct {
  3234. p map[string]interface{}
  3235. }
  3236. func (p *ScaleVirtualMachineParams) toURLValues() url.Values {
  3237. u := url.Values{}
  3238. if p.p == nil {
  3239. return u
  3240. }
  3241. if v, found := p.p["details"]; found {
  3242. i := 0
  3243. for k, vv := range v.(map[string]string) {
  3244. u.Set(fmt.Sprintf("details[%d].key", i), k)
  3245. u.Set(fmt.Sprintf("details[%d].value", i), vv)
  3246. i++
  3247. }
  3248. }
  3249. if v, found := p.p["id"]; found {
  3250. u.Set("id", v.(string))
  3251. }
  3252. if v, found := p.p["serviceofferingid"]; found {
  3253. u.Set("serviceofferingid", v.(string))
  3254. }
  3255. return u
  3256. }
  3257. func (p *ScaleVirtualMachineParams) SetDetails(v map[string]string) {
  3258. if p.p == nil {
  3259. p.p = make(map[string]interface{})
  3260. }
  3261. p.p["details"] = v
  3262. return
  3263. }
  3264. func (p *ScaleVirtualMachineParams) SetId(v string) {
  3265. if p.p == nil {
  3266. p.p = make(map[string]interface{})
  3267. }
  3268. p.p["id"] = v
  3269. return
  3270. }
  3271. func (p *ScaleVirtualMachineParams) SetServiceofferingid(v string) {
  3272. if p.p == nil {
  3273. p.p = make(map[string]interface{})
  3274. }
  3275. p.p["serviceofferingid"] = v
  3276. return
  3277. }
  3278. // You should always use this function to get a new ScaleVirtualMachineParams instance,
  3279. // as then you are sure you have configured all required params
  3280. func (s *VirtualMachineService) NewScaleVirtualMachineParams(id string, serviceofferingid string) *ScaleVirtualMachineParams {
  3281. p := &ScaleVirtualMachineParams{}
  3282. p.p = make(map[string]interface{})
  3283. p.p["id"] = id
  3284. p.p["serviceofferingid"] = serviceofferingid
  3285. return p
  3286. }
  3287. // Scales the virtual machine to a new service offering.
  3288. func (s *VirtualMachineService) ScaleVirtualMachine(p *ScaleVirtualMachineParams) (*ScaleVirtualMachineResponse, error) {
  3289. resp, err := s.cs.newRequest("scaleVirtualMachine", p.toURLValues())
  3290. if err != nil {
  3291. return nil, err
  3292. }
  3293. var r ScaleVirtualMachineResponse
  3294. if err := json.Unmarshal(resp, &r); err != nil {
  3295. return nil, err
  3296. }
  3297. // If we have a async client, we need to wait for the async result
  3298. if s.cs.async {
  3299. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  3300. if err != nil {
  3301. if err == AsyncTimeoutErr {
  3302. return &r, err
  3303. }
  3304. return nil, err
  3305. }
  3306. if err := json.Unmarshal(b, &r); err != nil {
  3307. return nil, err
  3308. }
  3309. }
  3310. return &r, nil
  3311. }
  3312. type ScaleVirtualMachineResponse struct {
  3313. JobID string `json:"jobid,omitempty"`
  3314. Displaytext string `json:"displaytext,omitempty"`
  3315. Success bool `json:"success,omitempty"`
  3316. }
  3317. type AssignVirtualMachineParams struct {
  3318. p map[string]interface{}
  3319. }
  3320. func (p *AssignVirtualMachineParams) toURLValues() url.Values {
  3321. u := url.Values{}
  3322. if p.p == nil {
  3323. return u
  3324. }
  3325. if v, found := p.p["account"]; found {
  3326. u.Set("account", v.(string))
  3327. }
  3328. if v, found := p.p["domainid"]; found {
  3329. u.Set("domainid", v.(string))
  3330. }
  3331. if v, found := p.p["networkids"]; found {
  3332. vv := strings.Join(v.([]string), ",")
  3333. u.Set("networkids", vv)
  3334. }
  3335. if v, found := p.p["securitygroupids"]; found {
  3336. vv := strings.Join(v.([]string), ",")
  3337. u.Set("securitygroupids", vv)
  3338. }
  3339. if v, found := p.p["virtualmachineid"]; found {
  3340. u.Set("virtualmachineid", v.(string))
  3341. }
  3342. return u
  3343. }
  3344. func (p *AssignVirtualMachineParams) SetAccount(v string) {
  3345. if p.p == nil {
  3346. p.p = make(map[string]interface{})
  3347. }
  3348. p.p["account"] = v
  3349. return
  3350. }
  3351. func (p *AssignVirtualMachineParams) SetDomainid(v string) {
  3352. if p.p == nil {
  3353. p.p = make(map[string]interface{})
  3354. }
  3355. p.p["domainid"] = v
  3356. return
  3357. }
  3358. func (p *AssignVirtualMachineParams) SetNetworkids(v []string) {
  3359. if p.p == nil {
  3360. p.p = make(map[string]interface{})
  3361. }
  3362. p.p["networkids"] = v
  3363. return
  3364. }
  3365. func (p *AssignVirtualMachineParams) SetSecuritygroupids(v []string) {
  3366. if p.p == nil {
  3367. p.p = make(map[string]interface{})
  3368. }
  3369. p.p["securitygroupids"] = v
  3370. return
  3371. }
  3372. func (p *AssignVirtualMachineParams) SetVirtualmachineid(v string) {
  3373. if p.p == nil {
  3374. p.p = make(map[string]interface{})
  3375. }
  3376. p.p["virtualmachineid"] = v
  3377. return
  3378. }
  3379. // You should always use this function to get a new AssignVirtualMachineParams instance,
  3380. // as then you are sure you have configured all required params
  3381. func (s *VirtualMachineService) NewAssignVirtualMachineParams(account string, domainid string, virtualmachineid string) *AssignVirtualMachineParams {
  3382. p := &AssignVirtualMachineParams{}
  3383. p.p = make(map[string]interface{})
  3384. p.p["account"] = account
  3385. p.p["domainid"] = domainid
  3386. p.p["virtualmachineid"] = virtualmachineid
  3387. return p
  3388. }
  3389. // Change ownership of a VM from one account to another. This API is available for Basic zones with security groups and Advanced zones with guest networks. A root administrator can reassign a VM from any account to any other account in any domain. A domain administrator can reassign a VM to any account in the same domain.
  3390. func (s *VirtualMachineService) AssignVirtualMachine(p *AssignVirtualMachineParams) (*AssignVirtualMachineResponse, error) {
  3391. resp, err := s.cs.newRequest("assignVirtualMachine", p.toURLValues())
  3392. if err != nil {
  3393. return nil, err
  3394. }
  3395. var r AssignVirtualMachineResponse
  3396. if err := json.Unmarshal(resp, &r); err != nil {
  3397. return nil, err
  3398. }
  3399. return &r, nil
  3400. }
  3401. type AssignVirtualMachineResponse struct {
  3402. Account string `json:"account,omitempty"`
  3403. Affinitygroup []struct {
  3404. Account string `json:"account,omitempty"`
  3405. Description string `json:"description,omitempty"`
  3406. Domain string `json:"domain,omitempty"`
  3407. Domainid string `json:"domainid,omitempty"`
  3408. Id string `json:"id,omitempty"`
  3409. Name string `json:"name,omitempty"`
  3410. Project string `json:"project,omitempty"`
  3411. Projectid string `json:"projectid,omitempty"`
  3412. Type string `json:"type,omitempty"`
  3413. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  3414. } `json:"affinitygroup,omitempty"`
  3415. Cpunumber int `json:"cpunumber,omitempty"`
  3416. Cpuspeed int `json:"cpuspeed,omitempty"`
  3417. Cpuused string `json:"cpuused,omitempty"`
  3418. Created string `json:"created,omitempty"`
  3419. Details map[string]string `json:"details,omitempty"`
  3420. Diskioread int64 `json:"diskioread,omitempty"`
  3421. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  3422. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  3423. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  3424. Diskofferingid string `json:"diskofferingid,omitempty"`
  3425. Diskofferingname string `json:"diskofferingname,omitempty"`
  3426. Displayname string `json:"displayname,omitempty"`
  3427. Displayvm bool `json:"displayvm,omitempty"`
  3428. Domain string `json:"domain,omitempty"`
  3429. Domainid string `json:"domainid,omitempty"`
  3430. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  3431. Group string `json:"group,omitempty"`
  3432. Groupid string `json:"groupid,omitempty"`
  3433. Guestosid string `json:"guestosid,omitempty"`
  3434. Haenable bool `json:"haenable,omitempty"`
  3435. Hostid string `json:"hostid,omitempty"`
  3436. Hostname string `json:"hostname,omitempty"`
  3437. Hypervisor string `json:"hypervisor,omitempty"`
  3438. Id string `json:"id,omitempty"`
  3439. Instancename string `json:"instancename,omitempty"`
  3440. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  3441. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  3442. Isoid string `json:"isoid,omitempty"`
  3443. Isoname string `json:"isoname,omitempty"`
  3444. Keypair string `json:"keypair,omitempty"`
  3445. Memory int `json:"memory,omitempty"`
  3446. Name string `json:"name,omitempty"`
  3447. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  3448. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  3449. Nic []struct {
  3450. Broadcasturi string `json:"broadcasturi,omitempty"`
  3451. Deviceid string `json:"deviceid,omitempty"`
  3452. Gateway string `json:"gateway,omitempty"`
  3453. Id string `json:"id,omitempty"`
  3454. Ip6address string `json:"ip6address,omitempty"`
  3455. Ip6cidr string `json:"ip6cidr,omitempty"`
  3456. Ip6gateway string `json:"ip6gateway,omitempty"`
  3457. Ipaddress string `json:"ipaddress,omitempty"`
  3458. Isdefault bool `json:"isdefault,omitempty"`
  3459. Isolationuri string `json:"isolationuri,omitempty"`
  3460. Macaddress string `json:"macaddress,omitempty"`
  3461. Netmask string `json:"netmask,omitempty"`
  3462. Networkid string `json:"networkid,omitempty"`
  3463. Networkname string `json:"networkname,omitempty"`
  3464. Secondaryip []struct {
  3465. Id string `json:"id,omitempty"`
  3466. Ipaddress string `json:"ipaddress,omitempty"`
  3467. } `json:"secondaryip,omitempty"`
  3468. Traffictype string `json:"traffictype,omitempty"`
  3469. Type string `json:"type,omitempty"`
  3470. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  3471. } `json:"nic,omitempty"`
  3472. Ostypeid int64 `json:"ostypeid,omitempty"`
  3473. Password string `json:"password,omitempty"`
  3474. Passwordenabled bool `json:"passwordenabled,omitempty"`
  3475. Project string `json:"project,omitempty"`
  3476. Projectid string `json:"projectid,omitempty"`
  3477. Publicip string `json:"publicip,omitempty"`
  3478. Publicipid string `json:"publicipid,omitempty"`
  3479. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  3480. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  3481. Securitygroup []struct {
  3482. Account string `json:"account,omitempty"`
  3483. Description string `json:"description,omitempty"`
  3484. Domain string `json:"domain,omitempty"`
  3485. Domainid string `json:"domainid,omitempty"`
  3486. Egressrule []struct {
  3487. Account string `json:"account,omitempty"`
  3488. Cidr string `json:"cidr,omitempty"`
  3489. Endport int `json:"endport,omitempty"`
  3490. Icmpcode int `json:"icmpcode,omitempty"`
  3491. Icmptype int `json:"icmptype,omitempty"`
  3492. Protocol string `json:"protocol,omitempty"`
  3493. Ruleid string `json:"ruleid,omitempty"`
  3494. Securitygroupname string `json:"securitygroupname,omitempty"`
  3495. Startport int `json:"startport,omitempty"`
  3496. Tags []struct {
  3497. Account string `json:"account,omitempty"`
  3498. Customer string `json:"customer,omitempty"`
  3499. Domain string `json:"domain,omitempty"`
  3500. Domainid string `json:"domainid,omitempty"`
  3501. Key string `json:"key,omitempty"`
  3502. Project string `json:"project,omitempty"`
  3503. Projectid string `json:"projectid,omitempty"`
  3504. Resourceid string `json:"resourceid,omitempty"`
  3505. Resourcetype string `json:"resourcetype,omitempty"`
  3506. Value string `json:"value,omitempty"`
  3507. } `json:"tags,omitempty"`
  3508. } `json:"egressrule,omitempty"`
  3509. Id string `json:"id,omitempty"`
  3510. Ingressrule []struct {
  3511. Account string `json:"account,omitempty"`
  3512. Cidr string `json:"cidr,omitempty"`
  3513. Endport int `json:"endport,omitempty"`
  3514. Icmpcode int `json:"icmpcode,omitempty"`
  3515. Icmptype int `json:"icmptype,omitempty"`
  3516. Protocol string `json:"protocol,omitempty"`
  3517. Ruleid string `json:"ruleid,omitempty"`
  3518. Securitygroupname string `json:"securitygroupname,omitempty"`
  3519. Startport int `json:"startport,omitempty"`
  3520. Tags []struct {
  3521. Account string `json:"account,omitempty"`
  3522. Customer string `json:"customer,omitempty"`
  3523. Domain string `json:"domain,omitempty"`
  3524. Domainid string `json:"domainid,omitempty"`
  3525. Key string `json:"key,omitempty"`
  3526. Project string `json:"project,omitempty"`
  3527. Projectid string `json:"projectid,omitempty"`
  3528. Resourceid string `json:"resourceid,omitempty"`
  3529. Resourcetype string `json:"resourcetype,omitempty"`
  3530. Value string `json:"value,omitempty"`
  3531. } `json:"tags,omitempty"`
  3532. } `json:"ingressrule,omitempty"`
  3533. Name string `json:"name,omitempty"`
  3534. Project string `json:"project,omitempty"`
  3535. Projectid string `json:"projectid,omitempty"`
  3536. Tags []struct {
  3537. Account string `json:"account,omitempty"`
  3538. Customer string `json:"customer,omitempty"`
  3539. Domain string `json:"domain,omitempty"`
  3540. Domainid string `json:"domainid,omitempty"`
  3541. Key string `json:"key,omitempty"`
  3542. Project string `json:"project,omitempty"`
  3543. Projectid string `json:"projectid,omitempty"`
  3544. Resourceid string `json:"resourceid,omitempty"`
  3545. Resourcetype string `json:"resourcetype,omitempty"`
  3546. Value string `json:"value,omitempty"`
  3547. } `json:"tags,omitempty"`
  3548. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  3549. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  3550. } `json:"securitygroup,omitempty"`
  3551. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  3552. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  3553. Servicestate string `json:"servicestate,omitempty"`
  3554. State string `json:"state,omitempty"`
  3555. Tags []struct {
  3556. Account string `json:"account,omitempty"`
  3557. Customer string `json:"customer,omitempty"`
  3558. Domain string `json:"domain,omitempty"`
  3559. Domainid string `json:"domainid,omitempty"`
  3560. Key string `json:"key,omitempty"`
  3561. Project string `json:"project,omitempty"`
  3562. Projectid string `json:"projectid,omitempty"`
  3563. Resourceid string `json:"resourceid,omitempty"`
  3564. Resourcetype string `json:"resourcetype,omitempty"`
  3565. Value string `json:"value,omitempty"`
  3566. } `json:"tags,omitempty"`
  3567. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  3568. Templateid string `json:"templateid,omitempty"`
  3569. Templatename string `json:"templatename,omitempty"`
  3570. Userid string `json:"userid,omitempty"`
  3571. Username string `json:"username,omitempty"`
  3572. Vgpu string `json:"vgpu,omitempty"`
  3573. Zoneid string `json:"zoneid,omitempty"`
  3574. Zonename string `json:"zonename,omitempty"`
  3575. }
  3576. type MigrateVirtualMachineParams struct {
  3577. p map[string]interface{}
  3578. }
  3579. func (p *MigrateVirtualMachineParams) toURLValues() url.Values {
  3580. u := url.Values{}
  3581. if p.p == nil {
  3582. return u
  3583. }
  3584. if v, found := p.p["hostid"]; found {
  3585. u.Set("hostid", v.(string))
  3586. }
  3587. if v, found := p.p["storageid"]; found {
  3588. u.Set("storageid", v.(string))
  3589. }
  3590. if v, found := p.p["virtualmachineid"]; found {
  3591. u.Set("virtualmachineid", v.(string))
  3592. }
  3593. return u
  3594. }
  3595. func (p *MigrateVirtualMachineParams) SetHostid(v string) {
  3596. if p.p == nil {
  3597. p.p = make(map[string]interface{})
  3598. }
  3599. p.p["hostid"] = v
  3600. return
  3601. }
  3602. func (p *MigrateVirtualMachineParams) SetStorageid(v string) {
  3603. if p.p == nil {
  3604. p.p = make(map[string]interface{})
  3605. }
  3606. p.p["storageid"] = v
  3607. return
  3608. }
  3609. func (p *MigrateVirtualMachineParams) SetVirtualmachineid(v string) {
  3610. if p.p == nil {
  3611. p.p = make(map[string]interface{})
  3612. }
  3613. p.p["virtualmachineid"] = v
  3614. return
  3615. }
  3616. // You should always use this function to get a new MigrateVirtualMachineParams instance,
  3617. // as then you are sure you have configured all required params
  3618. func (s *VirtualMachineService) NewMigrateVirtualMachineParams(virtualmachineid string) *MigrateVirtualMachineParams {
  3619. p := &MigrateVirtualMachineParams{}
  3620. p.p = make(map[string]interface{})
  3621. p.p["virtualmachineid"] = virtualmachineid
  3622. return p
  3623. }
  3624. // Attempts Migration of a VM to a different host or Root volume of the vm to a different storage pool
  3625. func (s *VirtualMachineService) MigrateVirtualMachine(p *MigrateVirtualMachineParams) (*MigrateVirtualMachineResponse, error) {
  3626. resp, err := s.cs.newRequest("migrateVirtualMachine", p.toURLValues())
  3627. if err != nil {
  3628. return nil, err
  3629. }
  3630. var r MigrateVirtualMachineResponse
  3631. if err := json.Unmarshal(resp, &r); err != nil {
  3632. return nil, err
  3633. }
  3634. // If we have a async client, we need to wait for the async result
  3635. if s.cs.async {
  3636. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  3637. if err != nil {
  3638. if err == AsyncTimeoutErr {
  3639. return &r, err
  3640. }
  3641. return nil, err
  3642. }
  3643. b, err = getRawValue(b)
  3644. if err != nil {
  3645. return nil, err
  3646. }
  3647. if err := json.Unmarshal(b, &r); err != nil {
  3648. return nil, err
  3649. }
  3650. }
  3651. return &r, nil
  3652. }
  3653. type MigrateVirtualMachineResponse struct {
  3654. JobID string `json:"jobid,omitempty"`
  3655. Account string `json:"account,omitempty"`
  3656. Affinitygroup []struct {
  3657. Account string `json:"account,omitempty"`
  3658. Description string `json:"description,omitempty"`
  3659. Domain string `json:"domain,omitempty"`
  3660. Domainid string `json:"domainid,omitempty"`
  3661. Id string `json:"id,omitempty"`
  3662. Name string `json:"name,omitempty"`
  3663. Project string `json:"project,omitempty"`
  3664. Projectid string `json:"projectid,omitempty"`
  3665. Type string `json:"type,omitempty"`
  3666. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  3667. } `json:"affinitygroup,omitempty"`
  3668. Cpunumber int `json:"cpunumber,omitempty"`
  3669. Cpuspeed int `json:"cpuspeed,omitempty"`
  3670. Cpuused string `json:"cpuused,omitempty"`
  3671. Created string `json:"created,omitempty"`
  3672. Details map[string]string `json:"details,omitempty"`
  3673. Diskioread int64 `json:"diskioread,omitempty"`
  3674. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  3675. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  3676. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  3677. Diskofferingid string `json:"diskofferingid,omitempty"`
  3678. Diskofferingname string `json:"diskofferingname,omitempty"`
  3679. Displayname string `json:"displayname,omitempty"`
  3680. Displayvm bool `json:"displayvm,omitempty"`
  3681. Domain string `json:"domain,omitempty"`
  3682. Domainid string `json:"domainid,omitempty"`
  3683. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  3684. Group string `json:"group,omitempty"`
  3685. Groupid string `json:"groupid,omitempty"`
  3686. Guestosid string `json:"guestosid,omitempty"`
  3687. Haenable bool `json:"haenable,omitempty"`
  3688. Hostid string `json:"hostid,omitempty"`
  3689. Hostname string `json:"hostname,omitempty"`
  3690. Hypervisor string `json:"hypervisor,omitempty"`
  3691. Id string `json:"id,omitempty"`
  3692. Instancename string `json:"instancename,omitempty"`
  3693. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  3694. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  3695. Isoid string `json:"isoid,omitempty"`
  3696. Isoname string `json:"isoname,omitempty"`
  3697. Keypair string `json:"keypair,omitempty"`
  3698. Memory int `json:"memory,omitempty"`
  3699. Name string `json:"name,omitempty"`
  3700. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  3701. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  3702. Nic []struct {
  3703. Broadcasturi string `json:"broadcasturi,omitempty"`
  3704. Deviceid string `json:"deviceid,omitempty"`
  3705. Gateway string `json:"gateway,omitempty"`
  3706. Id string `json:"id,omitempty"`
  3707. Ip6address string `json:"ip6address,omitempty"`
  3708. Ip6cidr string `json:"ip6cidr,omitempty"`
  3709. Ip6gateway string `json:"ip6gateway,omitempty"`
  3710. Ipaddress string `json:"ipaddress,omitempty"`
  3711. Isdefault bool `json:"isdefault,omitempty"`
  3712. Isolationuri string `json:"isolationuri,omitempty"`
  3713. Macaddress string `json:"macaddress,omitempty"`
  3714. Netmask string `json:"netmask,omitempty"`
  3715. Networkid string `json:"networkid,omitempty"`
  3716. Networkname string `json:"networkname,omitempty"`
  3717. Secondaryip []struct {
  3718. Id string `json:"id,omitempty"`
  3719. Ipaddress string `json:"ipaddress,omitempty"`
  3720. } `json:"secondaryip,omitempty"`
  3721. Traffictype string `json:"traffictype,omitempty"`
  3722. Type string `json:"type,omitempty"`
  3723. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  3724. } `json:"nic,omitempty"`
  3725. Ostypeid int64 `json:"ostypeid,omitempty"`
  3726. Password string `json:"password,omitempty"`
  3727. Passwordenabled bool `json:"passwordenabled,omitempty"`
  3728. Project string `json:"project,omitempty"`
  3729. Projectid string `json:"projectid,omitempty"`
  3730. Publicip string `json:"publicip,omitempty"`
  3731. Publicipid string `json:"publicipid,omitempty"`
  3732. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  3733. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  3734. Securitygroup []struct {
  3735. Account string `json:"account,omitempty"`
  3736. Description string `json:"description,omitempty"`
  3737. Domain string `json:"domain,omitempty"`
  3738. Domainid string `json:"domainid,omitempty"`
  3739. Egressrule []struct {
  3740. Account string `json:"account,omitempty"`
  3741. Cidr string `json:"cidr,omitempty"`
  3742. Endport int `json:"endport,omitempty"`
  3743. Icmpcode int `json:"icmpcode,omitempty"`
  3744. Icmptype int `json:"icmptype,omitempty"`
  3745. Protocol string `json:"protocol,omitempty"`
  3746. Ruleid string `json:"ruleid,omitempty"`
  3747. Securitygroupname string `json:"securitygroupname,omitempty"`
  3748. Startport int `json:"startport,omitempty"`
  3749. Tags []struct {
  3750. Account string `json:"account,omitempty"`
  3751. Customer string `json:"customer,omitempty"`
  3752. Domain string `json:"domain,omitempty"`
  3753. Domainid string `json:"domainid,omitempty"`
  3754. Key string `json:"key,omitempty"`
  3755. Project string `json:"project,omitempty"`
  3756. Projectid string `json:"projectid,omitempty"`
  3757. Resourceid string `json:"resourceid,omitempty"`
  3758. Resourcetype string `json:"resourcetype,omitempty"`
  3759. Value string `json:"value,omitempty"`
  3760. } `json:"tags,omitempty"`
  3761. } `json:"egressrule,omitempty"`
  3762. Id string `json:"id,omitempty"`
  3763. Ingressrule []struct {
  3764. Account string `json:"account,omitempty"`
  3765. Cidr string `json:"cidr,omitempty"`
  3766. Endport int `json:"endport,omitempty"`
  3767. Icmpcode int `json:"icmpcode,omitempty"`
  3768. Icmptype int `json:"icmptype,omitempty"`
  3769. Protocol string `json:"protocol,omitempty"`
  3770. Ruleid string `json:"ruleid,omitempty"`
  3771. Securitygroupname string `json:"securitygroupname,omitempty"`
  3772. Startport int `json:"startport,omitempty"`
  3773. Tags []struct {
  3774. Account string `json:"account,omitempty"`
  3775. Customer string `json:"customer,omitempty"`
  3776. Domain string `json:"domain,omitempty"`
  3777. Domainid string `json:"domainid,omitempty"`
  3778. Key string `json:"key,omitempty"`
  3779. Project string `json:"project,omitempty"`
  3780. Projectid string `json:"projectid,omitempty"`
  3781. Resourceid string `json:"resourceid,omitempty"`
  3782. Resourcetype string `json:"resourcetype,omitempty"`
  3783. Value string `json:"value,omitempty"`
  3784. } `json:"tags,omitempty"`
  3785. } `json:"ingressrule,omitempty"`
  3786. Name string `json:"name,omitempty"`
  3787. Project string `json:"project,omitempty"`
  3788. Projectid string `json:"projectid,omitempty"`
  3789. Tags []struct {
  3790. Account string `json:"account,omitempty"`
  3791. Customer string `json:"customer,omitempty"`
  3792. Domain string `json:"domain,omitempty"`
  3793. Domainid string `json:"domainid,omitempty"`
  3794. Key string `json:"key,omitempty"`
  3795. Project string `json:"project,omitempty"`
  3796. Projectid string `json:"projectid,omitempty"`
  3797. Resourceid string `json:"resourceid,omitempty"`
  3798. Resourcetype string `json:"resourcetype,omitempty"`
  3799. Value string `json:"value,omitempty"`
  3800. } `json:"tags,omitempty"`
  3801. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  3802. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  3803. } `json:"securitygroup,omitempty"`
  3804. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  3805. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  3806. Servicestate string `json:"servicestate,omitempty"`
  3807. State string `json:"state,omitempty"`
  3808. Tags []struct {
  3809. Account string `json:"account,omitempty"`
  3810. Customer string `json:"customer,omitempty"`
  3811. Domain string `json:"domain,omitempty"`
  3812. Domainid string `json:"domainid,omitempty"`
  3813. Key string `json:"key,omitempty"`
  3814. Project string `json:"project,omitempty"`
  3815. Projectid string `json:"projectid,omitempty"`
  3816. Resourceid string `json:"resourceid,omitempty"`
  3817. Resourcetype string `json:"resourcetype,omitempty"`
  3818. Value string `json:"value,omitempty"`
  3819. } `json:"tags,omitempty"`
  3820. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  3821. Templateid string `json:"templateid,omitempty"`
  3822. Templatename string `json:"templatename,omitempty"`
  3823. Userid string `json:"userid,omitempty"`
  3824. Username string `json:"username,omitempty"`
  3825. Vgpu string `json:"vgpu,omitempty"`
  3826. Zoneid string `json:"zoneid,omitempty"`
  3827. Zonename string `json:"zonename,omitempty"`
  3828. }
  3829. type MigrateVirtualMachineWithVolumeParams struct {
  3830. p map[string]interface{}
  3831. }
  3832. func (p *MigrateVirtualMachineWithVolumeParams) toURLValues() url.Values {
  3833. u := url.Values{}
  3834. if p.p == nil {
  3835. return u
  3836. }
  3837. if v, found := p.p["hostid"]; found {
  3838. u.Set("hostid", v.(string))
  3839. }
  3840. if v, found := p.p["migrateto"]; found {
  3841. i := 0
  3842. for k, vv := range v.(map[string]string) {
  3843. u.Set(fmt.Sprintf("migrateto[%d].key", i), k)
  3844. u.Set(fmt.Sprintf("migrateto[%d].value", i), vv)
  3845. i++
  3846. }
  3847. }
  3848. if v, found := p.p["virtualmachineid"]; found {
  3849. u.Set("virtualmachineid", v.(string))
  3850. }
  3851. return u
  3852. }
  3853. func (p *MigrateVirtualMachineWithVolumeParams) SetHostid(v string) {
  3854. if p.p == nil {
  3855. p.p = make(map[string]interface{})
  3856. }
  3857. p.p["hostid"] = v
  3858. return
  3859. }
  3860. func (p *MigrateVirtualMachineWithVolumeParams) SetMigrateto(v map[string]string) {
  3861. if p.p == nil {
  3862. p.p = make(map[string]interface{})
  3863. }
  3864. p.p["migrateto"] = v
  3865. return
  3866. }
  3867. func (p *MigrateVirtualMachineWithVolumeParams) SetVirtualmachineid(v string) {
  3868. if p.p == nil {
  3869. p.p = make(map[string]interface{})
  3870. }
  3871. p.p["virtualmachineid"] = v
  3872. return
  3873. }
  3874. // You should always use this function to get a new MigrateVirtualMachineWithVolumeParams instance,
  3875. // as then you are sure you have configured all required params
  3876. func (s *VirtualMachineService) NewMigrateVirtualMachineWithVolumeParams(hostid string, virtualmachineid string) *MigrateVirtualMachineWithVolumeParams {
  3877. p := &MigrateVirtualMachineWithVolumeParams{}
  3878. p.p = make(map[string]interface{})
  3879. p.p["hostid"] = hostid
  3880. p.p["virtualmachineid"] = virtualmachineid
  3881. return p
  3882. }
  3883. // Attempts Migration of a VM with its volumes to a different host
  3884. func (s *VirtualMachineService) MigrateVirtualMachineWithVolume(p *MigrateVirtualMachineWithVolumeParams) (*MigrateVirtualMachineWithVolumeResponse, error) {
  3885. resp, err := s.cs.newRequest("migrateVirtualMachineWithVolume", p.toURLValues())
  3886. if err != nil {
  3887. return nil, err
  3888. }
  3889. var r MigrateVirtualMachineWithVolumeResponse
  3890. if err := json.Unmarshal(resp, &r); err != nil {
  3891. return nil, err
  3892. }
  3893. // If we have a async client, we need to wait for the async result
  3894. if s.cs.async {
  3895. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  3896. if err != nil {
  3897. if err == AsyncTimeoutErr {
  3898. return &r, err
  3899. }
  3900. return nil, err
  3901. }
  3902. b, err = getRawValue(b)
  3903. if err != nil {
  3904. return nil, err
  3905. }
  3906. if err := json.Unmarshal(b, &r); err != nil {
  3907. return nil, err
  3908. }
  3909. }
  3910. return &r, nil
  3911. }
  3912. type MigrateVirtualMachineWithVolumeResponse struct {
  3913. JobID string `json:"jobid,omitempty"`
  3914. Account string `json:"account,omitempty"`
  3915. Affinitygroup []struct {
  3916. Account string `json:"account,omitempty"`
  3917. Description string `json:"description,omitempty"`
  3918. Domain string `json:"domain,omitempty"`
  3919. Domainid string `json:"domainid,omitempty"`
  3920. Id string `json:"id,omitempty"`
  3921. Name string `json:"name,omitempty"`
  3922. Project string `json:"project,omitempty"`
  3923. Projectid string `json:"projectid,omitempty"`
  3924. Type string `json:"type,omitempty"`
  3925. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  3926. } `json:"affinitygroup,omitempty"`
  3927. Cpunumber int `json:"cpunumber,omitempty"`
  3928. Cpuspeed int `json:"cpuspeed,omitempty"`
  3929. Cpuused string `json:"cpuused,omitempty"`
  3930. Created string `json:"created,omitempty"`
  3931. Details map[string]string `json:"details,omitempty"`
  3932. Diskioread int64 `json:"diskioread,omitempty"`
  3933. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  3934. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  3935. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  3936. Diskofferingid string `json:"diskofferingid,omitempty"`
  3937. Diskofferingname string `json:"diskofferingname,omitempty"`
  3938. Displayname string `json:"displayname,omitempty"`
  3939. Displayvm bool `json:"displayvm,omitempty"`
  3940. Domain string `json:"domain,omitempty"`
  3941. Domainid string `json:"domainid,omitempty"`
  3942. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  3943. Group string `json:"group,omitempty"`
  3944. Groupid string `json:"groupid,omitempty"`
  3945. Guestosid string `json:"guestosid,omitempty"`
  3946. Haenable bool `json:"haenable,omitempty"`
  3947. Hostid string `json:"hostid,omitempty"`
  3948. Hostname string `json:"hostname,omitempty"`
  3949. Hypervisor string `json:"hypervisor,omitempty"`
  3950. Id string `json:"id,omitempty"`
  3951. Instancename string `json:"instancename,omitempty"`
  3952. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  3953. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  3954. Isoid string `json:"isoid,omitempty"`
  3955. Isoname string `json:"isoname,omitempty"`
  3956. Keypair string `json:"keypair,omitempty"`
  3957. Memory int `json:"memory,omitempty"`
  3958. Name string `json:"name,omitempty"`
  3959. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  3960. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  3961. Nic []struct {
  3962. Broadcasturi string `json:"broadcasturi,omitempty"`
  3963. Deviceid string `json:"deviceid,omitempty"`
  3964. Gateway string `json:"gateway,omitempty"`
  3965. Id string `json:"id,omitempty"`
  3966. Ip6address string `json:"ip6address,omitempty"`
  3967. Ip6cidr string `json:"ip6cidr,omitempty"`
  3968. Ip6gateway string `json:"ip6gateway,omitempty"`
  3969. Ipaddress string `json:"ipaddress,omitempty"`
  3970. Isdefault bool `json:"isdefault,omitempty"`
  3971. Isolationuri string `json:"isolationuri,omitempty"`
  3972. Macaddress string `json:"macaddress,omitempty"`
  3973. Netmask string `json:"netmask,omitempty"`
  3974. Networkid string `json:"networkid,omitempty"`
  3975. Networkname string `json:"networkname,omitempty"`
  3976. Secondaryip []struct {
  3977. Id string `json:"id,omitempty"`
  3978. Ipaddress string `json:"ipaddress,omitempty"`
  3979. } `json:"secondaryip,omitempty"`
  3980. Traffictype string `json:"traffictype,omitempty"`
  3981. Type string `json:"type,omitempty"`
  3982. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  3983. } `json:"nic,omitempty"`
  3984. Ostypeid int64 `json:"ostypeid,omitempty"`
  3985. Password string `json:"password,omitempty"`
  3986. Passwordenabled bool `json:"passwordenabled,omitempty"`
  3987. Project string `json:"project,omitempty"`
  3988. Projectid string `json:"projectid,omitempty"`
  3989. Publicip string `json:"publicip,omitempty"`
  3990. Publicipid string `json:"publicipid,omitempty"`
  3991. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  3992. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  3993. Securitygroup []struct {
  3994. Account string `json:"account,omitempty"`
  3995. Description string `json:"description,omitempty"`
  3996. Domain string `json:"domain,omitempty"`
  3997. Domainid string `json:"domainid,omitempty"`
  3998. Egressrule []struct {
  3999. Account string `json:"account,omitempty"`
  4000. Cidr string `json:"cidr,omitempty"`
  4001. Endport int `json:"endport,omitempty"`
  4002. Icmpcode int `json:"icmpcode,omitempty"`
  4003. Icmptype int `json:"icmptype,omitempty"`
  4004. Protocol string `json:"protocol,omitempty"`
  4005. Ruleid string `json:"ruleid,omitempty"`
  4006. Securitygroupname string `json:"securitygroupname,omitempty"`
  4007. Startport int `json:"startport,omitempty"`
  4008. Tags []struct {
  4009. Account string `json:"account,omitempty"`
  4010. Customer string `json:"customer,omitempty"`
  4011. Domain string `json:"domain,omitempty"`
  4012. Domainid string `json:"domainid,omitempty"`
  4013. Key string `json:"key,omitempty"`
  4014. Project string `json:"project,omitempty"`
  4015. Projectid string `json:"projectid,omitempty"`
  4016. Resourceid string `json:"resourceid,omitempty"`
  4017. Resourcetype string `json:"resourcetype,omitempty"`
  4018. Value string `json:"value,omitempty"`
  4019. } `json:"tags,omitempty"`
  4020. } `json:"egressrule,omitempty"`
  4021. Id string `json:"id,omitempty"`
  4022. Ingressrule []struct {
  4023. Account string `json:"account,omitempty"`
  4024. Cidr string `json:"cidr,omitempty"`
  4025. Endport int `json:"endport,omitempty"`
  4026. Icmpcode int `json:"icmpcode,omitempty"`
  4027. Icmptype int `json:"icmptype,omitempty"`
  4028. Protocol string `json:"protocol,omitempty"`
  4029. Ruleid string `json:"ruleid,omitempty"`
  4030. Securitygroupname string `json:"securitygroupname,omitempty"`
  4031. Startport int `json:"startport,omitempty"`
  4032. Tags []struct {
  4033. Account string `json:"account,omitempty"`
  4034. Customer string `json:"customer,omitempty"`
  4035. Domain string `json:"domain,omitempty"`
  4036. Domainid string `json:"domainid,omitempty"`
  4037. Key string `json:"key,omitempty"`
  4038. Project string `json:"project,omitempty"`
  4039. Projectid string `json:"projectid,omitempty"`
  4040. Resourceid string `json:"resourceid,omitempty"`
  4041. Resourcetype string `json:"resourcetype,omitempty"`
  4042. Value string `json:"value,omitempty"`
  4043. } `json:"tags,omitempty"`
  4044. } `json:"ingressrule,omitempty"`
  4045. Name string `json:"name,omitempty"`
  4046. Project string `json:"project,omitempty"`
  4047. Projectid string `json:"projectid,omitempty"`
  4048. Tags []struct {
  4049. Account string `json:"account,omitempty"`
  4050. Customer string `json:"customer,omitempty"`
  4051. Domain string `json:"domain,omitempty"`
  4052. Domainid string `json:"domainid,omitempty"`
  4053. Key string `json:"key,omitempty"`
  4054. Project string `json:"project,omitempty"`
  4055. Projectid string `json:"projectid,omitempty"`
  4056. Resourceid string `json:"resourceid,omitempty"`
  4057. Resourcetype string `json:"resourcetype,omitempty"`
  4058. Value string `json:"value,omitempty"`
  4059. } `json:"tags,omitempty"`
  4060. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  4061. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  4062. } `json:"securitygroup,omitempty"`
  4063. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  4064. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  4065. Servicestate string `json:"servicestate,omitempty"`
  4066. State string `json:"state,omitempty"`
  4067. Tags []struct {
  4068. Account string `json:"account,omitempty"`
  4069. Customer string `json:"customer,omitempty"`
  4070. Domain string `json:"domain,omitempty"`
  4071. Domainid string `json:"domainid,omitempty"`
  4072. Key string `json:"key,omitempty"`
  4073. Project string `json:"project,omitempty"`
  4074. Projectid string `json:"projectid,omitempty"`
  4075. Resourceid string `json:"resourceid,omitempty"`
  4076. Resourcetype string `json:"resourcetype,omitempty"`
  4077. Value string `json:"value,omitempty"`
  4078. } `json:"tags,omitempty"`
  4079. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  4080. Templateid string `json:"templateid,omitempty"`
  4081. Templatename string `json:"templatename,omitempty"`
  4082. Userid string `json:"userid,omitempty"`
  4083. Username string `json:"username,omitempty"`
  4084. Vgpu string `json:"vgpu,omitempty"`
  4085. Zoneid string `json:"zoneid,omitempty"`
  4086. Zonename string `json:"zonename,omitempty"`
  4087. }
  4088. type RecoverVirtualMachineParams struct {
  4089. p map[string]interface{}
  4090. }
  4091. func (p *RecoverVirtualMachineParams) toURLValues() url.Values {
  4092. u := url.Values{}
  4093. if p.p == nil {
  4094. return u
  4095. }
  4096. if v, found := p.p["id"]; found {
  4097. u.Set("id", v.(string))
  4098. }
  4099. return u
  4100. }
  4101. func (p *RecoverVirtualMachineParams) SetId(v string) {
  4102. if p.p == nil {
  4103. p.p = make(map[string]interface{})
  4104. }
  4105. p.p["id"] = v
  4106. return
  4107. }
  4108. // You should always use this function to get a new RecoverVirtualMachineParams instance,
  4109. // as then you are sure you have configured all required params
  4110. func (s *VirtualMachineService) NewRecoverVirtualMachineParams(id string) *RecoverVirtualMachineParams {
  4111. p := &RecoverVirtualMachineParams{}
  4112. p.p = make(map[string]interface{})
  4113. p.p["id"] = id
  4114. return p
  4115. }
  4116. // Recovers a virtual machine.
  4117. func (s *VirtualMachineService) RecoverVirtualMachine(p *RecoverVirtualMachineParams) (*RecoverVirtualMachineResponse, error) {
  4118. resp, err := s.cs.newRequest("recoverVirtualMachine", p.toURLValues())
  4119. if err != nil {
  4120. return nil, err
  4121. }
  4122. var r RecoverVirtualMachineResponse
  4123. if err := json.Unmarshal(resp, &r); err != nil {
  4124. return nil, err
  4125. }
  4126. return &r, nil
  4127. }
  4128. type RecoverVirtualMachineResponse struct {
  4129. Account string `json:"account,omitempty"`
  4130. Affinitygroup []struct {
  4131. Account string `json:"account,omitempty"`
  4132. Description string `json:"description,omitempty"`
  4133. Domain string `json:"domain,omitempty"`
  4134. Domainid string `json:"domainid,omitempty"`
  4135. Id string `json:"id,omitempty"`
  4136. Name string `json:"name,omitempty"`
  4137. Project string `json:"project,omitempty"`
  4138. Projectid string `json:"projectid,omitempty"`
  4139. Type string `json:"type,omitempty"`
  4140. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  4141. } `json:"affinitygroup,omitempty"`
  4142. Cpunumber int `json:"cpunumber,omitempty"`
  4143. Cpuspeed int `json:"cpuspeed,omitempty"`
  4144. Cpuused string `json:"cpuused,omitempty"`
  4145. Created string `json:"created,omitempty"`
  4146. Details map[string]string `json:"details,omitempty"`
  4147. Diskioread int64 `json:"diskioread,omitempty"`
  4148. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  4149. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  4150. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  4151. Diskofferingid string `json:"diskofferingid,omitempty"`
  4152. Diskofferingname string `json:"diskofferingname,omitempty"`
  4153. Displayname string `json:"displayname,omitempty"`
  4154. Displayvm bool `json:"displayvm,omitempty"`
  4155. Domain string `json:"domain,omitempty"`
  4156. Domainid string `json:"domainid,omitempty"`
  4157. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  4158. Group string `json:"group,omitempty"`
  4159. Groupid string `json:"groupid,omitempty"`
  4160. Guestosid string `json:"guestosid,omitempty"`
  4161. Haenable bool `json:"haenable,omitempty"`
  4162. Hostid string `json:"hostid,omitempty"`
  4163. Hostname string `json:"hostname,omitempty"`
  4164. Hypervisor string `json:"hypervisor,omitempty"`
  4165. Id string `json:"id,omitempty"`
  4166. Instancename string `json:"instancename,omitempty"`
  4167. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  4168. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  4169. Isoid string `json:"isoid,omitempty"`
  4170. Isoname string `json:"isoname,omitempty"`
  4171. Keypair string `json:"keypair,omitempty"`
  4172. Memory int `json:"memory,omitempty"`
  4173. Name string `json:"name,omitempty"`
  4174. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  4175. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  4176. Nic []struct {
  4177. Broadcasturi string `json:"broadcasturi,omitempty"`
  4178. Deviceid string `json:"deviceid,omitempty"`
  4179. Gateway string `json:"gateway,omitempty"`
  4180. Id string `json:"id,omitempty"`
  4181. Ip6address string `json:"ip6address,omitempty"`
  4182. Ip6cidr string `json:"ip6cidr,omitempty"`
  4183. Ip6gateway string `json:"ip6gateway,omitempty"`
  4184. Ipaddress string `json:"ipaddress,omitempty"`
  4185. Isdefault bool `json:"isdefault,omitempty"`
  4186. Isolationuri string `json:"isolationuri,omitempty"`
  4187. Macaddress string `json:"macaddress,omitempty"`
  4188. Netmask string `json:"netmask,omitempty"`
  4189. Networkid string `json:"networkid,omitempty"`
  4190. Networkname string `json:"networkname,omitempty"`
  4191. Secondaryip []struct {
  4192. Id string `json:"id,omitempty"`
  4193. Ipaddress string `json:"ipaddress,omitempty"`
  4194. } `json:"secondaryip,omitempty"`
  4195. Traffictype string `json:"traffictype,omitempty"`
  4196. Type string `json:"type,omitempty"`
  4197. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  4198. } `json:"nic,omitempty"`
  4199. Ostypeid int64 `json:"ostypeid,omitempty"`
  4200. Password string `json:"password,omitempty"`
  4201. Passwordenabled bool `json:"passwordenabled,omitempty"`
  4202. Project string `json:"project,omitempty"`
  4203. Projectid string `json:"projectid,omitempty"`
  4204. Publicip string `json:"publicip,omitempty"`
  4205. Publicipid string `json:"publicipid,omitempty"`
  4206. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  4207. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  4208. Securitygroup []struct {
  4209. Account string `json:"account,omitempty"`
  4210. Description string `json:"description,omitempty"`
  4211. Domain string `json:"domain,omitempty"`
  4212. Domainid string `json:"domainid,omitempty"`
  4213. Egressrule []struct {
  4214. Account string `json:"account,omitempty"`
  4215. Cidr string `json:"cidr,omitempty"`
  4216. Endport int `json:"endport,omitempty"`
  4217. Icmpcode int `json:"icmpcode,omitempty"`
  4218. Icmptype int `json:"icmptype,omitempty"`
  4219. Protocol string `json:"protocol,omitempty"`
  4220. Ruleid string `json:"ruleid,omitempty"`
  4221. Securitygroupname string `json:"securitygroupname,omitempty"`
  4222. Startport int `json:"startport,omitempty"`
  4223. Tags []struct {
  4224. Account string `json:"account,omitempty"`
  4225. Customer string `json:"customer,omitempty"`
  4226. Domain string `json:"domain,omitempty"`
  4227. Domainid string `json:"domainid,omitempty"`
  4228. Key string `json:"key,omitempty"`
  4229. Project string `json:"project,omitempty"`
  4230. Projectid string `json:"projectid,omitempty"`
  4231. Resourceid string `json:"resourceid,omitempty"`
  4232. Resourcetype string `json:"resourcetype,omitempty"`
  4233. Value string `json:"value,omitempty"`
  4234. } `json:"tags,omitempty"`
  4235. } `json:"egressrule,omitempty"`
  4236. Id string `json:"id,omitempty"`
  4237. Ingressrule []struct {
  4238. Account string `json:"account,omitempty"`
  4239. Cidr string `json:"cidr,omitempty"`
  4240. Endport int `json:"endport,omitempty"`
  4241. Icmpcode int `json:"icmpcode,omitempty"`
  4242. Icmptype int `json:"icmptype,omitempty"`
  4243. Protocol string `json:"protocol,omitempty"`
  4244. Ruleid string `json:"ruleid,omitempty"`
  4245. Securitygroupname string `json:"securitygroupname,omitempty"`
  4246. Startport int `json:"startport,omitempty"`
  4247. Tags []struct {
  4248. Account string `json:"account,omitempty"`
  4249. Customer string `json:"customer,omitempty"`
  4250. Domain string `json:"domain,omitempty"`
  4251. Domainid string `json:"domainid,omitempty"`
  4252. Key string `json:"key,omitempty"`
  4253. Project string `json:"project,omitempty"`
  4254. Projectid string `json:"projectid,omitempty"`
  4255. Resourceid string `json:"resourceid,omitempty"`
  4256. Resourcetype string `json:"resourcetype,omitempty"`
  4257. Value string `json:"value,omitempty"`
  4258. } `json:"tags,omitempty"`
  4259. } `json:"ingressrule,omitempty"`
  4260. Name string `json:"name,omitempty"`
  4261. Project string `json:"project,omitempty"`
  4262. Projectid string `json:"projectid,omitempty"`
  4263. Tags []struct {
  4264. Account string `json:"account,omitempty"`
  4265. Customer string `json:"customer,omitempty"`
  4266. Domain string `json:"domain,omitempty"`
  4267. Domainid string `json:"domainid,omitempty"`
  4268. Key string `json:"key,omitempty"`
  4269. Project string `json:"project,omitempty"`
  4270. Projectid string `json:"projectid,omitempty"`
  4271. Resourceid string `json:"resourceid,omitempty"`
  4272. Resourcetype string `json:"resourcetype,omitempty"`
  4273. Value string `json:"value,omitempty"`
  4274. } `json:"tags,omitempty"`
  4275. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  4276. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  4277. } `json:"securitygroup,omitempty"`
  4278. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  4279. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  4280. Servicestate string `json:"servicestate,omitempty"`
  4281. State string `json:"state,omitempty"`
  4282. Tags []struct {
  4283. Account string `json:"account,omitempty"`
  4284. Customer string `json:"customer,omitempty"`
  4285. Domain string `json:"domain,omitempty"`
  4286. Domainid string `json:"domainid,omitempty"`
  4287. Key string `json:"key,omitempty"`
  4288. Project string `json:"project,omitempty"`
  4289. Projectid string `json:"projectid,omitempty"`
  4290. Resourceid string `json:"resourceid,omitempty"`
  4291. Resourcetype string `json:"resourcetype,omitempty"`
  4292. Value string `json:"value,omitempty"`
  4293. } `json:"tags,omitempty"`
  4294. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  4295. Templateid string `json:"templateid,omitempty"`
  4296. Templatename string `json:"templatename,omitempty"`
  4297. Userid string `json:"userid,omitempty"`
  4298. Username string `json:"username,omitempty"`
  4299. Vgpu string `json:"vgpu,omitempty"`
  4300. Zoneid string `json:"zoneid,omitempty"`
  4301. Zonename string `json:"zonename,omitempty"`
  4302. }
  4303. type ExpungeVirtualMachineParams struct {
  4304. p map[string]interface{}
  4305. }
  4306. func (p *ExpungeVirtualMachineParams) toURLValues() url.Values {
  4307. u := url.Values{}
  4308. if p.p == nil {
  4309. return u
  4310. }
  4311. if v, found := p.p["id"]; found {
  4312. u.Set("id", v.(string))
  4313. }
  4314. return u
  4315. }
  4316. func (p *ExpungeVirtualMachineParams) SetId(v string) {
  4317. if p.p == nil {
  4318. p.p = make(map[string]interface{})
  4319. }
  4320. p.p["id"] = v
  4321. return
  4322. }
  4323. // You should always use this function to get a new ExpungeVirtualMachineParams instance,
  4324. // as then you are sure you have configured all required params
  4325. func (s *VirtualMachineService) NewExpungeVirtualMachineParams(id string) *ExpungeVirtualMachineParams {
  4326. p := &ExpungeVirtualMachineParams{}
  4327. p.p = make(map[string]interface{})
  4328. p.p["id"] = id
  4329. return p
  4330. }
  4331. // Expunge a virtual machine. Once expunged, it cannot be recoverd.
  4332. func (s *VirtualMachineService) ExpungeVirtualMachine(p *ExpungeVirtualMachineParams) (*ExpungeVirtualMachineResponse, error) {
  4333. resp, err := s.cs.newRequest("expungeVirtualMachine", p.toURLValues())
  4334. if err != nil {
  4335. return nil, err
  4336. }
  4337. var r ExpungeVirtualMachineResponse
  4338. if err := json.Unmarshal(resp, &r); err != nil {
  4339. return nil, err
  4340. }
  4341. // If we have a async client, we need to wait for the async result
  4342. if s.cs.async {
  4343. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  4344. if err != nil {
  4345. if err == AsyncTimeoutErr {
  4346. return &r, err
  4347. }
  4348. return nil, err
  4349. }
  4350. if err := json.Unmarshal(b, &r); err != nil {
  4351. return nil, err
  4352. }
  4353. }
  4354. return &r, nil
  4355. }
  4356. type ExpungeVirtualMachineResponse struct {
  4357. JobID string `json:"jobid,omitempty"`
  4358. Displaytext string `json:"displaytext,omitempty"`
  4359. Success bool `json:"success,omitempty"`
  4360. }
  4361. type CleanVMReservationsParams struct {
  4362. p map[string]interface{}
  4363. }
  4364. func (p *CleanVMReservationsParams) toURLValues() url.Values {
  4365. u := url.Values{}
  4366. if p.p == nil {
  4367. return u
  4368. }
  4369. return u
  4370. }
  4371. // You should always use this function to get a new CleanVMReservationsParams instance,
  4372. // as then you are sure you have configured all required params
  4373. func (s *VirtualMachineService) NewCleanVMReservationsParams() *CleanVMReservationsParams {
  4374. p := &CleanVMReservationsParams{}
  4375. p.p = make(map[string]interface{})
  4376. return p
  4377. }
  4378. // Cleanups VM reservations in the database.
  4379. func (s *VirtualMachineService) CleanVMReservations(p *CleanVMReservationsParams) (*CleanVMReservationsResponse, error) {
  4380. resp, err := s.cs.newRequest("cleanVMReservations", p.toURLValues())
  4381. if err != nil {
  4382. return nil, err
  4383. }
  4384. var r CleanVMReservationsResponse
  4385. if err := json.Unmarshal(resp, &r); err != nil {
  4386. return nil, err
  4387. }
  4388. // If we have a async client, we need to wait for the async result
  4389. if s.cs.async {
  4390. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  4391. if err != nil {
  4392. if err == AsyncTimeoutErr {
  4393. return &r, err
  4394. }
  4395. return nil, err
  4396. }
  4397. if err := json.Unmarshal(b, &r); err != nil {
  4398. return nil, err
  4399. }
  4400. }
  4401. return &r, nil
  4402. }
  4403. type CleanVMReservationsResponse struct {
  4404. JobID string `json:"jobid,omitempty"`
  4405. Displaytext string `json:"displaytext,omitempty"`
  4406. Success bool `json:"success,omitempty"`
  4407. }
  4408. type AddNicToVirtualMachineParams struct {
  4409. p map[string]interface{}
  4410. }
  4411. func (p *AddNicToVirtualMachineParams) toURLValues() url.Values {
  4412. u := url.Values{}
  4413. if p.p == nil {
  4414. return u
  4415. }
  4416. if v, found := p.p["ipaddress"]; found {
  4417. u.Set("ipaddress", v.(string))
  4418. }
  4419. if v, found := p.p["networkid"]; found {
  4420. u.Set("networkid", v.(string))
  4421. }
  4422. if v, found := p.p["virtualmachineid"]; found {
  4423. u.Set("virtualmachineid", v.(string))
  4424. }
  4425. return u
  4426. }
  4427. func (p *AddNicToVirtualMachineParams) SetIpaddress(v string) {
  4428. if p.p == nil {
  4429. p.p = make(map[string]interface{})
  4430. }
  4431. p.p["ipaddress"] = v
  4432. return
  4433. }
  4434. func (p *AddNicToVirtualMachineParams) SetNetworkid(v string) {
  4435. if p.p == nil {
  4436. p.p = make(map[string]interface{})
  4437. }
  4438. p.p["networkid"] = v
  4439. return
  4440. }
  4441. func (p *AddNicToVirtualMachineParams) SetVirtualmachineid(v string) {
  4442. if p.p == nil {
  4443. p.p = make(map[string]interface{})
  4444. }
  4445. p.p["virtualmachineid"] = v
  4446. return
  4447. }
  4448. // You should always use this function to get a new AddNicToVirtualMachineParams instance,
  4449. // as then you are sure you have configured all required params
  4450. func (s *VirtualMachineService) NewAddNicToVirtualMachineParams(networkid string, virtualmachineid string) *AddNicToVirtualMachineParams {
  4451. p := &AddNicToVirtualMachineParams{}
  4452. p.p = make(map[string]interface{})
  4453. p.p["networkid"] = networkid
  4454. p.p["virtualmachineid"] = virtualmachineid
  4455. return p
  4456. }
  4457. // Adds VM to specified network by creating a NIC
  4458. func (s *VirtualMachineService) AddNicToVirtualMachine(p *AddNicToVirtualMachineParams) (*AddNicToVirtualMachineResponse, error) {
  4459. resp, err := s.cs.newRequest("addNicToVirtualMachine", p.toURLValues())
  4460. if err != nil {
  4461. return nil, err
  4462. }
  4463. var r AddNicToVirtualMachineResponse
  4464. if err := json.Unmarshal(resp, &r); err != nil {
  4465. return nil, err
  4466. }
  4467. // If we have a async client, we need to wait for the async result
  4468. if s.cs.async {
  4469. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  4470. if err != nil {
  4471. if err == AsyncTimeoutErr {
  4472. return &r, err
  4473. }
  4474. return nil, err
  4475. }
  4476. b, err = getRawValue(b)
  4477. if err != nil {
  4478. return nil, err
  4479. }
  4480. if err := json.Unmarshal(b, &r); err != nil {
  4481. return nil, err
  4482. }
  4483. }
  4484. return &r, nil
  4485. }
  4486. type AddNicToVirtualMachineResponse struct {
  4487. JobID string `json:"jobid,omitempty"`
  4488. Account string `json:"account,omitempty"`
  4489. Affinitygroup []struct {
  4490. Account string `json:"account,omitempty"`
  4491. Description string `json:"description,omitempty"`
  4492. Domain string `json:"domain,omitempty"`
  4493. Domainid string `json:"domainid,omitempty"`
  4494. Id string `json:"id,omitempty"`
  4495. Name string `json:"name,omitempty"`
  4496. Project string `json:"project,omitempty"`
  4497. Projectid string `json:"projectid,omitempty"`
  4498. Type string `json:"type,omitempty"`
  4499. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  4500. } `json:"affinitygroup,omitempty"`
  4501. Cpunumber int `json:"cpunumber,omitempty"`
  4502. Cpuspeed int `json:"cpuspeed,omitempty"`
  4503. Cpuused string `json:"cpuused,omitempty"`
  4504. Created string `json:"created,omitempty"`
  4505. Details map[string]string `json:"details,omitempty"`
  4506. Diskioread int64 `json:"diskioread,omitempty"`
  4507. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  4508. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  4509. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  4510. Diskofferingid string `json:"diskofferingid,omitempty"`
  4511. Diskofferingname string `json:"diskofferingname,omitempty"`
  4512. Displayname string `json:"displayname,omitempty"`
  4513. Displayvm bool `json:"displayvm,omitempty"`
  4514. Domain string `json:"domain,omitempty"`
  4515. Domainid string `json:"domainid,omitempty"`
  4516. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  4517. Group string `json:"group,omitempty"`
  4518. Groupid string `json:"groupid,omitempty"`
  4519. Guestosid string `json:"guestosid,omitempty"`
  4520. Haenable bool `json:"haenable,omitempty"`
  4521. Hostid string `json:"hostid,omitempty"`
  4522. Hostname string `json:"hostname,omitempty"`
  4523. Hypervisor string `json:"hypervisor,omitempty"`
  4524. Id string `json:"id,omitempty"`
  4525. Instancename string `json:"instancename,omitempty"`
  4526. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  4527. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  4528. Isoid string `json:"isoid,omitempty"`
  4529. Isoname string `json:"isoname,omitempty"`
  4530. Keypair string `json:"keypair,omitempty"`
  4531. Memory int `json:"memory,omitempty"`
  4532. Name string `json:"name,omitempty"`
  4533. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  4534. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  4535. Nic []struct {
  4536. Broadcasturi string `json:"broadcasturi,omitempty"`
  4537. Deviceid string `json:"deviceid,omitempty"`
  4538. Gateway string `json:"gateway,omitempty"`
  4539. Id string `json:"id,omitempty"`
  4540. Ip6address string `json:"ip6address,omitempty"`
  4541. Ip6cidr string `json:"ip6cidr,omitempty"`
  4542. Ip6gateway string `json:"ip6gateway,omitempty"`
  4543. Ipaddress string `json:"ipaddress,omitempty"`
  4544. Isdefault bool `json:"isdefault,omitempty"`
  4545. Isolationuri string `json:"isolationuri,omitempty"`
  4546. Macaddress string `json:"macaddress,omitempty"`
  4547. Netmask string `json:"netmask,omitempty"`
  4548. Networkid string `json:"networkid,omitempty"`
  4549. Networkname string `json:"networkname,omitempty"`
  4550. Secondaryip []struct {
  4551. Id string `json:"id,omitempty"`
  4552. Ipaddress string `json:"ipaddress,omitempty"`
  4553. } `json:"secondaryip,omitempty"`
  4554. Traffictype string `json:"traffictype,omitempty"`
  4555. Type string `json:"type,omitempty"`
  4556. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  4557. } `json:"nic,omitempty"`
  4558. Ostypeid int64 `json:"ostypeid,omitempty"`
  4559. Password string `json:"password,omitempty"`
  4560. Passwordenabled bool `json:"passwordenabled,omitempty"`
  4561. Project string `json:"project,omitempty"`
  4562. Projectid string `json:"projectid,omitempty"`
  4563. Publicip string `json:"publicip,omitempty"`
  4564. Publicipid string `json:"publicipid,omitempty"`
  4565. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  4566. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  4567. Securitygroup []struct {
  4568. Account string `json:"account,omitempty"`
  4569. Description string `json:"description,omitempty"`
  4570. Domain string `json:"domain,omitempty"`
  4571. Domainid string `json:"domainid,omitempty"`
  4572. Egressrule []struct {
  4573. Account string `json:"account,omitempty"`
  4574. Cidr string `json:"cidr,omitempty"`
  4575. Endport int `json:"endport,omitempty"`
  4576. Icmpcode int `json:"icmpcode,omitempty"`
  4577. Icmptype int `json:"icmptype,omitempty"`
  4578. Protocol string `json:"protocol,omitempty"`
  4579. Ruleid string `json:"ruleid,omitempty"`
  4580. Securitygroupname string `json:"securitygroupname,omitempty"`
  4581. Startport int `json:"startport,omitempty"`
  4582. Tags []struct {
  4583. Account string `json:"account,omitempty"`
  4584. Customer string `json:"customer,omitempty"`
  4585. Domain string `json:"domain,omitempty"`
  4586. Domainid string `json:"domainid,omitempty"`
  4587. Key string `json:"key,omitempty"`
  4588. Project string `json:"project,omitempty"`
  4589. Projectid string `json:"projectid,omitempty"`
  4590. Resourceid string `json:"resourceid,omitempty"`
  4591. Resourcetype string `json:"resourcetype,omitempty"`
  4592. Value string `json:"value,omitempty"`
  4593. } `json:"tags,omitempty"`
  4594. } `json:"egressrule,omitempty"`
  4595. Id string `json:"id,omitempty"`
  4596. Ingressrule []struct {
  4597. Account string `json:"account,omitempty"`
  4598. Cidr string `json:"cidr,omitempty"`
  4599. Endport int `json:"endport,omitempty"`
  4600. Icmpcode int `json:"icmpcode,omitempty"`
  4601. Icmptype int `json:"icmptype,omitempty"`
  4602. Protocol string `json:"protocol,omitempty"`
  4603. Ruleid string `json:"ruleid,omitempty"`
  4604. Securitygroupname string `json:"securitygroupname,omitempty"`
  4605. Startport int `json:"startport,omitempty"`
  4606. Tags []struct {
  4607. Account string `json:"account,omitempty"`
  4608. Customer string `json:"customer,omitempty"`
  4609. Domain string `json:"domain,omitempty"`
  4610. Domainid string `json:"domainid,omitempty"`
  4611. Key string `json:"key,omitempty"`
  4612. Project string `json:"project,omitempty"`
  4613. Projectid string `json:"projectid,omitempty"`
  4614. Resourceid string `json:"resourceid,omitempty"`
  4615. Resourcetype string `json:"resourcetype,omitempty"`
  4616. Value string `json:"value,omitempty"`
  4617. } `json:"tags,omitempty"`
  4618. } `json:"ingressrule,omitempty"`
  4619. Name string `json:"name,omitempty"`
  4620. Project string `json:"project,omitempty"`
  4621. Projectid string `json:"projectid,omitempty"`
  4622. Tags []struct {
  4623. Account string `json:"account,omitempty"`
  4624. Customer string `json:"customer,omitempty"`
  4625. Domain string `json:"domain,omitempty"`
  4626. Domainid string `json:"domainid,omitempty"`
  4627. Key string `json:"key,omitempty"`
  4628. Project string `json:"project,omitempty"`
  4629. Projectid string `json:"projectid,omitempty"`
  4630. Resourceid string `json:"resourceid,omitempty"`
  4631. Resourcetype string `json:"resourcetype,omitempty"`
  4632. Value string `json:"value,omitempty"`
  4633. } `json:"tags,omitempty"`
  4634. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  4635. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  4636. } `json:"securitygroup,omitempty"`
  4637. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  4638. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  4639. Servicestate string `json:"servicestate,omitempty"`
  4640. State string `json:"state,omitempty"`
  4641. Tags []struct {
  4642. Account string `json:"account,omitempty"`
  4643. Customer string `json:"customer,omitempty"`
  4644. Domain string `json:"domain,omitempty"`
  4645. Domainid string `json:"domainid,omitempty"`
  4646. Key string `json:"key,omitempty"`
  4647. Project string `json:"project,omitempty"`
  4648. Projectid string `json:"projectid,omitempty"`
  4649. Resourceid string `json:"resourceid,omitempty"`
  4650. Resourcetype string `json:"resourcetype,omitempty"`
  4651. Value string `json:"value,omitempty"`
  4652. } `json:"tags,omitempty"`
  4653. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  4654. Templateid string `json:"templateid,omitempty"`
  4655. Templatename string `json:"templatename,omitempty"`
  4656. Userid string `json:"userid,omitempty"`
  4657. Username string `json:"username,omitempty"`
  4658. Vgpu string `json:"vgpu,omitempty"`
  4659. Zoneid string `json:"zoneid,omitempty"`
  4660. Zonename string `json:"zonename,omitempty"`
  4661. }
  4662. type RemoveNicFromVirtualMachineParams struct {
  4663. p map[string]interface{}
  4664. }
  4665. func (p *RemoveNicFromVirtualMachineParams) toURLValues() url.Values {
  4666. u := url.Values{}
  4667. if p.p == nil {
  4668. return u
  4669. }
  4670. if v, found := p.p["nicid"]; found {
  4671. u.Set("nicid", v.(string))
  4672. }
  4673. if v, found := p.p["virtualmachineid"]; found {
  4674. u.Set("virtualmachineid", v.(string))
  4675. }
  4676. return u
  4677. }
  4678. func (p *RemoveNicFromVirtualMachineParams) SetNicid(v string) {
  4679. if p.p == nil {
  4680. p.p = make(map[string]interface{})
  4681. }
  4682. p.p["nicid"] = v
  4683. return
  4684. }
  4685. func (p *RemoveNicFromVirtualMachineParams) SetVirtualmachineid(v string) {
  4686. if p.p == nil {
  4687. p.p = make(map[string]interface{})
  4688. }
  4689. p.p["virtualmachineid"] = v
  4690. return
  4691. }
  4692. // You should always use this function to get a new RemoveNicFromVirtualMachineParams instance,
  4693. // as then you are sure you have configured all required params
  4694. func (s *VirtualMachineService) NewRemoveNicFromVirtualMachineParams(nicid string, virtualmachineid string) *RemoveNicFromVirtualMachineParams {
  4695. p := &RemoveNicFromVirtualMachineParams{}
  4696. p.p = make(map[string]interface{})
  4697. p.p["nicid"] = nicid
  4698. p.p["virtualmachineid"] = virtualmachineid
  4699. return p
  4700. }
  4701. // Removes VM from specified network by deleting a NIC
  4702. func (s *VirtualMachineService) RemoveNicFromVirtualMachine(p *RemoveNicFromVirtualMachineParams) (*RemoveNicFromVirtualMachineResponse, error) {
  4703. resp, err := s.cs.newRequest("removeNicFromVirtualMachine", p.toURLValues())
  4704. if err != nil {
  4705. return nil, err
  4706. }
  4707. var r RemoveNicFromVirtualMachineResponse
  4708. if err := json.Unmarshal(resp, &r); err != nil {
  4709. return nil, err
  4710. }
  4711. // If we have a async client, we need to wait for the async result
  4712. if s.cs.async {
  4713. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  4714. if err != nil {
  4715. if err == AsyncTimeoutErr {
  4716. return &r, err
  4717. }
  4718. return nil, err
  4719. }
  4720. b, err = getRawValue(b)
  4721. if err != nil {
  4722. return nil, err
  4723. }
  4724. if err := json.Unmarshal(b, &r); err != nil {
  4725. return nil, err
  4726. }
  4727. }
  4728. return &r, nil
  4729. }
  4730. type RemoveNicFromVirtualMachineResponse struct {
  4731. JobID string `json:"jobid,omitempty"`
  4732. Account string `json:"account,omitempty"`
  4733. Affinitygroup []struct {
  4734. Account string `json:"account,omitempty"`
  4735. Description string `json:"description,omitempty"`
  4736. Domain string `json:"domain,omitempty"`
  4737. Domainid string `json:"domainid,omitempty"`
  4738. Id string `json:"id,omitempty"`
  4739. Name string `json:"name,omitempty"`
  4740. Project string `json:"project,omitempty"`
  4741. Projectid string `json:"projectid,omitempty"`
  4742. Type string `json:"type,omitempty"`
  4743. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  4744. } `json:"affinitygroup,omitempty"`
  4745. Cpunumber int `json:"cpunumber,omitempty"`
  4746. Cpuspeed int `json:"cpuspeed,omitempty"`
  4747. Cpuused string `json:"cpuused,omitempty"`
  4748. Created string `json:"created,omitempty"`
  4749. Details map[string]string `json:"details,omitempty"`
  4750. Diskioread int64 `json:"diskioread,omitempty"`
  4751. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  4752. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  4753. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  4754. Diskofferingid string `json:"diskofferingid,omitempty"`
  4755. Diskofferingname string `json:"diskofferingname,omitempty"`
  4756. Displayname string `json:"displayname,omitempty"`
  4757. Displayvm bool `json:"displayvm,omitempty"`
  4758. Domain string `json:"domain,omitempty"`
  4759. Domainid string `json:"domainid,omitempty"`
  4760. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  4761. Group string `json:"group,omitempty"`
  4762. Groupid string `json:"groupid,omitempty"`
  4763. Guestosid string `json:"guestosid,omitempty"`
  4764. Haenable bool `json:"haenable,omitempty"`
  4765. Hostid string `json:"hostid,omitempty"`
  4766. Hostname string `json:"hostname,omitempty"`
  4767. Hypervisor string `json:"hypervisor,omitempty"`
  4768. Id string `json:"id,omitempty"`
  4769. Instancename string `json:"instancename,omitempty"`
  4770. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  4771. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  4772. Isoid string `json:"isoid,omitempty"`
  4773. Isoname string `json:"isoname,omitempty"`
  4774. Keypair string `json:"keypair,omitempty"`
  4775. Memory int `json:"memory,omitempty"`
  4776. Name string `json:"name,omitempty"`
  4777. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  4778. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  4779. Nic []struct {
  4780. Broadcasturi string `json:"broadcasturi,omitempty"`
  4781. Deviceid string `json:"deviceid,omitempty"`
  4782. Gateway string `json:"gateway,omitempty"`
  4783. Id string `json:"id,omitempty"`
  4784. Ip6address string `json:"ip6address,omitempty"`
  4785. Ip6cidr string `json:"ip6cidr,omitempty"`
  4786. Ip6gateway string `json:"ip6gateway,omitempty"`
  4787. Ipaddress string `json:"ipaddress,omitempty"`
  4788. Isdefault bool `json:"isdefault,omitempty"`
  4789. Isolationuri string `json:"isolationuri,omitempty"`
  4790. Macaddress string `json:"macaddress,omitempty"`
  4791. Netmask string `json:"netmask,omitempty"`
  4792. Networkid string `json:"networkid,omitempty"`
  4793. Networkname string `json:"networkname,omitempty"`
  4794. Secondaryip []struct {
  4795. Id string `json:"id,omitempty"`
  4796. Ipaddress string `json:"ipaddress,omitempty"`
  4797. } `json:"secondaryip,omitempty"`
  4798. Traffictype string `json:"traffictype,omitempty"`
  4799. Type string `json:"type,omitempty"`
  4800. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  4801. } `json:"nic,omitempty"`
  4802. Ostypeid int64 `json:"ostypeid,omitempty"`
  4803. Password string `json:"password,omitempty"`
  4804. Passwordenabled bool `json:"passwordenabled,omitempty"`
  4805. Project string `json:"project,omitempty"`
  4806. Projectid string `json:"projectid,omitempty"`
  4807. Publicip string `json:"publicip,omitempty"`
  4808. Publicipid string `json:"publicipid,omitempty"`
  4809. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  4810. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  4811. Securitygroup []struct {
  4812. Account string `json:"account,omitempty"`
  4813. Description string `json:"description,omitempty"`
  4814. Domain string `json:"domain,omitempty"`
  4815. Domainid string `json:"domainid,omitempty"`
  4816. Egressrule []struct {
  4817. Account string `json:"account,omitempty"`
  4818. Cidr string `json:"cidr,omitempty"`
  4819. Endport int `json:"endport,omitempty"`
  4820. Icmpcode int `json:"icmpcode,omitempty"`
  4821. Icmptype int `json:"icmptype,omitempty"`
  4822. Protocol string `json:"protocol,omitempty"`
  4823. Ruleid string `json:"ruleid,omitempty"`
  4824. Securitygroupname string `json:"securitygroupname,omitempty"`
  4825. Startport int `json:"startport,omitempty"`
  4826. Tags []struct {
  4827. Account string `json:"account,omitempty"`
  4828. Customer string `json:"customer,omitempty"`
  4829. Domain string `json:"domain,omitempty"`
  4830. Domainid string `json:"domainid,omitempty"`
  4831. Key string `json:"key,omitempty"`
  4832. Project string `json:"project,omitempty"`
  4833. Projectid string `json:"projectid,omitempty"`
  4834. Resourceid string `json:"resourceid,omitempty"`
  4835. Resourcetype string `json:"resourcetype,omitempty"`
  4836. Value string `json:"value,omitempty"`
  4837. } `json:"tags,omitempty"`
  4838. } `json:"egressrule,omitempty"`
  4839. Id string `json:"id,omitempty"`
  4840. Ingressrule []struct {
  4841. Account string `json:"account,omitempty"`
  4842. Cidr string `json:"cidr,omitempty"`
  4843. Endport int `json:"endport,omitempty"`
  4844. Icmpcode int `json:"icmpcode,omitempty"`
  4845. Icmptype int `json:"icmptype,omitempty"`
  4846. Protocol string `json:"protocol,omitempty"`
  4847. Ruleid string `json:"ruleid,omitempty"`
  4848. Securitygroupname string `json:"securitygroupname,omitempty"`
  4849. Startport int `json:"startport,omitempty"`
  4850. Tags []struct {
  4851. Account string `json:"account,omitempty"`
  4852. Customer string `json:"customer,omitempty"`
  4853. Domain string `json:"domain,omitempty"`
  4854. Domainid string `json:"domainid,omitempty"`
  4855. Key string `json:"key,omitempty"`
  4856. Project string `json:"project,omitempty"`
  4857. Projectid string `json:"projectid,omitempty"`
  4858. Resourceid string `json:"resourceid,omitempty"`
  4859. Resourcetype string `json:"resourcetype,omitempty"`
  4860. Value string `json:"value,omitempty"`
  4861. } `json:"tags,omitempty"`
  4862. } `json:"ingressrule,omitempty"`
  4863. Name string `json:"name,omitempty"`
  4864. Project string `json:"project,omitempty"`
  4865. Projectid string `json:"projectid,omitempty"`
  4866. Tags []struct {
  4867. Account string `json:"account,omitempty"`
  4868. Customer string `json:"customer,omitempty"`
  4869. Domain string `json:"domain,omitempty"`
  4870. Domainid string `json:"domainid,omitempty"`
  4871. Key string `json:"key,omitempty"`
  4872. Project string `json:"project,omitempty"`
  4873. Projectid string `json:"projectid,omitempty"`
  4874. Resourceid string `json:"resourceid,omitempty"`
  4875. Resourcetype string `json:"resourcetype,omitempty"`
  4876. Value string `json:"value,omitempty"`
  4877. } `json:"tags,omitempty"`
  4878. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  4879. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  4880. } `json:"securitygroup,omitempty"`
  4881. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  4882. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  4883. Servicestate string `json:"servicestate,omitempty"`
  4884. State string `json:"state,omitempty"`
  4885. Tags []struct {
  4886. Account string `json:"account,omitempty"`
  4887. Customer string `json:"customer,omitempty"`
  4888. Domain string `json:"domain,omitempty"`
  4889. Domainid string `json:"domainid,omitempty"`
  4890. Key string `json:"key,omitempty"`
  4891. Project string `json:"project,omitempty"`
  4892. Projectid string `json:"projectid,omitempty"`
  4893. Resourceid string `json:"resourceid,omitempty"`
  4894. Resourcetype string `json:"resourcetype,omitempty"`
  4895. Value string `json:"value,omitempty"`
  4896. } `json:"tags,omitempty"`
  4897. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  4898. Templateid string `json:"templateid,omitempty"`
  4899. Templatename string `json:"templatename,omitempty"`
  4900. Userid string `json:"userid,omitempty"`
  4901. Username string `json:"username,omitempty"`
  4902. Vgpu string `json:"vgpu,omitempty"`
  4903. Zoneid string `json:"zoneid,omitempty"`
  4904. Zonename string `json:"zonename,omitempty"`
  4905. }
  4906. type UpdateDefaultNicForVirtualMachineParams struct {
  4907. p map[string]interface{}
  4908. }
  4909. func (p *UpdateDefaultNicForVirtualMachineParams) toURLValues() url.Values {
  4910. u := url.Values{}
  4911. if p.p == nil {
  4912. return u
  4913. }
  4914. if v, found := p.p["nicid"]; found {
  4915. u.Set("nicid", v.(string))
  4916. }
  4917. if v, found := p.p["virtualmachineid"]; found {
  4918. u.Set("virtualmachineid", v.(string))
  4919. }
  4920. return u
  4921. }
  4922. func (p *UpdateDefaultNicForVirtualMachineParams) SetNicid(v string) {
  4923. if p.p == nil {
  4924. p.p = make(map[string]interface{})
  4925. }
  4926. p.p["nicid"] = v
  4927. return
  4928. }
  4929. func (p *UpdateDefaultNicForVirtualMachineParams) SetVirtualmachineid(v string) {
  4930. if p.p == nil {
  4931. p.p = make(map[string]interface{})
  4932. }
  4933. p.p["virtualmachineid"] = v
  4934. return
  4935. }
  4936. // You should always use this function to get a new UpdateDefaultNicForVirtualMachineParams instance,
  4937. // as then you are sure you have configured all required params
  4938. func (s *VirtualMachineService) NewUpdateDefaultNicForVirtualMachineParams(nicid string, virtualmachineid string) *UpdateDefaultNicForVirtualMachineParams {
  4939. p := &UpdateDefaultNicForVirtualMachineParams{}
  4940. p.p = make(map[string]interface{})
  4941. p.p["nicid"] = nicid
  4942. p.p["virtualmachineid"] = virtualmachineid
  4943. return p
  4944. }
  4945. // Changes the default NIC on a VM
  4946. func (s *VirtualMachineService) UpdateDefaultNicForVirtualMachine(p *UpdateDefaultNicForVirtualMachineParams) (*UpdateDefaultNicForVirtualMachineResponse, error) {
  4947. resp, err := s.cs.newRequest("updateDefaultNicForVirtualMachine", p.toURLValues())
  4948. if err != nil {
  4949. return nil, err
  4950. }
  4951. var r UpdateDefaultNicForVirtualMachineResponse
  4952. if err := json.Unmarshal(resp, &r); err != nil {
  4953. return nil, err
  4954. }
  4955. // If we have a async client, we need to wait for the async result
  4956. if s.cs.async {
  4957. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  4958. if err != nil {
  4959. if err == AsyncTimeoutErr {
  4960. return &r, err
  4961. }
  4962. return nil, err
  4963. }
  4964. b, err = getRawValue(b)
  4965. if err != nil {
  4966. return nil, err
  4967. }
  4968. if err := json.Unmarshal(b, &r); err != nil {
  4969. return nil, err
  4970. }
  4971. }
  4972. return &r, nil
  4973. }
  4974. type UpdateDefaultNicForVirtualMachineResponse struct {
  4975. JobID string `json:"jobid,omitempty"`
  4976. Account string `json:"account,omitempty"`
  4977. Affinitygroup []struct {
  4978. Account string `json:"account,omitempty"`
  4979. Description string `json:"description,omitempty"`
  4980. Domain string `json:"domain,omitempty"`
  4981. Domainid string `json:"domainid,omitempty"`
  4982. Id string `json:"id,omitempty"`
  4983. Name string `json:"name,omitempty"`
  4984. Project string `json:"project,omitempty"`
  4985. Projectid string `json:"projectid,omitempty"`
  4986. Type string `json:"type,omitempty"`
  4987. VirtualmachineIds []string `json:"virtualmachineIds,omitempty"`
  4988. } `json:"affinitygroup,omitempty"`
  4989. Cpunumber int `json:"cpunumber,omitempty"`
  4990. Cpuspeed int `json:"cpuspeed,omitempty"`
  4991. Cpuused string `json:"cpuused,omitempty"`
  4992. Created string `json:"created,omitempty"`
  4993. Details map[string]string `json:"details,omitempty"`
  4994. Diskioread int64 `json:"diskioread,omitempty"`
  4995. Diskiowrite int64 `json:"diskiowrite,omitempty"`
  4996. Diskkbsread int64 `json:"diskkbsread,omitempty"`
  4997. Diskkbswrite int64 `json:"diskkbswrite,omitempty"`
  4998. Diskofferingid string `json:"diskofferingid,omitempty"`
  4999. Diskofferingname string `json:"diskofferingname,omitempty"`
  5000. Displayname string `json:"displayname,omitempty"`
  5001. Displayvm bool `json:"displayvm,omitempty"`
  5002. Domain string `json:"domain,omitempty"`
  5003. Domainid string `json:"domainid,omitempty"`
  5004. Forvirtualnetwork bool `json:"forvirtualnetwork,omitempty"`
  5005. Group string `json:"group,omitempty"`
  5006. Groupid string `json:"groupid,omitempty"`
  5007. Guestosid string `json:"guestosid,omitempty"`
  5008. Haenable bool `json:"haenable,omitempty"`
  5009. Hostid string `json:"hostid,omitempty"`
  5010. Hostname string `json:"hostname,omitempty"`
  5011. Hypervisor string `json:"hypervisor,omitempty"`
  5012. Id string `json:"id,omitempty"`
  5013. Instancename string `json:"instancename,omitempty"`
  5014. Isdynamicallyscalable bool `json:"isdynamicallyscalable,omitempty"`
  5015. Isodisplaytext string `json:"isodisplaytext,omitempty"`
  5016. Isoid string `json:"isoid,omitempty"`
  5017. Isoname string `json:"isoname,omitempty"`
  5018. Keypair string `json:"keypair,omitempty"`
  5019. Memory int `json:"memory,omitempty"`
  5020. Name string `json:"name,omitempty"`
  5021. Networkkbsread int64 `json:"networkkbsread,omitempty"`
  5022. Networkkbswrite int64 `json:"networkkbswrite,omitempty"`
  5023. Nic []struct {
  5024. Broadcasturi string `json:"broadcasturi,omitempty"`
  5025. Deviceid string `json:"deviceid,omitempty"`
  5026. Gateway string `json:"gateway,omitempty"`
  5027. Id string `json:"id,omitempty"`
  5028. Ip6address string `json:"ip6address,omitempty"`
  5029. Ip6cidr string `json:"ip6cidr,omitempty"`
  5030. Ip6gateway string `json:"ip6gateway,omitempty"`
  5031. Ipaddress string `json:"ipaddress,omitempty"`
  5032. Isdefault bool `json:"isdefault,omitempty"`
  5033. Isolationuri string `json:"isolationuri,omitempty"`
  5034. Macaddress string `json:"macaddress,omitempty"`
  5035. Netmask string `json:"netmask,omitempty"`
  5036. Networkid string `json:"networkid,omitempty"`
  5037. Networkname string `json:"networkname,omitempty"`
  5038. Secondaryip []struct {
  5039. Id string `json:"id,omitempty"`
  5040. Ipaddress string `json:"ipaddress,omitempty"`
  5041. } `json:"secondaryip,omitempty"`
  5042. Traffictype string `json:"traffictype,omitempty"`
  5043. Type string `json:"type,omitempty"`
  5044. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  5045. } `json:"nic,omitempty"`
  5046. Ostypeid int64 `json:"ostypeid,omitempty"`
  5047. Password string `json:"password,omitempty"`
  5048. Passwordenabled bool `json:"passwordenabled,omitempty"`
  5049. Project string `json:"project,omitempty"`
  5050. Projectid string `json:"projectid,omitempty"`
  5051. Publicip string `json:"publicip,omitempty"`
  5052. Publicipid string `json:"publicipid,omitempty"`
  5053. Rootdeviceid int64 `json:"rootdeviceid,omitempty"`
  5054. Rootdevicetype string `json:"rootdevicetype,omitempty"`
  5055. Securitygroup []struct {
  5056. Account string `json:"account,omitempty"`
  5057. Description string `json:"description,omitempty"`
  5058. Domain string `json:"domain,omitempty"`
  5059. Domainid string `json:"domainid,omitempty"`
  5060. Egressrule []struct {
  5061. Account string `json:"account,omitempty"`
  5062. Cidr string `json:"cidr,omitempty"`
  5063. Endport int `json:"endport,omitempty"`
  5064. Icmpcode int `json:"icmpcode,omitempty"`
  5065. Icmptype int `json:"icmptype,omitempty"`
  5066. Protocol string `json:"protocol,omitempty"`
  5067. Ruleid string `json:"ruleid,omitempty"`
  5068. Securitygroupname string `json:"securitygroupname,omitempty"`
  5069. Startport int `json:"startport,omitempty"`
  5070. Tags []struct {
  5071. Account string `json:"account,omitempty"`
  5072. Customer string `json:"customer,omitempty"`
  5073. Domain string `json:"domain,omitempty"`
  5074. Domainid string `json:"domainid,omitempty"`
  5075. Key string `json:"key,omitempty"`
  5076. Project string `json:"project,omitempty"`
  5077. Projectid string `json:"projectid,omitempty"`
  5078. Resourceid string `json:"resourceid,omitempty"`
  5079. Resourcetype string `json:"resourcetype,omitempty"`
  5080. Value string `json:"value,omitempty"`
  5081. } `json:"tags,omitempty"`
  5082. } `json:"egressrule,omitempty"`
  5083. Id string `json:"id,omitempty"`
  5084. Ingressrule []struct {
  5085. Account string `json:"account,omitempty"`
  5086. Cidr string `json:"cidr,omitempty"`
  5087. Endport int `json:"endport,omitempty"`
  5088. Icmpcode int `json:"icmpcode,omitempty"`
  5089. Icmptype int `json:"icmptype,omitempty"`
  5090. Protocol string `json:"protocol,omitempty"`
  5091. Ruleid string `json:"ruleid,omitempty"`
  5092. Securitygroupname string `json:"securitygroupname,omitempty"`
  5093. Startport int `json:"startport,omitempty"`
  5094. Tags []struct {
  5095. Account string `json:"account,omitempty"`
  5096. Customer string `json:"customer,omitempty"`
  5097. Domain string `json:"domain,omitempty"`
  5098. Domainid string `json:"domainid,omitempty"`
  5099. Key string `json:"key,omitempty"`
  5100. Project string `json:"project,omitempty"`
  5101. Projectid string `json:"projectid,omitempty"`
  5102. Resourceid string `json:"resourceid,omitempty"`
  5103. Resourcetype string `json:"resourcetype,omitempty"`
  5104. Value string `json:"value,omitempty"`
  5105. } `json:"tags,omitempty"`
  5106. } `json:"ingressrule,omitempty"`
  5107. Name string `json:"name,omitempty"`
  5108. Project string `json:"project,omitempty"`
  5109. Projectid string `json:"projectid,omitempty"`
  5110. Tags []struct {
  5111. Account string `json:"account,omitempty"`
  5112. Customer string `json:"customer,omitempty"`
  5113. Domain string `json:"domain,omitempty"`
  5114. Domainid string `json:"domainid,omitempty"`
  5115. Key string `json:"key,omitempty"`
  5116. Project string `json:"project,omitempty"`
  5117. Projectid string `json:"projectid,omitempty"`
  5118. Resourceid string `json:"resourceid,omitempty"`
  5119. Resourcetype string `json:"resourcetype,omitempty"`
  5120. Value string `json:"value,omitempty"`
  5121. } `json:"tags,omitempty"`
  5122. Virtualmachinecount int `json:"virtualmachinecount,omitempty"`
  5123. Virtualmachineids []string `json:"virtualmachineids,omitempty"`
  5124. } `json:"securitygroup,omitempty"`
  5125. Serviceofferingid string `json:"serviceofferingid,omitempty"`
  5126. Serviceofferingname string `json:"serviceofferingname,omitempty"`
  5127. Servicestate string `json:"servicestate,omitempty"`
  5128. State string `json:"state,omitempty"`
  5129. Tags []struct {
  5130. Account string `json:"account,omitempty"`
  5131. Customer string `json:"customer,omitempty"`
  5132. Domain string `json:"domain,omitempty"`
  5133. Domainid string `json:"domainid,omitempty"`
  5134. Key string `json:"key,omitempty"`
  5135. Project string `json:"project,omitempty"`
  5136. Projectid string `json:"projectid,omitempty"`
  5137. Resourceid string `json:"resourceid,omitempty"`
  5138. Resourcetype string `json:"resourcetype,omitempty"`
  5139. Value string `json:"value,omitempty"`
  5140. } `json:"tags,omitempty"`
  5141. Templatedisplaytext string `json:"templatedisplaytext,omitempty"`
  5142. Templateid string `json:"templateid,omitempty"`
  5143. Templatename string `json:"templatename,omitempty"`
  5144. Userid string `json:"userid,omitempty"`
  5145. Username string `json:"username,omitempty"`
  5146. Vgpu string `json:"vgpu,omitempty"`
  5147. Zoneid string `json:"zoneid,omitempty"`
  5148. Zonename string `json:"zonename,omitempty"`
  5149. }