diff --git a/Makefile b/Makefile index 8863651..77bec33 100644 --- a/Makefile +++ b/Makefile @@ -60,7 +60,11 @@ endif export DBUILD_ARGS=--build-arg DBUILD_DATE=${DBUILD_DATE} --build-arg DBUILD_REPO_URL=${DBUILD_REPO_URL} --build-arg DBUILD_SITE_URL=${DBUILD_SITE_URL} -IMAGE = ${IMAGE_ORG}/velero-plugin-amd64 +ifeq (${IMAGE}, ) + IMAGE = ${IMAGE_ORG}/velero-plugin-amd64 + export IMAGE +endif + # if the architecture is arm64, image name will have arm64 suffix ifeq (${ARCH}, arm64) @@ -83,7 +87,7 @@ all: build container: all @echo ">> building container" @cp Dockerfile _output/Dockerfile - @sudo docker build -t $(IMAGE):$(IMAGE_TAG) ${DBUILD_ARGS} -f _output/Dockerfile _output + docker build -t $(IMAGE):$(IMAGE_TAG) ${DBUILD_ARGS} -f _output/Dockerfile _output build: @echo ">> building binary" diff --git a/pkg/zfs/plugin/backup.go b/pkg/zfs/plugin/backup.go index 155c68a..ca668cb 100644 --- a/pkg/zfs/plugin/backup.go +++ b/pkg/zfs/plugin/backup.go @@ -60,6 +60,17 @@ func (p *Plugin) uploadZFSVolume(vol *apis.ZFSVolume, filename string) error { return nil } +func (p *Plugin) uploadObject(obj interface{}, filename, ext string) error { + data, err := json.MarshalIndent(obj, "", "\t") + if err != nil { + return errors.New("zfs: error doing json parsing") + } + if ok := p.cl.Write(data, filename+ext); !ok { + return errors.New("zfs: failed to upload object") + } + return nil +} + // deleteBackup deletes the backup resource func (p *Plugin) deleteBackup(snapshotID string) error { pvname, _, snapname, err := utils.GetInfoFromSnapshotID(snapshotID) @@ -122,7 +133,7 @@ func (p *Plugin) getPrevSnap(volname, schdname string) (string, error) { return "", nil } -func (p *Plugin) createBackup(vol *apis.ZFSVolume, schdname, snapname string, port int) (string, error) { +func (p *Plugin) createBackup(vol *apis.ZFSVolume, schdname, snapname string, port int) (*apis.ZFSBackup, error) { bkpname := utils.GenerateResourceName(vol.Name, snapname) p.Log.Debugf("zfs: creating ZFSBackup vol = %s bkp = %s schd = %s", vol.Name, bkpname, schdname) @@ -138,7 +149,7 @@ func (p *Plugin) createBackup(vol *apis.ZFSVolume, schdname, snapname string, po prevSnap, err = p.getPrevSnap(vol.Name, schdname) if err != nil { p.Log.Errorf("zfs: Failed to get prev snapshot bkp %s err: {%v}", snapname, err) - return "", err + return nil, err } } @@ -158,14 +169,14 @@ func (p *Plugin) createBackup(vol *apis.ZFSVolume, schdname, snapname string, po Build() if err != nil { - return "", err + return nil, err } _, err = bkpbuilder.NewKubeclient().WithNamespace(p.namespace).Create(bkp) if err != nil { - return "", err + return nil, err } - return bkpname, nil + return bkp, nil } func (p *Plugin) checkBackupStatus(bkpname string) error { @@ -270,22 +281,27 @@ func (p *Plugin) doBackup(volumeID string, snapname string, schdname string, por return "", errors.New("zfs: error in uploading snapshot") } - bkpname, err := p.createBackup(vol, schdname, snapname, port) + bkp, err := p.createBackup(vol, schdname, snapname, port) + if err != nil { + return "", err + } + + err = p.checkBackupStatus(bkp.Name) if err != nil { + p.deleteBackup(bkp.Name) + p.Log.Errorf("zfs: backup failed vol %s snap %s bkpname %s err: %v", volumeID, snapname, bkp.Name, err) return "", err } - err = p.checkBackupStatus(bkpname) + err = p.uploadObject(bkp, filename, ".backup") if err != nil { - p.deleteBackup(bkpname) - p.Log.Errorf("zfs: backup failed vol %s snap %s bkpname %s err: %v", volumeID, snapname, bkpname, err) return "", err } // generate the snapID snapID := utils.GenerateSnapshotID(volumeID, schdname, snapname) - p.Log.Debugf("zfs: backup done vol %s bkp %s snapID %s", volumeID, bkpname, snapID) + p.Log.Debugf("zfs: backup done vol %s bkp %s snapID %s", volumeID, bkp.Name, snapID) return snapID, nil }