diff options
Diffstat (limited to 'lib/net/ssh/multi/dynamic_server.rb')
-rw-r--r-- | lib/net/ssh/multi/dynamic_server.rb | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/net/ssh/multi/dynamic_server.rb b/lib/net/ssh/multi/dynamic_server.rb new file mode 100644 index 0000000..92af7a5 --- /dev/null +++ b/lib/net/ssh/multi/dynamic_server.rb @@ -0,0 +1,37 @@ +require 'net/ssh/multi/server' + +module Net; module SSH; module Multi + + class DynamicServer + attr_reader :master + attr_reader :callback + attr_reader :options + + def initialize(master, options, callback) + @master, @options, @callback = master, options, callback + @servers = nil + end + + def [](key) + (options[:properties] || {})[key] + end + + def each + (@servers || []).each { |server| yield server } + end + + def evaluate! + @servers ||= Array(callback[options]).map do |server| + case server + when String then Net::SSH::Multi::Server.new(master, server, options) + else server + end + end + end + + def to_ary + evaluate! + end + end + +end; end; end
\ No newline at end of file |