vpcagent: models: add route tables

This commit is contained in:
Yousong Zhou
2021-03-22 18:42:34 +08:00
parent 97433ccfab
commit f7c4e38e18
3 changed files with 72 additions and 0 deletions

View File

@@ -21,6 +21,8 @@ import (
type Vpc struct {
compute_models.SVpc
RouteTable *RouteTable `json:"-"`
Wire *Wire `json:"-"`
Networks Networks `json:"-"`
}
@@ -31,6 +33,18 @@ func (el *Vpc) Copy() *Vpc {
}
}
type RouteTable struct {
compute_models.SRouteTable
Vpc *Vpc
}
func (el *RouteTable) Copy() *RouteTable {
return &RouteTable{
SRouteTable: el.SRouteTable,
}
}
type Wire struct {
compute_models.SWire

View File

@@ -41,6 +41,8 @@ type (
Guestsecgroups map[string]*Guestsecgroup // key: guestId/secgroupId
DnsRecords map[string]*DnsRecord
RouteTables map[string]*RouteTable
)
func (set Vpcs) ModelManager() mcclient_modulebase.IBaseManager {
@@ -80,6 +82,28 @@ func (ms Vpcs) joinWires(subEntries Wires) bool {
return correct
}
func (ms Vpcs) joinRouteTables(subEntries RouteTables) bool {
correct := true
for _, subEntry := range subEntries {
vpcId := subEntry.VpcId
m, ok := ms[vpcId]
if !ok {
log.Warningf("vpc_id %s of route table %s(%s) is not present", vpcId, subEntry.Name, subEntry.Id)
correct = false
continue
}
subEntry.Vpc = m
if m.RouteTable != nil {
log.Warningf("vpc %s has more than 1 route table available, skipping %s(%s)",
m.Name, m.Id, subEntry.Name, subEntry.Id)
correct = false
continue
}
m.RouteTable = subEntry
}
return correct
}
func (ms Vpcs) joinNetworks(subEntries Networks) bool {
for _, m := range ms {
m.Networks = Networks{}
@@ -631,3 +655,24 @@ func (set DnsRecords) Copy() apihelper.IModelSet {
}
return setCopy
}
func (set RouteTables) ModelManager() mcclient_modulebase.IBaseManager {
return &mcclient_modules.RouteTables
}
func (set RouteTables) NewModel() db.IModel {
return &RouteTable{}
}
func (set RouteTables) AddModel(i db.IModel) {
m := i.(*RouteTable)
set[m.Id] = m
}
func (set RouteTables) Copy() apihelper.IModelSet {
setCopy := RouteTables{}
for id, el := range set {
setCopy[id] = el.Copy()
}
return setCopy
}

View File

@@ -34,6 +34,8 @@ type ModelSetsMaxUpdatedAt struct {
NetworkAddresses time.Time
DnsRecords time.Time
RouteTables time.Time
}
func NewModelSetsMaxUpdatedAt() *ModelSetsMaxUpdatedAt {
@@ -51,6 +53,8 @@ func NewModelSetsMaxUpdatedAt() *ModelSetsMaxUpdatedAt {
NetworkAddresses: apihelper.PseudoZeroTime,
DnsRecords: apihelper.PseudoZeroTime,
RouteTables: apihelper.PseudoZeroTime,
}
}
@@ -68,6 +72,8 @@ type ModelSets struct {
NetworkAddresses NetworkAddresses
DnsRecords DnsRecords
RouteTables RouteTables
}
func NewModelSets() *ModelSets {
@@ -85,6 +91,8 @@ func NewModelSets() *ModelSets {
NetworkAddresses: NetworkAddresses{},
DnsRecords: DnsRecords{},
RouteTables: RouteTables{},
}
}
@@ -104,6 +112,8 @@ func (mss *ModelSets) ModelSetList() []apihelper.IModelSet {
mss.NetworkAddresses,
mss.DnsRecords,
mss.RouteTables,
}
}
@@ -126,6 +136,8 @@ func (mss *ModelSets) copy_() *ModelSets {
NetworkAddresses: mss.NetworkAddresses.Copy().(NetworkAddresses),
DnsRecords: mss.DnsRecords.Copy().(DnsRecords),
RouteTables: mss.RouteTables.Copy().(RouteTables),
}
return mssCopy
}
@@ -164,6 +176,7 @@ func (mss *ModelSets) join() bool {
mss.Guests.initJoin()
var p []bool
p = append(p, mss.Vpcs.joinWires(mss.Wires))
p = append(p, mss.Vpcs.joinRouteTables(mss.RouteTables))
p = append(p, mss.Wires.joinNetworks(mss.Networks))
p = append(p, mss.Vpcs.joinNetworks(mss.Networks))
p = append(p, mss.Networks.joinGuestnetworks(mss.Guestnetworks))