1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 """Backup related commands"""
22
23
24
25
26
27
28
29 from ganeti.cli import *
30 from ganeti import opcodes
31 from ganeti import constants
32 from ganeti import errors
33
34
35 _VALUE_TRUE = "true"
36
37
39 """Prints a list of all the exported system images.
40
41 @param opts: the command line options selected by the user
42 @type args: list
43 @param args: should be an empty list
44 @rtype: int
45 @return: the desired exit code
46
47 """
48 exports = GetClient().QueryExports(opts.nodes, False)
49 retcode = 0
50 for node in exports:
51 ToStdout("Node: %s", node)
52 ToStdout("Exports:")
53 if isinstance(exports[node], list):
54 for instance_name in exports[node]:
55 ToStdout("\t%s", instance_name)
56 else:
57 ToStdout(" Could not get exports list")
58 retcode = 1
59 return retcode
60
61
63 """Export an instance to an image in the cluster.
64
65 @param opts: the command line options selected by the user
66 @type args: list
67 @param args: should contain only one element, the name
68 of the instance to be exported
69 @rtype: int
70 @return: the desired exit code
71
72 """
73 ignore_remove_failures = opts.ignore_remove_failures
74
75 if not opts.node:
76 raise errors.OpPrereqError("Target node must be specified",
77 errors.ECODE_INVAL)
78
79 op = opcodes.OpExportInstance(instance_name=args[0],
80 target_node=opts.node,
81 shutdown=opts.shutdown,
82 shutdown_timeout=opts.shutdown_timeout,
83 remove_instance=opts.remove_instance,
84 ignore_remove_failures=ignore_remove_failures)
85
86 SubmitOpCode(op, opts=opts)
87 return 0
88
89
97
98
100 """Remove an export from the cluster.
101
102 @param opts: the command line options selected by the user
103 @type args: list
104 @param args: should contain only one element, the name of the
105 instance whose backup should be removed
106 @rtype: int
107 @return: the desired exit code
108
109 """
110 op = opcodes.OpRemoveExport(instance_name=args[0])
111
112 SubmitOpCode(op, opts=opts)
113 return 0
114
115
116
117 import_opts = [
118 IDENTIFY_DEFAULTS_OPT,
119 SRC_DIR_OPT,
120 SRC_NODE_OPT,
121 ]
122
123
124 commands = {
125 'list': (
126 PrintExportList, ARGS_NONE,
127 [NODE_LIST_OPT],
128 "", "Lists instance exports available in the ganeti cluster"),
129 'export': (
130 ExportInstance, ARGS_ONE_INSTANCE,
131 [FORCE_OPT, SINGLE_NODE_OPT, NOSHUTDOWN_OPT, SHUTDOWN_TIMEOUT_OPT,
132 REMOVE_INSTANCE_OPT, IGNORE_REMOVE_FAILURES_OPT, DRY_RUN_OPT,
133 PRIORITY_OPT],
134 "-n <target_node> [opts...] <name>",
135 "Exports an instance to an image"),
136 'import': (
137 ImportInstance, ARGS_ONE_INSTANCE, COMMON_CREATE_OPTS + import_opts,
138 "[...] -t disk-type -n node[:secondary-node] <name>",
139 "Imports an instance from an exported image"),
140 'remove': (
141 RemoveExport, [ArgUnknown(min=1, max=1)], [DRY_RUN_OPT, PRIORITY_OPT],
142 "<name>", "Remove exports of named instance from the filesystem."),
143 }
144
145
148