Skip to content

Commit

Permalink
Improve metrics handling + make update status uniform (#872)
Browse files Browse the repository at this point in the history
  • Loading branch information
hossainemruz authored and tamalsaha committed Aug 28, 2019
1 parent ea68de2 commit f63d5c1
Show file tree
Hide file tree
Showing 31 changed files with 612 additions and 377 deletions.
4 changes: 2 additions & 2 deletions apis/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ const (
RepositoryBucket = "REPOSITORY_BUCKET"
RepositoryPrefix = "REPOSITORY_PREFIX"
RepositoryEndpoint = "REPOSITORY_ENDPOINT"
RepositoryURL = "REPOSITORY_URL"

Hostname = "HOSTNAME"
SourceHostname = "SOURCE_HOSTNAME"
Expand Down Expand Up @@ -55,7 +54,8 @@ const (

StatusSubresourceEnabled = "ENABLE_STATUS_SUBRESOURCE"

PushgatewayURL = "PROMETHEUS_PUSHGATEWAY_URL"
PushgatewayURL = "PROMETHEUS_PUSHGATEWAY_URL"
PrometheusJobName = "PROMETHEUS_JOB_NAME"

StashDefaultVolume = "stash-volume"
StashDefaultMountPath = "/stash-data"
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ require (
k8s.io/kubernetes v1.14.0
kmodules.xyz/client-go v0.0.0-20190808141354-bbb9e14f60ab
kmodules.xyz/custom-resources v0.0.0-20190808144301-114abf10dfe2
kmodules.xyz/objectstore-api v0.0.0-20190808153322-733e8798e8de
kmodules.xyz/objectstore-api v0.0.0-20190824212210-196174aa0fc0
kmodules.xyz/offshoot-api v0.0.0-20190808152534-e3dc715f844b
kmodules.xyz/openshift v0.0.0-20190808144841-c8f9a927f1d1
kmodules.xyz/webhook-runtime v0.0.0-20190808145328-4186c470d56b
Expand All @@ -46,7 +46,7 @@ replace (
k8s.io/api => k8s.io/api v0.0.0-20190313235455-40a48860b5ab
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.0.0-20190315093550-53c4693659ed
k8s.io/apimachinery => github.com/kmodules/apimachinery v0.0.0-20190508045248-a52a97a7a2bf
k8s.io/apiserver => github.com/kmodules/apiserver v0.0.0-20190508082252-8397d761d4b5
k8s.io/apiserver => github.com/kmodules/apiserver v0.0.0-20190811223248-5a95b2df4348
k8s.io/cli-runtime => k8s.io/cli-runtime v0.0.0-20190314001948-2899ed30580f
k8s.io/cloud-provider => k8s.io/cloud-provider v0.0.0-20190314002645-c892ea32361a
k8s.io/component-base => k8s.io/component-base v0.0.0-20190314000054-4a91899592f4
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,8 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kmodules/apimachinery v0.0.0-20190508045248-a52a97a7a2bf h1:XUigLZjjxvtR+TD7mncq0wUOaaG2H/zslqM42crk0SY=
github.com/kmodules/apimachinery v0.0.0-20190508045248-a52a97a7a2bf/go.mod h1:1nbDY1cBTGna53FTjqnehJWker1BB75r+ElWRqNcYo8=
github.com/kmodules/apiserver v0.0.0-20190508082252-8397d761d4b5 h1:M10edLWmnwbcYIh3u6/E/K66a3BwMdY1IvqgHYxoKw0=
github.com/kmodules/apiserver v0.0.0-20190508082252-8397d761d4b5/go.mod h1:rMEImsX8dFD0jGmDQXq3zbWddcIU8vlcrMWPzpXEm9g=
github.com/kmodules/apiserver v0.0.0-20190811223248-5a95b2df4348 h1:T29tebI9+PX1FOaC1SMI3Kzwnqq5vSLe4Uq6lG0A8nU=
github.com/kmodules/apiserver v0.0.0-20190811223248-5a95b2df4348/go.mod h1:rMEImsX8dFD0jGmDQXq3zbWddcIU8vlcrMWPzpXEm9g=
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
Expand Down Expand Up @@ -485,8 +485,8 @@ kmodules.xyz/client-go v0.0.0-20190808141354-bbb9e14f60ab h1:rnKcFaDLtqpdooase2B
kmodules.xyz/client-go v0.0.0-20190808141354-bbb9e14f60ab/go.mod h1:1GI6h5D31op/2D+Hrn9DhXW6iUd5wsHBQRoLeY7fndM=
kmodules.xyz/custom-resources v0.0.0-20190808144301-114abf10dfe2 h1:u0zEFCvAttk09O64UzY1DVXNke9uAANmf4vllnVquS8=
kmodules.xyz/custom-resources v0.0.0-20190808144301-114abf10dfe2/go.mod h1:vlKyFcCXC+2Kfn3Fa5Z7RnBWyp4t46FSeEutNqpqMm8=
kmodules.xyz/objectstore-api v0.0.0-20190808153322-733e8798e8de h1:Z/z3SSS+mvRGzLT5HXLazogjnOYIfbYTYWrKBsiLtp8=
kmodules.xyz/objectstore-api v0.0.0-20190808153322-733e8798e8de/go.mod h1:Wx+Ffc7weI6zv7NQvq0GWXMGGQFn6LqVb0KcXQFwRFs=
kmodules.xyz/objectstore-api v0.0.0-20190824212210-196174aa0fc0 h1:ELq3ybK3noQP9SyZx34QsnZgU2As9r8hPAGEnuIy7Co=
kmodules.xyz/objectstore-api v0.0.0-20190824212210-196174aa0fc0/go.mod h1:vFvmrMvRlkcUANfU4Ko3dZR3HUhWMUQc1sEHcwufims=
kmodules.xyz/offshoot-api v0.0.0-20190808152534-e3dc715f844b h1:VZUtg4L9Qm2C7PBwa4sp/SvHckKidZSpkA33GoB24SA=
kmodules.xyz/offshoot-api v0.0.0-20190808152534-e3dc715f844b/go.mod h1:AzvHBjJvhFwUEiWrEKfdsgoqt5Ulio44Beo1vPoq7ww=
kmodules.xyz/openshift v0.0.0-20190808144841-c8f9a927f1d1 h1:NmVj5+kPpUgoxRans2XZt5SXm9cVy8E3b4yHaeVzqak=
Expand Down
72 changes: 28 additions & 44 deletions pkg/backup/backupsession.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"k8s.io/apimachinery/pkg/util/errors"
"k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/leaderelection"
"k8s.io/client-go/tools/leaderelection/resourcelock"
Expand All @@ -23,7 +24,6 @@ import (
api_v1beta1 "stash.appscode.dev/stash/apis/stash/v1beta1"
cs "stash.appscode.dev/stash/client/clientset/versioned"
stash_scheme "stash.appscode.dev/stash/client/clientset/versioned/scheme"
v1beta1_util "stash.appscode.dev/stash/client/clientset/versioned/typed/stash/v1beta1/util"
stashinformers "stash.appscode.dev/stash/client/informers/externalversions"
"stash.appscode.dev/stash/client/listers/stash/v1beta1"
"stash.appscode.dev/stash/pkg/eventer"
Expand All @@ -33,6 +33,7 @@ import (
)

type BackupSessionController struct {
Config *rest.Config
K8sClient kubernetes.Interface
StashClient cs.Interface
MasterURL string
Expand Down Expand Up @@ -249,26 +250,18 @@ func (c *BackupSessionController) backup(backupSession *api_v1beta1.BackupSessio

// BackupOptions configuration
backupOpt := util.BackupOptionsForBackupConfig(*backupConfiguration, extraOpt)
backupOutput, err := resticWrapper.RunBackup(backupOpt)
if err != nil {
return err
}

// if metrics are enabled then generate metrics
if c.Metrics.Enabled {
err := backupOutput.HandleMetrics(&c.Metrics, nil)
if err != nil {
return err
}
}
backupOutput, backupErr := resticWrapper.RunBackup(backupOpt)

// Update Backup Session and Repository status
o := status.UpdateStatusOptions{
Config: c.Config,
KubeClient: c.K8sClient,
StashClient: c.StashClient.(*cs.Clientset),
StashClient: c.StashClient,
Namespace: c.Namespace,
BackupSession: backupSession.Name,
Repository: backupConfiguration.Spec.Repository.Name,
Metrics: c.Metrics,
Error: backupErr,
}

err = o.UpdatePostBackupStatus(backupOutput)
Expand Down Expand Up @@ -399,27 +392,27 @@ func (c *BackupSessionController) handleBackupFailure(backupSession *api_v1beta1
if err != nil {
return err
}

hostStats := api_v1beta1.HostBackupStats{
Hostname: host,
Phase: api_v1beta1.HostBackupFailed,
Error: backupErr.Error(),
backupOutput := &restic.BackupOutput{
HostBackupStats: []api_v1beta1.HostBackupStats{
{
Hostname: host,
Phase: api_v1beta1.HostBackupFailed,
Error: backupErr.Error(),
},
},
}

// add or update entry for this host in BackupSession status
_, err = v1beta1_util.UpdateBackupSessionStatusForHost(c.StashClient.StashV1beta1(), backupSession, hostStats)

// write failure event
c.writeBackupFailureEvent(backupSession, host, backupErr)

// send prometheus metrics
if c.Metrics.Enabled {
backupOutput := &restic.BackupOutput{
HostBackupStats: []api_v1beta1.HostBackupStats{hostStats},
}
return backupOutput.HandleMetrics(&c.Metrics, backupErr)
statusOpt := status.UpdateStatusOptions{
Config: c.Config,
KubeClient: c.K8sClient,
StashClient: c.StashClient,
Namespace: c.Namespace,
BackupSession: backupSession.Name,
Metrics: c.Metrics,
Error: backupErr,
}
return nil

return statusOpt.UpdatePostBackupStatus(backupOutput)
}

func (c *BackupSessionController) HandleBackupSetupFailure(setupErr error) {
Expand All @@ -430,29 +423,20 @@ func (c *BackupSessionController) HandleBackupSetupFailure(setupErr error) {
log.Fatalln("failed to setup backup process. Reason: ", e2.Error())
}
}
c.Metrics.Labels = append(c.Metrics.Labels, fmt.Sprintf("BackupConfiguration=%s", backupConfiguration.Name))
if backupConfiguration.Spec.Target != nil {
c.Metrics.Labels = append(c.Metrics.Labels, fmt.Sprintf("kind=%s", backupConfiguration.Spec.Target.Ref.Kind))
c.Metrics.Labels = append(c.Metrics.Labels, fmt.Sprintf("name=%s", backupConfiguration.Spec.Target.Ref.Name))
}

// send prometheus metrics
if c.Metrics.Enabled {
err := restic.HandleBackupSetupMetrics(c.Metrics, setupErr)
err := restic.HandleBackupSetupMetrics(c.Config, backupConfiguration, c.Metrics, setupErr)
setupErr = errors.NewAggregate([]error{setupErr, err})
}
// fail the container so that it restart and re-try this process.
log.Fatalln("failed to setup backup process. Reason: ", setupErr.Error())
}

func (c *BackupSessionController) handleBackupSetupSuccess(backupConfiguration *api_v1beta1.BackupConfiguration) {
c.Metrics.Labels = append(c.Metrics.Labels, fmt.Sprintf("BackupConfiguration=%s", backupConfiguration.Name))
if backupConfiguration.Spec.Target != nil {
c.Metrics.Labels = append(c.Metrics.Labels, fmt.Sprintf("kind=%s", backupConfiguration.Spec.Target.Ref.Kind))
c.Metrics.Labels = append(c.Metrics.Labels, fmt.Sprintf("name=%s", backupConfiguration.Spec.Target.Ref.Name))
}
// send prometheus metrics
if c.Metrics.Enabled {
err := restic.HandleBackupSetupMetrics(c.Metrics, nil)
err := restic.HandleBackupSetupMetrics(c.Config, backupConfiguration, c.Metrics, nil)
if err != nil {
log.Warningln("failed to send prometheus metrics. Reason: ", err.Error())
}
Expand Down
23 changes: 1 addition & 22 deletions pkg/cmds/backup_pvc.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,10 @@ import (

"github.com/appscode/go/flags"
"github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/util/errors"
"stash.appscode.dev/stash/pkg/restic"
"stash.appscode.dev/stash/pkg/util"
)

const (
JobPVCBackup = "stash-pvc-backup"
)

func NewCmdBackupPVC() *cobra.Command {
var (
outputDir string
Expand All @@ -24,9 +19,6 @@ func NewCmdBackupPVC() *cobra.Command {
ScratchDir: restic.DefaultScratchDir,
EnableCache: false,
}
metrics = restic.MetricsOptions{
JobName: JobPVCBackup,
}
)

cmd := &cobra.Command{
Expand Down Expand Up @@ -54,13 +46,6 @@ func NewCmdBackupPVC() *cobra.Command {
}
// Run backup
backupOutput, backupErr := resticWrapper.RunBackup(backupOpt)
// If metrics are enabled then generate metrics
if metrics.Enabled {
err := backupOutput.HandleMetrics(&metrics, backupErr)
if err != nil {
return util.HandleResticError(outputDir, restic.DefaultOutputFileName, errors.NewAggregate([]error{backupErr, err}))
}
}
if backupErr != nil {
return util.HandleResticError(outputDir, restic.DefaultOutputFileName, backupErr)
}
Expand All @@ -74,8 +59,7 @@ func NewCmdBackupPVC() *cobra.Command {

cmd.Flags().StringVar(&setupOpt.Provider, "provider", setupOpt.Provider, "Backend provider (i.e. gcs, s3, azure etc)")
cmd.Flags().StringVar(&setupOpt.Bucket, "bucket", setupOpt.Bucket, "Name of the cloud bucket/container (keep empty for local backend)")
cmd.Flags().StringVar(&setupOpt.Endpoint, "endpoint", setupOpt.Endpoint, "Endpoint for s3/s3 compatible backend")
cmd.Flags().StringVar(&setupOpt.URL, "rest-server-url", setupOpt.URL, "URL for rest backend")
cmd.Flags().StringVar(&setupOpt.Endpoint, "endpoint", setupOpt.Endpoint, "Endpoint for s3/s3 compatible backend or REST server URL")
cmd.Flags().StringVar(&setupOpt.Path, "path", setupOpt.Path, "Directory inside the bucket where backed up data will be stored")
cmd.Flags().StringVar(&setupOpt.SecretDir, "secret-dir", setupOpt.SecretDir, "Directory where storage secret has been mounted")
cmd.Flags().StringVar(&setupOpt.ScratchDir, "scratch-dir", setupOpt.ScratchDir, "Temporary directory")
Expand All @@ -97,10 +81,5 @@ func NewCmdBackupPVC() *cobra.Command {

cmd.Flags().StringVar(&outputDir, "output-dir", outputDir, "Directory where output.json file will be written (keep empty if you don't need to write output in file)")

cmd.Flags().BoolVar(&metrics.Enabled, "metrics-enabled", metrics.Enabled, "Specify whether to export Prometheus metrics")
cmd.Flags().StringVar(&metrics.PushgatewayURL, "metrics-pushgateway-url", metrics.PushgatewayURL, "Pushgateway URL where the metrics will be pushed")
cmd.Flags().StringVar(&metrics.MetricFileDir, "metrics-dir", metrics.MetricFileDir, "Directory where to write metric.prom file (keep empty if you don't want to write metric in a text file)")
cmd.Flags().StringSliceVar(&metrics.Labels, "metrics-labels", metrics.Labels, "Labels to apply in exported metrics")

return cmd
}
2 changes: 1 addition & 1 deletion pkg/cmds/create_volumesnapshot.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ func (opt *VSoption) CreateVolumeSnapshot() error {
// Update Backup Session
o := status.UpdateStatusOptions{
KubeClient: opt.kubeClient,
StashClient: opt.stashClient.(*cs.Clientset),
StashClient: opt.stashClient,
Namespace: opt.namespace,
BackupSession: opt.name,
}
Expand Down
24 changes: 2 additions & 22 deletions pkg/cmds/restore_pvc.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,10 @@ import (

"github.com/appscode/go/flags"
"github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/util/errors"
"stash.appscode.dev/stash/pkg/restic"
"stash.appscode.dev/stash/pkg/util"
)

const (
JobPVCRestore = "stash-pvc-restore"
)

func NewCmdRestorePVC() *cobra.Command {
var (
outputDir string
Expand All @@ -24,9 +19,6 @@ func NewCmdRestorePVC() *cobra.Command {
ScratchDir: restic.DefaultScratchDir,
EnableCache: false,
}
metrics = restic.MetricsOptions{
JobName: JobPVCRestore,
}
)

cmd := &cobra.Command{
Expand Down Expand Up @@ -54,16 +46,10 @@ func NewCmdRestorePVC() *cobra.Command {
}
// Run restore
restoreOutput, restoreErr := resticWrapper.RunRestore(restoreOpt)
// If metrics are enabled then generate metrics
if metrics.Enabled {
err := restoreOutput.HandleMetrics(&metrics, restoreErr)
if err != nil {
return util.HandleResticError(outputDir, restic.DefaultOutputFileName, errors.NewAggregate([]error{restoreErr, err}))
}
}
if restoreErr != nil {
return util.HandleResticError(outputDir, restic.DefaultOutputFileName, restoreErr)
}

// If output directory specified, then write the output in "output.json" file in the specified directory
if outputDir != "" {
return restoreOutput.WriteOutput(filepath.Join(outputDir, restic.DefaultOutputFileName))
Expand All @@ -74,8 +60,7 @@ func NewCmdRestorePVC() *cobra.Command {

cmd.Flags().StringVar(&setupOpt.Provider, "provider", setupOpt.Provider, "Backend provider (i.e. gcs, s3, azure etc)")
cmd.Flags().StringVar(&setupOpt.Bucket, "bucket", setupOpt.Bucket, "Name of the cloud bucket/container (keep empty for local backend)")
cmd.Flags().StringVar(&setupOpt.Endpoint, "endpoint", setupOpt.Endpoint, "Endpoint for s3/s3 compatible backend")
cmd.Flags().StringVar(&setupOpt.URL, "rest-server-url", setupOpt.URL, "URL for rest backend")
cmd.Flags().StringVar(&setupOpt.Endpoint, "endpoint", setupOpt.Endpoint, "Endpoint for s3/s3 compatible backend or REST server URL")
cmd.Flags().StringVar(&setupOpt.Path, "path", setupOpt.Path, "Directory inside the bucket where backed up data has been stored")
cmd.Flags().StringVar(&setupOpt.SecretDir, "secret-dir", setupOpt.SecretDir, "Directory where storage secret has been mounted")
cmd.Flags().StringVar(&setupOpt.ScratchDir, "scratch-dir", setupOpt.ScratchDir, "Temporary directory")
Expand All @@ -88,10 +73,5 @@ func NewCmdRestorePVC() *cobra.Command {

cmd.Flags().StringVar(&outputDir, "output-dir", outputDir, "Directory where output.json file will be written (keep empty if you don't need to write output in file)")

cmd.Flags().BoolVar(&metrics.Enabled, "metrics-enabled", metrics.Enabled, "Specify whether to export Prometheus metrics")
cmd.Flags().StringVar(&metrics.PushgatewayURL, "metrics-pushgateway-url", metrics.PushgatewayURL, "Pushgateway URL where the metrics will be pushed")
cmd.Flags().StringVar(&metrics.MetricFileDir, "metrics-dir", metrics.MetricFileDir, "Directory where to write metric.prom file (keep empty if you don't want to write metric in a text file)")
cmd.Flags().StringSliceVar(&metrics.Labels, "metrics-labels", metrics.Labels, "Labels to apply in exported metrics")

return cmd
}
1 change: 1 addition & 0 deletions pkg/cmds/run_backup.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ func NewCmdRunBackup() *cobra.Command {
return err
}

con.Config = config
con.K8sClient = kubernetes.NewForConfigOrDie(config)
con.StashClient = cs.NewForConfigOrDie(config)
con.StashInformerFactory = stashinformers.NewSharedInformerFactoryWithOptions(
Expand Down
13 changes: 11 additions & 2 deletions pkg/cmds/update_status.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ import (
"stash.appscode.dev/stash/pkg/status"
)

const (
StashDefaultMetricJob = "stash-prom-metrics"
)

func NewCmdUpdateStatus() *cobra.Command {
var (
masterURL string
Expand Down Expand Up @@ -41,6 +45,7 @@ func NewCmdUpdateStatus() *cobra.Command {
return err
}

opt.Config = config
if opt.BackupSession != "" {
return opt.UpdateBackupStatusFromFile()
}
Expand All @@ -56,9 +61,13 @@ func NewCmdUpdateStatus() *cobra.Command {

cmd.Flags().StringVar(&opt.Namespace, "namespace", "default", "Namespace of Backup/Restore Session")
cmd.Flags().StringVar(&opt.Repository, "repository", opt.Repository, "Name of the Repository")
cmd.Flags().StringVar(&opt.BackupSession, "backup-session", opt.BackupSession, "Name of the Backup Session")
cmd.Flags().StringVar(&opt.RestoreSession, "restore-session", opt.RestoreSession, "Name of the Restore Session")
cmd.Flags().StringVar(&opt.BackupSession, "backupsession", opt.BackupSession, "Name of the Backup Session")
cmd.Flags().StringVar(&opt.RestoreSession, "restoresession", opt.RestoreSession, "Name of the Restore Session")
cmd.Flags().StringVar(&opt.OutputDir, "output-dir", opt.OutputDir, "Directory where output.json file will be written (keep empty if you don't need to write output in file)")
cmd.Flags().BoolVar(&opt.Metrics.Enabled, "metrics-enabled", opt.Metrics.Enabled, "Specify whether to export Prometheus metrics")
cmd.Flags().StringVar(&opt.Metrics.PushgatewayURL, "metrics-pushgateway-url", opt.Metrics.PushgatewayURL, "Pushgateway URL where the metrics will be pushed")
cmd.Flags().StringSliceVar(&opt.Metrics.Labels, "metrics-labels", opt.Metrics.Labels, "Labels to apply in exported metrics")
cmd.Flags().StringVar(&opt.Metrics.JobName, "prom-job-name", StashDefaultMetricJob, "Metrics job name")

return cmd
}
2 changes: 1 addition & 1 deletion pkg/controller/backup_configuration.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ func (c *StashController) EnsureCronJob(backupConfiguration *api_v1beta1.BackupC
}

// if RBAC is enabled then ensure respective ClusterRole,RoleBinding,ServiceAccount etc.
serviceAccountName := "default"
var serviceAccountName string

if backupConfiguration.Spec.RuntimeSettings.Pod != nil &&
backupConfiguration.Spec.RuntimeSettings.Pod.ServiceAccountName != "" {
Expand Down
Loading

0 comments on commit f63d5c1

Please sign in to comment.