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
36 """Prints a list of all the exported system images.
37
38 @param opts: the command line options selected by the user
39 @type args: list
40 @param args: should be an empty list
41 @rtype: int
42 @return: the desired exit code
43
44 """
45 exports = GetClient().QueryExports(opts.nodes, False)
46 retcode = 0
47 for node in exports:
48 ToStdout("Node: %s", node)
49 ToStdout("Exports:")
50 if isinstance(exports[node], list):
51 for instance_name in exports[node]:
52 ToStdout("\t%s", instance_name)
53 else:
54 ToStdout(" Could not get exports list")
55 retcode = 1
56 return retcode
57
58
60 """Export an instance to an image in the cluster.
61
62 @param opts: the command line options selected by the user
63 @type args: list
64 @param args: should contain only one element, the name
65 of the instance to be exported
66 @rtype: int
67 @return: the desired exit code
68
69 """
70 ignore_remove_failures = opts.ignore_remove_failures
71
72 if not opts.node:
73 raise errors.OpPrereqError("Target node must be specified",
74 errors.ECODE_INVAL)
75
76 op = opcodes.OpBackupExport(instance_name=args[0],
77 target_node=opts.node,
78 shutdown=opts.shutdown,
79 shutdown_timeout=opts.shutdown_timeout,
80 remove_instance=opts.remove_instance,
81 ignore_remove_failures=ignore_remove_failures)
82
83 SubmitOpCode(op, opts=opts)
84 return 0
85
86
94
95
97 """Remove an export from the cluster.
98
99 @param opts: the command line options selected by the user
100 @type args: list
101 @param args: should contain only one element, the name of the
102 instance whose backup should be removed
103 @rtype: int
104 @return: the desired exit code
105
106 """
107 op = opcodes.OpBackupRemove(instance_name=args[0])
108
109 SubmitOpCode(op, opts=opts)
110 return 0
111
112
113
114 import_opts = [
115 IDENTIFY_DEFAULTS_OPT,
116 SRC_DIR_OPT,
117 SRC_NODE_OPT,
118 ]
119
120
121 commands = {
122 'list': (
123 PrintExportList, ARGS_NONE,
124 [NODE_LIST_OPT],
125 "", "Lists instance exports available in the ganeti cluster"),
126 'export': (
127 ExportInstance, ARGS_ONE_INSTANCE,
128 [FORCE_OPT, SINGLE_NODE_OPT, NOSHUTDOWN_OPT, SHUTDOWN_TIMEOUT_OPT,
129 REMOVE_INSTANCE_OPT, IGNORE_REMOVE_FAILURES_OPT, DRY_RUN_OPT,
130 PRIORITY_OPT],
131 "-n <target_node> [opts...] <name>",
132 "Exports an instance to an image"),
133 'import': (
134 ImportInstance, ARGS_ONE_INSTANCE, COMMON_CREATE_OPTS + import_opts,
135 "[...] -t disk-type -n node[:secondary-node] <name>",
136 "Imports an instance from an exported image"),
137 'remove': (
138 RemoveExport, [ArgUnknown(min=1, max=1)], [DRY_RUN_OPT, PRIORITY_OPT],
139 "<name>", "Remove exports of named instance from the filesystem."),
140 }
141
142
145