/
upgrade.go
107 lines (91 loc) · 3.58 KB
/
upgrade.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// Package cmd provides the command line functions of the crunchy CLI
package cmd
/*
Copyright 2017 - 2022 Crunchy Data Solutions, Inc.
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.
*/
import (
"fmt"
"os"
"github.com/crunchydata/postgres-operator/pgo/api"
"github.com/crunchydata/postgres-operator/pgo/util"
msgs "github.com/crunchydata/postgres-operator/pkg/apiservermsgs"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)
// IgnoreValidation stores the flag input value that determines whether
// image tag version checking should be done before allowing an upgrade
// to continue
var IgnoreValidation bool
// UpgradeCCPImageTag stores the image tag for the cluster being upgraded.
// This is specifically required when upgrading PostGIS clusters because
// that tag will necessarily differ from the other images tags due to the
// inclusion of the PostGIS version.
var UpgradeCCPImageTag string
var UpgradeCmd = &cobra.Command{
Use: "upgrade",
Short: "Perform a cluster upgrade.",
Long: `UPGRADE allows you to perform a comprehensive PGCluster upgrade
(for use after performing a Postgres Operator upgrade).
For example:
pgo upgrade mycluster
Upgrades the cluster for use with the upgraded Postgres Operator version.`,
Run: func(cmd *cobra.Command, args []string) {
log.Debug("cluster upgrade called")
if Namespace == "" {
Namespace = PGONamespace
}
if len(args) == 0 && Selector == "" {
fmt.Println(`Error: You must specify the cluster to upgrade.`)
} else {
fmt.Println("All active replicas will be scaled down and the primary database in this cluster will be stopped and recreated as part of this workflow!")
if util.AskForConfirmation(NoPrompt, "") {
createUpgrade(args, Namespace)
} else {
fmt.Println("Aborting...")
}
}
},
}
func init() {
RootCmd.AddCommand(UpgradeCmd)
// flags for "pgo upgrade"
UpgradeCmd.Flags().StringVarP(&UpgradeCCPImageTag, "ccp-image-tag", "", "", "The image tag to use for cluster creation. If specified, it overrides the default configuration setting and disables tag validation checking.")
UpgradeCmd.Flags().BoolVarP(&IgnoreValidation, "ignore-validation", "", false, "Disables version checking against the image tags when performing an cluster upgrade.")
UpgradeCmd.Flags().BoolVar(&NoPrompt, "no-prompt", false, "No command line confirmation.")
}
func createUpgrade(args []string, ns string) {
log.Debugf("createUpgrade called %v", args)
if len(args) == 0 && Selector == "" {
fmt.Println("Error: Cluster name(s) or a selector flag is required.")
os.Exit(2)
}
request := msgs.CreateUpgradeRequest{}
request.Args = args
request.Namespace = ns
request.Selector = Selector
request.ClientVersion = msgs.PGO_VERSION
request.IgnoreValidation = IgnoreValidation
request.UpgradeCCPImageTag = UpgradeCCPImageTag
response, err := api.CreateUpgrade(httpclient, &SessionCredentials, &request)
if err != nil {
fmt.Println("Error: " + err.Error())
os.Exit(2)
}
if response.Status.Code == msgs.Ok {
for k := range response.Results {
fmt.Println(response.Results[k])
}
} else {
fmt.Println("Error: " + response.Status.Msg)
os.Exit(2)
}
}