foreman_host_rundeck 0.0.2 → 0.0.3
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.
- checksums.yaml +8 -8
- data/README.md +45 -3
- data/app/controllers/concerns/foreman_host_rundeck/hosts_controller_extensions.rb +3 -3
- data/app/services/rundeck_formatter.rb +30 -10
- data/lib/foreman_host_rundeck/engine.rb +0 -2
- data/lib/foreman_host_rundeck/version.rb +1 -1
- data/test/functional/hosts_controller_test.rb +18 -3
- data/test/unit/foreman_host_rundeck_test.rb +41 -14
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ODU3YjRlMmExZTI3MjQ0NWVkY2ViZTRjYzk1ZjM0ZTY0YWRjOThlYQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZTNhM2Y3MzQyMjZlNmViODcyYjI3ODQwNjY0MjY2MzY2NDRkODJhYw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NmZjYjJhYTUyODRlMzIzODc4Nzk5MWJiMDBlOWY4N2Y5YzdkZGQ0Y2JiZjA3
|
10
|
+
N2ExODA3NGJiMjQzNTI2MWY3NjY0NWNkMDMzNmUyOTVhZjY3YjRlM2UzNzQw
|
11
|
+
NGZlYjEzYmUxNDBiMDRkNDAzMjM2ZjE1NjM2YWY1NjEyOTVlODc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
N2VhOGNjZGIzOTQyMTUwODhmZDMxZDBlYmY0YTZkZTg1ODM0ZGZhYTFhN2Zi
|
14
|
+
YWNmNWQ2ZTZmMDRmNDk2NjBiNWNkMzNiZTA2NGNmNWU5N2Y5OTA3OGM1NDM3
|
15
|
+
MTliOWZmNjUyNGRhZTI3MTNiMTYyMmM0ODZkYjg4MmZkZTU2NTA=
|
data/README.md
CHANGED
@@ -1,11 +1,53 @@
|
|
1
|
-
#
|
1
|
+
# Foreman Host Rundeck
|
2
2
|
|
3
3
|
Creates a yaml representation of rundeck on hosts
|
4
4
|
|
5
|
+
* Website: [TheForeman.org](http://theforeman.org)
|
6
|
+
* ServerFault tag: [Foreman](http://serverfault.com/questions/tagged/foreman)
|
7
|
+
* Issues: [foreman_rundeck Redmine](http://projects.theforeman.org/projects/rundeck/issues)
|
8
|
+
* Wiki: [Foreman wiki](http://projects.theforeman.org/projects/foreman/wiki/About)
|
9
|
+
* Community and support: #theforeman for general support, #theforeman-dev for development chat in [Freenode](irc.freenode.net)
|
10
|
+
* Mailing lists:
|
11
|
+
* [foreman-users](https://groups.google.com/forum/?fromgroups#!forum/foreman-users)
|
12
|
+
* [foreman-dev](https://groups.google.com/forum/?fromgroups#!forum/foreman-dev)
|
13
|
+
|
5
14
|
## Installation
|
6
15
|
|
7
|
-
|
8
|
-
|
16
|
+
Please see the Foreman manual for appropriate instructions:
|
17
|
+
|
18
|
+
* [Foreman: How to Install a Plugin](http://theforeman.org/plugins/)
|
19
|
+
|
20
|
+
### Red Hat, CentOS, Fedora, Scientific Linux (rpm)
|
21
|
+
|
22
|
+
Set up the repo as explained in the link above, then run (on 1.10+):
|
23
|
+
|
24
|
+
# yum install tfm-rubygem-foreman_host_rundeck
|
25
|
+
|
26
|
+
On 1.9:
|
27
|
+
|
28
|
+
# yum install ruby193-rubygem-foreman_host_rundeck
|
29
|
+
|
30
|
+
### Debian, Ubuntu (deb)
|
31
|
+
|
32
|
+
Set up the repo as explained in the link above, then run:
|
33
|
+
|
34
|
+
# apt-get install ruby-foreman-host-rundeck
|
35
|
+
|
36
|
+
### Bundle (gem)
|
37
|
+
|
38
|
+
Add the following to bundler.d/Gemfile.local.rb in your Foreman installation directory (/usr/share/foreman by default)
|
39
|
+
|
40
|
+
$ gem 'foreman_host_rundeck'
|
41
|
+
|
42
|
+
Then run `bundle install` and `foreman-rake db:migrate` from the same directory
|
43
|
+
|
44
|
+
--------------
|
45
|
+
|
46
|
+
To verify that the installation was successful, go to Foreman, top bar **Administer > About** and check 'foreman_host_rundeck' shows up in the **System Status** menu under the Plugins tab.
|
47
|
+
|
48
|
+
## Usage
|
49
|
+
|
50
|
+
[Our wiki covers the basics of Rundeck integration](http://projects.theforeman.org/projects/foreman/wiki/Rundeck_Integration)
|
9
51
|
|
10
52
|
## Contributing
|
11
53
|
|
@@ -7,20 +7,20 @@ module ForemanHostRundeck
|
|
7
7
|
alias_method_chain :show, :rundeck
|
8
8
|
end
|
9
9
|
|
10
|
-
def index_with_rundeck
|
10
|
+
def index_with_rundeck(title = nil)
|
11
11
|
if params[:format] == 'yaml'
|
12
12
|
result = {}
|
13
13
|
hosts = resource_base.search_for(params[:search], :order => params[:order]).includes(included_associations)
|
14
14
|
hosts.each { |h| result.update(RundeckFormatter.new(h).output) }
|
15
15
|
render :text => result.to_yaml
|
16
16
|
else
|
17
|
-
index_without_rundeck
|
17
|
+
index_without_rundeck(title)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
def show_with_rundeck
|
22
22
|
if params[:format] == 'yaml'
|
23
|
-
render :text => RundeckFormatter.new(@host).output.to_yaml
|
23
|
+
render :text => RundeckFormatter.new(@host, params[:add_enc_output]).output.to_yaml
|
24
24
|
else
|
25
25
|
show_without_rundeck
|
26
26
|
end
|
@@ -1,27 +1,47 @@
|
|
1
1
|
class RundeckFormatter
|
2
2
|
attr_reader :host
|
3
3
|
|
4
|
-
delegate :comment, :name, :arch, :environment, :os, :facts_hash, :puppetclasses_names, :params,
|
4
|
+
delegate :comment, :name, :arch, :environment, :os, :facts_hash, :puppetclasses_names, :params,
|
5
|
+
:hostgroup, :organization, :location, :info, :to => :host
|
5
6
|
delegate :logger, :to => :Rails
|
6
7
|
|
7
|
-
def initialize(host)
|
8
|
+
def initialize(host, include_enc_output = false)
|
8
9
|
@host = host
|
10
|
+
@include_enc_output = include_enc_output
|
9
11
|
end
|
10
12
|
|
11
13
|
def output
|
12
14
|
rdecktags = puppetclasses_names.map { |k| "class=#{k}" }
|
13
15
|
unless params['rundeckfacts'].empty?
|
14
|
-
rdecktags += params
|
16
|
+
rdecktags += format_tags(params,'rundeckfacts', facts_hash)
|
15
17
|
end
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
unless params['rundeckglobalparams'].empty?
|
20
|
+
rdecktags += format_tags(params, 'rundeckglobalparams', params)
|
21
|
+
end
|
22
|
+
|
23
|
+
rundeck_hash = { 'description' => comment, 'hostname' => name, 'nodename' => name,
|
24
|
+
'osArch' => arch.name, 'osFamily' => os.family, 'osName' => os.name,
|
25
|
+
'osVersion' => os.release, 'tags' => rdecktags,
|
26
|
+
'username' => params['rundeckuser'] || 'root'}
|
27
|
+
rundeck_hash['Hostgroup'] = hostgroup.name unless hostgroup.nil?
|
28
|
+
rundeck_hash['Environment'] = environment.name unless environment.nil?
|
29
|
+
rundeck_hash['Enc_output'] = info if @include_enc_output
|
30
|
+
|
31
|
+
if SETTINGS[:locations_enabled]
|
32
|
+
rundeck_hash['Location'] = location.name unless location.nil?
|
33
|
+
end
|
34
|
+
if SETTINGS[:organizations_enabled]
|
35
|
+
rundeck_hash['Organization'] = organization.name unless organization.nil?
|
36
|
+
end
|
37
|
+
|
38
|
+
{ name => rundeck_hash }
|
23
39
|
rescue => e
|
24
40
|
logger.warn "Failed to fetch rundeck info for #{to_s}: #{e}"
|
25
41
|
{}
|
42
|
+
end
|
43
|
+
|
44
|
+
def format_tags params, tag, tag_location
|
45
|
+
params[tag].gsub(/\s+/, '').split(',').map { |rdf| "#{rdf}=" + (tag_location[rdf] || 'undefined') }
|
26
46
|
end
|
27
|
-
end
|
47
|
+
end
|
@@ -3,15 +3,17 @@ require 'test_plugin_helper'
|
|
3
3
|
class HostsControllerTest < ActionController::TestCase
|
4
4
|
setup do
|
5
5
|
User.current = User.find_by_login "admin"
|
6
|
+
@host = FactoryGirl.create(:host, :operatingsystem => FactoryGirl.create(:operatingsystem),
|
7
|
+
:architecture => FactoryGirl.create(:architecture),
|
8
|
+
:puppetclasses => [FactoryGirl.create(:puppetclass)])
|
6
9
|
end
|
7
10
|
|
8
|
-
|
9
11
|
test "index returns YAML output for rundeck" do
|
10
12
|
get :index, {:format => 'yaml'}, set_session_user
|
11
13
|
hosts = YAML.load(@response.body)
|
12
14
|
assert_not_empty hosts
|
13
15
|
host = Host.first
|
14
|
-
unless
|
16
|
+
unless host.nil? || host.name.nil? || hosts.nil? || hosts[host.name].nil?
|
15
17
|
assert_equal host.os.name, hosts[host.name]["osName"] # rundeck-specific field
|
16
18
|
end
|
17
19
|
end
|
@@ -20,10 +22,23 @@ class HostsControllerTest < ActionController::TestCase
|
|
20
22
|
host = Host.first
|
21
23
|
get :show, {:id => host, :format => 'yaml'}, set_session_user
|
22
24
|
yaml = YAML.load(@response.body)
|
23
|
-
unless
|
25
|
+
unless host.nil? || host.name.nil? || host.os.nil? || yaml[host.name].nil?
|
24
26
|
assert_kind_of Hash, yaml[host.name]
|
25
27
|
assert_equal host.name, yaml[host.name]["hostname"]
|
26
28
|
assert_equal host.os.name, yaml[host.name]["osName"] # rundeck-specific field
|
27
29
|
end
|
28
30
|
end
|
31
|
+
|
32
|
+
test "show with add_enc_output shows enc output in YAML" do
|
33
|
+
host = Host.first
|
34
|
+
get :show, {:id => host, :format => 'yaml', :add_enc_output => true}, set_session_user
|
35
|
+
yaml = YAML.load(@response.body)
|
36
|
+
unless host.nil? || host.name.nil? || host.os.nil? || yaml[host.name].nil?
|
37
|
+
assert_kind_of Hash, yaml[host.name]
|
38
|
+
assert_equal host.name, yaml[host.name]["hostname"]
|
39
|
+
assert_equal host.os.name, yaml[host.name]["osName"] # rundeck-specific field
|
40
|
+
assert_kind_of Hash, yaml[host.name]["Enc_output"]
|
41
|
+
assert_present yaml[host.name]["Enc_output"]
|
42
|
+
end
|
43
|
+
end
|
29
44
|
end
|
@@ -3,28 +3,55 @@ require 'test_plugin_helper'
|
|
3
3
|
class ForemanHostRundeckTest < ActiveSupport::TestCase
|
4
4
|
setup do
|
5
5
|
User.current = User.find_by_login "admin"
|
6
|
+
@host = FactoryGirl.create(:host, :operatingsystem => FactoryGirl.create(:operatingsystem),
|
7
|
+
:architecture => FactoryGirl.create(:architecture))
|
6
8
|
end
|
7
9
|
|
8
10
|
test "#rundeck returns hash" do
|
9
|
-
|
10
|
-
rundeck = RundeckFormatter.new(h).output
|
11
|
+
rundeck = RundeckFormatter.new(@host).output
|
11
12
|
assert_kind_of Hash, rundeck
|
12
|
-
assert_equal [
|
13
|
-
assert_kind_of Hash, rundeck[
|
14
|
-
assert_equal
|
15
|
-
assert_equal
|
13
|
+
assert_equal [@host.name], rundeck.keys
|
14
|
+
assert_kind_of Hash, rundeck[@host.name]
|
15
|
+
assert_equal @host.hostname, rundeck[@host.name]['hostname']
|
16
|
+
assert_equal @host.puppetclasses, rundeck[@host.name]['tags']
|
16
17
|
end
|
17
18
|
|
18
19
|
test "#rundeck returns extra facts as tags" do
|
19
|
-
host =
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
rundeck
|
20
|
+
@host.puppetclasses = [FactoryGirl.create(:puppetclass, :environments => [@host.environment])]
|
21
|
+
@host.params['rundeckfacts'] = "kernelversion, ipaddress\n"
|
22
|
+
@host.save!
|
23
|
+
rundeck = RundeckFormatter.new(@host).output
|
24
|
+
assert rundeck[@host.name]['tags'].include?("class=#{@host.puppetclasses.first.name}"), 'puppet class missing'
|
25
|
+
assert rundeck[@host.name]['tags'].include?('kernelversion=undefined'), 'kernelversion fact missing'
|
26
|
+
assert rundeck[@host.name]['tags'].include?('ipaddress=undefined'), 'ipaddress fact missing'
|
27
|
+
end
|
28
|
+
|
29
|
+
test "#rundeck returns global parameters with values as tags" do
|
30
|
+
@host.puppetclasses = [FactoryGirl.create(:puppetclass, :environments => [@host.environment])]
|
31
|
+
@host.params['rundeckfacts'] = "kernelversion, ipaddress\n"
|
32
|
+
@host.params['rundeckglobalparams'] = "stage\n"
|
33
|
+
@host.params['stage'] = "prod"
|
34
|
+
@host.save!
|
35
|
+
rundeck = RundeckFormatter.new(@host).output
|
36
|
+
assert rundeck[@host.name]['tags'].include?('stage=prod'), 'stage parameter missing'
|
37
|
+
end
|
24
38
|
|
25
|
-
|
26
|
-
|
27
|
-
|
39
|
+
test "#rundeck returns undefined global parameters as tags" do
|
40
|
+
@host.puppetclasses = [FactoryGirl.create(:puppetclass, :environments => [@host.environment])]
|
41
|
+
@host.params['rundeckfacts'] = "kernelversion, ipaddress\n"
|
42
|
+
@host.params['rundeckglobalparams'] = "someparam, stage\n"
|
43
|
+
@host.save!
|
44
|
+
rundeck = RundeckFormatter.new(@host).output
|
45
|
+
assert rundeck[@host.name]['tags'].include?('someparam=undefined'), 'someparam parameter missing'
|
46
|
+
assert rundeck[@host.name]['tags'].include?('stage=undefined'), 'stage parameter missing'
|
28
47
|
end
|
29
48
|
|
49
|
+
test "#rundeck does not returns global parameters that are not in params['rundeckglobalparams']" do
|
50
|
+
@host.puppetclasses = [FactoryGirl.create(:puppetclass, :environments => [@host.environment])]
|
51
|
+
@host.params['rundeckfacts'] = "kernelversion, ipaddress\n"
|
52
|
+
@host.params['rundeckglobalparams'] = "someparam\n"
|
53
|
+
@host.save!
|
54
|
+
rundeck = RundeckFormatter.new(@host).output
|
55
|
+
refute rundeck[@host.name]['tags'].include?('stage=undefined')
|
56
|
+
end
|
30
57
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_host_rundeck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ori Rabin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-12-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Plugin to create rundeck output for hosts.
|
14
14
|
email:
|
@@ -49,12 +49,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
49
49
|
version: '0'
|
50
50
|
requirements: []
|
51
51
|
rubyforge_project:
|
52
|
-
rubygems_version: 2.
|
52
|
+
rubygems_version: 2.2.2
|
53
53
|
signing_key:
|
54
54
|
specification_version: 4
|
55
55
|
summary: Plugin to create rundeck output for hosts.
|
56
56
|
test_files:
|
57
|
-
- test/unit/foreman_host_rundeck_test.rb
|
58
|
-
- test/functional/hosts_controller_test.rb
|
59
57
|
- test/test_plugin_helper.rb
|
58
|
+
- test/unit/foreman_host_rundeck_test.rb
|
60
59
|
- test/factories/foreman_host_rundeck_factories.rb
|
60
|
+
- test/functional/hosts_controller_test.rb
|