- def get_remote_command(self, command, user = 'root', key = None):
- if key is None and 'rootkey' in self:
- key = self['rootkey']
- options = ""
- options += " -o StrictHostKeyChecking=no "
- if key:
- options += " -i %(key)s" % locals()
- host = self['hostname']
- if 'type' in self and self['type'] in ['vm']:
- if 'redir_ssh_port' in self and self['redir_ssh_port']:
- options += " -p %s " % self['redir_ssh_port']
- host = self.get_host_ip()
- command = "ssh %(options)s %(user)s@%(host)s \'%(command)s\'" % locals()
- return self.get_host_command(command)
-
- def get_scp_command(self, localfile, remotefile, direction, recursive = False, user = 'root', key = None):
- # scp options
- options = ""
- options += " -o StrictHostKeyChecking=no "
- if recursive:
- options += " -r "
- if key:
- options += " -i %(key)s "% locals()
- elif self['rootkey']:
- options += " -i %s " % self['rootkey']
-
- # Are we copying to a real node or a virtual node hosted
- # at another machine
- host = self['hostname']
- if 'type' in self and self['type'] in ['vm']:
- if 'redir_ssh_port' in self and self['redir_ssh_port']:
- options += " -p %s " % self['redir_ssh_port']
- host = self.get_host_ip()
-
- if direction in ['to']:
- command = "scp %(options)s %(localfile)s %(user)s@%(host)s:/%(remotefile)s" % locals()
- elif direction in ['from']:
- command = "scp %(options)s %(user)s$%(host)s:/%(remotefile)s %(localfile)s" % locals()
- else:
- raise Error, "Invalid direction, must be 'to' or 'from'."
- return command
-
- # Host remote commands
- def host_popen(self, command, fatal = True):
- command = self.get_host_command(command)
- return utils.popen(command, fatal, self.config.verbose)
-
- def host_popen3(self, command):
- command = self.get_host_command(command)
- return utils.popen3(command, self.config.verbose)
-
- def host_commands(self, command, fatal = True):
- command = self.get_host_command(command)
- return utils.commands(command, fatal, self.config.verbose)
-
- # Slice remote commands
- def slice_popen(self, command, user = 'root', key = None, fatal = True):
- command = self.get_remote_command(command, user, key)
- return utils.popen(command, fatal)
-
- def slice_popen3(self, command, user = 'root', key = None, fatal = True):
- command = self.get_remote_command(command, user, key)
- return utils.popen3(command, fatal)
-
- def slice_commands(self, command, user = 'root', key = None, fatal = True):
- command = self.get_remote_command(command, user, key)
- return utils.commands(command, fatal)
-
- # Host scp
- def scp_to_host(self, localfile, remotefile, recursive = False):
- command = self.get_host_scp_command(localfile, remotefile, 'to', recursive)
- return utils.commands(command)
-
- def scp_from_host(self, localfile, remotefile, recursive = False):
- command = self.get_host_scp_command(localfile, remotefile, 'from', recursive)
- return utils.commands(command)
-
- # Node scp
- def scp_to(self, localfile, remotefile, recursive = False, user = 'root', key = None):
- # if node is vm, we must scp file(s) to host machine first
- # then run scp from there
- if 'type' in self and self['type'] in ['vm']:
- fileparts = localfile.split(os.sep)
- filename = fileparts[-1:][0]
- tempfile = '/tmp/%(filename)s' % locals()
- self.scp_to_host(localfile, tempfile, recursive)
- command = self.get_scp_command(tempfile, remotefile, 'to', recursive, user, key)
- return self.host_commands(command)
- else:
-
- command = self.get_scp_command(localfile, remotefile, 'to', recursive, user, key)
- return utils.commands(command)
-
- def scp_from(self, localfile, remotefile, recursive = False, user = 'root', key = None):
- # if node is vm, we must scp file(s) onto host machine first
- # then run scp from there
- if 'type' in self and self['type'] in ['vm']:
- fileparts = remotefile.split(os.sep)
- filename = fileparts[-1:]
- tempfile = '/tmp/%(filename)s' % locals()
- self.scp_from_host(remotefile, tempfile, recursive)
- command = self.get_scp_command(localfile, tempfile, 'from', recursive, user, key)
- return self.host_commands(command)
- else:
-
- command = self.get_scp_command(localfile, remotefile, 'from', recursive, user, key)
- return utils.commands(command)
-
- def is_ready(self, timeout=10):
- # Node is considered ready when Node Manager has started avuseradd processes have stopped