diff --git a/client/src/definitions.ts b/client/src/definitions.ts index 08e1150..73c6510 100644 --- a/client/src/definitions.ts +++ b/client/src/definitions.ts @@ -44,7 +44,7 @@ export const editTypes: { [key: string]: { [key: string]: any } } = { fields: [ { key: "name", label: "Name", as: "TextBox", default: "placeholder" }, { key: "type", label: "Type", as: "PillBar", props: { options: [{ name: 'Hardware', key: 'hardware' }, { name: 'VLAN', key: 'vlan' }, { name: 'Bond', key: 'bond' }, { name: 'Bridge', key: 'bridge' }] } }, - { key: "hardware_address", label: "Hardware Address", as: "TextBox", enabled: (values: any) => (values["type"] == 'hardware') }, + { key: "hardware_device", label: "Hardware Device", as: "TextBox", enabled: (values: any) => (values["type"] == 'hardware') }, { key: "vlan_parent", label: "VLAN Parent", as: "TextBox", enabled: (values: any) => (values["type"] == 'vlan') }, { key: "vlan_id", label: "VLAN ID", as: "NumberBox", props: { min: 1, max: 4094 }, enabled: (values: any) => (values["type"] == 'vlan') }, { key: "bond_members", label: "Bond Members", as: "TextBox", enabled: (values: any) => (values["type"] == 'bond') }, diff --git a/internal/definitions/interface.go b/internal/definitions/interface.go index a5e1cfc..f757349 100644 --- a/internal/definitions/interface.go +++ b/internal/definitions/interface.go @@ -5,11 +5,11 @@ import ( ) type Interface struct { - Alias string `json:"alias,omitempty" validate:"min=0,max=3"` - Type InterfaceType `json:"type" validate:"min=0,max=3"` - AddressingMode InterfaceAddressingMode `json:"addressing_mode" validate:"min=0,max=2"` - Address *IPCIDR `json:"address,omitempty" validate:"excluded_unless=AddressingMode 1"` - HardwareAddress *HardwareAddress `json:"hardware_address,omitempty"` + Alias string `json:"alias,omitempty" validate:"min=0,max=3"` + Type InterfaceType `json:"type" validate:"min=0,max=3"` + AddressingMode InterfaceAddressingMode `json:"addressing_mode" validate:"min=0,max=2"` + Address *IPCIDR `json:"address,omitempty" validate:"excluded_unless=AddressingMode 1"` + HardwareDevice *string `json:"hardware_device,omitempty"` // TODO fix Validator for int pointers with min=0,max=4094 VlanID *uint `json:"vlan_id,omitempty"` VlanParent *string `json:"vlan_parent,omitempty"` diff --git a/internal/networkd/configuration.go b/internal/networkd/configuration.go index 3c03b2a..5b4ba55 100644 --- a/internal/networkd/configuration.go +++ b/internal/networkd/configuration.go @@ -35,25 +35,7 @@ type VlanAssignments struct { func GenerateNetworkdConfiguration(conf definitions.Config) ([]NetworkdConfigFile, error) { files := []NetworkdConfigFile{} - // Step 1 Generate hardware rename link files - for name, inter := range conf.Network.Interfaces { - if inter.Type == definitions.Hardware { - buf := new(bytes.Buffer) - err := templates.ExecuteTemplate(buf, "rename-hardware.link.tmpl", InterfaceWithName{ - Name: name, - Interface: inter, - }) - if err != nil { - return nil, fmt.Errorf("executing rename-hardware.link template: %w", err) - } - files = append(files, NetworkdConfigFile{ - Name: fmt.Sprintf("10-rename-%v.link", name), - Content: buf.String(), - }) - } - } - - // Step 2 Generate vlan netdev files + // Step 1 Generate vlan netdev files for name, inter := range conf.Network.Interfaces { if inter.Type == definitions.Vlan { buf := new(bytes.Buffer) @@ -65,13 +47,13 @@ func GenerateNetworkdConfiguration(conf definitions.Config) ([]NetworkdConfigFil return nil, fmt.Errorf("executing create-vlan.netdev.tmpl template: %w", err) } files = append(files, NetworkdConfigFile{ - Name: fmt.Sprintf("20-create-vlan-%v.netdev", name), + Name: fmt.Sprintf("10-create-vlan-%v.netdev", name), Content: buf.String(), }) } } - // Step 3 Generate bond netdev files + // Step 2 Generate bond netdev files for name, inter := range conf.Network.Interfaces { if inter.Type == definitions.Bond { buf := new(bytes.Buffer) @@ -83,13 +65,13 @@ func GenerateNetworkdConfiguration(conf definitions.Config) ([]NetworkdConfigFil return nil, fmt.Errorf("executing create-bond.netdev.tmpl template: %w", err) } files = append(files, NetworkdConfigFile{ - Name: fmt.Sprintf("30-create-bond-%v.netdev", name), + Name: fmt.Sprintf("20-create-bond-%v.netdev", name), Content: buf.String(), }) } } - // Step 4 Generate bridge netdev files + // Step 3 Generate bridge netdev files for name, inter := range conf.Network.Interfaces { if inter.Type == definitions.Bridge { buf := new(bytes.Buffer) @@ -101,13 +83,13 @@ func GenerateNetworkdConfiguration(conf definitions.Config) ([]NetworkdConfigFil return nil, fmt.Errorf("executing create-bridge.netdev.tmpl template: %w", err) } files = append(files, NetworkdConfigFile{ - Name: fmt.Sprintf("40-create-bridge-%v.netdev", name), + Name: fmt.Sprintf("30-create-bridge-%v.netdev", name), Content: buf.String(), }) } } - // Step 5 Generate Bond Members + // Step 4 Generate Bond Members for name, inter := range conf.Network.Interfaces { if inter.Type == definitions.Bond { for _, member := range *inter.BondMembers { @@ -120,14 +102,14 @@ func GenerateNetworkdConfiguration(conf definitions.Config) ([]NetworkdConfigFil return nil, fmt.Errorf("executing bond-membership.network.tmpl template: %w", err) } files = append(files, NetworkdConfigFile{ - Name: fmt.Sprintf("50-bond-membership-%v.network", name), + Name: fmt.Sprintf("40-bond-membership-%v.network", name), Content: buf.String(), }) } } } - // Step 6 Generate Bridge Members + // Step 5 Generate Bridge Members for name, inter := range conf.Network.Interfaces { if inter.Type == definitions.Bridge { for _, member := range *inter.BridgeMembers { @@ -140,14 +122,14 @@ func GenerateNetworkdConfiguration(conf definitions.Config) ([]NetworkdConfigFil return nil, fmt.Errorf("executing bridge-membership.network.tmpl template: %w", err) } files = append(files, NetworkdConfigFile{ - Name: fmt.Sprintf("60-bridge-membership-%v.network", name), + Name: fmt.Sprintf("50-bridge-membership-%v.network", name), Content: buf.String(), }) } } } - // Step 7 Generate Vlan Assignments + // Step 6 Generate Vlan Assignments for name, inter := range conf.Network.Interfaces { if inter.Type != definitions.Vlan { vlans := []string{} @@ -167,14 +149,14 @@ func GenerateNetworkdConfiguration(conf definitions.Config) ([]NetworkdConfigFil return nil, fmt.Errorf("executing vlan-assignments.network.tmpl template: %w", err) } files = append(files, NetworkdConfigFile{ - Name: fmt.Sprintf("70-bridge-membership-%v.network", name), + Name: fmt.Sprintf("60-bridge-membership-%v.network", name), Content: buf.String(), }) } } } - // Step 8 Generate addressing network files + // Step 7 Generate addressing network files for name, inter := range conf.Network.Interfaces { buf := new(bytes.Buffer) err := templates.ExecuteTemplate(buf, "config-addressing.network.tmpl", InterfaceWithName{ @@ -185,7 +167,7 @@ func GenerateNetworkdConfiguration(conf definitions.Config) ([]NetworkdConfigFil return nil, fmt.Errorf("executing config-addressing.network.tmpl template: %w", err) } files = append(files, NetworkdConfigFile{ - Name: fmt.Sprintf("80-config-hardware-%v.network", name), + Name: fmt.Sprintf("70-config-hardware-%v.network", name), Content: buf.String(), }) } diff --git a/internal/networkd/template/bond-membership.network.tmpl b/internal/networkd/template/bond-membership.network.tmpl index bb54f23..1e87faf 100644 --- a/internal/networkd/template/bond-membership.network.tmpl +++ b/internal/networkd/template/bond-membership.network.tmpl @@ -1,5 +1,9 @@ [Match] +{{- if eq .Type 0 }} +Name={{ .HardwareDevice }} +{{- else }} Name={{ .Name }} +{{- end }} [Network] -Vlan={{ .BondName }} +Bond={{ .BondName }} diff --git a/internal/networkd/template/bridge-membership.network.tmpl b/internal/networkd/template/bridge-membership.network.tmpl index 0bf0373..fe1b0b6 100644 --- a/internal/networkd/template/bridge-membership.network.tmpl +++ b/internal/networkd/template/bridge-membership.network.tmpl @@ -1,5 +1,9 @@ [Match] +{{- if eq .Type 0 }} +Name={{ .HardwareDevice }} +{{- else }} Name={{ .Name }} +{{- end }} [Network] Bridge={{ .BridgeName }} diff --git a/internal/networkd/template/config-addressing.network.tmpl b/internal/networkd/template/config-addressing.network.tmpl index 70874f7..c35a609 100644 --- a/internal/networkd/template/config-addressing.network.tmpl +++ b/internal/networkd/template/config-addressing.network.tmpl @@ -1,5 +1,9 @@ [Match] +{{- if eq .Type 0 }} +Name={{ .HardwareDevice }} +{{- else }} Name={{ .Name }} +{{- end }} [Network] LLMNR=no diff --git a/internal/networkd/template/create-vlan.netdev.tmpl b/internal/networkd/template/create-vlan.netdev.tmpl index 02c3ad2..2d6b5ce 100644 --- a/internal/networkd/template/create-vlan.netdev.tmpl +++ b/internal/networkd/template/create-vlan.netdev.tmpl @@ -3,4 +3,4 @@ Name={{ .Name }} Kind=vlan [VLAN] -Id= {{ .VlanID }} \ No newline at end of file +Id={{ .VlanID }} \ No newline at end of file diff --git a/internal/networkd/template/rename-hardware.link.tmpl b/internal/networkd/template/rename-hardware.link.tmpl deleted file mode 100644 index 8a535c4..0000000 --- a/internal/networkd/template/rename-hardware.link.tmpl +++ /dev/null @@ -1,8 +0,0 @@ -[Match] -PermanentMACAddress={{ .HardwareAddress }} - -[Link] -Name={{ .Name }} -{{ if .Alias -}} -Alias={{ .Alias }} -{{- end }} \ No newline at end of file diff --git a/internal/networkd/template/vlan-assignments.network.tmpl b/internal/networkd/template/vlan-assignments.network.tmpl index c44b1fb..46e27ff 100644 --- a/internal/networkd/template/vlan-assignments.network.tmpl +++ b/internal/networkd/template/vlan-assignments.network.tmpl @@ -1,5 +1,9 @@ [Match] +{{- if eq .Type 0 }} +Name={{ .HardwareDevice }} +{{- else }} Name={{ .Name }} +{{- end }} [Network] {{- range .Vlans }}