Statistics
| Branch: | Tag: | Revision:

root / scripts / gnt-backup @ 19b9ba9a

History | View | Annotate | Download (4.5 kB)

1 dd4b1106 Iustin Pop
#!/usr/bin/python
2 dd4b1106 Iustin Pop
#
3 dd4b1106 Iustin Pop
4 db5a8a2d Iustin Pop
# Copyright (C) 2006, 2007, 2010 Google Inc.
5 dd4b1106 Iustin Pop
#
6 dd4b1106 Iustin Pop
# This program is free software; you can redistribute it and/or modify
7 dd4b1106 Iustin Pop
# it under the terms of the GNU General Public License as published by
8 dd4b1106 Iustin Pop
# the Free Software Foundation; either version 2 of the License, or
9 dd4b1106 Iustin Pop
# (at your option) any later version.
10 dd4b1106 Iustin Pop
#
11 dd4b1106 Iustin Pop
# This program is distributed in the hope that it will be useful, but
12 dd4b1106 Iustin Pop
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 dd4b1106 Iustin Pop
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 dd4b1106 Iustin Pop
# General Public License for more details.
15 dd4b1106 Iustin Pop
#
16 dd4b1106 Iustin Pop
# You should have received a copy of the GNU General Public License
17 dd4b1106 Iustin Pop
# along with this program; if not, write to the Free Software
18 dd4b1106 Iustin Pop
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 dd4b1106 Iustin Pop
# 02110-1301, USA.
20 dd4b1106 Iustin Pop
21 7260cfbe Iustin Pop
"""Backup related commands"""
22 dd4b1106 Iustin Pop
23 2d54e29c Iustin Pop
# pylint: disable-msg=W0401,W0613,W0614,C0103
24 2f79bd34 Iustin Pop
# W0401: Wildcard import ganeti.cli
25 2d54e29c Iustin Pop
# W0613: Unused argument, since all functions follow the same API
26 2f79bd34 Iustin Pop
# W0614: Unused import %s from wildcard import (since we need cli)
27 7260cfbe Iustin Pop
# C0103: Invalid name gnt-backup
28 2f79bd34 Iustin Pop
29 dd4b1106 Iustin Pop
import sys
30 dd4b1106 Iustin Pop
31 dd4b1106 Iustin Pop
from ganeti.cli import *
32 dd4b1106 Iustin Pop
from ganeti import opcodes
33 dd4b1106 Iustin Pop
from ganeti import constants
34 bc696589 Michael Hanselmann
from ganeti import errors
35 dd4b1106 Iustin Pop
36 7c0d6283 Michael Hanselmann
37 e1d2aa39 Alexander Schreiber
_VALUE_TRUE = "true"
38 e1d2aa39 Alexander Schreiber
39 a8005e17 Michael Hanselmann
40 dd4b1106 Iustin Pop
def PrintExportList(opts, args):
41 dd4b1106 Iustin Pop
  """Prints a list of all the exported system images.
42 dd4b1106 Iustin Pop
43 48de3413 Iustin Pop
  @param opts: the command line options selected by the user
44 48de3413 Iustin Pop
  @type args: list
45 48de3413 Iustin Pop
  @param args: should be an empty list
46 48de3413 Iustin Pop
  @rtype: int
47 48de3413 Iustin Pop
  @return: the desired exit code
48 dd4b1106 Iustin Pop
49 dd4b1106 Iustin Pop
  """
50 77921a95 Iustin Pop
  exports = GetClient().QueryExports(opts.nodes, False)
51 d70b3058 Iustin Pop
  retcode = 0
52 dd4b1106 Iustin Pop
  for node in exports:
53 3a24c527 Iustin Pop
    ToStdout("Node: %s", node)
54 3a24c527 Iustin Pop
    ToStdout("Exports:")
55 461f0538 Guido Trotter
    if isinstance(exports[node], list):
56 461f0538 Guido Trotter
      for instance_name in exports[node]:
