from ganeti import errors
from ganeti import constants
from ganeti import netutils
+from ganeti import pathutils
+from ganeti import vcluster
def FormatParamikoFingerprint(fingerprint):
options = [
"-oEscapeChar=none",
"-oHashKnownHosts=no",
- "-oGlobalKnownHostsFile=%s" % constants.SSH_KNOWN_HOSTS_FILE,
+ "-oGlobalKnownHostsFile=%s" % pathutils.SSH_KNOWN_HOSTS_FILE,
"-oUserKnownHostsFile=/dev/null",
"-oCheckHostIp=no",
]
quiet=quiet))
if tty:
argv.extend(["-t", "-t"])
- argv.extend(["%s@%s" % (user, hostname), command])
+
+ argv.append("%s@%s" % (user, hostname))
+
+ # Insert variables for virtual nodes
+ argv.extend("export %s=%s;" %
+ (utils.ShellQuote(name), utils.ShellQuote(value))
+ for (name, value) in
+ vcluster.EnvironmentForHost(hostname).items())
+
+ argv.append(command)
+
return argv
def Run(self, *args, **kwargs):
if netutils.IP6Address.IsValid(node):
node = netutils.FormatAddress((node, None))
- command.append("%s:%s" % (node, filename))
+ command.append("%s:%s" % (node, vcluster.ExchangeNodeRoot(node, filename)))
result = utils.RunCmd(command)
if result.failed:
- logging.error("Copy to node %s failed (%s) error %s,"
- " command was %s",
+ logging.error("Copy to node %s failed (%s) error '%s',"
+ " command was '%s'",
node, result.fail_reason, result.output, result.cmd)
return not result.failed
- detail: string with details
"""
- retval = self.Run(node, "root", "hostname --fqdn", quiet=False)
+ cmd = ("if test -z \"$GANETI_HOSTNAME\"; then"
+ " hostname --fqdn;"
+ "else"
+ " echo \"$GANETI_HOSTNAME\";"
+ "fi")
+ retval = self.Run(node, constants.SSH_LOGIN_USER, cmd, quiet=False)
if retval.failed:
msg = "ssh problem"