Commit 7b8ba235 authored by Michael Hanselmann's avatar Michael Hanselmann

Switch from scp/ssh to node daemon setup utility

This patch does away with many calls to scp and by means of using
“tools/node-daemon-setup”, verifies most of the values before writing
them to files.
Signed-off-by: default avatarMichael Hanselmann <>
Reviewed-by: default avatarGuido Trotter <>
parent 69e5fefc
......@@ -700,7 +700,7 @@ def FinalizeClusterDestroy(master):
" the node: %s", msg)
def SetupNodeDaemon(cluster_name, node, ssh_key_check):
def SetupNodeDaemon(opts, cluster_name, node):
"""Add a node to the cluster.
This function must be called before the actual opcode, and will ssh
......@@ -709,36 +709,19 @@ def SetupNodeDaemon(cluster_name, node, ssh_key_check):
@param cluster_name: the cluster name
@param node: the name of the new node
@param ssh_key_check: whether to do a strict key check
sstore = ssconf.SimpleStore()
family = sstore.GetPrimaryIPFamily()
sshrunner = ssh.SshRunner(cluster_name,
ipv6=(family ==
# set up inter-node password and certificate and restarts the node daemon
# and then connect with ssh to set password and start ganeti-noded
# note that all the below variables are sanitized at this point,
# either by being constants or by the checks above
sshrunner.CopyFileToNode(node, pathutils.NODED_CERT_FILE)
sshrunner.CopyFileToNode(node, pathutils.RAPI_CERT_FILE)
sshrunner.CopyFileToNode(node, pathutils.SPICE_CERT_FILE)
sshrunner.CopyFileToNode(node, pathutils.SPICE_CACERT_FILE)
sshrunner.CopyFileToNode(node, pathutils.CONFD_HMAC_KEY)
for filename in sstore.GetFileList():
sshrunner.CopyFileToNode(node, filename)
mycommand = ("%s stop-all; %s start %s" %
(pathutils.DAEMON_UTIL, pathutils.DAEMON_UTIL, constants.NODED))
result = sshrunner.Run(node, constants.SSH_LOGIN_USER, mycommand, batch=False,
if result.failed:
raise errors.OpExecError("Remote command on node %s, error: %s,"
" output: %s" %
(node, result.fail_reason, result.output))
data = {
constants.NDS_CLUSTER_NAME: cluster_name,
constants.NDS_SSCONF: ssconf.SimpleStore().ReadAll(),
constants.NDS_START_NODE_DAEMON: True,
RunNodeSetupCmd(cluster_name, node, pathutils.NODE_DAEMON_SETUP,
opts.debug, opts.verbose,
True, opts.ssh_key_check, opts.ssh_key_check, data)
......@@ -270,7 +270,7 @@ def AddNode(opts, args):
if opts.node_setup:
_SetupSSH(opts, cluster_name, node)
bootstrap.SetupNodeDaemon(cluster_name, node, opts.ssh_key_check)
bootstrap.SetupNodeDaemon(opts, cluster_name, node)
if opts.disk_state:
disk_state = utils.FlatToDict(opts.disk_state)
......@@ -44,6 +44,7 @@ IMPORT_EXPORT_DAEMON = _autoconf.PKGLIBDIR + "/import-export"
KVM_CONSOLE_WRAPPER = _autoconf.PKGLIBDIR + "/tools/kvm-console-wrapper"
KVM_IFUP = _autoconf.PKGLIBDIR + "/kvm-ifup"
PREPARE_NODE_JOIN = _autoconf.PKGLIBDIR + "/prepare-node-join"
NODE_DAEMON_SETUP = _autoconf.PKGLIBDIR + "/node-daemon-setup"
XEN_CONSOLE_WRAPPER = _autoconf.PKGLIBDIR + "/tools/xen-console-wrapper"
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment