diff --git a/cmd/dkl-local-server/ws-download-set.go b/cmd/dkl-local-server/ws-download-set.go index 3cd60c6..6a2d02b 100644 --- a/cmd/dkl-local-server/ws-download-set.go +++ b/cmd/dkl-local-server/ws-download-set.go @@ -6,6 +6,7 @@ import ( "encoding/base32" "fmt" "io" + "path/filepath" "slices" "strconv" "strings" @@ -76,7 +77,15 @@ type DownloadSetItem struct { } func (i DownloadSetItem) EncodeTo(buf *strings.Builder) { - buf.WriteString(i.Kind) + kind := i.Kind + switch kind { + case "host": + kind = "h" + case "cluster": + kind = "c" + } + + buf.WriteString(kind) buf.WriteByte(':') buf.WriteString(i.Name) @@ -89,6 +98,14 @@ func (i DownloadSetItem) EncodeTo(buf *strings.Builder) { func (i *DownloadSetItem) Decode(encoded string) { rem := encoded i.Kind, rem, _ = strings.Cut(rem, ":") + + switch i.Kind { + case "h": + i.Kind = "host" + case "c": + i.Kind = "cluster" + } + i.Name, rem, _ = strings.Cut(rem, ":") if rem == "" { @@ -230,10 +247,8 @@ func wsDownloadSet(req *restful.Request, resp *restful.Response) {
\n") - for _, asset := range item.Assets { - fmt.Fprintf(buf, " %s\n", item.Kind, item.Name, asset, setStr, asset) + names := make([]string, 0) + switch item.Kind { + case "cluster": + for _, c := range cfg.Clusters { + if ok, _ := filepath.Match(item.Name, c.Name); ok { + names = append(names, c.Name) + } + } + case "host": + for _, h := range cfg.Hosts { + if ok, _ := filepath.Match(item.Name, h.Name); ok { + names = append(names, h.Name) + } + } + } + + for _, name := range names { + fmt.Fprintf(buf, "
\n") + for _, asset := range item.Assets { + fmt.Fprintf(buf, " %s\n", item.Kind, name, asset, setStr, asset) + } + fmt.Fprintf(buf, `
`) } - fmt.Fprintf(buf, ``) } buf.WriteString("") diff --git a/cmd/dkl-local-server/ws-downloads.go b/cmd/dkl-local-server/ws-downloads.go index 67868e7..8cf26f7 100644 --- a/cmd/dkl-local-server/ws-downloads.go +++ b/cmd/dkl-local-server/ws-downloads.go @@ -184,10 +184,8 @@ func wsDownloadPage(req *restful.Request, resp *restful.Response) {