class Inprovise::Infrastructure::Node
Attributes
host[R]
user[R]
Public Class Methods
json_create(o)
click to toggle source
# File lib/inprovise/node.rb, line 235 def self.json_create(o) data = o['data'] new(data['name'], Inprovise::Infrastructure.symbolize_keys(data['config'])) end
new(name, config={})
click to toggle source
Calls superclass method
Inprovise::Infrastructure::Target::new
# File lib/inprovise/node.rb, line 11 def initialize(name, config={}) @host = config[:host] || name @user = config[:user] || 'root' @channel = nil @helper = nil @history = [] @user_nodes = {} super(name, config) end
Public Instance Methods
binary_exists?(bin)
click to toggle source
# File lib/inprovise/node.rb, line 170 def binary_exists?(bin) log.execute("BINARY_EXISTS?: #{bin}") if Inprovise.verbosity > 0 rc = helper.binary_exists?(bin) log.execute("BINARY_EXISTS?: #{rc}") if Inprovise.verbosity > 0 rc end
cat(path)
click to toggle source
# File lib/inprovise/node.rb, line 84 def cat(path) log.execute("CAT: #{path}") if Inprovise.verbosity > 0 out = helper.cat(path) log.execute("CAT: #{out}") if Inprovise.verbosity > 0 out end
channel()
click to toggle source
# File lib/inprovise/node.rb, line 21 def channel @channel ||= Inprovise::CmdChannel.open(self, config[:channel]) end
copy(from, to)
click to toggle source
# File lib/inprovise/node.rb, line 124 def copy(from, to) log.execute("COPY: #{from} #{to}") if Inprovise.verbosity > 0 helper.copy(from, to) end
delete(path)
click to toggle source
# File lib/inprovise/node.rb, line 134 def delete(path) log.execute("DELETE: #{path}") if Inprovise.verbosity > 0 helper.delete(path) end
directory?(path)
click to toggle source
# File lib/inprovise/node.rb, line 117 def directory?(path) log.execute("DIRECTORY?: #{path}") if Inprovise.verbosity > 0 rc = helper.directory?(path) log.execute("DIRECTORY?: #{rc}") if Inprovise.verbosity > 0 rc end
disconnect!()
click to toggle source
# File lib/inprovise/node.rb, line 29 def disconnect! @user_nodes.each_value {|n| n.disconnect! } @channel.close if @channel self end
download(from, to)
click to toggle source
# File lib/inprovise/node.rb, line 63 def download(from, to) log.execute("DOWLOAD: #{to} <= #{from}") if Inprovise.verbosity > 0 helper.download(from, to) end
echo(arg)
click to toggle source
basic commands
# File lib/inprovise/node.rb, line 70 def echo(arg) log.execute("ECHO: #{arg}") if Inprovise.verbosity > 0 out = helper.echo(arg) log.execute("ECHO: #{out}") if Inprovise.verbosity > 0 out end
env(var)
click to toggle source
# File lib/inprovise/node.rb, line 77 def env(var) log.execute("ENV: #{var}") if Inprovise.verbosity > 0 val = helper.env(var) log.execute("ENV: #{val}") if Inprovise.verbosity > 0 val end
exists?(path)
click to toggle source
# File lib/inprovise/node.rb, line 103 def exists?(path) log.execute("EXISTS?: #{path}") if Inprovise.verbosity > 0 rc = helper.exists?(path) log.execute("EXISTS?: #{rc}") if Inprovise.verbosity > 0 rc end
file?(path)
click to toggle source
# File lib/inprovise/node.rb, line 110 def file?(path) log.execute("FILE?: #{path}") if Inprovise.verbosity > 0 rc = helper.file?(path) log.execute("FILE?: #{rc}") if Inprovise.verbosity > 0 rc end
for_dir(path)
click to toggle source
# File lib/inprovise/node.rb, line 196 def for_dir(path) user_key = "#{self.user}:#{path}" return @user_nodes[user_key] if @user_nodes[user_key] new_node = self.dup new_node.prepare_connection_for_user!(self.user) end
for_user(new_user, user_key=nil)
click to toggle source
# File lib/inprovise/node.rb, line 185 def for_user(new_user, user_key=nil) new_user = new_user.to_s return self if self.user == new_user user_key ||= new_user return @user_nodes[user_key] if @user_nodes[user_key] new_node = self.dup new_node.prepare_connection_for_user!(new_user) @user_nodes[user_key] = new_node new_node end
group(path)
click to toggle source
# File lib/inprovise/node.rb, line 158 def group(path) log.execute("GROUP: #{path}") if Inprovise.verbosity > 0 group = helper.group(path) log.execute("OWNER: #{group}") if Inprovise.verbosity > 0 group end
hash_for(path)
click to toggle source
# File lib/inprovise/node.rb, line 91 def hash_for(path) log.execute("HASH_FOR: #{path}") if Inprovise.verbosity > 0 hsh = helper.hash_for(path) log.execute("HASH_FOR: #{hsh}") if Inprovise.verbosity > 0 hsh end
helper()
click to toggle source
# File lib/inprovise/node.rb, line 25 def helper @helper ||= Inprovise::CmdHelper.get(self, config[:helper]) end
log()
click to toggle source
# File lib/inprovise/node.rb, line 177 def log @log ||= Inprovise::Logger.new(self, nil) end
log_to(log)
click to toggle source
# File lib/inprovise/node.rb, line 181 def log_to(log) @log = log end
mkdir(path)
click to toggle source
# File lib/inprovise/node.rb, line 98 def mkdir(path) log.execute("MKDIR: #{path}") if Inprovise.verbosity > 0 helper.mkdir(path) end
move(from, to)
click to toggle source
# File lib/inprovise/node.rb, line 129 def move(from, to) log.execute("MOVE: #{from} #{to}") if Inprovise.verbosity > 0 helper.move(from, to) end
owner(path)
click to toggle source
# File lib/inprovise/node.rb, line 151 def owner(path) log.execute("OWNER: #{path}") if Inprovise.verbosity > 0 owner = helper.owner(path) log.execute("OWNER: #{owner}") if Inprovise.verbosity > 0 owner end
permissions(path)
click to toggle source
# File lib/inprovise/node.rb, line 139 def permissions(path) log.execute("PERMISSIONS: #{path}") if Inprovise.verbosity > 0 perm = helper.permissions(path) log.execute("PERMISSIONS: #{'%o' % perm}") if Inprovise.verbosity > 0 perm end
prepare_connection_for_user!(new_user)
click to toggle source
# File lib/inprovise/node.rb, line 203 def prepare_connection_for_user!(new_user) @user = new_user @channel = nil @helper = nil @user_nodes = {} @history = [] @log = Inprovise::Logger.new(self, @log.task) if @log end
run(cmd, opts={})
click to toggle source
generic command execution
# File lib/inprovise/node.rb, line 37 def run(cmd, opts={}) log.execute("RUN: #{cmd}") if Inprovise.verbosity > 0 if should_run?(cmd, opts) really_run(cmd, opts) else cached_run(cmd, opts) end end
set_owner(path, user, group=nil)
click to toggle source
# File lib/inprovise/node.rb, line 165 def set_owner(path, user, group=nil) log.execute("SET_OWNER: #{path} #{user}#{group ? " #{group}" : ''}") if Inprovise.verbosity > 0 helper.set_owner(path, user, group) end
set_permissions(path, perm)
click to toggle source
# File lib/inprovise/node.rb, line 146 def set_permissions(path, perm) log.execute("SET_PERMISSIONS: #{path} #{'%o' % perm}") if Inprovise.verbosity > 0 helper.set_permissions(path, perm) end
sudo(cmd, opts={})
click to toggle source
# File lib/inprovise/node.rb, line 46 def sudo(cmd, opts={}) log.execute("SUDO: #{cmd}") if Inprovise.verbosity > 0 opts = opts.merge({:sudo => true}) if should_run?(cmd, opts) really_run(cmd, opts) else cached_run(cmd, opts) end end
to_json(*a)
click to toggle source
# File lib/inprovise/node.rb, line 225 def to_json(*a) { JSON.create_id => self.class.name, :data => { :name => name, :config => safe_config } }.to_json(*a) end
to_s()
click to toggle source
# File lib/inprovise/node.rb, line 212 def to_s "#{name}(#{user}@#{host})" end
upload(from, to)
click to toggle source
file management
# File lib/inprovise/node.rb, line 58 def upload(from, to) log.execute("UPLOAD: #{from} => #{to}") if Inprovise.verbosity > 0 helper.upload(from, to) end
Protected Instance Methods
safe_config()
click to toggle source
# File lib/inprovise/node.rb, line 216 def safe_config scfg = config.dup scfg.delete :passphrase scfg.delete :password scfg.delete :credentials scfg end
Private Instance Methods
cached_run(cmd, opts={})
click to toggle source
# File lib/inprovise/node.rb, line 242 def cached_run(cmd, opts={}) cmd = "sudo #{cmd}" if opts[:sudo] log.cached(cmd) last_output(cmd) end
last_output(cmd)
click to toggle source
# File lib/inprovise/node.rb, line 266 def last_output(cmd) results = @history.select {|h| h[:cmd] == cmd } return nil unless results && results.size > 0 results.last[:output] end
prefixed_command(cmd)
click to toggle source
# File lib/inprovise/node.rb, line 272 def prefixed_command(cmd) return cmd unless config[:prefix] config[:prefix] + cmd end
really_run(cmd, opts={})
click to toggle source
# File lib/inprovise/node.rb, line 248 def really_run(cmd, opts={}) exec = opts[:sudo] ? helper.sudo : helper cmd = prefixed_command(cmd) begin output = exec.run(cmd, opts[:log]) @history << {cmd:cmd, output:output} output rescue Inprovise::CmdChannel::Exception => ex raise RuntimeError, "Failed to communicate with [#{self}] : #{ex.message}" end end
should_run?(cmd, opts)
click to toggle source
# File lib/inprovise/node.rb, line 260 def should_run?(cmd, opts) return true unless opts[:once] cmd = "sudo #{cmd}" if opts[:sudo] last_output(cmd).nil? end