diff --git a/CHANGELOG.md b/CHANGELOG.md index 18ab8bdb..8eaf9964 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Add the ability to boot nodes with `wwid=[interface]`, which replaces + `interface` with the interface MAC address + +## [4.5.0] 2024-02-08 + +### Added + - Added https://github.com/Masterminds/sprig functions to templates #1030 ### Changed diff --git a/internal/app/wwclient/root.go b/internal/app/wwclient/root.go index 1dadb52c..7cd728bc 100644 --- a/internal/app/wwclient/root.go +++ b/internal/app/wwclient/root.go @@ -152,6 +152,19 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) { } wwid := strings.Split(wwid_tmp[1], " ")[0] + wwid = strings.TrimSuffix(wwid, "\n") + + // Dereference wwid from [interface] for cases that cannot have /proc/cmdline set by bootloader + if string(wwid[0]) == "[" { + iface := wwid[1 : len(wwid)-1] + wwid_tmp, err := os.ReadFile(fmt.Sprintf("/sys/class/net/%s/address", iface)) + if err != nil { + wwlog.Error("'wwid' cannot be dereferenced from /sys/class/net", iface) + os.Exit(1) + } + wwid = strings.TrimSuffix(string(wwid_tmp), "\n") + wwlog.Info("Dereferencing wwid from [%s] to %s", iface, wwid) + } duration := 300 if conf.Warewulf.UpdateInterval > 0 {