in pkg/common/uniquename/uniquename.go [131:194]
func FleetScopedUniqueName(format Format, clusterID, namespace, name string) (string, error) {
reservedSlots := 3 + uuidLength // 3 dashes + 5 character UUID string
switch format {
case DNS1123Subdomain:
availableSlots := validation.DNS1123SubdomainMaxLength // 253 characters
slotsPerSeg := (availableSlots - reservedSlots) / 3
uniqueName := fmt.Sprintf("%s-%s-%s-%s",
clusterID[:minInt(slotsPerSeg, len(clusterID))],
namespace[:minInt(slotsPerSeg, len(namespace))],
name[:minInt(slotsPerSeg, len(name))],
uuid.NewUUID()[:uuidLength],
)
if errs := validation.IsDNS1123Subdomain(uniqueName); len(errs) != 0 {
return "", fmt.Errorf("failed to format a unique RFC 1123 DNS subdomain name with cluster ID %s, namespace %s, name %s: %v",
clusterID, namespace, name, errs)
}
return uniqueName, nil
case DNS1123Label:
availableSlots := validation.DNS1123LabelMaxLength // 63 characters
slotsPerSeg := (availableSlots - reservedSlots) / 3
// If the cluster ID and object name are valid RFC 1123 DNS subdomains, they may include dot characters,
// which is not allowed in RFC 1123 DNS labels.
clusterID = removeDots(clusterID)
name = removeDots(name)
uniqueName := fmt.Sprintf("%s-%s-%s-%s",
clusterID[:minInt(slotsPerSeg, len(clusterID))],
namespace[:minInt(slotsPerSeg, len(namespace))],
name[:minInt(slotsPerSeg, len(name))],
uuid.NewUUID()[:uuidLength],
)
if errs := validation.IsDNS1123Label(uniqueName); len(errs) != 0 {
return "", fmt.Errorf("failed to format a unique RFC 1123 DNS label name with cluster ID %s, namespace %s, name %s: %v",
clusterID, namespace, name, errs)
}
return uniqueName, nil
case DNS1035Label:
availableSlots := validation.DNS1035LabelMaxLength // 63 characters
slotsPerSeg := (availableSlots - reservedSlots) / 3
// If the cluster ID and object name are valid RFC 1123 DNS subdomains, they may include dot characters,
// which is not allowed in RFC 1123 DNS labels.
clusterID = removeDots(clusterID)
name = removeDots(name)
uniqueName := fmt.Sprintf("%s-%s-%s-%s",
clusterID[:minInt(slotsPerSeg, len(clusterID))],
namespace[:minInt(slotsPerSeg, len(namespace))],
name[:minInt(slotsPerSeg, len(name))],
uuid.NewUUID()[:uuidLength],
)
if errs := validation.IsDNS1035Label(uniqueName); len(errs) != 0 {
return "", fmt.Errorf("failed to format a unique RFC 1035 DNS label name with cluster ID %s, namespace %s, name %s: %v",
clusterID, namespace, name, errs)
}
return uniqueName, nil
}
return "", fmt.Errorf("not a valid name format: %d", format)
}