puppetdb_rundeck 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 562cf081186cad3f2e04de969366be997bcba276
4
- data.tar.gz: a89c93fda1f5f898f8abe0472dc770a353ef2e17
3
+ metadata.gz: a3b9ec50bf9c3da53dbd20eafcc0b237626377b6
4
+ data.tar.gz: 75eb0f1ffa84b54c49efd46c1e1be2755f992aae
5
5
  SHA512:
6
- metadata.gz: 8fa62b7dd55c8a4d4f107ae6a8efc5420ccafa52e0c8d4d64c7d2add9961fbac5c620213974b80a6f44968c37fbebb66feb5e019d2b45defd35401b6f950dba0
7
- data.tar.gz: d265da9c04e1e8ebd4cf3bf1b477f6565eb694345389091f8fa4ca852e30474c69e34801227cd7d4b4078a8fd51dfb88d8b89460eae3a3bfeb7c2216d3976be5
6
+ metadata.gz: 5fbe3e54a78d1c595ab7beb74e330709bd0341173b4ff17b3d98c5e7041e2cb847856d6295be0cff0fda80dc9882b3ea6569df2b6ed9fce7784f4c1b6378c4f6
7
+ data.tar.gz: 7ecee81c7c6bf23e80ffa87d7a79fcd495fc0c2225bf9d251a6d4b1ae5bfeeaee48bc4f786a0de30fa0f2d90fda03cb9cf137b5b5017fb62a40400dbe7e5093f
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .idea
19
+ *.iml
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/CHANGELOG ADDED
@@ -0,0 +1,5 @@
1
+ 2014-04-27 Release 0.2.0
2
+ - replaced json dependency with json_pure
3
+
4
+ 2014-04-25 Release 0.1.0
5
+ - initial version
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in puppetdb_rundeck.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2013 OpenTable, Inc.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # PuppetDBRundeck
2
+
3
+ puppetdb_rundeck is a sinatra based application to provide integration between [PuppetDB](https://docs.puppetlabs.com/puppetdb/latest/) and [Rundeck](http://rundeck.org/).
4
+ It provides an api in either xml or yaml that allows the node and fact data with puppetdb to use used as a resource
5
+ with rundeck.
6
+
7
+ ## Installation
8
+
9
+ Install it yourself as:
10
+
11
+ $ gem install puppetdb_rundeck
12
+
13
+ ## Usage
14
+
15
+ Start the application:
16
+
17
+ $ puppetdb_rundeck --pdbhost <puppetdb hostname> --pdbport <puppetdb port> --port <application port>
18
+
19
+ Then go to the following endpoint in your browser:
20
+
21
+ http://localhost:<port>/api
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it ( http://github.com/opentable/puppetdb_rundeck/fork )
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
4
+
5
+ require 'app'
6
+ require 'optparse'
7
+
8
+
9
+ options = {}
10
+ OptionParser.new do |opts|
11
+ opts.banner = "Usage: puppetdb_rundeck [options]"
12
+
13
+ opts.on("--port PORT", String, "The port on which to run the appllication") do |p|
14
+ options[:port] = p
15
+ end
16
+
17
+ opts.on("--pdbhost HOSTNAME", String, "The hostname of the PuppetDB instance") do |ph|
18
+ options[:pdbhost] = ph
19
+ end
20
+
21
+ opts.on("--pdbport PORT", String, "The port of the PuppetDB instance") do |pp|
22
+ options[:pdbport] = pp
23
+ end
24
+ end.parse!
25
+
26
+ if options[:pdbhost].nil? or options[:pdbhost].eql?('')
27
+ puts 'The --pdbhost option must be specified'
28
+ exit 1
29
+ end
30
+
31
+ if options[:pdbport].nil? or options[:pdbport].eql?('')
32
+ puts 'The --pdbport option must be specified'
33
+ exit 1
34
+ end
35
+
36
+ PuppetDBRunDeck.set :puppetdb_host, options[:pdbhost]
37
+ PuppetDBRunDeck.set :puppetdb_port, options[:pdbport]
38
+
39
+ if options[:port].nil? or options[:port].eql?('')
40
+ PuppetDBRunDeck.set :port, '4567'
41
+ else
42
+ PuppetDBRunDeck.set :port, options[:port]
43
+ end
44
+
45
+ PuppetDBRunDeck.run!
data/lib/app.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'rubygems'
2
+ require 'yaml'
3
+ require 'sinatra'
4
+ require 'haml'
5
+
6
+ require_relative 'helpers/puppetdb'
7
+ require_relative 'helpers/process'
8
+
9
+ require_relative 'model/endpoint'
10
+ require_relative 'model/xml'
11
+ require_relative 'model/yaml'
12
+
13
+ class PuppetDBRunDeck < Sinatra::Base
14
+ get '/' do
15
+ redirect to('/api')
16
+ end
17
+
18
+ get '/api' do
19
+ haml :api
20
+ end
21
+
22
+ get '/api/yaml' do
23
+ content_type 'text/yaml'
24
+ puppetdb_helper = Helpers::PuppetDB.new(settings.puppetdb_host, settings.puppetdb_port)
25
+ output = YAMLOutput.new(puppetdb_helper)
26
+ Helpers::Process.new().endpoint_processor(output)
27
+ end
28
+
29
+ get '/api/xml' do
30
+ content_type 'application/xml'
31
+ puppetdb_helper = Helpers::PuppetDB.new(settings.puppetdb_host, settings.puppetdb_port)
32
+ output = XMLOutput.new(puppetdb_helper)
33
+ Helpers::Process.new().endpoint_processor(output)
34
+ end
35
+ end
36
+
37
+ # This allows app.rb to be run in isolation without the need for the executable
38
+ if (!defined? settings.puppetdb_host) and (!defined? settings.puppetdb_port)
39
+ PuppetDBRunDeck.set :puppetdb_host, 'localhost'
40
+ PuppetDBRunDeck.set :puppetdb_port, '8080'
41
+ end
@@ -0,0 +1,69 @@
1
+
2
+ class Helpers::Process
3
+
4
+ def add_facts(facts, host, collection)
5
+ facts.each{|f|
6
+ if f['certname'].eql?(host)
7
+ fact_name = f['name']
8
+ fact_value = f['value']
9
+
10
+ if fact_name.include?('processor')
11
+ fact_name = number_to_name(fact_name)
12
+ end
13
+
14
+ if fact_name.include?('path')
15
+ fact_value = fact_value.gsub!('"','')
16
+ end
17
+
18
+ if collection.instance_of?(Hash)
19
+ collection[host][fact_name] = fact_value
20
+ elsif collection.instance_of?(Array)
21
+ collection << "#{fact_name}=\"#{fact_value}\" "
22
+ else
23
+ end
24
+ end
25
+ }
26
+ return collection
27
+ end
28
+
29
+ def endpoint_processor(output)
30
+ file_name = output.tmp_file
31
+ content = ''
32
+ if File.exist?(file_name)
33
+ file = File.new(file_name)
34
+ t_now = Time.at(Time.now.to_i)
35
+ t_file = Time.at(file.mtime.to_i)
36
+
37
+ if t_now < (t_file + 300)
38
+ content = File.new(file_name, 'r').read
39
+ else
40
+ p "#{t_now} #{t_file}"
41
+ endpoint = EndPoint.new()
42
+ content = endpoint.parse(output)
43
+ end
44
+ else
45
+ endpoint = EndPoint.new()
46
+ content = endpoint.parse(output)
47
+ end
48
+
49
+ return content
50
+ end
51
+
52
+ private
53
+ def number_to_name(name)
54
+ lookup = {
55
+ '1' => 'one', '2' => 'two', '3' => 'three', '4' => 'four', '5' => 'five',
56
+ '6' => 'six', '7' => 'seven', '8' => 'eight', '9' => 'nine', '10' => 'ten',
57
+ '11' => 'eleven', '12' => 'twelve', '13' => 'thirteen', '14' => 'fourteen',
58
+ '15' => 'fifteen', '16' => 'sixteen'
59
+ }
60
+
61
+ lookup.each { |k,v|
62
+ if name.include?(k)
63
+ name.gsub!(k,"_#{v}")
64
+ end
65
+ }
66
+ return name
67
+ end
68
+
69
+ end
@@ -0,0 +1,46 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+ require 'json'
4
+
5
+ module Helpers
6
+ class PuppetDB
7
+
8
+ def initialize(host, port)
9
+ @puppetdb_host = host
10
+ @puppetdb_port = port
11
+ end
12
+
13
+ def get_nodes
14
+ uri = URI.parse( "http://#{@puppetdb_host}:#{@puppetdb_port}/v3/nodes" )
15
+ http = Net::HTTP.new(uri.host, uri.port)
16
+ request = Net::HTTP::Get.new(uri.path)
17
+ request.add_field('Accept', 'application/json')
18
+ response = http.request(request)
19
+ response['Content-Type'] = 'application/yaml'
20
+ if response.code == '200'
21
+ nodes = JSON.parse(response.body)
22
+ else
23
+ nodes = []
24
+ end
25
+
26
+ return nodes
27
+ end
28
+
29
+ def get_facts
30
+ uri = URI.parse( "http://#{@puppetdb_host}:#{@puppetdb_port}/v3/facts" )
31
+ http = Net::HTTP.new(uri.host, uri.port)
32
+ request = Net::HTTP::Get.new(uri.path)
33
+ request.add_field('Accept', 'application/json')
34
+ response = http.request(request)
35
+ response['Content-Type'] = 'application/yaml'
36
+ if response.code == '200'
37
+ facts = JSON.parse(response.body)
38
+ else
39
+ facts = []
40
+ end
41
+
42
+ return facts
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,5 @@
1
+ class EndPoint
2
+ def parse(parser)
3
+ parser.parse
4
+ end
5
+ end
data/lib/model/xml.rb ADDED
@@ -0,0 +1,37 @@
1
+ require_relative '../helpers/process'
2
+
3
+ class XMLOutput
4
+ attr_accessor :tmp_file
5
+ attr_accessor :db_helper
6
+
7
+ def initialize(puppetdb_helper)
8
+ @tmp_file = '/tmp/puppetdb-resource.xml'
9
+ @db_helper = puppetdb_helper
10
+ end
11
+
12
+ def parse
13
+ nodes = @db_helper.get_nodes
14
+ facts = @db_helper.get_facts
15
+ helper = Helpers::Process.new
16
+
17
+ rundeck_data = Array.new
18
+ rundeck_data << "<project>\n"
19
+
20
+ nodes.each{|n|
21
+ host = n['name']
22
+
23
+ rundeck_data << "<node name=\"#{host}\""
24
+
25
+ rundeck_data = helper.add_facts(facts, host, rundeck_data)
26
+
27
+ rundeck_data << "/>\n"
28
+ }
29
+
30
+ rundeck_data << "</project>"
31
+ xml = rundeck_data.join(" ")
32
+
33
+ File.open(@tmp_file, 'w') { |file| file.write(xml) }
34
+
35
+ return xml
36
+ end
37
+ end
data/lib/model/yaml.rb ADDED
@@ -0,0 +1,31 @@
1
+ require_relative '../helpers/process'
2
+
3
+ class YAMLOutput
4
+ attr_accessor :tmp_file
5
+
6
+ def initialize(puppetdb_helper)
7
+ @tmp_file = '/tmp/puppetdb-resource.yaml'
8
+ @db_helper = puppetdb_helper
9
+ end
10
+
11
+ def parse
12
+ nodes = @db_helper.get_nodes
13
+ facts = @db_helper.get_facts
14
+ helper = Helpers::Process.new
15
+
16
+ rundeck_data = Hash.new
17
+ nodes.each{|d|
18
+ host = d['name']
19
+
20
+ rundeck_data[host] = Hash.new if not rundeck_data.key?(host)
21
+
22
+ rundeck_data = helper.add_facts(facts, host, rundeck_data)
23
+ }
24
+
25
+ yaml = rundeck_data.to_yaml
26
+
27
+ File.open(@tmp_file, 'w') { |file| file.write(yaml) }
28
+
29
+ return yaml
30
+ end
31
+ end
@@ -0,0 +1,15 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title PuppetDB-Rundeck
5
+ %body
6
+ %h1 PuppetDB-Rundeck
7
+ %p
8
+ The puppetdb-rundeck application allows Rundeck to make use of the node and fact information stored in PuppetDB.
9
+ %p
10
+ Two API endpoints are provided which you can point Rundeck to:
11
+ %ul
12
+ %li
13
+ %a(href="/api/xml") XML
14
+ %li
15
+ %a(href="/api/yaml") YAML
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = 'puppetdb_rundeck'
6
+ spec.version = '0.2.0'
7
+ spec.authors = ['liamjbennett']
8
+ spec.email = ['lbennett@opentable.com']
9
+ spec.summary = %q{A sinatra based application to provide integration between PuppetDB and Rundeck}
10
+ spec.description = %q{puppetdb_rundeck is a sinatra based application to provide integration between PuppetDB and Rundeck.
11
+ It provides an api in either xml or yaml that allows the node and fact data with puppetdb to use used as a resource
12
+ with rundeck}
13
+ spec.homepage = 'https://github.com/opentable/puppetdb_rundeck'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split("\n")
17
+ spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.5'
22
+ spec.add_development_dependency 'rake', '~> 10.2'
23
+ spec.add_development_dependency 'rspec'
24
+ spec.add_development_dependency 'rack-test'
25
+ spec.add_development_dependency 'webmock'
26
+ spec.add_development_dependency 'rspec-mocks'
27
+
28
+ spec.add_runtime_dependency 'json_pure', '~> 1.8'
29
+ spec.add_runtime_dependency 'sinatra', '~> 1.4'
30
+ spec.add_runtime_dependency 'haml', '~> 4.0'
31
+ end
data/spec/app_spec.rb ADDED
@@ -0,0 +1,29 @@
1
+ require File.expand_path '../spec_helper.rb', __FILE__
2
+ require File.expand_path '../../lib/app.rb', __FILE__
3
+
4
+ describe 'puppetdb_rundeck Application' do
5
+ it 'homepage should redirect to api page' do
6
+ get '/'
7
+ last_response.should be_redirect
8
+ follow_redirect!
9
+ last_request.url.should == 'http://example.org/api'
10
+ end
11
+
12
+ it 'should allow access to the main api page' do
13
+ get '/api'
14
+ last_response.should be_ok
15
+ last_response.body.should include('Two API endpoints are provided')
16
+ end
17
+
18
+ it 'should allow access to the xml endpoint' do
19
+ stub_request(:any, /puppetdb/).to_rack(FakePuppetDB)
20
+ get '/api/xml'
21
+ last_response.should be_ok
22
+ end
23
+
24
+ it 'should allow access to the yaml endpoint' do
25
+ stub_request(:any, /puppetdb/).to_rack(FakePuppetDB)
26
+ get '/api/yaml'
27
+ last_response.should be_ok
28
+ end
29
+ end
@@ -0,0 +1,53 @@
1
+ require File.expand_path '../../spec_helper.rb', __FILE__
2
+ require File.expand_path '../../../lib/helpers/puppetdb.rb', __FILE__
3
+
4
+ describe Helpers::PuppetDB, '#get_nodes' do
5
+
6
+ it 'should return json when puppetdb details are valid' do
7
+
8
+ stub_request(:get, 'http://localhost:8080/v3/nodes').
9
+ with(:headers => {'Accept'=>['*/*', 'application/json'], 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
10
+ to_return(:status => 200, :body => '{ "name" : "test.internal" }', :headers => {})
11
+
12
+ puppetdb = Helpers::PuppetDB.new('localhost', '8080')
13
+ nodes = puppetdb.get_nodes
14
+ nodes.should_not be_empty
15
+ end
16
+
17
+ it 'should return an empty collection when the details are invalid' do
18
+
19
+ stub_request(:get, 'http://fubar:8080/v3/nodes').
20
+ with(:headers => {'Accept'=>['*/*', 'application/json'], 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
21
+ to_return(:status => 404, :body => '', :headers => {})
22
+
23
+ puppetdb = Helpers::PuppetDB.new('fubar', '8080')
24
+ nodes = puppetdb.get_nodes
25
+ nodes.should be_empty
26
+ end
27
+
28
+ end
29
+
30
+ describe Helpers::PuppetDB, '#get_facts' do
31
+
32
+ it 'should return json when puppetdb details are valid' do
33
+
34
+ stub_request(:get, 'http://localhost:8080/v3/facts').
35
+ with(:headers => {'Accept'=>['*/*', 'application/json'], 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
36
+ to_return(:status => 200, :body => '{ "name" : "osfamily" }', :headers => {})
37
+
38
+ puppetdb = Helpers::PuppetDB.new('localhost', '8080')
39
+ nodes = puppetdb.get_facts
40
+ nodes.should_not be_empty
41
+ end
42
+
43
+ it 'should return an empty collection when the details are invalid' do
44
+
45
+ stub_request(:get, 'http://fubar:8080/v3/facts').
46
+ with(:headers => {'Accept'=>['*/*', 'application/json'], 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
47
+ to_return(:status => 404, :body => '', :headers => {})
48
+
49
+ puppetdb = Helpers::PuppetDB.new('fubar', '8080')
50
+ nodes = puppetdb.get_facts
51
+ nodes.should be_empty
52
+ end
53
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path '../../spec_helper.rb', __FILE__
2
+ require File.expand_path '../../../lib/helpers/puppetdb', __FILE__
3
+ require File.expand_path '../../../lib/model/xml', __FILE__
4
+
5
+ describe XMLOutput, '#parse' do
6
+
7
+ it 'should return valid xml containing the node name' do
8
+ helper = Helpers::PuppetDB.new('fubar', '80')
9
+ allow(helper).to receive(:get_nodes).and_return([{'name' => 'test.internal'}])
10
+ allow(helper).to receive(:get_facts).and_return([{'certname' => 'test.internal', 'name' => 'osfamily', 'value' => 'Debian'}])
11
+
12
+ xml_output = XMLOutput.new(helper)
13
+
14
+ expectation = "<project>\n <node name=\"test.internal\" osfamily=\"Debian\" />\n </project>"
15
+
16
+ xml_output.parse.should == expectation
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path '../../spec_helper.rb', __FILE__
2
+ require File.expand_path '../../../lib/helpers/puppetdb', __FILE__
3
+ require File.expand_path '../../../lib/model/yaml', __FILE__
4
+
5
+ describe YAMLOutput, '#parse' do
6
+
7
+ it 'should return valid yaml containing the node name' do
8
+ helper = Helpers::PuppetDB.new('fubar', '80')
9
+ allow(helper).to receive(:get_nodes).and_return([{'name' => 'test.internal'}])
10
+ allow(helper).to receive(:get_facts).and_return([{'certname' => 'test.internal', 'name' => 'osfamily', 'value' => 'Debian'}])
11
+
12
+ yaml_output = YAMLOutput.new(helper)
13
+
14
+ expectation = "---\ntest.internal:\n osfamily: Debian\n"
15
+
16
+ yaml_output.parse.should == expectation
17
+ end
18
+ end
@@ -0,0 +1,25 @@
1
+ require 'sinatra'
2
+ require 'rack/test'
3
+ require 'webmock/rspec'
4
+ require 'rspec/mocks'
5
+
6
+ require_relative '../spec/support/fake_puppetdb'
7
+
8
+ WebMock.disable_net_connect!(:allow_localhost => true)
9
+
10
+ # setup test environment
11
+ set :environment, :test
12
+ set :run, false
13
+ set :raise_errors, true
14
+ set :logging, false
15
+
16
+ def app
17
+ PuppetDBRunDeck.set :puppetdb_host, 'puppetdb'
18
+ PuppetDBRunDeck.set :puppetdb_port, '8080'
19
+ PuppetDBRunDeck
20
+ end
21
+
22
+ RSpec.configure do |config|
23
+ config.include Rack::Test::Methods
24
+ config.mock_with :rspec
25
+ end
@@ -0,0 +1,12 @@
1
+ require 'sinatra/base'
2
+
3
+ class FakePuppetDB < Sinatra::Base
4
+
5
+ get '/v3/nodes' do
6
+ '[{ "name": "test-node-01" }]'
7
+ end
8
+
9
+ get '/v3/facts' do
10
+ '[{ "certname": "test-node-01", "name": "osfamily", "value": "Debian" }]'
11
+ end
12
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppetdb_rundeck
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - liamjbennett
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-16 00:00:00.000000000 Z
11
+ date: 2014-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -39,7 +39,63 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.2'
41
41
  - !ruby/object:Gem::Dependency
42
- name: json
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rack-test
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: webmock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec-mocks
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: json_pure
43
99
  requirement: !ruby/object:Gem::Requirement
44
100
  requirements:
45
101
  - - ~>
@@ -86,10 +142,33 @@ description: |-
86
142
  with rundeck
87
143
  email:
88
144
  - lbennett@opentable.com
89
- executables: []
145
+ executables:
146
+ - puppetdb_rundeck
90
147
  extensions: []
91
148
  extra_rdoc_files: []
92
- files: []
149
+ files:
150
+ - .gitignore
151
+ - .rspec
152
+ - CHANGELOG
153
+ - Gemfile
154
+ - LICENSE.txt
155
+ - README.md
156
+ - Rakefile
157
+ - bin/puppetdb_rundeck
158
+ - lib/app.rb
159
+ - lib/helpers/process.rb
160
+ - lib/helpers/puppetdb.rb
161
+ - lib/model/endpoint.rb
162
+ - lib/model/xml.rb
163
+ - lib/model/yaml.rb
164
+ - lib/views/api.haml
165
+ - puppetdb_rundeck.gemspec
166
+ - spec/app_spec.rb
167
+ - spec/helpers/puppetdb_spec.rb
168
+ - spec/model/xml_spec.rb
169
+ - spec/model/yaml_spec.rb
170
+ - spec/spec_helper.rb
171
+ - spec/support/fake_puppetdb.rb
93
172
  homepage: https://github.com/opentable/puppetdb_rundeck
94
173
  licenses:
95
174
  - MIT
@@ -110,8 +189,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
189
  version: '0'
111
190
  requirements: []
112
191
  rubyforge_project:
113
- rubygems_version: 2.0.3
192
+ rubygems_version: 2.2.2
114
193
  signing_key:
115
194
  specification_version: 4
116
195
  summary: A sinatra based application to provide integration between PuppetDB and Rundeck
117
- test_files: []
196
+ test_files:
197
+ - spec/app_spec.rb
198
+ - spec/helpers/puppetdb_spec.rb
199
+ - spec/model/xml_spec.rb
200
+ - spec/model/yaml_spec.rb
201
+ - spec/spec_helper.rb
202
+ - spec/support/fake_puppetdb.rb