diff --git a/pkg/backup/backup.go b/pkg/backup/backup.go index 5b8a85c4d9..176e342e57 100644 --- a/pkg/backup/backup.go +++ b/pkg/backup/backup.go @@ -32,6 +32,7 @@ import ( kuberrs "k8s.io/apimachinery/pkg/util/errors" api "github.com/heptio/ark/pkg/apis/ark/v1" + "github.com/heptio/ark/pkg/buildinfo" "github.com/heptio/ark/pkg/client" "github.com/heptio/ark/pkg/cloudprovider" "github.com/heptio/ark/pkg/discovery" @@ -221,6 +222,10 @@ func (kb *kubernetesBackupper) Backup(logger logrus.FieldLogger, backupRequest * log := logger.WithField("backup", kubeutil.NamespaceAndName(backupRequest)) log.Info("Starting backup") + if err := kb.writeBackupVersion(tw); err != nil { + return errors.WithStack(err) + } + backupRequest.NamespaceIncludesExcludes = getNamespaceIncludesExcludes(backupRequest.Backup) log.Infof("Including namespaces: %s", backupRequest.NamespaceIncludesExcludes.IncludesString()) log.Infof("Excluding namespaces: %s", backupRequest.NamespaceIncludesExcludes.ExcludesString()) @@ -292,6 +297,23 @@ func (kb *kubernetesBackupper) Backup(logger logrus.FieldLogger, backupRequest * return err } +func (kb *kubernetesBackupper) writeBackupVersion(tw *tar.Writer) error { + hdr := &tar.Header{ + Name: "backup-version", + Size: int64(len(buildinfo.Version)), + Typeflag: tar.TypeReg, + Mode: 0644, + ModTime: time.Now(), + } + if err := tw.WriteHeader(hdr); err != nil { + return err + } + if _, err := tw.Write([]byte(buildinfo.Version)); err != nil { + return err + } + return nil +} + type tarWriter interface { io.Closer Write([]byte) (int, error)