class MCollective::Discovery::Flatfile - mcollective version 2.12.5

# class MCollective::Discovery::Flatfile

### Public Class Methods

discover(filter, timeout, limit=0, client=nil) click to toggle source

       # File lib/mcollective/discovery/flatfile.rb
     7 def self.discover(filter, timeout, limit=0, client=nil)
     8   unless client.options[:discovery_options].empty?
     9     file = client.options[:discovery_options].first
    10   else
    11     raise "The flatfile discovery method needs a path to a text file"
    12   end
    13
    14   raise "Cannot read the file %s specified as discovery source" % file unless File.readable?(file)
    15
    16   discovered = []
    17   hosts = []
    18
    19   File.readlines(file).each do |host|
    20     host = host.chomp.strip
    21     if host.empty? || host.match(/^#/)
    22       next
    23     end
    24     raise 'Identities can only match /^[\w\.\-]+$/' unless host.match(/^[\w\.\-]+$/)
    25     hosts << host
    26   end
    27
    28   # this plugin only supports identity filters, do regex matches etc against
    29   # the list found in the flatfile
    30   if !(filter["identity"].empty?)
    31     filter["identity"].each do |identity|
    32       identity = Regexp.new(identity.gsub("\/", "")) if identity.match("^/")
    33
    34       if identity.is_a?(Regexp)
    35         discovered = hosts.grep(identity)
    36       elsif hosts.include?(identity)
    37         discovered << identity
    38       end
    39     end
    40   else
    41     discovered = hosts
    42   end
    43
    44   discovered
    45 end