diff --git a/src/oca/go/src/goca/cluster.go b/src/oca/go/src/goca/cluster.go index a2a5d45276..60e3fd6eba 100644 --- a/src/oca/go/src/goca/cluster.go +++ b/src/oca/go/src/goca/cluster.go @@ -160,5 +160,6 @@ func (cluster *Cluster) Info() error { if err != nil { return err } + *cluster = Cluster{} return xml.Unmarshal([]byte(response.Body()), cluster) } diff --git a/src/oca/go/src/goca/datastore.go b/src/oca/go/src/goca/datastore.go index 328d4746f6..e77d00ccfd 100644 --- a/src/oca/go/src/goca/datastore.go +++ b/src/oca/go/src/goca/datastore.go @@ -183,6 +183,7 @@ func (datastore *Datastore) Info() error { if err != nil { return err } + *datastore = Datastore{} return xml.Unmarshal([]byte(response.Body()), datastore) } diff --git a/src/oca/go/src/goca/group.go b/src/oca/go/src/goca/group.go index e811a20fb0..fb780c2ca6 100644 --- a/src/oca/go/src/goca/group.go +++ b/src/oca/go/src/goca/group.go @@ -7,24 +7,22 @@ import ( // GroupPool represents an OpenNebula GroupPool type GroupPool struct { - Groups []groupBase `xml:"GROUP"` - Quotas []quotas `xml:"QUOTAS"` - DefaultUserQuotas quotasList `xml:"DEFAULT_USER_QUOTAS"` + Groups []Group `xml:"GROUP"` + Quotas []quotas `xml:"QUOTAS"` + DefaultUserQuotas quotasList `xml:"DEFAULT_USER_QUOTAS"` } // Group represents an OpenNebula Group type Group struct { - groupBase - quotasList - DefaultUserQuotas quotasList `xml:"DEFAULT_USER_QUOTAS"` -} - -type groupBase struct { ID uint `xml:"ID"` Name string `xml:"NAME"` Users []int `xml:"USERS>ID"` Admins []int `xml:"ADMINS>ID"` Template groupTemplate `xml:"TEMPLATE"` + + // Variable part between one.grouppool.info and one.group.info + quotasList + DefaultUserQuotas quotasList `xml:"DEFAULT_USER_QUOTAS"` } type groupTemplate struct { @@ -50,7 +48,7 @@ func NewGroupPool() (*GroupPool, error) { // NewGroup finds a group object by ID. No connection to OpenNebula. func NewGroup(id uint) *Group { - return &Group{groupBase: groupBase{ID: id}} + return &Group{ID: id} } // NewGroupFromName finds a group object by name. It connects to @@ -104,6 +102,7 @@ func (group *Group) Info() error { if err != nil { return err } + *group = Group{} return xml.Unmarshal([]byte(response.Body()), group) } diff --git a/src/oca/go/src/goca/host.go b/src/oca/go/src/goca/host.go index f049a6e071..0811489be4 100644 --- a/src/oca/go/src/goca/host.go +++ b/src/oca/go/src/goca/host.go @@ -219,6 +219,7 @@ func (host *Host) Info() error { if err != nil { return err } + *host = Host{} return xml.Unmarshal([]byte(response.Body()), host) } diff --git a/src/oca/go/src/goca/image.go b/src/oca/go/src/goca/image.go index 7ab12cf746..32322c3b48 100644 --- a/src/oca/go/src/goca/image.go +++ b/src/oca/go/src/goca/image.go @@ -193,6 +193,7 @@ func (image *Image) Info() error { if err != nil { return err } + *image = Image{} return xml.Unmarshal([]byte(response.Body()), image) } diff --git a/src/oca/go/src/goca/marketplace.go b/src/oca/go/src/goca/marketplace.go index 74bb37a017..c96e951815 100644 --- a/src/oca/go/src/goca/marketplace.go +++ b/src/oca/go/src/goca/marketplace.go @@ -164,5 +164,6 @@ func (market *MarketPlace) Info() error { if err != nil { return err } + *market = MarketPlace{} return xml.Unmarshal([]byte(response.Body()), market) } diff --git a/src/oca/go/src/goca/marketplaceapp.go b/src/oca/go/src/goca/marketplaceapp.go index 87675cbac5..a83f60d045 100644 --- a/src/oca/go/src/goca/marketplaceapp.go +++ b/src/oca/go/src/goca/marketplaceapp.go @@ -180,6 +180,7 @@ func (marketApp *MarketPlaceApp) Info() error { if err != nil { return err } + *marketApp = MarketPlaceApp{} return xml.Unmarshal([]byte(response.Body()), marketApp) } diff --git a/src/oca/go/src/goca/securitygroup.go b/src/oca/go/src/goca/securitygroup.go index f2ef3db58f..f435e6bdcf 100644 --- a/src/oca/go/src/goca/securitygroup.go +++ b/src/oca/go/src/goca/securitygroup.go @@ -186,5 +186,6 @@ func (sg *SecurityGroup) Info() error { if err != nil { return err } + *sg = SecurityGroup{} return xml.Unmarshal([]byte(response.Body()), sg) } diff --git a/src/oca/go/src/goca/template.go b/src/oca/go/src/goca/template.go index 7f2e2438d4..e8366931ea 100644 --- a/src/oca/go/src/goca/template.go +++ b/src/oca/go/src/goca/template.go @@ -144,6 +144,7 @@ func (template *Template) Info() error { if err != nil { return err } + *template = Template{} return xml.Unmarshal([]byte(response.Body()), template) } diff --git a/src/oca/go/src/goca/user.go b/src/oca/go/src/goca/user.go index 69dc6bc4a6..d0ab414a0f 100644 --- a/src/oca/go/src/goca/user.go +++ b/src/oca/go/src/goca/user.go @@ -7,20 +7,13 @@ import ( // UserPool represents an OpenNebula UserPool type UserPool struct { - Users []userBase `xml:"USER"` + Users []User `xml:"USER"` Quotas []quotas `xml:"QUOTAS"` DefaultUserQuotas quotasList `xml:"DEFAULT_USER_QUOTAS"` } // User represents an OpenNebula user type User struct { - userBase - quotasList - DefaultUserQuotas quotasList `xml:"DEFAULT_USER_QUOTAS"` -} - -// User represents an OpenNebula User -type userBase struct { ID uint `xml:"ID"` GID int `xml:"GID"` GroupsID []int `xml:"GROUPS>ID"` @@ -31,6 +24,10 @@ type userBase struct { Enabled int `xml:"ENABLED"` LoginTokens []loginToken `xml:"LOGIN_TOKEN"` Template userTemplate `xml:"TEMPLATE"` + + // Variable part between one.userpool.info and one.user.info + quotasList + DefaultUserQuotas quotasList `xml:"DEFAULT_USER_QUOTAS"` } type userTemplate struct { @@ -62,7 +59,7 @@ func NewUserPool() (*UserPool, error) { // NewUser finds a user object by ID. No connection to OpenNebula. func NewUser(id uint) *User { - return &User{userBase: userBase{ID: id}} + return &User{ID: id} } // NewUserFromName finds a user object by name. It connects to @@ -180,5 +177,6 @@ func (user *User) Info() error { if err != nil { return err } + *user = User{} return xml.Unmarshal([]byte(response.Body()), user) } diff --git a/src/oca/go/src/goca/vdc.go b/src/oca/go/src/goca/vdc.go index 940eb7d7de..e272bd463b 100644 --- a/src/oca/go/src/goca/vdc.go +++ b/src/oca/go/src/goca/vdc.go @@ -138,6 +138,7 @@ func (vdc *Vdc) Info() error { if err != nil { return err } + *vdc = Vdc{} return xml.Unmarshal([]byte(response.Body()), vdc) } diff --git a/src/oca/go/src/goca/virtualnetwork.go b/src/oca/go/src/goca/virtualnetwork.go index db1016e7ee..b77b941340 100644 --- a/src/oca/go/src/goca/virtualnetwork.go +++ b/src/oca/go/src/goca/virtualnetwork.go @@ -7,18 +7,11 @@ import ( // VirtualNetworkPool represents an OpenNebula VirtualNetworkPool type VirtualNetworkPool struct { - VirtualNetworks []virtualNetworkPoolBase `xml:"VNET"` + VirtualNetworks []VirtualNetwork `xml:"VNET"` } // VirtualNetwork represents an OpenNebula VirtualNetwork type VirtualNetwork struct { - virtualNetworkBase - Lock *Lock `xml:"LOCK"` - ARs []virtualNetworkAR `xml:"AR_POOL>AR"` -} - -// VirtualNetworkBase represents common attributes for parts of VirtualNetworkPool and VirtualNetwork -type virtualNetworkBase struct { ID uint `xml:"ID"` UID int `xml:"UID"` GID int `xml:"GID"` @@ -39,47 +32,39 @@ type virtualNetworkBase struct { UsedLeases int `xml:"USED_LEASES"` VRouters []int `xml:"VROUTERS>ID"` Template virtualNetworkTemplate `xml:"TEMPLATE"` + + // Variable parts between one.vnpool.info and one.vn.info + ARs []virtualNetworkAR `xml:"AR_POOL>AR"` + Lock *Lock `xml:"LOCK"` } type virtualNetworkTemplate struct { Dynamic unmatchedTagsSlice `xml:",any"` } -// AR represent an Address Range -type virtualNetworkPoolBase struct { - virtualNetworkBase - ARs []virtualNetworkARPool `xml:"AR_POOL>AR"` -} - -type virtualNetworkARBase struct { - ARID string `xml:"AR_ID"` - GlobalPrefix string `xml:"GLOBAL_PREFIX"` // minOccurs=0 - IP string `xml:"IP"` // minOccurs=0 - MAC string `xml:"MAC"` - ParentNetworkARID string `xml:"PARENT_NETWORK_AR_ID"` // minOccurs=0 - Size int `xml:"SIZE"` - Type string `xml:"TYPE"` - ULAPrefix string `xml:"ULA_PREFIX"` // minOccurs=0 - VNMAD string `xml:"VN_MAD"` // minOccurs=0 -} - -type virtualNetworkARPool struct { - virtualNetworkARBase - Allocated string `xml:ALLOCATED` -} - type virtualNetworkAR struct { - virtualNetworkARBase - MACEnd string `xml:"MAC_END"` - IPEnd string `xml:"IP_END"` - IP6ULA string `xml:"IP6_ULA"` - IP6ULAEnd string `xml:"IP6_ULA_END"` - IP6Global string `xml:"IP6_GLOBAL"` - IP6GlobalEnd string `xml:"IP6_GLOBAL_END"` - IP6 string `xml:"IP6"` - IP6End string `xml:"IP6_END"` - UsedLeases string `xml:"USED_LEASES"` - Leases []lease `xml:"LEASES>LEASE"` + ARID string `xml:"AR_ID"` + GlobalPrefix string `xml:"GLOBAL_PREFIX"` // minOccurs=0 + IP string `xml:"IP"` // minOccurs=0 + MAC string `xml:"MAC"` + ParentNetworkARID string `xml:"PARENT_NETWORK_AR_ID"` // minOccurs=0 + Size int `xml:"SIZE"` + Type string `xml:"TYPE"` + ULAPrefix string `xml:"ULA_PREFIX"` // minOccurs=0 + VNMAD string `xml:"VN_MAD"` // minOccurs=0 + MACEnd string `xml:"MAC_END"` + IPEnd string `xml:"IP_END"` + IP6ULA string `xml:"IP6_ULA"` + IP6ULAEnd string `xml:"IP6_ULA_END"` + IP6Global string `xml:"IP6_GLOBAL"` + IP6GlobalEnd string `xml:"IP6_GLOBAL_END"` + IP6 string `xml:"IP6"` + IP6End string `xml:"IP6_END"` + UsedLeases string `xml:"USED_LEASES"` + Leases []lease `xml:"LEASES>LEASE"` + + // Not filled with Info + Allocated string `xml:ALLOCATED` } type lease struct { @@ -132,7 +117,7 @@ func NewVirtualNetworkPool(args ...int) (*VirtualNetworkPool, error) { // NewVirtualNetwork finds a virtualnetwork object by ID. No connection to OpenNebula. func NewVirtualNetwork(id uint) *VirtualNetwork { - return &VirtualNetwork{virtualNetworkBase: virtualNetworkBase{ID: id}} + return &VirtualNetwork{ID: id} } // NewVirtualNetworkFromName finds a virtualnetwork object by name. It connects to @@ -275,5 +260,6 @@ func (vn *VirtualNetwork) Info() error { if err != nil { return err } + *vn = VirtualNetwork{} return xml.Unmarshal([]byte(response.Body()), vn) } diff --git a/src/oca/go/src/goca/virtualrouter.go b/src/oca/go/src/goca/virtualrouter.go index 3ed42283cd..2f37291a0e 100644 --- a/src/oca/go/src/goca/virtualrouter.go +++ b/src/oca/go/src/goca/virtualrouter.go @@ -121,6 +121,7 @@ func (vr *VirtualRouter) Info() error { if err != nil { return err } + *vr = VirtualRouter{} return xml.Unmarshal([]byte(response.Body()), vr) } diff --git a/src/oca/go/src/goca/vm.go b/src/oca/go/src/goca/vm.go index 0afb1e760c..9208fd81d6 100644 --- a/src/oca/go/src/goca/vm.go +++ b/src/oca/go/src/goca/vm.go @@ -8,16 +8,11 @@ import ( // VMPool represents an OpenNebula Virtual Machine pool type VMPool struct { - VMs []vmBase `xml:"VM"` + VMs []VM `xml:"VM"` } // VM represents an OpenNebula Virtual Machine type VM struct { - vmBase - LockInfos *Lock `xml:"LOCK"` -} - -type vmBase struct { ID uint `xml:"ID"` UID int `xml:"UID"` GID int `xml:"GID"` @@ -34,10 +29,13 @@ type vmBase struct { STime int `xml:"STIME"` ETime int `xml:"ETIME"` DeployID string `xml:"DEPLOY_ID"` - Monitoring vmMonitoring `xml:"MONITORING"` + MonitoringInfos vmMonitoring `xml:"MONITORING"` Template vmTemplate `xml:"TEMPLATE"` UserTemplate *vmUserTemplate `xml:"USER_TEMPLATE"` HistoryRecords []vmHistoryRecord `xml:"HISTORY_RECORDS>HISTORY"` + + // Not filled with NewUserPool call + LockInfos *Lock `xml:"LOCK"` } type vmMonitoring struct { @@ -675,7 +673,7 @@ func CreateVM(template string, pending bool) (uint, error) { // NewVM finds an VM by ID returns a new VM object. At this stage no // connection to OpenNebula is performed. func NewVM(id uint) *VM { - return &VM{vmBase: vmBase{ID: id}} + return &VM{ID: id} } // NewVMFromName finds the VM by name and returns a VM object. It connects to @@ -708,7 +706,7 @@ func NewVMFromName(name string) (*VM, error) { } // State returns the VMState and LCMState -func (vm *vmBase) State() (VMState, LCMState, error) { +func (vm *VM) State() (VMState, LCMState, error) { state := VMState(vm.StateRaw) if !state.isValid() { return -1, -1, fmt.Errorf("VM State: this state value is not currently handled: %d\n", vm.StateRaw) @@ -721,7 +719,7 @@ func (vm *vmBase) State() (VMState, LCMState, error) { } // StateString returns the VMState and LCMState as strings -func (vm *vmBase) StateString() (string, string, error) { +func (vm *VM) StateString() (string, string, error) { state := VMState(vm.StateRaw) if !state.isValid() { return "", "", fmt.Errorf("VM State: this state value is not currently handled: %d\n", vm.StateRaw) @@ -745,6 +743,7 @@ func (vm *VM) Info() error { if err != nil { return err } + *vm = VM{} return xml.Unmarshal([]byte(response.Body()), vm) } diff --git a/src/oca/go/src/goca/vntemplate.go b/src/oca/go/src/goca/vntemplate.go index 7b26a9e84a..789d102d8b 100644 --- a/src/oca/go/src/goca/vntemplate.go +++ b/src/oca/go/src/goca/vntemplate.go @@ -114,6 +114,7 @@ func (vntemplate *VNTemplate) Info() error { if err != nil { return err } + *vntemplate = VNTemplate{} return xml.Unmarshal([]byte(response.Body()), vntemplate) } diff --git a/src/oca/go/src/goca/zone.go b/src/oca/go/src/goca/zone.go index 834130aea1..c072803ce0 100644 --- a/src/oca/go/src/goca/zone.go +++ b/src/oca/go/src/goca/zone.go @@ -156,6 +156,7 @@ func (zone *Zone) Info() error { if err != nil { return err } + *zone = Zone{} return xml.Unmarshal([]byte(response.Body()), zone) }