57 3a24c527 Iustin Pop
        ToStdout("\t%s", instance_name)
58 461f0538 Guido Trotter
    else:
59 3a24c527 Iustin Pop
      ToStdout("  Could not get exports list")
60 d70b3058 Iustin Pop
      retcode = 1
61 d70b3058 Iustin Pop
  return retcode
62 dd4b1106 Iustin Pop
63 dd4b1106 Iustin Pop
64 dd4b1106 Iustin Pop
def ExportInstance(opts, args):
65 dd4b1106 Iustin Pop
  """Export an instance to an image in the cluster.
66 dd4b1106 Iustin Pop
67 48de3413 Iustin Pop
  @param opts: the command line options selected by the user
68 48de3413 Iustin Pop
  @type args: list
69 48de3413 Iustin Pop
  @param args: should contain only one element, the name
70 48de3413 Iustin Pop
      of the instance to be exported
71 48de3413 Iustin Pop
  @rtype: int
72 48de3413 Iustin Pop
  @return: the desired exit code
73 dd4b1106 Iustin Pop
74 dd4b1106 Iustin Pop
  """
75 8d8d650c Michael Hanselmann
  ignore_remove_failures = opts.ignore_remove_failures
76 8d8d650c Michael Hanselmann
77 bc696589 Michael Hanselmann
  if not opts.node:
78 5ec4b9d2 Michael Hanselmann
    raise errors.OpPrereqError("Target node must be specified",
79 5ec4b9d2 Michael Hanselmann
                               errors.ECODE_INVAL)
80 bc696589 Michael Hanselmann
81 dd4b1106 Iustin Pop
  op = opcodes.OpExportInstance(instance_name=args[0],
82 dd4b1106 Iustin Pop
                                target_node=opts.node,
83 17c3f802 Guido Trotter
                                shutdown=opts.shutdown,
84 8d8d650c Michael Hanselmann
                                shutdown_timeout=opts.shutdown_timeout,
85 8d8d650c Michael Hanselmann
                                remove_instance=opts.remove_instance,
86 8d8d650c Michael Hanselmann
                                ignore_remove_failures=ignore_remove_failures)
87 dd4b1106 Iustin Pop
88 44247302 Iustin Pop
  SubmitOpCode(op, opts=opts)
89 44247302 Iustin Pop
  return 0
90 60d49723 Michael Hanselmann
91 8d8d650c Michael Hanselmann
92 dd4b1106 Iustin Pop
def ImportInstance(opts, args):
93 dd4b1106 Iustin Pop
  """Add an instance to the cluster.
94 dd4b1106 Iustin Pop
95 d77490c5 Iustin Pop
  This is just a wrapper over GenericInstanceCreate.
96 dd4b1106 Iustin Pop
97 dd4b1106 Iustin Pop
  """
98 d77490c5 Iustin Pop
  return GenericInstanceCreate(constants.INSTANCE_IMPORT, opts, args)
99 dd4b1106 Iustin Pop
100 dd4b1106 Iustin Pop
101 9ac99fda Guido Trotter
def RemoveExport(opts, args):
102 9ac99fda Guido Trotter
  """Remove an export from the cluster.
103 9ac99fda Guido Trotter
104 48de3413 Iustin Pop
  @param opts: the command line options selected by the user
105 48de3413 Iustin Pop
  @type args: list
106 48de3413 Iustin Pop
  @param args: should contain only one element, the name of the
107 48de3413 Iustin Pop
      instance whose backup should be removed
108 48de3413 Iustin Pop
  @rtype: int
109 48de3413 Iustin Pop
  @return: the desired exit code
110 9ac99fda Guido Trotter
111 9ac99fda Guido Trotter
  """
112 9ac99fda Guido Trotter
  op = opcodes.OpRemoveExport(instance_name=args[0])
113 9ac99fda Guido Trotter
114 400ca2f7 Iustin Pop
  SubmitOpCode(op, opts=opts)
