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, }) } }