~ knotless Search/
↑↓ move↵ open⇧↵ all results
0
0
main
29 lines · 835 B Raw History
package nodeprovider

import (
	"errors"
	"fmt"
	"regexp"
	"strings"
)

var dns1123 = regexp.MustCompile(`^[a-z0-9]([a-z0-9.-]*[a-z0-9])?$`)

const HostnameMaxBytes = 64

var ErrBadName = errors.New("nodeprovider: derived node name is not DNS-1123")

func NodeName(clusterLabel, nodeID string) (string, error) {
	if clusterLabel == "" || nodeID == "" {
		return "", fmt.Errorf("%w: cluster and node id are both required", ErrBadName)
	}
	name := strings.ToLower(clusterLabel + "-" + nodeID)
	if len(name) > 253 || !dns1123.MatchString(name) {
		return "", fmt.Errorf("%w: %q", ErrBadName, name)
	}
	if len(name) > HostnameMaxBytes {
		return "", fmt.Errorf("%w: %q is %d bytes, and a market node takes its node name as its hostname, "+
			"which holds at most %d", ErrBadName, name, len(name), HostnameMaxBytes)
	}
	return name, nil
}