web-puppet 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile CHANGED
@@ -2,3 +2,11 @@ source "http://rubygems.org"
2
2
 
3
3
  gem "rack"
4
4
  gem "puppet", ">= 2.7.0"
5
+ gem "rake"
6
+ gem "parseconfig"
7
+
8
+ group :test do
9
+ gem "test-unit"
10
+ gem "rack-test"
11
+ gem "mocha"
12
+ end
data/Gemfile.lock CHANGED
@@ -2,13 +2,26 @@ GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
4
  facter (1.6.2)
5
+ metaclass (0.0.1)
6
+ mocha (0.10.0)
7
+ metaclass (~> 0.0.1)
8
+ parseconfig (0.5.2)
5
9
  puppet (2.7.6)
6
10
  facter (>= 1.5.1)
7
11
  rack (1.3.5)
12
+ rack-test (0.6.1)
13
+ rack (>= 1.0)
14
+ rake (0.9.2.2)
15
+ test-unit (2.4.0)
8
16
 
9
17
  PLATFORMS
10
18
  ruby
11
19
 
12
20
  DEPENDENCIES
21
+ mocha
22
+ parseconfig
13
23
  puppet (>= 2.7.0)
14
24
  rack
25
+ rack-test
26
+ rake
27
+ test-unit
data/README CHANGED
@@ -1,3 +1,29 @@
1
1
  A tiny ruby rack application which exposes the data from puppet as JSON over HTTP.
2
2
 
3
3
  gem install web-puppet
4
+
5
+ Provides a simple command line tool which runs a built in web server. On accessing
6
+ the specified port you should get a JSON response containing the current node information.
7
+
8
+ web-puppet --help
9
+ Usage: web-puppet [options] ...
10
+
11
+ Configuration options:
12
+ --no-daemonize Don't daemonize the web server process
13
+ -p, --port PORT The port to run web-facter on
14
+ -c, --config FILE The file to load with configuration options
15
+ -h, --help Display this screenp
16
+
17
+ Note that in most setups the yaml directory containing the node information isn't readable
18
+ by all users, so you may need to run this as puppet or root.
19
+
20
+ You can configure web-puppet using a configuration file, using the following format, and
21
+ specifying the filename with the --config option above.
22
+
23
+ username=gilbert
24
+ password=george
25
+ port=3009
26
+ daemonize=true
27
+
28
+ Note that the port and daemonize options will override those on the command line.
29
+ The username and password options enable HTTP basic authentication using those details.
data/Rakefile CHANGED
@@ -1 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << "test"
6
+ t.test_files = FileList["test/**/*_test.rb"]
7
+ t.verbose = true
8
+ end
9
+
10
+ task :default => :test
data/bin/web-puppet CHANGED
@@ -1,6 +1,43 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'rack'
4
+ require 'optparse'
4
5
  require 'web-puppet'
5
6
 
6
- Rack::Server.new(:app => WebPuppet::App.new, :Port => 9295, :daemonize => true).start
7
+ options = {:daemonize => true, :port => 9295, :config => false}
8
+
9
+ optparse = OptionParser.new do |opts|
10
+ opts.banner = 'Usage: web-puppet [options] ...'
11
+
12
+ opts.separator ''
13
+ opts.separator 'Configuration options:'
14
+
15
+ opts.on( '--no-daemonize', "Don't daemonize the web server process") do |username|
16
+ options[:daemonize] = false
17
+ end
18
+
19
+ opts.on( '-p', '--port PORT', 'The port to run web-puppet on') do |port|
20
+ options[:port] = port
21
+ end
22
+
23
+ opts.on( '-c', '--config FILE', 'The file to load with configuration options') do |file|
24
+ options[:config] = file
25
+ end
26
+
27
+ opts.on_tail('-h', '--help', 'Display this screen' ) do
28
+ puts opts
29
+ exit
30
+ end
31
+ end
32
+
33
+ begin
34
+ optparse.parse!
35
+ WebPuppet::App.run!(options)
36
+ rescue OptionParser::InvalidArgument, OptionParser::InvalidOption, OptionParser::MissingArgument
37
+ puts $!.to_s
38
+ puts optparse
39
+ exit
40
+ rescue Errno::EACCES
41
+ puts $!.to_s
42
+ exit
43
+ end
@@ -1,3 +1,3 @@
1
1
  module WebPuppet
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/web-puppet.rb CHANGED
@@ -31,5 +31,33 @@ module WebPuppet
31
31
  response.write JSON.pretty_generate(data)
32
32
  response.finish
33
33
  end
