721f4c1af3
Storage + CRUD (migration 0006, model, id-keyed store, REST handlers) plus compiler rendering: each section is owned by a device and projected into that device's rendered config (hosts/providers/routes/routing_rules).
83 lines
3.1 KiB
Go
83 lines
3.1 KiB
Go
package compiler
|
|
|
|
// Per-device long-tail sections rendered into a device's config. The compiler
|
|
// filters each global list to the entries owned by the device.
|
|
|
|
type RenderedHost struct {
|
|
Zone string `yaml:"zone" json:"zone"`
|
|
Interface string `yaml:"interface" json:"interface"`
|
|
Addresses []string `yaml:"addresses,omitempty" json:"addresses,omitempty"`
|
|
Exclusions []string `yaml:"exclusions,omitempty" json:"exclusions,omitempty"`
|
|
Dynamic bool `yaml:"dynamic,omitempty" json:"dynamic,omitempty"`
|
|
}
|
|
|
|
type RenderedProvider struct {
|
|
Name string `yaml:"name" json:"name"`
|
|
Number int `yaml:"number" json:"number"`
|
|
Mark int `yaml:"mark,omitempty" json:"mark,omitempty"`
|
|
Duplicate string `yaml:"duplicate,omitempty" json:"duplicate,omitempty"`
|
|
Interface string `yaml:"interface" json:"interface"`
|
|
Gateway string `yaml:"gateway,omitempty" json:"gateway,omitempty"`
|
|
Copy []string `yaml:"copy,omitempty" json:"copy,omitempty"`
|
|
}
|
|
|
|
type RenderedRoute struct {
|
|
Provider string `yaml:"provider,omitempty" json:"provider,omitempty"`
|
|
Dest string `yaml:"dest" json:"dest"`
|
|
Gateway string `yaml:"gateway,omitempty" json:"gateway,omitempty"`
|
|
Oif string `yaml:"oif,omitempty" json:"oif,omitempty"`
|
|
Persistent bool `yaml:"persistent,omitempty" json:"persistent,omitempty"`
|
|
Comment string `yaml:"comment,omitempty" json:"comment,omitempty"`
|
|
}
|
|
|
|
type RenderedRoutingRule struct {
|
|
Source string `yaml:"source,omitempty" json:"source,omitempty"`
|
|
Dest string `yaml:"dest,omitempty" json:"dest,omitempty"`
|
|
Provider string `yaml:"provider" json:"provider"`
|
|
Priority int `yaml:"priority,omitempty" json:"priority,omitempty"`
|
|
Persistent bool `yaml:"persistent,omitempty" json:"persistent,omitempty"`
|
|
Mark string `yaml:"mark,omitempty" json:"mark,omitempty"`
|
|
Comment string `yaml:"comment,omitempty" json:"comment,omitempty"`
|
|
}
|
|
|
|
// renderPerDevice projects the per-device long-tail sections owned by this device.
|
|
func renderPerDevice(in Input, out *RenderedConfig) {
|
|
dev := in.Device.Name
|
|
for _, h := range in.Hosts {
|
|
if h.Device != dev {
|
|
continue
|
|
}
|
|
out.Hosts = append(out.Hosts, RenderedHost{
|
|
Zone: h.Zone, Interface: h.Interface, Addresses: h.Addresses,
|
|
Exclusions: h.Exclusions, Dynamic: h.Dynamic,
|
|
})
|
|
}
|
|
for _, p := range in.Providers {
|
|
if p.Device != dev {
|
|
continue
|
|
}
|
|
out.Providers = append(out.Providers, RenderedProvider{
|
|
Name: p.Name, Number: p.Number, Mark: p.Mark, Duplicate: p.Duplicate,
|
|
Interface: p.Interface, Gateway: p.Gateway, Copy: p.Copy,
|
|
})
|
|
}
|
|
for _, r := range in.Routes {
|
|
if r.Device != dev {
|
|
continue
|
|
}
|
|
out.Routes = append(out.Routes, RenderedRoute{
|
|
Provider: r.Provider, Dest: r.Dest, Gateway: r.Gateway,
|
|
Oif: r.Oif, Persistent: r.Persistent, Comment: r.Comment,
|
|
})
|
|
}
|
|
for _, r := range in.RoutingRules {
|
|
if r.Device != dev {
|
|
continue
|
|
}
|
|
out.RoutingRules = append(out.RoutingRules, RenderedRoutingRule{
|
|
Source: r.Source, Dest: r.Dest, Provider: r.Provider, Priority: r.Priority,
|
|
Persistent: r.Persistent, Mark: r.Mark, Comment: r.Comment,
|
|
})
|
|
}
|
|
}
|