internal/metadata/label.go (55 lines of code) (raw):
package metadata
type Labels map[string]string
func getDefaultLabelsFromInstanceName(instanceName string) Labels {
return Labels{
"app.kubernetes.io/name": instanceName,
"app.kubernetes.io/component": "teamcity-server",
"app.kubernetes.io/part-of": "teamcity",
}
}
func GetLabels(instanceName string, instanceLabels map[string]string) Labels {
labels := getDefaultLabelsFromInstanceName(instanceName)
for key, value := range instanceLabels {
_, isLabelPresent := labels[key]
if !isLabelPresent {
labels[key] = value
}
}
return labels
}
func GetStatefulSetLabels(instanceName string, nodeName string, nodeRole string, instanceLabels map[string]string) Labels {
commonStatefulSetLabels := GetStatefulSetCommonLabels(instanceName, nodeRole, instanceLabels)
nodeNameLabel := getNodeNameLabel(nodeName)
return mergeLabels(commonStatefulSetLabels, nodeNameLabel)
}
func GetStatefulSetCommonLabels(instanceName string, nodeRole string, instanceLabels map[string]string) Labels {
commonLabels := GetLabels(instanceName, instanceLabels)
nodeResponsibility := getNodeResponsibilityLabel(nodeRole)
return mergeLabels(commonLabels, nodeResponsibility)
}
func getNodeNameLabel(nodeName string) Labels {
return Labels{
"teamcity.jetbrains.com/node-name": nodeName,
}
}
func getNodeResponsibilityLabel(nodeRole string) Labels {
return Labels{
"teamcity.jetbrains.com/role": nodeRole,
}
}
func getNodeLabels(nodeName string, nodeRole string) Labels {
return Labels{
"teamcity.jetbrains.com/node-name": nodeName,
"teamcity.jetbrains.com/role": nodeRole,
}
}
func mergeLabels(l1 Labels, l2 Labels) Labels {
var merged = make(Labels)
for k, v := range l1 {
merged[k] = v
}
for key, value := range l2 {
merged[key] = value
}
return merged
}