@@ -44,36 +44,52 @@ func NewControl(
4444
4545func (c * defaultSeedLabeller ) labelSeedNodes (
4646 cluster * v1alpha1.CassandraCluster ,
47+ np * v1alpha1.CassandraClusterNodePool ,
4748 set * appsv1beta1.StatefulSet ,
4849) error {
49- // TODO: make number of seed nodes configurable
50- pod , err := c .pods .Pods (cluster .Namespace ).Get (fmt .Sprintf ("%s-%d" , set .Name , 0 ))
51- if err != nil {
52- glog .Warningf ("Couldn't get stateful set pod: %v" , err )
53- return nil
54- }
55- labels := pod .Labels
56- value := labels [seedprovider .SeedLabelKey ]
57- if value == seedprovider .SeedLabelValue {
58- return nil
59- }
60- if labels == nil {
61- labels = map [string ]string {}
50+ for i := int64 (0 ); i < np .Replicas ; i ++ {
51+ pod , err := c .pods .Pods (cluster .Namespace ).Get (fmt .Sprintf ("%s-%d" , set .Name , i ))
52+ if err != nil {
53+ glog .Warningf ("Couldn't get stateful set pod: %v" , err )
54+ return nil
55+ }
56+
57+ // default to not a seed
58+ desiredLabel := "false"
59+
60+ // label first n as seeds
61+ if i < np .Seeds {
62+ desiredLabel = seedprovider .SeedLabelValue
63+ }
64+
65+ labels := pod .Labels
66+ value := labels [seedprovider .SeedLabelKey ]
67+ if value == desiredLabel {
68+ continue
69+ }
70+ if labels == nil {
71+ labels = map [string ]string {}
72+ }
73+ labels [seedprovider .SeedLabelKey ] = desiredLabel
74+ podCopy := pod .DeepCopy ()
75+ podCopy .SetLabels (labels )
76+ _ , err = c .kubeClient .CoreV1 ().Pods (podCopy .Namespace ).Update (podCopy )
77+ if err != nil {
78+ return err
79+ }
6280 }
63- labels [seedprovider .SeedLabelKey ] = seedprovider .SeedLabelValue
64- podCopy := pod .DeepCopy ()
65- podCopy .SetLabels (labels )
66- _ , err = c .kubeClient .CoreV1 ().Pods (podCopy .Namespace ).Update (podCopy )
67- return err
81+ return nil
6882}
6983
7084func (c * defaultSeedLabeller ) Sync (cluster * v1alpha1.CassandraCluster ) error {
71- sets , err := util .StatefulSetsForCluster (cluster , c .statefulSetLister )
72- if err != nil {
73- return err
74- }
75- for _ , s := range sets {
76- err = c .labelSeedNodes (cluster , s )
85+ for _ , np := range cluster .Spec .NodePools {
86+ setName := util .NodePoolResourceName (cluster , & np )
87+
88+ set , err := c .statefulSetLister .StatefulSets (cluster .Namespace ).Get (setName )
89+ if err != nil {
90+ return err
91+ }
92+ err = c .labelSeedNodes (cluster , & np , set )
7793 if err != nil {
7894 return err
7995 }
0 commit comments