use udev for lvm & net

This commit is contained in:
Mikaël Cluseau
2024-11-04 16:18:53 +01:00
parent 7325ee1c0c
commit 0f9679d91e
6 changed files with 142 additions and 72 deletions

View File

@ -1,10 +1,10 @@
package main
import (
"net"
"os/exec"
"strings"
udev "github.com/jochenvg/go-udev"
"github.com/rs/zerolog/log"
config "novit.tech/direktil/pkg/bootstrapconfig"
@ -16,14 +16,31 @@ func setupNetworks(cfg *config.Config) {
return
}
ifNames := make([]string, 0)
type Iface struct {
Name string
AliasOf string
}
ifaces := make([]NameAliases, 0)
{
ifaces, err := net.Interfaces()
enum := new(udev.Udev).NewEnumerate()
enum.AddMatchSubsystem("net")
devs, err := enum.Devices()
if err != nil {
fatal("failed")
fatal("udev enumeration failed")
}
for _, iface := range ifaces {
ifNames = append(ifNames, iface.Name)
for _, dev := range devs {
iface := nameAliases(dev.Sysname(),
dev.PropertyValue("INTERFACE"),
dev.PropertyValue("ID_NET_NAME"),
dev.PropertyValue("ID_NET_NAME_PATH"),
dev.PropertyValue("ID_NET_NAME_MAC"),
dev.PropertyValue("ID_NET_NAME_SLOT"),
)
log.Info().Str("name", iface.Name).Any("aliases", iface.Aliases).Msg("found network device")
ifaces = append(ifaces, iface)
}
}
@ -33,17 +50,9 @@ func setupNetworks(cfg *config.Config) {
log := log.With().Str("network", network.Name).Logger()
log.Info().Msg("setting up network")
// compute available names
if len(assigned) != 0 {
newNames := make([]string, 0, len(ifNames))
for _, n := range ifNames {
if assigned[n] {
continue
}
newNames = append(newNames, n)
}
ifNames = newNames
}
unassigned := filter(ifaces, func(iface NameAliases) bool {
return !assigned[iface.Name]
})
// assign envvars
envvars := make([]string, 0, 1+len(network.Interfaces))
@ -53,13 +62,13 @@ func setupNetworks(cfg *config.Config) {
envvar := new(strings.Builder)
envvar.WriteString(match.Var)
envvar.WriteByte('=')
for i, m := range regexpSelectN(match.N, match.Regexps, unassigned) {
assigned[m] = true
for i, m := range regexpSelectN(match.N, match.Regexps, ifNames) {
if i != 0 {
envvar.WriteByte(' ')
}
envvar.WriteString(m)
assigned[m] = true
}
envvars = append(envvars, envvar.String())