---
po/POTFILES.in | 1 +
tools/Makefile.am | 1 +
tools/virsh-backup.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++
tools/virsh-backup.h | 29 +++++++++++++++
tools/virsh.c | 2 +
tools/virsh.h | 1 +
6 files changed, 135 insertions(+)
create mode 100644 tools/virsh-backup.c
create mode 100644 tools/virsh-backup.h
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 2124eb0..5695498 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -283,6 +283,7 @@ src/xenconfig/xen_xl.c
src/xenconfig/xen_xm.c
tests/virpolkittest.c
tools/libvirt-guests.sh.in
+tools/virsh-backup.c
tools/virsh-console.c
tools/virsh-domain-monitor.c
tools/virsh-domain.c
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 319abb2..7670509 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -201,6 +201,7 @@ virsh_SOURCES = \
virsh-secret.c virsh-secret.h \
virsh-snapshot.c virsh-snapshot.h \
virsh-volume.c virsh-volume.h \
+ virsh-backup.c virsh-backup.h \
$(NULL)
virsh_LDFLAGS = \
diff --git a/tools/virsh-backup.c b/tools/virsh-backup.c
new file mode 100644
index 0000000..1dde326
--- /dev/null
+++ b/tools/virsh-backup.c
@@ -0,0 +1,101 @@
+/*
+ * virsh-backup.c: Commands to manage domain backup
+ *
+ * Copyright (C) 2016 Virtuozzo
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <
http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <config.h>
+#include "virsh-backup.h"
+
+#include "internal.h"
+#include "virfile.h"
+#include "virsh-domain.h"
+#include "viralloc.h"
+
+#define VIRSH_COMMON_OPT_DOMAIN_FULL \
+ VIRSH_COMMON_OPT_DOMAIN(N_("domain name, id or uuid")) \
+
+/*
+ * "backup-create" command
+ */
+static const vshCmdInfo info_backup_create[] = {
+ {.name = "help",
+ .data = N_("Create a backup from XML")
+ },
+ {.name = "desc",
+ .data = N_("Create a disks backup from XML description")
+ },
+ {.name = NULL}
+};
+
+static const vshCmdOptDef opts_backup_create[] = {
+ VIRSH_COMMON_OPT_DOMAIN_FULL,
+ {.name = "xmlfile",
+ .type = VSH_OT_STRING,
+ .help = N_("domain backup XML")
+ },
+ {.name = NULL}
+};
+
+static bool
+cmdBackupCreate(vshControl *ctl, const vshCmd *cmd)
+{
+ virDomainPtr dom = NULL;
+ bool ret = false;
+ const char *from = NULL;
+ char *buffer = NULL;
+ unsigned int flags = 0;
+ virDomainBackupPtr backup = NULL;
+
+ if (!(dom = virshCommandOptDomain(ctl, cmd, NULL)))
+ goto cleanup;
+
+ if (vshCommandOptStringReq(ctl, cmd, "xmlfile", &from) < 0)
+ goto cleanup;
+
+ if (virFileReadAll(from, VSH_MAX_XML_FILE, &buffer) < 0) {
+ vshSaveLibvirtError();
+ goto cleanup;
+ }
+
+ if (!(backup = virDomainBackupCreateXML(dom, buffer, flags)))
+ goto cleanup;
+
+ vshPrint(ctl, _("Domain backup started from '%s'"), from);
+
+ ret = true;
+
+ cleanup:
+ VIR_FREE(buffer);
+ if (backup)
+ virDomainBackupFree(backup);
+ if (dom)
+ virDomainFree(dom);
+
+ return ret;
+}
+
+const vshCmdDef backupCmds[] = {
+ {.name = "backup-create",
+ .handler = cmdBackupCreate,
+ .opts = opts_backup_create,
+ .info = info_backup_create,
+ .flags = 0
+ },
+ {.name = NULL}
+};
diff --git a/tools/virsh-backup.h b/tools/virsh-backup.h
new file mode 100644
index 0000000..a155626
--- /dev/null
+++ b/tools/virsh-backup.h
@@ -0,0 +1,29 @@
+/*
+ * virsh-backup.h: Commands to manage domain backup
+ *
+ * Copyright (C) 2016 Virtuozzo
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <
http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef VIRSH_BACKUP_H
+# define VIRSH_BACKUP_H
+
+# include "virsh.h"
+
+extern const vshCmdDef backupCmds[];
+
+#endif /* VIRSH_BACKUP_H */
diff --git a/tools/virsh.c b/tools/virsh.c
index 1068447..2df1103 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -71,6 +71,7 @@
#include "virsh-secret.h"
#include "virsh-snapshot.h"
#include "virsh-volume.h"
+#include "virsh-backup.h"
/* Gnulib doesn't guarantee SA_SIGINFO support. */
#ifndef SA_SIGINFO
@@ -876,6 +877,7 @@ static const vshCmdGrp cmdGroups[] = {
{VIRSH_CMD_GRP_NODEDEV, "nodedev", nodedevCmds},
{VIRSH_CMD_GRP_SECRET, "secret", secretCmds},
{VIRSH_CMD_GRP_SNAPSHOT, "snapshot", snapshotCmds},
+ {VIRSH_CMD_GRP_BACKUP, "backup", backupCmds},
{VIRSH_CMD_GRP_STORAGE_POOL, "pool", storagePoolCmds},
{VIRSH_CMD_GRP_STORAGE_VOL, "volume", storageVolCmds},
{VIRSH_CMD_GRP_VIRSH, "virsh", virshCmds},
diff --git a/tools/virsh.h b/tools/virsh.h
index fd552bb..839f36f 100644
--- a/tools/virsh.h
+++ b/tools/virsh.h
@@ -57,6 +57,7 @@
# define VIRSH_CMD_GRP_NWFILTER "Network Filter"
# define VIRSH_CMD_GRP_SECRET "Secret"
# define VIRSH_CMD_GRP_SNAPSHOT "Snapshot"
+# define VIRSH_CMD_GRP_BACKUP "Backup"
# define VIRSH_CMD_GRP_HOST_AND_HV "Host and Hypervisor"
# define VIRSH_CMD_GRP_VIRSH "Virsh itself"
--
1.8.3.1