The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/5242

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
Backup expiry can be disabled by setting `"expiry" = "0"`.  A simple empty string would not suffice since we cannot always differentiate between an empty string and an omitted `expiry` field.

This also removes the hard-coded expiry in `lxc export` which is the same as the default expiry.
From 35b1683996fe97dc33742bfebb7f24c826a6941a Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.h...@canonical.com>
Date: Mon, 5 Nov 2018 04:31:05 +0100
Subject: [PATCH 1/2] lxc/export: Don't set expiry

Signed-off-by: Thomas Hipp <thomas.h...@canonical.com>
---
 lxc/export.go | 2 --
 1 file changed, 2 deletions(-)

diff --git a/lxc/export.go b/lxc/export.go
index fdb43c82dc..0b76e1517d 100644
--- a/lxc/export.go
+++ b/lxc/export.go
@@ -4,7 +4,6 @@ import (
        "io"
        "os"
        "strings"
-       "time"
 
        "github.com/pkg/errors"
        "github.com/spf13/cobra"
@@ -65,7 +64,6 @@ func (c *cmdExport) Run(cmd *cobra.Command, args []string) 
error {
 
        req := api.ContainerBackupsPost{
                Name:             "",
-               ExpiryDate:       time.Now().Add(30 * time.Minute),
                ContainerOnly:    c.flagContainerOnly,
                OptimizedStorage: c.flagOptimizedStorage,
        }

From 94e732e488d4494d754a2af5109f9a2d8a0fa5a3 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.h...@canonical.com>
Date: Mon, 5 Nov 2018 04:34:15 +0100
Subject: [PATCH 2/2] backup: Allow backups to not expire

Backup expiry can be disabled by setting `"expiry" = "0"`.  A simple
empty string would not suffice since we cannot always differentiate
between an empty string and an omitted `expiry` field.

Signed-off-by: Thomas Hipp <thomas.h...@canonical.com>
---
 lxd/container_backup.go        | 15 +++++++++++++--
 shared/api/container_backup.go |  8 ++++----
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/lxd/container_backup.go b/lxd/container_backup.go
index 345ff49789..03082786cf 100644
--- a/lxd/container_backup.go
+++ b/lxd/container_backup.go
@@ -82,7 +82,8 @@ func containerBackupsPost(d *Daemon, r *http.Request) 
Response {
        }
 
        req := api.ContainerBackupsPost{
-               ExpiryDate: time.Now().Add(30 * time.Minute), // default expiry 
time of 30 minutes
+               // default expiry time of 30 minutes
+               ExpiryDate: time.Now().Add(30 * 
time.Minute).Format(time.RFC3339),
        }
        err = json.NewDecoder(r.Body).Decode(&req)
        if err != nil {
@@ -127,12 +128,22 @@ func containerBackupsPost(d *Daemon, r *http.Request) 
Response {
 
        fullName := name + shared.SnapshotDelimiter + req.Name
 
+       if req.ExpiryDate == "0" {
+               // Set zero time if backup is not to expiry
+               req.ExpiryDate = time.Date(1, time.January, 1, 0, 0, 0, 0, 
time.Local).Format(time.RFC3339)
+       }
+
+       expiry, err := time.Parse(time.RFC3339, req.ExpiryDate)
+       if err != nil {
+               return BadRequest(err)
+       }
+
        backup := func(op *operation) error {
                args := db.ContainerBackupArgs{
                        Name:             fullName,
                        ContainerID:      c.Id(),
                        CreationDate:     time.Now(),
-                       ExpiryDate:       req.ExpiryDate,
+                       ExpiryDate:       expiry,
                        ContainerOnly:    req.ContainerOnly,
                        OptimizedStorage: req.OptimizedStorage,
                }
diff --git a/shared/api/container_backup.go b/shared/api/container_backup.go
index 15b3b5234d..067b3d230f 100644
--- a/shared/api/container_backup.go
+++ b/shared/api/container_backup.go
@@ -5,10 +5,10 @@ import "time"
 // ContainerBackupsPost represents the fields available for a new LXD 
container backup
 // API extension: container_backup
 type ContainerBackupsPost struct {
-       Name             string    `json:"name" yaml:"name"`
-       ExpiryDate       time.Time `json:"expiry" yaml:"expiry"`
-       ContainerOnly    bool      `json:"container_only" yaml:"container_only"`
-       OptimizedStorage bool      `json:"optimized_storage" 
yaml:"optimized_storage"`
+       Name             string `json:"name" yaml:"name"`
+       ExpiryDate       string `json:"expiry" yaml:"expiry"`
+       ContainerOnly    bool   `json:"container_only" yaml:"container_only"`
+       OptimizedStorage bool   `json:"optimized_storage" 
yaml:"optimized_storage"`
 }
 
 // ContainerBackup represents a LXD container backup
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to