Skip to content

Commit 1f27f1c

Browse files
author
Jeff McCormick
committed
update affinity logic
1 parent 7f5aa6d commit 1f27f1c

File tree

6 files changed

+63
-15
lines changed

6 files changed

+63
-15
lines changed

client/cmd/cluster.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ func getClusterParams(name string) *tpr.PgCluster {
259259
spec.FS_GROUP = ""
260260
spec.SUPPLEMENTAL_GROUPS = ""
261261
spec.STRATEGY = "1"
262+
spec.NodeName = NodeName
262263

263264
//override any values from config file
264265
str := viper.GetString("CLUSTER.PORT")
@@ -362,6 +363,49 @@ func getReadyStatus(pod *v1.Pod) string {
362363

363364
}
364365

366+
func getValidNodeName() string {
367+
var err error
368+
nodes, err := Clientset.CoreV1().Nodes().List(meta_v1.ListOptions{})
369+
if err != nil {
370+
panic(err.Error())
371+
}
372+
373+
//TODO randomize the node selection
374+
for _, node := range nodes.Items {
375+
return node.Name
376+
}
377+
378+
panic("no nodes found")
379+
380+
return "error here"
381+
382+
}
383+
func validateNodeName(nodeName string) error {
384+
var err error
385+
lo := meta_v1.ListOptions{}
386+
nodes, err := Clientset.CoreV1().Nodes().List(lo)
387+
if err != nil {
388+
panic(err.Error())
389+
}
390+
391+
found := false
392+
allNodes := ""
393+
394+
for _, node := range nodes.Items {
395+
if node.Name == nodeName {
396+
found = true
397+
}
398+
allNodes += node.Name + " "
399+
}
400+
401+
if found == false {
402+
return errors.New("node name was not found...valid nodes include " + allNodes)
403+
}
404+
405+
return err
406+
407+
}
408+
365409
func validateSecretFrom(secretname string) error {
366410
var err error
367411
lo := meta_v1.ListOptions{LabelSelector: "pg-database=" + secretname}

client/cmd/create.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ var CCP_IMAGE_TAG string
2525
var Password string
2626
var SecretFrom, BackupPath, BackupPVC string
2727
var PoliciesFlag, PolicyFile, PolicyURL string
28+
var NodeName string
2829

2930
// createCmd represents the create command
3031
var createCmd = &cobra.Command{
@@ -66,6 +67,18 @@ pgo create cluster mycluster`,
6667
}
6768
}
6869

70+
//always have a valid NodeName
71+
if NodeName == "" {
72+
NodeName = getValidNodeName()
73+
} else {
74+
err = validateNodeName(NodeName)
75+
if err != nil {
76+
log.Error(err)
77+
return
78+
}
79+
80+
}
81+
6982
if len(args) == 0 {
7083
log.Error("a cluster name is required for this command")
7184
} else {
@@ -106,6 +119,7 @@ func init() {
106119

107120
// Cobra supports local flags which will only run when this command
108121
// is called directly, e.g.:
122+
createClusterCmd.Flags().StringVarP(&NodeName, "node-name", "n", "", "The node on which to place the master database")
109123
createClusterCmd.Flags().StringVarP(&Password, "password", "w", "", "The password to use for initial database users")
110124
createClusterCmd.Flags().StringVarP(&SecretFrom, "secret-from", "s", "", "The cluster name to use when restoring secrets")
111125
createClusterCmd.Flags().StringVarP(&BackupPVC, "backup-pvc", "p", "", "The backup archive PVC to restore from")

operator/cluster/clone.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ func copyTPR(cluster *tpr.PgCluster, clone *tpr.PgClone) *tpr.PgCluster {
293293
spec.SUPPLEMENTAL_GROUPS = cluster.Spec.SUPPLEMENTAL_GROUPS
294294
spec.STRATEGY = cluster.Spec.STRATEGY
295295
spec.BACKUP_PATH = cluster.Spec.BACKUP_PATH
296+
spec.NodeName = cluster.Spec.NodeName
296297

297298
newInstance := &tpr.PgCluster{
298299
Metadata: meta_v1.ObjectMeta{

operator/cluster/cluster.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -344,19 +344,6 @@ func ScaleReplicas(serviceName string, clientset *kubernetes.Clientset, cl *tpr.
344344
log.Error(err)
345345
return
346346
}
347-
//create a Deployment
348-
//serviceName := depName + "-replica"
349-
//replicaServiceFields := ServiceTemplateFields{
350-
//Name: serviceName,
351-
//ClusterName: cl.Spec.Name,
352-
//Port: cl.Spec.Port,
353-
//}
354-
355-
//err = CreateService(clientset, &replicaServiceFields, namespace)
356-
//if err != nil {
357-
//log.Error(err)
358-
//return
359-
//}
360347
strategy.CreateReplica(serviceName, clientset, cl, depName, pvcName, namespace, false)
361348
}
362349
}

operator/cluster/cluster_strategy_1.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func (r ClusterStrategy1) AddCluster(clientset *kubernetes.Clientset, client *re
9393
PGROOT_SECRET_NAME: cl.Spec.PGROOT_SECRET_NAME,
9494
PGMASTER_SECRET_NAME: cl.Spec.PGMASTER_SECRET_NAME,
9595
PGUSER_SECRET_NAME: cl.Spec.PGUSER_SECRET_NAME,
96-
NODE_SELECTOR: "operator",
96+
NODE_SELECTOR: cl.Spec.NodeName,
9797
}
9898

9999
err = DeploymentTemplate1.Execute(&masterDoc, deploymentFields)
@@ -140,6 +140,7 @@ func (r ClusterStrategy1) AddCluster(clientset *kubernetes.Clientset, client *re
140140
log.Error("error in creating replica service " + err.Error())
141141
return err
142142
}
143+
143144
ScaleReplicas(serviceName, clientset, cl, newReplicas, namespace)
144145
}
145146
}
@@ -427,7 +428,7 @@ func (r ClusterStrategy1) CreateReplica(serviceName string, clientset *kubernete
427428
PGROOT_SECRET_NAME: cl.Spec.PGROOT_SECRET_NAME,
428429
PGMASTER_SECRET_NAME: cl.Spec.PGMASTER_SECRET_NAME,
429430
PGUSER_SECRET_NAME: cl.Spec.PGUSER_SECRET_NAME,
430-
NODE_SELECTOR: "operator",
431+
NODE_SELECTOR: cl.Spec.NodeName,
431432
}
432433

433434
switch cl.Spec.ReplicaStorage.StorageType {

tpr/cluster.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ type PgClusterSpec struct {
3333
CCP_IMAGE_TAG string `json:"ccpimagetag"`
3434
POSTGRES_FULL_VERSION string `json:"postgresfullversion"`
3535
Port string `json:"port"`
36+
NodeName string `json:"nodename"`
3637
MasterStorage PgStorageSpec `json:masterstorage`
3738
ReplicaStorage PgStorageSpec `json:replicastorage`
3839
PG_MASTER_HOST string `json:"pgmasterhost"`

0 commit comments

Comments
 (0)