Skip to content

Commit 6e6afcf

Browse files
author
jmccormick2001
committed
merge controller/podcontroller.go
2 parents 5c94e1e + 1967405 commit 6e6afcf

File tree

123 files changed

+2116
-613
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

123 files changed

+2116
-613
lines changed

apis/cr/v1/backup.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ type PgbackupSpec struct {
3232
BackupPass string `json:"backuppass"`
3333
BackupPort string `json:"backupport"`
3434
BackupStatus string `json:"backupstatus"`
35+
BackupPVC string `json:"backuppvc"`
3536
}
3637

3738
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

apis/cr/v1/deepcopy.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ func (in *Pgbackup) DeepCopyInto(out *Pgbackup) {
1616
BackupPass: in.Spec.BackupPass,
1717
BackupPort: in.Spec.BackupPort,
1818
BackupStatus: in.Spec.BackupStatus,
19+
BackupPVC: in.Spec.BackupPVC,
1920
}
2021
out.Status = in.Status
2122
}

apis/cr/v1/task.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,11 @@ import (
2222
// PgtaskResourcePlural ...
2323
const PgtaskResourcePlural = "pgtasks"
2424

25+
const PgtaskDeleteBackups = "delete-backups"
2526
const PgtaskDeleteData = "delete-data"
2627
const PgtaskFailover = "failover"
28+
const PgtaskAutoFailover = "autofailover"
29+
const PgtaskAddPolicies = "addpolicies"
2730

2831
// PgtaskSpec ...
2932
type PgtaskSpec struct {

apiserver.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ func main() {
108108
r.HandleFunc("/backupsdelete/{name}", backupservice.DeleteBackupHandler).Methods("GET")
109109
r.HandleFunc("/backups", backupservice.CreateBackupHandler).Methods("POST")
110110
r.HandleFunc("/failover", failoverservice.CreateFailoverHandler).Methods("POST")
111+
r.HandleFunc("/failover/{name}", failoverservice.QueryFailoverHandler).Methods("GET")
111112

112113
caCert, err := ioutil.ReadFile(serverCert)
113114
if err != nil {

apiserver/backupservice/backupimpl.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,10 @@ func CreateBackup(request *msgs.CreateBackupRequest) msgs.CreateBackupResponse {
172172
resp.Results = append(resp.Results, msg)
173173
break
174174
}
175+
if request.PVCName != "" {
176+
log.Debug("jeff----> backuppvc is " + request.PVCName)
177+
newInstance.Spec.BackupPVC = request.PVCName
178+
}
175179

176180
err = kubeapi.Createpgbackup(apiserver.RESTClient, newInstance, apiserver.Namespace)
177181
if err != nil {

apiserver/backupservice/backupservice.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ func ShowBackupHandler(w http.ResponseWriter, r *http.Request) {
3232

3333
backupname := vars["name"]
3434

35+
clientVersion := r.URL.Query().Get("version")
36+
if clientVersion != "" {
37+
log.Debug("version param was [" + clientVersion + "]")
38+
}
39+
3540
err := apiserver.Authn(apiserver.SHOW_BACKUP_PERM, w, r)
3641
if err != nil {
3742
return
@@ -41,7 +46,14 @@ func ShowBackupHandler(w http.ResponseWriter, r *http.Request) {
4146
w.Header().Set("Content-Type", "application/json")
4247

4348
log.Debug("backupservice.ShowBackupHandler GET called")
44-
resp := ShowBackup(backupname)
49+
var resp msgs.ShowBackupResponse
50+
if clientVersion != apiserver.VERSION {
51+
resp = msgs.ShowBackupResponse{}
52+
resp.Status = msgs.Status{Code: msgs.Error, Msg: apiserver.VERSION_MISMATCH_ERROR}
53+
54+
} else {
55+
resp = ShowBackup(backupname)
56+
}
4557
json.NewEncoder(w).Encode(resp)
4658

4759
}
@@ -53,6 +65,10 @@ func DeleteBackupHandler(w http.ResponseWriter, r *http.Request) {
5365
log.Debugf("backupservice.DeleteBackupHandler %v\n", vars)
5466

5567
backupname := vars["name"]
68+
clientVersion := r.URL.Query().Get("version")
69+
if clientVersion != "" {
70+
log.Debug("version param was [" + clientVersion + "]")
71+
}
5672

5773
err := apiserver.Authn(apiserver.DELETE_BACKUP_PERM, w, r)
5874
if err != nil {
@@ -62,7 +78,13 @@ func DeleteBackupHandler(w http.ResponseWriter, r *http.Request) {
6278
w.Header().Set("WWW-Authenticate", `Basic realm="Restricted"`)
6379
w.Header().Set("Content-Type", "application/json")
6480
log.Debug("backupservice.DeleteBackupHandler called")
65-
resp := DeleteBackup(backupname)
81+
var resp msgs.DeleteBackupResponse
82+
if clientVersion != apiserver.VERSION {
83+
resp = msgs.DeleteBackupResponse{}
84+
resp.Status = msgs.Status{Code: msgs.Error, Msg: apiserver.VERSION_MISMATCH_ERROR}
85+
} else {
86+
resp = DeleteBackup(backupname)
87+
}
6688
json.NewEncoder(w).Encode(resp)
6789

6890
}

apiserver/clusterservice/clusterimpl.go

Lines changed: 53 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ func ShowCluster(name, selector string) msgs.ShowClusterResponse {
163163
func getDeployments(cluster *crv1.Pgcluster) ([]msgs.ShowClusterDeployment, error) {
164164
output := make([]msgs.ShowClusterDeployment, 0)
165165

166-
selector := "pg-cluster=" + cluster.Spec.Name
166+
selector := util.LABEL_PG_CLUSTER + "=" + cluster.Spec.Name
167167
deployments, err := kubeapi.GetDeployments(apiserver.Clientset, selector, apiserver.Namespace)
168168
if err != nil {
169169
return output, err
@@ -189,7 +189,7 @@ func getPods(cluster *crv1.Pgcluster) ([]msgs.ShowClusterPod, error) {
189189

190190
output := make([]msgs.ShowClusterPod, 0)
191191

192-
selector := "crunchy-pgpool!=true,pg-cluster=" + cluster.Spec.Name
192+
selector := util.LABEL_PGPOOL + "!=true," + util.LABEL_PG_CLUSTER + "=" + cluster.Spec.Name
193193

194194
pods, err := kubeapi.GetPods(apiserver.Clientset, selector, apiserver.Namespace)
195195
if err != nil {
@@ -216,7 +216,7 @@ func getPods(cluster *crv1.Pgcluster) ([]msgs.ShowClusterPod, error) {
216216
func getServices(cluster *crv1.Pgcluster) ([]msgs.ShowClusterService, error) {
217217

218218
output := make([]msgs.ShowClusterService, 0)
219-
selector := "pg-cluster=" + cluster.Spec.Name
219+
selector := util.LABEL_PG_CLUSTER + "=" + cluster.Spec.Name
220220

221221
services, err := kubeapi.GetServices(apiserver.Clientset, selector, apiserver.Namespace)
222222
if err != nil {
@@ -238,7 +238,7 @@ func getServices(cluster *crv1.Pgcluster) ([]msgs.ShowClusterService, error) {
238238
func getSecrets(cluster *crv1.Pgcluster) ([]msgs.ShowClusterSecret, error) {
239239

240240
output := make([]msgs.ShowClusterSecret, 0)
241-
selector := "pgpool!=true,pg-database=" + cluster.Spec.Name
241+
selector := "pgpool!=true," + util.LABEL_PG_DATABASE + "=" + cluster.Spec.Name
242242

243243
secrets, err := kubeapi.GetSecrets(apiserver.Clientset, selector, apiserver.Namespace)
244244
if err != nil {
@@ -303,17 +303,6 @@ func TestCluster(name, selector string) msgs.ClusterTestResponse {
303303
return response
304304
}
305305

306-
/**
307-
//get the replicas for this cluster
308-
log.Debug("calling getReplicas")
309-
detail.Replicas, err = getReplicas(&c)
310-
if err != nil {
311-
response.Status.Code = msgs.Error
312-
response.Status.Msg = err.Error()
313-
return response
314-
}
315-
*/
316-
317306
//get the secrets for this cluster
318307
detail.Secrets, err = getSecrets(&c)
319308
if err != nil {
@@ -443,34 +432,37 @@ func CreateCluster(request *msgs.CreateClusterRequest) msgs.CreateClusterRespons
443432
}
444433

445434
//set the metrics flag with the global setting first
446-
userLabelsMap["crunchy_collect"] = strconv.FormatBool(apiserver.MetricsFlag)
435+
userLabelsMap[util.LABEL_COLLECT] = strconv.FormatBool(apiserver.MetricsFlag)
447436
if err != nil {
448437
log.Error(err)
449438
}
450439

451440
//if metrics is chosen on the pgo command, stick it into the user labels
452441
if request.MetricsFlag {
453-
userLabelsMap["crunchy_collect"] = "true"
442+
userLabelsMap[util.LABEL_COLLECT] = "true"
443+
}
444+
if request.AutofailFlag {
445+
userLabelsMap[util.LABEL_AUTOFAIL] = "true"
454446
}
455447

456448
if request.ArchiveFlag {
457-
userLabelsMap["archive"] = "true"
449+
userLabelsMap[util.LABEL_ARCHIVE] = "true"
458450
log.Debug("archive set to true in user labels")
459451
} else {
460452
log.Debug("using ArchiveMode from pgo.yaml")
461-
userLabelsMap["archive"] = apiserver.Pgo.Cluster.ArchiveMode
453+
userLabelsMap[util.LABEL_ARCHIVE] = apiserver.Pgo.Cluster.ArchiveMode
462454
}
463-
userLabelsMap["archive-timeout"] = apiserver.Pgo.Cluster.ArchiveTimeout
455+
userLabelsMap[util.LABEL_ARCHIVE_TIMEOUT] = apiserver.Pgo.Cluster.ArchiveTimeout
464456

465457
if request.PgpoolFlag {
466-
userLabelsMap["crunchy-pgpool"] = "true"
467-
userLabelsMap["pgpool-secret"] = request.PgpoolSecret
458+
userLabelsMap[util.LABEL_PGPOOL] = "true"
459+
userLabelsMap[util.LABEL_PGPOOL_SECRET] = request.PgpoolSecret
468460
log.Debug("userLabelsMap")
469461
log.Debugf("%v", userLabelsMap)
470462
}
471463

472464
if existsGlobalConfig() {
473-
userLabelsMap["custom-config"] = util.GLOBAL_CUSTOM_CONFIGMAP
465+
userLabelsMap[util.LABEL_CUSTOM_CONFIG] = util.GLOBAL_CUSTOM_CONFIGMAP
474466
}
475467

476468
if request.StorageConfig != "" {
@@ -506,8 +498,8 @@ func CreateCluster(request *msgs.CreateClusterRequest) msgs.CreateClusterRespons
506498
resp.Status.Msg = request.NodeLabel + " node label value was not valid .. check node labels for correct values to specify"
507499
return resp
508500
}
509-
userLabelsMap["NodeLabelKey"] = parts[0]
510-
userLabelsMap["NodeLabelValue"] = parts[1]
501+
userLabelsMap[util.LABEL_NODE_LABEL_KEY] = parts[0]
502+
userLabelsMap[util.LABEL_NODE_LABEL_VALUE] = parts[1]
511503
}
512504

513505
if request.ReplicaStorageConfig != "" {
@@ -548,7 +540,7 @@ func CreateCluster(request *msgs.CreateClusterRequest) msgs.CreateClusterRespons
548540

549541
// Create an instance of our CRD
550542
newInstance := getClusterParams(request, clusterName, userLabelsMap)
551-
validateConfigPolicies(request.Policies)
543+
validateConfigPolicies(clusterName, request.Policies)
552544

553545
t := time.Now()
554546
newInstance.Spec.PswLastUpdate = t.Format(time.RFC3339)
@@ -566,18 +558,19 @@ func CreateCluster(request *msgs.CreateClusterRequest) msgs.CreateClusterRespons
566558

567559
}
568560

569-
func validateConfigPolicies(PoliciesFlag string) error {
561+
func validateConfigPolicies(clusterName, PoliciesFlag string) error {
570562
var err error
571563
var configPolicies string
564+
572565
if PoliciesFlag == "" {
573-
log.Println(apiserver.Pgo.Cluster.Policies + " is Pgo.Cluster.Policies")
566+
log.Debug(apiserver.Pgo.Cluster.Policies + " is Pgo.Cluster.Policies")
574567
configPolicies = apiserver.Pgo.Cluster.Policies
575568
} else {
576569
configPolicies = PoliciesFlag
577570
}
571+
578572
if configPolicies == "" {
579-
log.Debug("no policies are specified")
580-
err = errors.New("no policies are specified")
573+
log.Debug("no policies are specified in either pgo.yaml or from user")
581574
return err
582575
}
583576

@@ -598,8 +591,31 @@ func validateConfigPolicies(PoliciesFlag string) error {
598591
log.Error("error getting pgpolicy " + v + err.Error())
599592
return err
600593
}
594+
//create a pgtask to add the policy after the db is ready
595+
}
596+
597+
spec := crv1.PgtaskSpec{}
598+
spec.StorageSpec = crv1.PgStorageSpec{}
599+
spec.TaskType = crv1.PgtaskAddPolicies
600+
spec.Status = "requested"
601+
spec.Parameters = make(map[string]string)
602+
for _, v := range policies {
603+
spec.Parameters[v] = v
604+
}
605+
spec.Name = clusterName + "-policies"
606+
labels := make(map[string]string)
607+
labels[util.LABEL_PG_CLUSTER] = clusterName
608+
609+
newInstance := &crv1.Pgtask{
610+
ObjectMeta: meta_v1.ObjectMeta{
611+
Name: spec.Name,
612+
Labels: labels,
613+
},
614+
Spec: spec,
601615
}
602616

617+
kubeapi.Createpgtask(apiserver.RESTClient, newInstance, apiserver.Namespace)
618+
603619
return err
604620
}
605621

@@ -718,7 +734,7 @@ func getClusterParams(request *msgs.CreateClusterRequest, name string, userLabel
718734

719735
func validateSecretFrom(secretname string) error {
720736
var err error
721-
selector := "pg-database=" + secretname
737+
selector := util.LABEL_PG_DATABASE + "=" + secretname
722738
secrets, err := kubeapi.GetSecrets(apiserver.Clientset, selector, apiserver.Namespace)
723739
if err != nil {
724740
return err
@@ -730,8 +746,6 @@ func validateSecretFrom(secretname string) error {
730746
pguserFound := false
731747

732748
for _, s := range secrets.Items {
733-
//fmt.Println("")
734-
//fmt.Println("secret : " + s.ObjectMeta.Name)
735749
if s.ObjectMeta.Name == secretname+crv1.PrimarySecretSuffix {
736750
pgprimaryFound = true
737751
} else if s.ObjectMeta.Name == secretname+crv1.RootSecretSuffix {
@@ -790,9 +804,6 @@ func createDeleteDataTasks(clusterName string, storageSpec crv1.PgStorageSpec, d
790804
log.Debug("got the cluster...")
791805

792806
for _, element := range pods {
793-
//log.Debugf("the pod details ... %v\n", element)
794-
//get the pgdata pvc for each pod
795-
796807
//create pgtask CRD
797808
spec := crv1.PgtaskSpec{}
798809
if element.Primary {
@@ -811,6 +822,9 @@ func createDeleteDataTasks(clusterName string, storageSpec crv1.PgStorageSpec, d
811822
},
812823
Spec: spec,
813824
}
825+
newInstance.ObjectMeta.Labels = make(map[string]string)
826+
newInstance.ObjectMeta.Labels[util.LABEL_PG_CLUSTER] = clusterName
827+
newInstance.ObjectMeta.Labels[util.LABEL_RMDATA] = "true"
814828

815829
err = kubeapi.Createpgtask(apiserver.RESTClient,
816830
newInstance, apiserver.Namespace)
@@ -831,11 +845,12 @@ func createDeleteDataTasks(clusterName string, storageSpec crv1.PgStorageSpec, d
831845
//proceed with backups removal
832846
spec := crv1.PgtaskSpec{}
833847
spec.Name = clusterName + "-backups"
834-
spec.TaskType = crv1.PgtaskDeleteData
848+
spec.TaskType = crv1.PgtaskDeleteBackups
835849
spec.StorageSpec = storageSpec
836850

837851
spec.Parameters = make(map[string]string)
838852
spec.Parameters[backupPVCName] = backupPVCName
853+
spec.Parameters[util.LABEL_PG_CLUSTER] = clusterName
839854

840855
newInstance := &crv1.Pgtask{
841856
ObjectMeta: meta_v1.ObjectMeta{
@@ -896,7 +911,7 @@ func getReplicas(cluster *crv1.Pgcluster) ([]msgs.ShowClusterReplica, error) {
896911
output := make([]msgs.ShowClusterReplica, 0)
897912
replicaList := crv1.PgreplicaList{}
898913

899-
selector := "pg-cluster=" + cluster.Spec.Name
914+
selector := util.LABEL_PG_CLUSTER + "=" + cluster.Spec.Name
900915

901916
err := kubeapi.GetpgreplicasBySelector(apiserver.RESTClient,
902917
&replicaList, selector, apiserver.Namespace)

0 commit comments

Comments
 (0)