34
+
35
+ def add_auth(conf)
36
+ application = Rack::Auth::Basic.new(self) do |username, password|
37
+ stored_username = conf.get_value('username')
38
+ username_check = stored_username ? stored_username == username : true
39
+ password_check = conf.get_value('password') == password
40
+ username_check && password_check
41
+ end
42
+ application.realm = 'Web Puppet'
43
+ application
44
+ end
45
+
46
+ def self.run!(options)
47
+ application = self.new
48
+
49
+ daemonize = options[:daemonize]
50
+ port = options[:port]
51
+
52
+ if options[:config]
53
+ conf = ParseConfig.new(options[:config])
54
+ application = application.add_auth(conf) if conf.get_value('password')
55
+ daemonize = conf.get_value('daemonize') ? conf.get_value('daemonize') == "true" : daemonize
56
+ port = conf.get_value('port') ? conf.get_value('port') : port
57
+ end
58
+
59
+ Rack::Server.new(:app => application, :Port => port, :daemonize => daemonize).start
60
+
61
+ end
34
62
  end
35
63
  end
@@ -0,0 +1,45 @@
1
+ require "test_helper"
2
+ require "web-puppet"
3
+
4
+ class AppTest < Test::Unit::TestCase
5
+ include Rack::Test::Methods
6
+
7
+ def app
8
+ WebPuppet::App.new
9
+ end
10
+
11
+ def test_view_renders_successfully
12
+ get "/"
13
+ assert last_response.ok?
14
+ end
15
+
16
+ def test_view_returns_json
17
+ get "/"
18
+ json = JSON.load(last_response.body)
19
+ end
20
+
21
+ end
22
+
23
+ class AuthenticationTest < Test::Unit::TestCase
24
+ include Rack::Test::Methods
25
+
26
+ def app
27
+ conf = mock()
28
+ conf.expects(:get_value).with('username').returns("admin")
29
+ conf.expects(:get_value).with('password').returns("password")
30
+ WebPuppet::App.new().add_auth(conf)
31
+ end
32
+
33
+ def test_view_requires_authentication
34
+ authorize 'evil', 'password'
35
+ get "/"
36
+ assert_equal 401, last_response.status
37
+ end
38
+
39
+ def test_view_renders_with_auth_details
40
+ authorize 'admin', 'password'
41
+ get "/"
42
+ assert last_response.ok?
43
+ end
44
+
45
+ end
@@ -0,0 +1,9 @@
1
+ ENV['RACK_ENV'] = 'test'
2
+
3
+ require "test/unit"
4
+ require "rack/test"
5
+ require "mocha"
6
+
7
+ %w[ lib ].each do |path|
8
+ $:.unshift path unless $:.include?(path)
9
+ end
data/web-puppet.gemspec CHANGED
@@ -20,4 +20,9 @@ Gem::Specification.new do |s|
20
20
 
21
21
  s.add_runtime_dependency "rack"
22
22
  s.add_runtime_dependency "puppet", ">= 2.7.0"
23
+ s.add_runtime_dependency "parseconfig"
24
+
25
+ s.add_development_dependency "test-unit"
26
+ s.add_development_dependency "rack-test"
27
+ s.add_development_dependency "mocha"
23
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: web-puppet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-30 00:00:00.000000000Z
12
+ date: 2011-11-02 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &70345799305680 !ruby/object:Gem::Requirement
16
+ requirement: &70356553014700 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70345799305680
24
+ version_requirements: *70356553014700
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: puppet
27
- requirement: &70345799305180 !ruby/object:Gem::Requirement
27
+ requirement: &70356553014200 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,51 @@ dependencies:
32
32
  version: 2.7.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70345799305180
35
+ version_requirements: *70356553014200
36
+ - !ruby/object:Gem::Dependency
37
+ name: parseconfig
38
+ requirement: &70356553013780 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70356553013780
47
+ - !ruby/object:Gem::Dependency
48
+ name: test-unit
49
+ requirement: &70356553013320 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70356553013320
58
+ - !ruby/object:Gem::Dependency
59
+ name: rack-test
60
+ requirement: &70356553012900 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70356553012900
69
+ - !ruby/object:Gem::Dependency
70
+ name: mocha
71
+ requirement: &70356553012480 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70356553012480
36
80
  description: Daemon which serves information from a local puppet master as JSON over
37
81
  HTTP
38
82
  email:
@@ -50,6 +94,8 @@ files:
50
94
  - bin/web-puppet
51
95
  - lib/web-puppet.rb
52
96
  - lib/web-puppet/version.rb
97
+ - test/integration_test.rb
98
+ - test/test_helper.rb
53
99
  - web-puppet.gemspec
54
100
  homepage: https://github.com/garethr/web-puppet
55
101
  licenses: []
@@ -75,4 +121,6 @@ rubygems_version: 1.8.6
75
121
  signing_key:
76
122
  specification_version: 3
77
123
  summary: Display Puppet node information as JSON over HTTP
78
- test_files: []
124
+ test_files:
125
+ - test/integration_test.rb
126
+ - test/test_helper.rb