-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
backup.go
79 lines (64 loc) · 2.56 KB
/
backup.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
/*
Copyright 2021 The Kubernetes Authors.
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 cmd
import (
"github.com/pkg/errors"
"github.com/spf13/cobra"
"sigs.k8s.io/cluster-api/cmd/clusterctl/client"
)
type backupOptions struct {
fromKubeconfig string
fromKubeconfigContext string
namespace string
directory string
}
var buo = &backupOptions{}
var backupCmd = &cobra.Command{
Use: "backup",
Short: "Backup Cluster API objects and all dependencies from a management cluster",
Long: LongDesc(`
Backup Cluster API objects and all dependencies from a management cluster.`),
Example: Examples(`
Backup Cluster API objects and all dependencies from a management cluster.
clusterctl backup --directory=/tmp/backup-directory`),
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
return runBackup()
},
Deprecated: "use 'clusterctl move --to-directory' instead.",
}
func init() {
backupCmd.Flags().StringVar(&buo.fromKubeconfig, "kubeconfig", "",
"Path to the kubeconfig file for the source management cluster to backup. If unspecified, default discovery rules apply.")
backupCmd.Flags().StringVar(&buo.fromKubeconfigContext, "kubeconfig-context", "",
"Context to be used within the kubeconfig file for the source management cluster. If empty, current context will be used.")
backupCmd.Flags().StringVarP(&buo.namespace, "namespace", "n", "",
"The namespace where the workload cluster is hosted. If unspecified, the current context's namespace is used.")
backupCmd.Flags().StringVar(&buo.directory, "directory", "",
"The directory to save Cluster API objects to as yaml files")
RootCmd.AddCommand(backupCmd)
}
func runBackup() error {
if buo.directory == "" {
return errors.New("please specify a directory to backup cluster API objects to using the --directory flag")
}
c, err := client.New(cfgFile)
if err != nil {
return err
}
return c.Move(client.MoveOptions{
FromKubeconfig: client.Kubeconfig{Path: buo.fromKubeconfig, Context: buo.fromKubeconfigContext},
Namespace: buo.namespace,
ToDirectory: buo.directory,
})
}