from ganeti import errors
from ganeti import ssh
from ganeti import utils
+from ganeti import pathutils
+from ganeti import compat
_GROUPS_MERGE = "merge"
"""Handling the merge.
"""
- RUNNING_STATUSES = frozenset([
+ RUNNING_STATUSES = compat.UniqueFrozenset([
constants.INSTST_RUNNING,
constants.INSTST_ERRORUP,
])
(cluster, result.fail_reason, result.output))
instances = result.stdout.splitlines()
- path = utils.PathJoin(constants.DATA_DIR, "ssconf_%s" %
+ path = utils.PathJoin(pathutils.DATA_DIR, "ssconf_%s" %
constants.SS_MASTER_NODE)
result = self._RunCmd(cluster, "cat %s" % path, private_key=key_path)
if result.failed:
"""Stop all daemons on merging nodes.
"""
- cmd = "%s stop-all" % constants.DAEMON_UTIL
+ cmd = "%s stop-all" % pathutils.DAEMON_UTIL
for data in self.merger_data:
for node in data.nodes:
result = self._RunCmd(node, cmd, max_attempts=3)
"""
for data in self.merger_data:
result = self._RunCmd(data.cluster, "cat %s" %
- constants.CLUSTER_CONF_FILE)
+ pathutils.CLUSTER_CONF_FILE)
if result.failed:
raise errors.RemoteError("Unable to retrieve remote config on %s."
@raise errors.CommandError: If unable to kill
"""
- result = utils.RunCmd([constants.DAEMON_UTIL, "stop-master"])
+ result = utils.RunCmd([pathutils.DAEMON_UTIL, "stop-master"])
if result.failed:
raise errors.CommandError("Unable to stop master daemons."
" Fail reason: %s; output: %s" %
# Update the DRBD port assignments
# This is a little bit hackish
for dsk in instance_info.disks:
- if dsk.dev_type in constants.LDS_DRBD:
+ if dsk.dev_type in constants.DTS_DRBD:
port = my_config.AllocatePort()
logical_id = list(dsk.logical_id)
logical_id[2] = port
dsk.logical_id = tuple(logical_id)
- physical_id = list(dsk.physical_id)
- physical_id[1] = physical_id[3] = port
- dsk.physical_id = tuple(physical_id)
-
my_config.AddInstance(instance_info,
_CLUSTERMERGE_ECID + str(fake_ec_id))
fake_ec_id += 1
check_params_strict = [
"volume_group_name",
]
- if constants.ENABLE_FILE_STORAGE:
+ if my_cluster.IsFileStorageEnabled() or \
+ other_cluster.IsFileStorageEnabled():
check_params_strict.append("file_storage_dir")
- if constants.ENABLE_SHARED_FILE_STORAGE:
+ if my_cluster.IsSharedFileStorageEnabled() or \
+ other_cluster.IsSharedFileStorageEnabled():
check_params_strict.append("shared_file_storage_dir")
check_params.extend(check_params_strict)
if no_vote:
env["EXTRA_MASTERD_ARGS"] = "--no-voting --yes-do-it"
- result = utils.RunCmd([constants.DAEMON_UTIL, "start-master"], env=env)
+ result = utils.RunCmd([pathutils.DAEMON_UTIL, "start-master"], env=env)
if result.failed:
raise errors.CommandError("Couldn't start ganeti master."
" Fail reason: %s; output: %s" %
for node in data.nodes:
logging.info("Readding node %s", node)
result = utils.RunCmd(["gnt-node", "add", "--readd",
- "--no-ssh-key-check", "--force-join", node])
+ "--no-ssh-key-check", node])
if result.failed:
logging.error("%s failed to be readded. Reason: %s, output: %s",
node, result.fail_reason, result.output)
rbsteps.append("Restore %s from another master candidate"
" and restart master daemon" %
- constants.CLUSTER_CONF_FILE)
+ pathutils.CLUSTER_CONF_FILE)
self._MergeConfig()
self._StartMasterDaemon(no_vote=True)
shutil.rmtree(self.work_dir)
-def SetupLogging(options):
- """Setting up logging infrastructure.
-
- @param options: Parsed command line options
-
- """
- formatter = logging.Formatter("%(asctime)s: %(levelname)s %(message)s")
-
- stderr_handler = logging.StreamHandler()
- stderr_handler.setFormatter(formatter)
- if options.debug:
- stderr_handler.setLevel(logging.NOTSET)
- elif options.verbose:
- stderr_handler.setLevel(logging.INFO)
- else:
- stderr_handler.setLevel(logging.WARNING)
-
- root_logger = logging.getLogger("")
- root_logger.setLevel(logging.NOTSET)
- root_logger.addHandler(stderr_handler)
-
-
def main():
"""Main routine.
(options, args) = parser.parse_args()
- SetupLogging(options)
+ utils.SetupToolLogging(options.debug, options.verbose)
if not args:
parser.error("No clusters specified")