Kubernetes中的标签值必须是有效的
看到IsValidLabelValue ()
例如,我从提供者的rest-API接收到的输入,我想将其写入标签:Dedicated Server 1U
.
是否有一种方法可以通过Go从任意字符串生成有效的标签?
你可以有一个函数来做这件事,例如:
func generateLabel(input string) string {
input = strings.Replace(input, " ", "-", -1)
return "api-label=" + input
}
- 函数将接收到的字符串中的空格替换为"-">
- 您可以将密钥更改为任意字符串。
- 您还可以添加一个正则表达式检查,以确保生成的值符合标签约束。(这取决于是否从API接收到任何特殊字符)
即使存在不需要的字符,也要接受字符串,检查以下内容:
package main
import (
"regexp"
"strings"
"fmt"
)
func generateLabel(input string) string {
input = strings.Replace(input, " ", "-", -1)
re := regexp.MustCompile("[^a-zA-Z0-9-]")
input = re.ReplaceAllString(input, "")
re = regexp.MustCompile("^[^a-zA-Z0-9]([-a-zA-Z0-9]*[a-zA-Z0-9])?$")
input = re.ReplaceAllString(input, "")
return "api-label=" + input
}
func main() {
label := generateLabel("Dedicated Server 1U")
fmt.Println(label) // Output: "api-label=Dedicated-Server-1U"
label1 := generateLabel("Dedicated&test")
fmt.Println(label1) // Output: "api-label=Dedicatedtest"
label2 := generateLabel("Dedicated,test##&(*!great")
fmt.Println(label2) // Output: "api-label=Dedicatedtestgreat"
}