forked from rook/rook
Control logic for the cassandra controller. The controller exists in a separate StatefulSet, watches Kubernetes Objects for changes and acts on those changes to achieve the desired state. Signed-off-by: Yannis Zarkadas <yanniszarkadas@gmail.com>
92 lines
2.6 KiB
Go
92 lines
2.6 KiB
Go
/*
|
||
Copyright 2018 The Rook Authors. All rights reserved.
|
||
|
||
Licensed under the Apache License, Version 2.0 (the "License");
|
||
you may not use this file except in compliance with the License.
|
||
You may obtain a copy of the License at
|
||
|
||
http://www.apache.org/licenses/LICENSE-2.0
|
||
|
||
Unless required by applicable law or agreed to in writing, software
|
||
distributed under the License is distributed on an "AS IS" BASIS,
|
||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
See the License for the specific language governing permissions and
|
||
limitations under the License.
|
||
*/
|
||
|
||
package util
|
||
|
||
import (
|
||
cassandrav1alpha1 "github.com/rook/rook/pkg/apis/cassandra.rook.io/v1alpha1"
|
||
"github.com/rook/rook/pkg/operator/cassandra/constants"
|
||
appsv1 "k8s.io/api/apps/v1"
|
||
"k8s.io/apimachinery/pkg/labels"
|
||
)
|
||
|
||
// ClusterLabels returns a map of label keys and values
|
||
// for the given Cluster.
|
||
func ClusterLabels(c *cassandrav1alpha1.Cluster) map[string]string {
|
||
labels := recommendedLabels()
|
||
labels[constants.ClusterNameLabel] = c.Name
|
||
return labels
|
||
}
|
||
|
||
// DatacenterLabels returns a map of label keys and values
|
||
// for the given Datacenter.
|
||
func DatacenterLabels(c *cassandrav1alpha1.Cluster) map[string]string {
|
||
recLabels := recommendedLabels()
|
||
dcLabels := ClusterLabels(c)
|
||
dcLabels[constants.DatacenterNameLabel] = c.Spec.Datacenter.Name
|
||
|
||
return mergeLabels(dcLabels, recLabels)
|
||
}
|
||
|
||
// RackLabels returns a map of label keys and values
|
||
// for the given Rack.
|
||
func RackLabels(r cassandrav1alpha1.RackSpec, c *cassandrav1alpha1.Cluster) map[string]string {
|
||
recLabels := recommendedLabels()
|
||
rackLabels := DatacenterLabels(c)
|
||
rackLabels[constants.RackNameLabel] = r.Name
|
||
|
||
return mergeLabels(rackLabels, recLabels)
|
||
}
|
||
|
||
// StatefulSetPodLabel returns a map of labels to uniquely
|
||
// identify a StatefulSet Pod with the given name
|
||
func StatefulSetPodLabel(name string) map[string]string {
|
||
return map[string]string{
|
||
appsv1.StatefulSetPodNameLabel: name,
|
||
}
|
||
}
|
||
|
||
// RackSelector returns a LabelSelector for the given rack.
|
||
func RackSelector(r cassandrav1alpha1.RackSpec, c *cassandrav1alpha1.Cluster) labels.Selector {
|
||
|
||
rackLabelsSet := labels.Set(RackLabels(r, c))
|
||
sel := labels.SelectorFromSet(rackLabelsSet)
|
||
|
||
return sel
|
||
}
|
||
|
||
func recommendedLabels() map[string]string {
|
||
|
||
return map[string]string{
|
||
"app": constants.AppName,
|
||
|
||
"app.kubernetes.io/name": constants.AppName,
|
||
"app.kubernetes.io/managed-by": constants.OperatorAppName,
|
||
}
|
||
}
|
||
|
||
func mergeLabels(l1, l2 map[string]string) map[string]string {
|
||
|
||
res := make(map[string]string)
|
||
for k, v := range l1 {
|
||
res[k] = v
|
||
}
|
||
for k, v := range l2 {
|
||
res[k] = v
|
||
}
|
||
return res
|
||
}
|