puppetdb_rundeck 0.2.3 → 0.3.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/CHANGELOG +6 -1
- data/lib/app.rb +23 -9
- data/lib/helpers/process.rb +6 -24
- data/lib/helpers/puppetdb.rb +25 -13
- data/lib/model/endpoint.rb +120 -3
- data/lib/views/api.haml +8 -2
- data/lib/views/cache.haml +12 -0
- data/puppetdb_rundeck.gemspec +4 -2
- data/spec/app_spec.rb +2 -2
- data/spec/model/xml_spec.rb +9 -6
- data/spec/model/yaml_spec.rb +8 -5
- metadata +79 -23
- checksums.yaml +0 -7
- data/lib/model/xml.rb +0 -37
- data/lib/model/yaml.rb +0 -31
data/CHANGELOG
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
2014-07-01 Release 0.3.0
|
2
|
+
- improved performance for large instances of puppetdb
|
3
|
+
- added 30 min cache with api for clearing cache
|
4
|
+
- added json output
|
5
|
+
|
1
6
|
2014-04-29 Release 0.2.3
|
2
7
|
- adding sinartra binding
|
3
8
|
|
@@ -11,4 +16,4 @@
|
|
11
16
|
- replaced json dependency with json_pure
|
12
17
|
|
13
18
|
2014-04-25 Release 0.1.0
|
14
|
-
- initial version
|
19
|
+
- initial version
|
data/lib/app.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'yaml'
|
3
|
+
require 'json'
|
3
4
|
require 'sinatra'
|
4
5
|
require 'haml'
|
5
6
|
|
@@ -7,10 +8,14 @@ require File.expand_path('../helpers/puppetdb', __FILE__)
|
|
7
8
|
require File.expand_path('../helpers/process', __FILE__)
|
8
9
|
|
9
10
|
require File.expand_path('../model/endpoint', __FILE__)
|
10
|
-
require File.expand_path('../model/xml', __FILE__)
|
11
|
-
require File.expand_path('../model/yaml', __FILE__)
|
12
11
|
|
13
12
|
class PuppetDBRunDeck < Sinatra::Base
|
13
|
+
def initialize(app = nil, params = {})
|
14
|
+
super(app)
|
15
|
+
puppetdb_helper = Helpers::PuppetDB.new(settings.puppetdb_host, settings.puppetdb_port)
|
16
|
+
@endpoint = EndPoint.new(puppetdb_helper)
|
17
|
+
end
|
18
|
+
|
14
19
|
get '/' do
|
15
20
|
redirect to('/api')
|
16
21
|
end
|
@@ -21,16 +26,25 @@ class PuppetDBRunDeck < Sinatra::Base
|
|
21
26
|
|
22
27
|
get '/api/yaml' do
|
23
28
|
content_type 'text/yaml'
|
24
|
-
|
25
|
-
output = YAMLOutput.new(puppetdb_helper)
|
26
|
-
Helpers::Process.new().endpoint_processor(output)
|
29
|
+
content = @endpoint.to_yaml()
|
27
30
|
end
|
28
31
|
|
29
32
|
get '/api/xml' do
|
30
33
|
content_type 'application/xml'
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
+
content = @endpoint.to_xml()
|
35
|
+
end
|
36
|
+
|
37
|
+
get '/api/json' do
|
38
|
+
content_type 'application/json'
|
39
|
+
content = @endpoint.to_json()
|
40
|
+
end
|
41
|
+
|
42
|
+
get '/cache' do
|
43
|
+
haml :cache
|
44
|
+
end
|
45
|
+
|
46
|
+
get '/cache/clear' do
|
47
|
+
@endpoint.clear_cache
|
34
48
|
end
|
35
49
|
end
|
36
50
|
|
@@ -38,4 +52,4 @@ end
|
|
38
52
|
if (!defined? settings.puppetdb_host) and (!defined? settings.puppetdb_port)
|
39
53
|
PuppetDBRunDeck.set :puppetdb_host, 'localhost'
|
40
54
|
PuppetDBRunDeck.set :puppetdb_port, '8080'
|
41
|
-
end
|
55
|
+
end
|
data/lib/helpers/process.rb
CHANGED
@@ -16,7 +16,12 @@ class Helpers::Process
|
|
16
16
|
end
|
17
17
|
|
18
18
|
if collection.instance_of?(Hash)
|
19
|
+
if collection[host].nil?
|
20
|
+
collection[host] = {}
|
21
|
+
end
|
22
|
+
|
19
23
|
collection[host][fact_name] = fact_value
|
24
|
+
|
20
25
|
elsif collection.instance_of?(Array)
|
21
26
|
collection << "#{fact_name}=\"#{fact_value}\" "
|
22
27
|
else
|
@@ -26,29 +31,6 @@ class Helpers::Process
|
|
26
31
|
return collection
|
27
32
|
end
|
28
33
|
|
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
34
|
private
|
53
35
|
def number_to_name(name)
|
54
36
|
lookup = {
|
@@ -66,4 +48,4 @@ class Helpers::Process
|
|
66
48
|
return name
|
67
49
|
end
|
68
50
|
|
69
|
-
end
|
51
|
+
end
|
data/lib/helpers/puppetdb.rb
CHANGED
@@ -12,10 +12,10 @@ module Helpers
|
|
12
12
|
|
13
13
|
def get_nodes
|
14
14
|
uri = URI.parse( "http://#{@puppetdb_host}:#{@puppetdb_port}/v3/nodes" )
|
15
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
16
15
|
request = Net::HTTP::Get.new(uri.path)
|
17
16
|
request.add_field('Accept', 'application/json')
|
18
|
-
|
17
|
+
http_client = Net::HTTP.new(uri.host, uri.port)
|
18
|
+
response = http_client.request(request)
|
19
19
|
response['Content-Type'] = 'application/yaml'
|
20
20
|
if response.code == '200'
|
21
21
|
nodes = JSON.parse(response.body)
|
@@ -26,20 +26,32 @@ module Helpers
|
|
26
26
|
return nodes
|
27
27
|
end
|
28
28
|
|
29
|
-
def get_facts
|
30
|
-
|
31
|
-
|
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)
|
29
|
+
def get_facts(node=nil)
|
30
|
+
if node
|
31
|
+
fact_endpoint = "http://#{@puppetdb_host}:#{@puppetdb_port}/v3/nodes/#{node}/facts"
|
38
32
|
else
|
39
|
-
|
33
|
+
fact_endpoint = "http://#{@puppetdb_host}:#{@puppetdb_port}/v3/facts"
|
40
34
|
end
|
41
35
|
|
42
|
-
|
36
|
+
#p "requesting facts by: #{fact_endpoint}"
|
37
|
+
|
38
|
+
uri = URI.parse(fact_endpoint)
|
39
|
+
request = Net::HTTP::Get.new(uri.path)
|
40
|
+
request.add_field('Accept', 'application/json')
|
41
|
+
http_client = Net::HTTP.new(uri.host, uri.port)
|
42
|
+
begin
|
43
|
+
response = http_client.request(request)
|
44
|
+
response['Content-Type'] = 'application/json'
|
45
|
+
if response.code == '200'
|
46
|
+
facts = JSON.parse(response.body)
|
47
|
+
else
|
48
|
+
facts = []
|
49
|
+
end
|
50
|
+
|
51
|
+
return facts
|
52
|
+
rescue Timeout::Error
|
53
|
+
|
54
|
+
end
|
43
55
|
end
|
44
56
|
|
45
57
|
end
|
data/lib/model/endpoint.rb
CHANGED
@@ -1,5 +1,122 @@
|
|
1
|
+
require File.expand_path('../../helpers/process', __FILE__)
|
2
|
+
|
1
3
|
class EndPoint
|
2
|
-
|
3
|
-
|
4
|
+
|
5
|
+
attr_accessor :cache_timeout
|
6
|
+
THREAD_COUNT = 40
|
7
|
+
|
8
|
+
def initialize(puppetdb_helper)
|
9
|
+
@db_helper = puppetdb_helper
|
10
|
+
@cache_timeout = 1800
|
4
11
|
end
|
5
|
-
|
12
|
+
|
13
|
+
def reload(type)
|
14
|
+
nodes = @db_helper.get_nodes
|
15
|
+
|
16
|
+
@rundeck_data = Hash.new
|
17
|
+
|
18
|
+
helper = Helpers::Process.new
|
19
|
+
|
20
|
+
mutex = Mutex.new
|
21
|
+
|
22
|
+
per_type_cache = "/tmp/puppetdb-resource.#{type}"
|
23
|
+
|
24
|
+
THREAD_COUNT.times.map {
|
25
|
+
Thread.new(nodes, @rundeck_data) do |nodes|
|
26
|
+
while node = mutex.synchronize { nodes.pop }
|
27
|
+
host = node['name']
|
28
|
+
facts = @db_helper.get_facts(host)
|
29
|
+
if !facts.nil?
|
30
|
+
mutex.synchronize { helper.add_facts(facts, host, @rundeck_data) }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
}.each(&:join)
|
35
|
+
|
36
|
+
data = case type
|
37
|
+
when 'json' then to_json(false)
|
38
|
+
when 'yaml' then to_yaml(false)
|
39
|
+
when 'xml' then to_xml(false)
|
40
|
+
else "unknown"
|
41
|
+
end
|
42
|
+
|
43
|
+
File.open(per_type_cache, 'w') { |file| file.write(data) }
|
44
|
+
|
45
|
+
return data
|
46
|
+
end
|
47
|
+
|
48
|
+
def to_json(parse_data=true)
|
49
|
+
parse('json') if parse_data == true
|
50
|
+
if @rundeck_data.is_a?(String)
|
51
|
+
@rundeck_data
|
52
|
+
else
|
53
|
+
@rundeck_data.to_json
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def to_yaml(parse_data=true)
|
58
|
+
parse('yaml') if parse_data == true
|
59
|
+
if @rundeck_data.is_a?(String)
|
60
|
+
@rundeck_data
|
61
|
+
else
|
62
|
+
@rundeck_data.to_yaml
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_xml(parse_data=true)
|
67
|
+
helper = Helpers::Process.new
|
68
|
+
|
69
|
+
parse('xml') if parse_data == true
|
70
|
+
if @rundeck_data.is_a?(String)
|
71
|
+
@rundeck_data
|
72
|
+
else
|
73
|
+
data = Array.new
|
74
|
+
data << "<project>\n"
|
75
|
+
@rundeck_data.keys.each {|n|
|
76
|
+
data << "<node name=\"#{n}\""
|
77
|
+
@rundeck_data[n].each {|k,v|
|
78
|
+
data << "#{k}=\"#{v}\""
|
79
|
+
}
|
80
|
+
data << "/>\n"
|
81
|
+
}
|
82
|
+
data << "</project>"
|
83
|
+
xml = data.join(" ")
|
84
|
+
|
85
|
+
@rundeck_data = xml
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
def parse(type)
|
91
|
+
per_type_cache = "/tmp/puppetdb-resource.#{type}"
|
92
|
+
|
93
|
+
if File.exist?(per_type_cache)
|
94
|
+
file = File.new(per_type_cache)
|
95
|
+
t_now = Time.at(Time.now.to_i)
|
96
|
+
t_file = Time.at(file.mtime.to_i)
|
97
|
+
|
98
|
+
if t_now < (t_file + @cache_timeout)
|
99
|
+
p "reading from cache for #{type}"
|
100
|
+
@rundeck_data = File.new(per_type_cache, 'r').read
|
101
|
+
else
|
102
|
+
p "not reading from cache for: #{type}"
|
103
|
+
reload(type)
|
104
|
+
end
|
105
|
+
else
|
106
|
+
p "not reading from cache for: #{type}"
|
107
|
+
reload(type)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def clear_cache
|
112
|
+
cache_files = ['/tmp/puppetdb-resource.xml','/tmp/puppetdb-resource.json','/tmp/puppetdb-resource.yaml']
|
113
|
+
|
114
|
+
cache_files.each do |file|
|
115
|
+
if File.exist?(file)
|
116
|
+
FileUtils.rm file
|
117
|
+
end
|
118
|
+
end
|
119
|
+
"Cached cleared"
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
data/lib/views/api.haml
CHANGED
@@ -7,9 +7,15 @@
|
|
7
7
|
%p
|
8
8
|
The puppetdb-rundeck application allows Rundeck to make use of the node and fact information stored in PuppetDB.
|
9
9
|
%p
|
10
|
-
|
10
|
+
Three API endpoints are provided which you can point Rundeck to:
|
11
11
|
%ul
|
12
12
|
%li
|
13
13
|
%a(href="/api/xml") XML
|
14
14
|
%li
|
15
|
-
%a(href="/api/yaml") YAML
|
15
|
+
%a(href="/api/yaml") YAML
|
16
|
+
%li
|
17
|
+
%a(href="/api/json") JSON
|
18
|
+
%p
|
19
|
+
%p
|
20
|
+
To set the cache settings for this API, see
|
21
|
+
%a(href="/cache") here
|
data/puppetdb_rundeck.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
5
|
spec.name = 'puppetdb_rundeck'
|
6
|
-
spec.version = '0.
|
6
|
+
spec.version = '0.3.0'
|
7
7
|
spec.authors = ['liamjbennett']
|
8
8
|
spec.email = ['lbennett@opentable.com']
|
9
9
|
spec.summary = %q{A sinatra based application to provide integration between PuppetDB and Rundeck}
|
@@ -18,15 +18,17 @@ with rundeck}
|
|
18
18
|
spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency 'bundler', '~> 1.
|
21
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
22
22
|
spec.add_development_dependency 'rake', '~> 10.2'
|
23
23
|
spec.add_development_dependency 'rspec'
|
24
24
|
spec.add_development_dependency 'rack-test'
|
25
25
|
spec.add_development_dependency 'webmock'
|
26
26
|
spec.add_development_dependency 'rspec-mocks'
|
27
|
+
spec.add_development_dependency 'builder'
|
27
28
|
|
28
29
|
spec.add_runtime_dependency 'json_pure', '~> 1.8'
|
29
30
|
spec.add_runtime_dependency 'tilt', '~> 1.3'
|
30
31
|
spec.add_runtime_dependency 'sinatra', '~> 1.4'
|
31
32
|
spec.add_runtime_dependency 'haml', '~> 4.0'
|
33
|
+
spec.add_runtime_dependency 'thread', '~> 0.1'
|
32
34
|
end
|
data/spec/app_spec.rb
CHANGED
@@ -12,7 +12,7 @@ describe 'puppetdb_rundeck Application' do
|
|
12
12
|
it 'should allow access to the main api page' do
|
13
13
|
get '/api'
|
14
14
|
last_response.should be_ok
|
15
|
-
last_response.body.should include('
|
15
|
+
last_response.body.should include('Three API endpoints are provided')
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'should allow access to the xml endpoint' do
|
@@ -26,4 +26,4 @@ describe 'puppetdb_rundeck Application' do
|
|
26
26
|
get '/api/yaml'
|
27
27
|
last_response.should be_ok
|
28
28
|
end
|
29
|
-
end
|
29
|
+
end
|
data/spec/model/xml_spec.rb
CHANGED
@@ -1,18 +1,21 @@
|
|
1
1
|
require File.expand_path '../../spec_helper.rb', __FILE__
|
2
2
|
require File.expand_path '../../../lib/helpers/puppetdb', __FILE__
|
3
|
-
require File.expand_path '../../../lib/model/xml', __FILE__
|
4
3
|
|
5
|
-
describe
|
4
|
+
describe EndPoint, '#to_xml' do
|
6
5
|
|
7
6
|
it 'should return valid xml containing the node name' do
|
8
7
|
helper = Helpers::PuppetDB.new('fubar', '80')
|
9
8
|
allow(helper).to receive(:get_nodes).and_return([{'name' => 'test.internal'}])
|
10
9
|
allow(helper).to receive(:get_facts).and_return([{'certname' => 'test.internal', 'name' => 'osfamily', 'value' => 'Debian'}])
|
11
10
|
|
12
|
-
|
11
|
+
if File.exist?('/tmp/puppetdb-resource.xml')
|
12
|
+
FileUtils.rm '/tmp/puppetdb-resource.xml'
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
+
endpoint = EndPoint.new(helper)
|
15
16
|
|
16
|
-
|
17
|
+
expectation = "<project>\n <node name=\"test.internal\" osfamily=\"Debian\" />\n </project>"
|
18
|
+
|
19
|
+
endpoint.to_xml().should == expectation
|
17
20
|
end
|
18
|
-
end
|
21
|
+
end
|
data/spec/model/yaml_spec.rb
CHANGED
@@ -1,18 +1,21 @@
|
|
1
1
|
require File.expand_path '../../spec_helper.rb', __FILE__
|
2
2
|
require File.expand_path '../../../lib/helpers/puppetdb', __FILE__
|
3
|
-
require File.expand_path '../../../lib/model/yaml', __FILE__
|
4
3
|
|
5
|
-
describe
|
4
|
+
describe EndPoint, '#to_yaml' do
|
6
5
|
|
7
6
|
it 'should return valid yaml containing the node name' do
|
8
7
|
helper = Helpers::PuppetDB.new('fubar', '80')
|
9
8
|
allow(helper).to receive(:get_nodes).and_return([{'name' => 'test.internal'}])
|
10
9
|
allow(helper).to receive(:get_facts).and_return([{'certname' => 'test.internal', 'name' => 'osfamily', 'value' => 'Debian'}])
|
11
10
|
|
12
|
-
|
11
|
+
if File.exist?('/tmp/puppetdb-resource.yaml')
|
12
|
+
FileUtils.rm '/tmp/puppetdb-resource.yaml'
|
13
|
+
end
|
14
|
+
|
15
|
+
endpoint = EndPoint.new(helper)
|
13
16
|
|
14
17
|
expectation = "---\ntest.internal:\n osfamily: Debian\n"
|
15
18
|
|
16
|
-
|
19
|
+
endpoint.to_yaml().should == expectation
|
17
20
|
end
|
18
|
-
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,32 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppetdb_rundeck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- liamjbennett
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-
|
12
|
+
date: 2014-07-01 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
21
|
+
version: '1.6'
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
29
|
+
version: '1.6'
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rake
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
35
|
- - ~>
|
32
36
|
- !ruby/object:Gem::Version
|
@@ -34,6 +38,7 @@ dependencies:
|
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - ~>
|
39
44
|
- !ruby/object:Gem::Version
|
@@ -41,62 +46,87 @@ dependencies:
|
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: rspec
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- - '>='
|
51
|
+
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '0'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- - '>='
|
59
|
+
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: rack-test
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- - '>='
|
67
|
+
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: '0'
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
|
-
- - '>='
|
75
|
+
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
68
77
|
version: '0'
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: webmock
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
|
-
- - '>='
|
83
|
+
- - ! '>='
|
74
84
|
- !ruby/object:Gem::Version
|
75
85
|
version: '0'
|
76
86
|
type: :development
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
|
-
- - '>='
|
91
|
+
- - ! '>='
|
81
92
|
- !ruby/object:Gem::Version
|
82
93
|
version: '0'
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
95
|
name: rspec-mocks
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
|
-
- - '>='
|
99
|
+
- - ! '>='
|
88
100
|
- !ruby/object:Gem::Version
|
89
101
|
version: '0'
|
90
102
|
type: :development
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
|
-
- - '>='
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: builder
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
95
124
|
- !ruby/object:Gem::Version
|
96
125
|
version: '0'
|
97
126
|
- !ruby/object:Gem::Dependency
|
98
127
|
name: json_pure
|
99
128
|
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
100
130
|
requirements:
|
101
131
|
- - ~>
|
102
132
|
- !ruby/object:Gem::Version
|
@@ -104,6 +134,7 @@ dependencies:
|
|
104
134
|
type: :runtime
|
105
135
|
prerelease: false
|
106
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
107
138
|
requirements:
|
108
139
|
- - ~>
|
109
140
|
- !ruby/object:Gem::Version
|
@@ -111,6 +142,7 @@ dependencies:
|
|
111
142
|
- !ruby/object:Gem::Dependency
|
112
143
|
name: tilt
|
113
144
|
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
114
146
|
requirements:
|
115
147
|
- - ~>
|
116
148
|
- !ruby/object:Gem::Version
|
@@ -118,6 +150,7 @@ dependencies:
|
|
118
150
|
type: :runtime
|
119
151
|
prerelease: false
|
120
152
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
121
154
|
requirements:
|
122
155
|
- - ~>
|
123
156
|
- !ruby/object:Gem::Version
|
@@ -125,6 +158,7 @@ dependencies:
|
|
125
158
|
- !ruby/object:Gem::Dependency
|
126
159
|
name: sinatra
|
127
160
|
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
128
162
|
requirements:
|
129
163
|
- - ~>
|
130
164
|
- !ruby/object:Gem::Version
|
@@ -132,6 +166,7 @@ dependencies:
|
|
132
166
|
type: :runtime
|
133
167
|
prerelease: false
|
134
168
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
135
170
|
requirements:
|
136
171
|
- - ~>
|
137
172
|
- !ruby/object:Gem::Version
|
@@ -139,6 +174,7 @@ dependencies:
|
|
139
174
|
- !ruby/object:Gem::Dependency
|
140
175
|
name: haml
|
141
176
|
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
142
178
|
requirements:
|
143
179
|
- - ~>
|
144
180
|
- !ruby/object:Gem::Version
|
@@ -146,14 +182,34 @@ dependencies:
|
|
146
182
|
type: :runtime
|
147
183
|
prerelease: false
|
148
184
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
149
186
|
requirements:
|
150
187
|
- - ~>
|
151
188
|
- !ruby/object:Gem::Version
|
152
189
|
version: '4.0'
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: thread
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ~>
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0.1'
|
198
|
+
type: :runtime
|
199
|
+
prerelease: false
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ~>
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0.1'
|
206
|
+
description: ! 'puppetdb_rundeck is a sinatra based application to provide integration
|
207
|
+
between PuppetDB and Rundeck.
|
208
|
+
|
209
|
+
It provides an api in either xml or yaml that allows the node and fact data with
|
210
|
+
puppetdb to use used as a resource
|
211
|
+
|
212
|
+
with rundeck'
|
157
213
|
email:
|
158
214
|
- lbennett@opentable.com
|
159
215
|
executables:
|
@@ -174,9 +230,8 @@ files:
|
|
174
230
|
- lib/helpers/process.rb
|
175
231
|
- lib/helpers/puppetdb.rb
|
176
232
|
- lib/model/endpoint.rb
|
177
|
-
- lib/model/xml.rb
|
178
|
-
- lib/model/yaml.rb
|
179
233
|
- lib/views/api.haml
|
234
|
+
- lib/views/cache.haml
|
180
235
|
- puppetdb_rundeck.gemspec
|
181
236
|
- spec/app_spec.rb
|
182
237
|
- spec/helpers/puppetdb_spec.rb
|
@@ -187,26 +242,27 @@ files:
|
|
187
242
|
homepage: https://github.com/opentable/puppetdb_rundeck
|
188
243
|
licenses:
|
189
244
|
- MIT
|
190
|
-
metadata: {}
|
191
245
|
post_install_message:
|
192
246
|
rdoc_options: []
|
193
247
|
require_paths:
|
194
248
|
- lib
|
195
249
|
required_ruby_version: !ruby/object:Gem::Requirement
|
250
|
+
none: false
|
196
251
|
requirements:
|
197
|
-
- - '>='
|
252
|
+
- - ! '>='
|
198
253
|
- !ruby/object:Gem::Version
|
199
254
|
version: '0'
|
200
255
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
256
|
+
none: false
|
201
257
|
requirements:
|
202
|
-
- - '>='
|
258
|
+
- - ! '>='
|
203
259
|
- !ruby/object:Gem::Version
|
204
260
|
version: '0'
|
205
261
|
requirements: []
|
206
262
|
rubyforge_project:
|
207
|
-
rubygems_version:
|
263
|
+
rubygems_version: 1.8.23.2
|
208
264
|
signing_key:
|
209
|
-
specification_version:
|
265
|
+
specification_version: 3
|
210
266
|
summary: A sinatra based application to provide integration between PuppetDB and Rundeck
|
211
267
|
test_files:
|
212
268
|
- spec/app_spec.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: e9655db5de0d26353aea8cb5ca99f2d052b5e2b2
|
4
|
-
data.tar.gz: 5323191cb82df62b8b05e1158f0a0c742fead502
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 05e07051dc72525ba7d1b6552f87562f58fd4ded6cac8cb279e21b0ecd0597eff4b02eda493a1101b44fd4dd5afc23147da0c11b98512a88a75d7f7390ed0de4
|
7
|
-
data.tar.gz: aba7c2d4107b2d1277568617f5f02dc2e7a33e04cb5f47433af814fa2f37254ad1086825afc373fcd5b31c3047fa3cdea42a25efcf178eece8fdcbf5cd8907b6
|
data/lib/model/xml.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
require File.expand_path('../../helpers/process', __FILE__)
|
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
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require File.expand_path('../../helpers/process', __FILE__)
|
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
|