Class: WebPuppet::App

Inherits:
Object
  • Object
show all
Defined in:
lib/web-puppet.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filters = []) ⇒ App

Returns a new instance of App.



10
11
12
# File 'lib/web-puppet.rb', line 10

def initialize(filters=[])
  @filters = filters
end

Class Method Details

.run!(options) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/web-puppet.rb', line 54

def self.run!(options)

  conf = options[:config] ? ParseConfig.new(options[:config]) : false

  if conf && conf.get_value('filters')
    application = self.new(conf.get_value('filters').split(','))
  else
    application = self.new
  end

  daemonize = options[:daemonize]
  port = options[:port]

  if conf
    application = application.add_auth(conf) if conf.get_value('password')
    daemonize = conf.get_value('daemonize') ? conf.get_value('daemonize') == "true" : daemonize
    port = conf.get_value('port') ? conf.get_value('port') : port
  end

  Rack::Server.new(:app => application, :Port => port, :daemonize => daemonize).start

end

Instance Method Details

#add_auth(conf) ⇒ Object



43
44
45
46
47
48
49
50
51
52
# File 'lib/web-puppet.rb', line 43

def add_auth(conf)
  application = Rack::Auth::Basic.new(self) do |username, password|
    stored_username = conf.get_value('username')
    username_check = stored_username ? stored_username == username : true
    password_check = conf.get_value('password') == password
    username_check && password_check
  end
  application.realm = 'Web Puppet'
  application
end

#call(env) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/web-puppet.rb', line 14

def call env
  Puppet[:config] = "/etc/puppet/puppet.conf"
  Puppet.parse_config

  Puppet[:clientyamldir] = Puppet[:yamldir]
  Puppet::Node.indirection.terminus_class = :yaml

  nodes = Puppet::Node.indirection.search("*")

  data = {}
  nodes.each do |n|
    facts = Puppet::Node::Facts.indirection.find(n.name)
    tags = Puppet::Resource::Catalog.indirection.find(n.name).tags
    @filters.each do |filter|
      facts.values.delete(filter.strip)
    end

    data[n.name] = {
      :facts => facts.values,
      :tags => tags
    }
  end

  response = Rack::Response.new
  response.header['Content-Type'] = 'application/json'
  response.write JSON.pretty_generate(data)
  response.finish
end