Skip to content

Commit

Permalink
Update workload controller for new design (#675)
Browse files Browse the repository at this point in the history
**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
  • Loading branch information
hossainemruz authored and tamalsaha committed Mar 21, 2019
1 parent 5c173e5 commit cacbc7d
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 3 deletions.
4 changes: 2 additions & 2 deletions backup.go
Expand Up @@ -7,7 +7,7 @@ import (

"github.com/appscode/go/log"
v "github.com/appscode/go/version"
api "github.com/appscode/stash/apis/stash/v1alpha1"
"github.com/appscode/stash/apis"
cs "github.com/appscode/stash/client/clientset/versioned"
"github.com/appscode/stash/pkg/backup"
"github.com/appscode/stash/pkg/docker"
Expand Down Expand Up @@ -80,7 +80,7 @@ func NewCmdBackup() *cobra.Command {
log.Fatal(err)
}
} else { // for offline backup
if opt.Workload.Kind == api.KindDaemonSet || opt.Workload.Kind == api.KindStatefulSet {
if opt.Workload.Kind == apis.KindDaemonSet || opt.Workload.Kind == apis.KindStatefulSet {
log.Infoln("Running backup once")
if err = ctrl.Backup(); err != nil {
log.Fatal(err)
Expand Down
2 changes: 1 addition & 1 deletion backup_pvc.go
Expand Up @@ -40,7 +40,7 @@ func NewCmdBackupPVC() *cobra.Command {
return handleResticError(outputDir, restic.DefaultOutputFileName, err)
}
// Run backup
backupOutput, backupErr := resticWrapper.RunBackup(&backupOpt)
backupOutput, backupErr := resticWrapper.RunBackup(backupOpt)
// If metrics are enabled then generate metrics
if metrics.Enabled {
err := backupOutput.HandleMetrics(&metrics, backupErr)
Expand Down
65 changes: 65 additions & 0 deletions restore.go
@@ -0,0 +1,65 @@
package cmds

import (
"github.com/appscode/go/log"
cs "github.com/appscode/stash/client/clientset/versioned"
"github.com/appscode/stash/pkg/restic"
"github.com/appscode/stash/pkg/restore"
"github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/util/errors"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
"kmodules.xyz/client-go/meta"
)

func NewCmdRestore() *cobra.Command {
opt := &restore.Options{
MasterURL: "",
KubeconfigPath: "",
Namespace: meta.Namespace(),
SetupOpt: restic.SetupOptions{
ScratchDir: "/tmp",
EnableCache: false,
},
}

cmd := &cobra.Command{
Use: "restore",
Short: "Restore from backup",
DisableAutoGenTag: true,
RunE: func(cmd *cobra.Command, args []string) error {
// create client
config, err := clientcmd.BuildConfigFromFlags(opt.MasterURL, opt.KubeconfigPath)
if err != nil {
log.Fatal(err)
return err
}
opt.KubeClient = kubernetes.NewForConfigOrDie(config)
opt.StashClient = cs.NewForConfigOrDie(config)

opt.Metrics.JobName = opt.RestoreSessionName
// run restore
err = restore.Restore(opt)
if err != nil {
// set RestoreSession status "Failed", write event and send prometheus metrics
e2 := restore.HandleRestoreFailure(opt, err)
if e2 != nil {
err = errors.NewAggregate([]error{err, e2})
}
log.Fatalln(err)
}
return nil
},
}
cmd.Flags().StringVar(&opt.MasterURL, "master", opt.MasterURL, "The address of the Kubernetes API server (overrides any value in kubeconfig)")
cmd.Flags().StringVar(&opt.KubeconfigPath, "kubeconfig", opt.KubeconfigPath, "Path to kubeconfig file with authorization information (the master location is set by the master flag).")
cmd.Flags().StringVar(&opt.RestoreSessionName, "restore-session", opt.RestoreSessionName, "Name of the RestoreSession CRD.")
cmd.Flags().DurationVar(&opt.BackoffMaxWait, "backoff-max-wait", 0, "Maximum wait for initial response from kube apiserver; 0 disables the timeout")
cmd.Flags().BoolVar(&opt.SetupOpt.EnableCache, "enable-cache", opt.SetupOpt.EnableCache, "Specify weather to enable caching for restic")
cmd.Flags().StringVar(&opt.SetupOpt.SecretDir, "secret-dir", opt.SetupOpt.SecretDir, "Directory where storage secret has been mounted")

cmd.Flags().BoolVar(&opt.Metrics.Enabled, "metrics-enabled", opt.Metrics.Enabled, "Specify weather to export Prometheus metrics")
cmd.Flags().StringVar(&opt.Metrics.PushgatewayURL, "pushgateway-url", opt.Metrics.PushgatewayURL, "Pushgateway URL where the metrics will be pushed")

return cmd
}
1 change: 1 addition & 0 deletions root.go
Expand Up @@ -52,6 +52,7 @@ func NewRootCmd() *cobra.Command {
rootCmd.AddCommand(NewCmdSnapshots())
rootCmd.AddCommand(NewCmdForget())
rootCmd.AddCommand(NewBackupSession())
rootCmd.AddCommand(NewCmdRestore())

return rootCmd
}
4 changes: 4 additions & 0 deletions server/options.go
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/spf13/pflag"
crd_cs "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1"
"k8s.io/client-go/kubernetes"
appcatalog_cs "kmodules.xyz/custom-resources/client/clientset/versioned"
)

type ExtraOptions struct {
Expand Down Expand Up @@ -87,5 +88,8 @@ func (s *ExtraOptions) ApplyTo(cfg *controller.Config) error {
if cfg.CRDClient, err = crd_cs.NewForConfig(cfg.ClientConfig); err != nil {
return err
}
if cfg.AppCatalogClient, err = appcatalog_cs.NewForConfig(cfg.ClientConfig); err != nil {
return err
}
return nil
}
7 changes: 7 additions & 0 deletions server/start.go
Expand Up @@ -85,6 +85,13 @@ func (o StashOptions) Config() (*server.StashConfig, error) {
"/apis/admission.stash.appscode.com/v1alpha1/statefulsets",
"/apis/admission.stash.appscode.com/v1alpha1/replicationcontrollers",
"/apis/admission.stash.appscode.com/v1alpha1/replicasets",
// v1beta1 apis
"/apis/admission.stash.appscode.com/v1beta1/backupconfigurationtemplates",
"/apis/admission.stash.appscode.com/v1beta1/backupconfigurations",
"/apis/admission.stash.appscode.com/v1beta1/backupsessions",
"/apis/admission.stash.appscode.com/v1beta1/functions",
"/apis/admission.stash.appscode.com/v1beta1/restoresessions",
"/apis/admission.stash.appscode.com/v1beta1/tasks",
}

extraConfig := controller.NewConfig(serverConfig.ClientConfig)
Expand Down

0 comments on commit cacbc7d

Please sign in to comment.