Skip to content

Commit cacbc7d

Browse files
hossainemruztamalsaha
authored andcommitted
Update workload controller for new design (#675)
**Requirements:** - [x] Merge stashed/stash#647 to master - [x] Merge stashed/stash#673 to master - [x] Merge stashed/stash#674 to master - [x] Merge stashed/stash#671 to master - [x] Rebase against master **Tasks:** - [x] Update Restore Logic - [x] Update Backup Logic - [x] Update Workload Controllers - [x] Deployment - [x] DaemonSet - [x] ReplicationControler - [x] ReplicaSet - [x] StatefulSet - [x] Fix ConfigMap lock deletion and RBAC stuff deletion logic - [x] Ensure sidecar/init-container according to new design - [x] Ensure Restore init-container injection - [x] Ensure Restore init-container deletion - [x] Ensure Backup sidecar injection - [x] Ensure Backup sidecar deletion - [x] Add new backup command (sagor is working) - [x] Add new restore command - [x] Add controller (possibly in different PR) - [x] PersistentVolumeClaim - [x] AppBinding
1 parent 5c173e5 commit cacbc7d

File tree

6 files changed

+80
-3
lines changed

6 files changed

+80
-3
lines changed

backup.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77

88
"github.com/appscode/go/log"
99
v "github.com/appscode/go/version"
10-
api "github.com/appscode/stash/apis/stash/v1alpha1"
10+
"github.com/appscode/stash/apis"
1111
cs "github.com/appscode/stash/client/clientset/versioned"
1212
"github.com/appscode/stash/pkg/backup"
1313
"github.com/appscode/stash/pkg/docker"
@@ -80,7 +80,7 @@ func NewCmdBackup() *cobra.Command {
8080
log.Fatal(err)
8181
}
8282
} else { // for offline backup
83-
if opt.Workload.Kind == api.KindDaemonSet || opt.Workload.Kind == api.KindStatefulSet {
83+
if opt.Workload.Kind == apis.KindDaemonSet || opt.Workload.Kind == apis.KindStatefulSet {
8484
log.Infoln("Running backup once")
8585
if err = ctrl.Backup(); err != nil {
8686
log.Fatal(err)

backup_pvc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func NewCmdBackupPVC() *cobra.Command {
4040
return handleResticError(outputDir, restic.DefaultOutputFileName, err)
4141
}
4242
// Run backup
43-
backupOutput, backupErr := resticWrapper.RunBackup(&backupOpt)
43+
backupOutput, backupErr := resticWrapper.RunBackup(backupOpt)
4444
// If metrics are enabled then generate metrics
4545
if metrics.Enabled {
4646
err := backupOutput.HandleMetrics(&metrics, backupErr)

restore.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package cmds
2+
3+
import (
4+
"github.com/appscode/go/log"
5+
cs "github.com/appscode/stash/client/clientset/versioned"
6+
"github.com/appscode/stash/pkg/restic"
7+
"github.com/appscode/stash/pkg/restore"
8+
"github.com/spf13/cobra"
9+
"k8s.io/apimachinery/pkg/util/errors"
10+
"k8s.io/client-go/kubernetes"
11+
"k8s.io/client-go/tools/clientcmd"
12+
"kmodules.xyz/client-go/meta"
13+
)
14+
15+
func NewCmdRestore() *cobra.Command {
16+
opt := &restore.Options{
17+
MasterURL: "",
18+
KubeconfigPath: "",
19+
Namespace: meta.Namespace(),
20+
SetupOpt: restic.SetupOptions{
21+
ScratchDir: "/tmp",
22+
EnableCache: false,
23+
},
24+
}
25+
26+
cmd := &cobra.Command{
27+
Use: "restore",
28+
Short: "Restore from backup",
29+
DisableAutoGenTag: true,
30+
RunE: func(cmd *cobra.Command, args []string) error {
31+
// create client
32+
config, err := clientcmd.BuildConfigFromFlags(opt.MasterURL, opt.KubeconfigPath)
33+
if err != nil {
34+
log.Fatal(err)
35+
return err
36+
}
37+
opt.KubeClient = kubernetes.NewForConfigOrDie(config)
38+
opt.StashClient = cs.NewForConfigOrDie(config)
39+
40+
opt.Metrics.JobName = opt.RestoreSessionName
41+
// run restore
42+
err = restore.Restore(opt)
43+
if err != nil {
44+
// set RestoreSession status "Failed", write event and send prometheus metrics
45+
e2 := restore.HandleRestoreFailure(opt, err)
46+
if e2 != nil {
47+
err = errors.NewAggregate([]error{err, e2})
48+
}
49+
log.Fatalln(err)
50+
}
51+
return nil
52+
},
53+
}
54+
cmd.Flags().StringVar(&opt.MasterURL, "master", opt.MasterURL, "The address of the Kubernetes API server (overrides any value in kubeconfig)")
55+
cmd.Flags().StringVar(&opt.KubeconfigPath, "kubeconfig", opt.KubeconfigPath, "Path to kubeconfig file with authorization information (the master location is set by the master flag).")
56+
cmd.Flags().StringVar(&opt.RestoreSessionName, "restore-session", opt.RestoreSessionName, "Name of the RestoreSession CRD.")
57+
cmd.Flags().DurationVar(&opt.BackoffMaxWait, "backoff-max-wait", 0, "Maximum wait for initial response from kube apiserver; 0 disables the timeout")
58+
cmd.Flags().BoolVar(&opt.SetupOpt.EnableCache, "enable-cache", opt.SetupOpt.EnableCache, "Specify weather to enable caching for restic")
59+
cmd.Flags().StringVar(&opt.SetupOpt.SecretDir, "secret-dir", opt.SetupOpt.SecretDir, "Directory where storage secret has been mounted")
60+
61+
cmd.Flags().BoolVar(&opt.Metrics.Enabled, "metrics-enabled", opt.Metrics.Enabled, "Specify weather to export Prometheus metrics")
62+
cmd.Flags().StringVar(&opt.Metrics.PushgatewayURL, "pushgateway-url", opt.Metrics.PushgatewayURL, "Pushgateway URL where the metrics will be pushed")
63+
64+
return cmd
65+
}

root.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ func NewRootCmd() *cobra.Command {
5252
rootCmd.AddCommand(NewCmdSnapshots())
5353
rootCmd.AddCommand(NewCmdForget())
5454
rootCmd.AddCommand(NewBackupSession())
55+
rootCmd.AddCommand(NewCmdRestore())
5556

5657
return rootCmd
5758
}

server/options.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/spf13/pflag"
1414
crd_cs "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1"
1515
"k8s.io/client-go/kubernetes"
16+
appcatalog_cs "kmodules.xyz/custom-resources/client/clientset/versioned"
1617
)
1718

1819
type ExtraOptions struct {
@@ -87,5 +88,8 @@ func (s *ExtraOptions) ApplyTo(cfg *controller.Config) error {
8788
if cfg.CRDClient, err = crd_cs.NewForConfig(cfg.ClientConfig); err != nil {
8889
return err
8990
}
91+
if cfg.AppCatalogClient, err = appcatalog_cs.NewForConfig(cfg.ClientConfig); err != nil {
92+
return err
93+
}
9094
return nil
9195
}

server/start.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,13 @@ func (o StashOptions) Config() (*server.StashConfig, error) {
8585
"/apis/admission.stash.appscode.com/v1alpha1/statefulsets",
8686
"/apis/admission.stash.appscode.com/v1alpha1/replicationcontrollers",
8787
"/apis/admission.stash.appscode.com/v1alpha1/replicasets",
88+
// v1beta1 apis
89+
"/apis/admission.stash.appscode.com/v1beta1/backupconfigurationtemplates",
90+
"/apis/admission.stash.appscode.com/v1beta1/backupconfigurations",
91+
"/apis/admission.stash.appscode.com/v1beta1/backupsessions",
92+
"/apis/admission.stash.appscode.com/v1beta1/functions",
93+
"/apis/admission.stash.appscode.com/v1beta1/restoresessions",
94+
"/apis/admission.stash.appscode.com/v1beta1/tasks",
8895
}
8996

9097
extraConfig := controller.NewConfig(serverConfig.ClientConfig)

0 commit comments

Comments
 (0)