Revision 5eacbcae lib/cmdlib/backup.py
b/lib/cmdlib/backup.py | ||
---|---|---|
33 | 33 |
from ganeti import query |
34 | 34 |
from ganeti import utils |
35 | 35 |
|
36 |
from ganeti.cmdlib.base import _QueryBase, NoHooksLU, LogicalUnit
|
|
37 |
from ganeti.cmdlib.common import _GetWantedNodes, _ShareAll, \
|
|
38 |
_CheckNodeOnline, _ExpandNodeName
|
|
39 |
from ganeti.cmdlib.instance_storage import _StartInstanceDisks, \
|
|
40 |
_ShutdownInstanceDisks
|
|
41 |
from ganeti.cmdlib.instance_utils import _GetClusterDomainSecret, \
|
|
42 |
_BuildInstanceHookEnvByObject, _CheckNodeNotDrained, _RemoveInstance
|
|
36 |
from ganeti.cmdlib.base import QueryBase, NoHooksLU, LogicalUnit |
|
37 |
from ganeti.cmdlib.common import GetWantedNodes, ShareAll, CheckNodeOnline, \
|
|
38 |
ExpandNodeName |
|
39 |
from ganeti.cmdlib.instance_storage import StartInstanceDisks, \ |
|
40 |
ShutdownInstanceDisks |
|
41 |
from ganeti.cmdlib.instance_utils import GetClusterDomainSecret, \ |
|
42 |
BuildInstanceHookEnvByObject, CheckNodeNotDrained, RemoveInstance
|
|
43 | 43 |
|
44 | 44 |
|
45 |
class _ExportQuery(_QueryBase):
|
|
45 |
class ExportQuery(QueryBase):
|
|
46 | 46 |
FIELDS = query.EXPORT_FIELDS |
47 | 47 |
|
48 | 48 |
#: The node name is not a unique key for this query |
... | ... | |
53 | 53 |
|
54 | 54 |
# The following variables interact with _QueryBase._GetNames |
55 | 55 |
if self.names: |
56 |
self.wanted = _GetWantedNodes(lu, self.names)
|
|
56 |
self.wanted = GetWantedNodes(lu, self.names) |
|
57 | 57 |
else: |
58 | 58 |
self.wanted = locking.ALL_SET |
59 | 59 |
|
60 | 60 |
self.do_locking = self.use_locking |
61 | 61 |
|
62 | 62 |
if self.do_locking: |
63 |
lu.share_locks = _ShareAll()
|
|
63 |
lu.share_locks = ShareAll() |
|
64 | 64 |
lu.needed_locks = { |
65 | 65 |
locking.LEVEL_NODE: self.wanted, |
66 | 66 |
} |
... | ... | |
102 | 102 |
REQ_BGL = False |
103 | 103 |
|
104 | 104 |
def CheckArguments(self): |
105 |
self.expq = _ExportQuery(qlang.MakeSimpleFilter("node", self.op.nodes),
|
|
106 |
["node", "export"], self.op.use_locking)
|
|
105 |
self.expq = ExportQuery(qlang.MakeSimpleFilter("node", self.op.nodes), |
|
106 |
["node", "export"], self.op.use_locking) |
|
107 | 107 |
|
108 | 108 |
def ExpandNames(self): |
109 | 109 |
self.expq.ExpandNames(self) |
... | ... | |
141 | 141 |
self.instance = self.cfg.GetInstanceInfo(instance_name) |
142 | 142 |
assert self.instance is not None, \ |
143 | 143 |
"Cannot retrieve locked instance %s" % self.op.instance_name |
144 |
_CheckNodeOnline(self, self.instance.primary_node)
|
|
144 |
CheckNodeOnline(self, self.instance.primary_node) |
|
145 | 145 |
|
146 |
self._cds = _GetClusterDomainSecret()
|
|
146 |
self._cds = GetClusterDomainSecret() |
|
147 | 147 |
|
148 | 148 |
def Exec(self, feedback_fn): |
149 | 149 |
"""Prepares an instance for an export. |
... | ... | |
237 | 237 |
"REMOVE_INSTANCE": str(bool(self.op.remove_instance)), |
238 | 238 |
} |
239 | 239 |
|
240 |
env.update(_BuildInstanceHookEnvByObject(self, self.instance))
|
|
240 |
env.update(BuildInstanceHookEnvByObject(self, self.instance)) |
|
241 | 241 |
|
242 | 242 |
return env |
243 | 243 |
|
... | ... | |
263 | 263 |
self.instance = self.cfg.GetInstanceInfo(instance_name) |
264 | 264 |
assert self.instance is not None, \ |
265 | 265 |
"Cannot retrieve locked instance %s" % self.op.instance_name |
266 |
_CheckNodeOnline(self, self.instance.primary_node)
|
|
266 |
CheckNodeOnline(self, self.instance.primary_node) |
|
267 | 267 |
|
268 | 268 |
if (self.op.remove_instance and |
269 | 269 |
self.instance.admin_state == constants.ADMINST_UP and |
... | ... | |
272 | 272 |
" down before", errors.ECODE_STATE) |
273 | 273 |
|
274 | 274 |
if self.op.mode == constants.EXPORT_MODE_LOCAL: |
275 |
self.op.target_node = _ExpandNodeName(self.cfg, self.op.target_node)
|
|
275 |
self.op.target_node = ExpandNodeName(self.cfg, self.op.target_node) |
|
276 | 276 |
self.dst_node = self.cfg.GetNodeInfo(self.op.target_node) |
277 | 277 |
assert self.dst_node is not None |
278 | 278 |
|
279 |
_CheckNodeOnline(self, self.dst_node.name)
|
|
280 |
_CheckNodeNotDrained(self, self.dst_node.name)
|
|
279 |
CheckNodeOnline(self, self.dst_node.name) |
|
280 |
CheckNodeNotDrained(self, self.dst_node.name) |
|
281 | 281 |
|
282 | 282 |
self._cds = None |
283 | 283 |
self.dest_disk_info = None |
... | ... | |
293 | 293 |
len(self.instance.disks)), |
294 | 294 |
errors.ECODE_INVAL) |
295 | 295 |
|
296 |
cds = _GetClusterDomainSecret()
|
|
296 |
cds = GetClusterDomainSecret() |
|
297 | 297 |
|
298 | 298 |
# Check X509 key name |
299 | 299 |
try: |
... | ... | |
403 | 403 |
if activate_disks: |
404 | 404 |
# Activate the instance disks if we'exporting a stopped instance |
405 | 405 |
feedback_fn("Activating disks for %s" % instance.name) |
406 |
_StartInstanceDisks(self, instance, None)
|
|
406 |
StartInstanceDisks(self, instance, None) |
|
407 | 407 |
|
408 | 408 |
try: |
409 | 409 |
helper = masterd.instance.ExportInstanceHelper(self, feedback_fn, |
... | ... | |
422 | 422 |
msg = result.fail_msg |
423 | 423 |
if msg: |
424 | 424 |
feedback_fn("Failed to start instance: %s" % msg) |
425 |
_ShutdownInstanceDisks(self, instance)
|
|
425 |
ShutdownInstanceDisks(self, instance) |
|
426 | 426 |
raise errors.OpExecError("Could not start instance: %s" % msg) |
427 | 427 |
|
428 | 428 |
if self.op.mode == constants.EXPORT_MODE_LOCAL: |
... | ... | |
451 | 451 |
finally: |
452 | 452 |
if activate_disks: |
453 | 453 |
feedback_fn("Deactivating disks for %s" % instance.name) |
454 |
_ShutdownInstanceDisks(self, instance)
|
|
454 |
ShutdownInstanceDisks(self, instance) |
|
455 | 455 |
|
456 | 456 |
if not (compat.all(dresults) and fin_resu): |
457 | 457 |
failures = [] |
... | ... | |
470 | 470 |
# Remove instance if requested |
471 | 471 |
if self.op.remove_instance: |
472 | 472 |
feedback_fn("Removing instance %s" % instance.name) |
473 |
_RemoveInstance(self, feedback_fn, instance,
|
|
474 |
self.op.ignore_remove_failures)
|
|
473 |
RemoveInstance(self, feedback_fn, instance, |
|
474 |
self.op.ignore_remove_failures) |
|
475 | 475 |
|
476 | 476 |
if self.op.mode == constants.EXPORT_MODE_LOCAL: |
477 | 477 |
self._CleanupExports(feedback_fn) |
Also available in: Unified diff