115 9ac99fda Guido Trotter
  return 0
116 9ac99fda Guido Trotter
117 9ac99fda Guido Trotter
118 dd4b1106 Iustin Pop
# this is defined separately due to readability only
119 dd4b1106 Iustin Pop
import_opts = [
120 087ed2ed Iustin Pop
  BACKEND_OPT,
121 e3876ccb Iustin Pop
  DISK_OPT,
122 e588764d Iustin Pop
  DISK_TEMPLATE_OPT,
123 e588764d Iustin Pop
  FILESTORE_DIR_OPT,
124 e588764d Iustin Pop
  FILESTORE_DRIVER_OPT,
125 e588764d Iustin Pop
  HYPERVISOR_OPT,
126 e588764d Iustin Pop
  IALLOCATOR_OPT,
127 e588764d Iustin Pop
  IDENTIFY_DEFAULTS_OPT,
128 7d3a9fab Iustin Pop
  NET_OPT,
129 e588764d Iustin Pop
  NODE_PLACEMENT_OPT,
130 e588764d Iustin Pop
  NOIPCHECK_OPT,
131 e588764d Iustin Pop
  NONAMECHECK_OPT,
132 26023ecd Iustin Pop
  NONICS_OPT,
133 3f75b4f3 Iustin Pop
  NWSYNC_OPT,
134 062a7100 Iustin Pop
  OSPARAMS_OPT,
135 e588764d Iustin Pop
  OS_SIZE_OPT,
136 df62e5db Iustin Pop
  SRC_DIR_OPT,
137 df62e5db Iustin Pop
  SRC_NODE_OPT,
138 d77490c5 Iustin Pop
  SUBMIT_OPT,
139 db5a8a2d Iustin Pop
  DRY_RUN_OPT,
140 dd4b1106 Iustin Pop
  ]
141 dd4b1106 Iustin Pop
142 8d8d650c Michael Hanselmann
143 dd4b1106 Iustin Pop
commands = {
144 6ea815cf Iustin Pop
  'list': (
145 6ea815cf Iustin Pop
    PrintExportList, ARGS_NONE,
146 064c21f8 Iustin Pop
    [NODE_LIST_OPT],
147 6ea815cf Iustin Pop
    "", "Lists instance exports available in the ganeti cluster"),
148 6ea815cf Iustin Pop
  'export': (
149 6ea815cf Iustin Pop
    ExportInstance, ARGS_ONE_INSTANCE,
150 8d8d650c Michael Hanselmann
    [FORCE_OPT, SINGLE_NODE_OPT, NOSHUTDOWN_OPT, SHUTDOWN_TIMEOUT_OPT,
151 db5a8a2d Iustin Pop
     REMOVE_INSTANCE_OPT, IGNORE_REMOVE_FAILURES_OPT, DRY_RUN_OPT],
152 6ea815cf Iustin Pop
    "-n <target_node> [opts...] <name>",
153 6ea815cf Iustin Pop
    "Exports an instance to an image"),
154 6ea815cf Iustin Pop
  'import': (
155 6ea815cf Iustin Pop
    ImportInstance, ARGS_ONE_INSTANCE, import_opts,
156 6ea815cf Iustin Pop
    "[...] -t disk-type -n node[:secondary-node] <name>",
157 6ea815cf Iustin Pop
    "Imports an instance from an exported image"),
158 6ea815cf Iustin Pop
  'remove': (
159 db5a8a2d Iustin Pop
    RemoveExport, [ArgUnknown(min=1, max=1)], [DRY_RUN_OPT],
160 6ea815cf Iustin Pop
    "<name>", "Remove exports of named instance from the filesystem."),
161 dd4b1106 Iustin Pop
  }
162 dd4b1106 Iustin Pop
163 a8005e17 Michael Hanselmann
164 dd4b1106 Iustin Pop
if __name__ == '__main__':
165 3ecf6786 Iustin Pop
  sys.exit(GenericMain(commands))