foreman_discovery 1.2.0 → 1.3.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/README.md +8 -1
- data/app/controllers/discovers_controller.rb +26 -2
- data/app/helpers/discovers_helper.rb +8 -8
- data/app/models/host/discovered.rb +7 -7
- data/app/views/discovers/_discovers_list.html.erb +27 -21
- data/app/views/discovers/_selected_hosts.html.erb +1 -1
- data/app/views/discovers/multiple_destroy.html.erb +1 -1
- data/app/views/discovers/select_multiple_location.html.erb +2 -2
- data/app/views/discovers/select_multiple_organization.html.erb +2 -2
- data/extra/build_iso.sh +12 -2
- data/extra/ovirt-node-build/Vagrantfile +55 -0
- data/extra/ovirt-node-build/build_image.sh +96 -0
- data/extra/ovirt-node-plugin-foreman/configure.ac +1 -1
- data/extra/ovirt-node-plugin-foreman/src/discover-host.rb.in +70 -52
- data/extra/wait_for_network.sh +23 -0
- data/lib/foreman_discovery/engine.rb +5 -5
- data/lib/foreman_discovery/version.rb +1 -1
- data/locale/{discovery.pot → foreman_discovery.pot} +8 -2
- metadata +55 -55
- data/locale/en_GB/LC_MESSAGES/discovery.mo +0 -0
- data/locale/es/LC_MESSAGES/discovery.mo +0 -0
- data/locale/fr/LC_MESSAGES/discovery.mo +0 -0
- data/locale/sv_SE/LC_MESSAGES/discovery.mo +0 -0
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
Mzc5NWQ4ZmIyY2ViOWFjNjg1YTViODBhNjI4NTk1YmVkOTdmOGRlMw==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 24eedabca60396493d62ff3dfa144f4da8481034
|
4
|
+
data.tar.gz: 066958ace4619f3a24f5570c4f976b9b2219eb46
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NDA2Y2RmMzE2ZDdmY2NhZDE5ZDYzNGYxNjg2MDE1YjNmMGRhNjRiMThiZDVk
|
11
|
-
MDFhNjBkNzExYTdmMDg3OWI1OGI4MjRiNWFmY2NlNWMwMWJkY2Q=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NDA5N2EzMjNmNDk0MTE5MTFiYzA3NTM2YmNjNjViZmRhNzUzZDUyNGVjNGFj
|
14
|
-
ZWIyMDlhYjc3OWIxZGZjZjdmNGIwMWRjYzIyNDQxNzZlZTAxY2M2OTI3NjEz
|
15
|
-
YjU4MTI4NzM2OTVlN2Q4OWNmZWI1YTQ0ODFiYThhNmRlZTk2YmM=
|
6
|
+
metadata.gz: 9da2be93c9e85e4d5783d29e81388c7ed656d768d7f643d8227eda0cf5a8cf43ffa4d7b8dbbfd9e45dd8288a690fc53bd50398a0681125056519c06648bc006b
|
7
|
+
data.tar.gz: 0eb4329f85cc0a246e07152bee098f0ca10d8b59d232e3555bd52aa678a7ff448947969c228f9127d01e25260bfb1aaf35c70c4a787392ea8198b335a48b8a31
|
data/README.md
CHANGED
@@ -18,7 +18,8 @@ RPM users can install the "ruby193-rubygem-foreman_discovery" or
|
|
18
18
|
| Foreman Version | Plugin Version | oVirt Image Version |
|
19
19
|
| --------------- | --------------:| -------------------:|
|
20
20
|
| <= 1.2 | 1.0.2 | N/A |
|
21
|
-
|
|
21
|
+
| = 1.3 | 1.1.0 | 0.1.0 |
|
22
|
+
| >= 1.4 | 1.2.0 | 0.3.0-1 |
|
22
23
|
|
23
24
|
## Latest code
|
24
25
|
|
@@ -26,6 +27,12 @@ You can get the develop branch of the plugin by specifying your Gemfile in this
|
|
26
27
|
|
27
28
|
gem 'foreman_discovery', :git => "https://github.com/theforeman/foreman_discovery.git"
|
28
29
|
|
30
|
+
## Reporting bugs
|
31
|
+
|
32
|
+
We use [RedMine
|
33
|
+
instance](http://projects.theforeman.org/projects/discovery/issues) instead of
|
34
|
+
github.com issues.
|
35
|
+
|
29
36
|
# Building or downloading an image
|
30
37
|
|
31
38
|
There are two options at the moment:
|
@@ -121,6 +121,10 @@ class DiscoversController < ::ApplicationController
|
|
121
121
|
|
122
122
|
private
|
123
123
|
|
124
|
+
def resource_base
|
125
|
+
@resource_base ||= ::Host::Discovered.authorized(current_permission, ::Host::Discovered)
|
126
|
+
end
|
127
|
+
|
124
128
|
def load_vars_for_ajax
|
125
129
|
return unless @host
|
126
130
|
|
@@ -142,10 +146,29 @@ class DiscoversController < ::ApplicationController
|
|
142
146
|
@host.overwrite = "true" if @host.errors.any? and @host.errors.are_all_conflicts?
|
143
147
|
end
|
144
148
|
|
149
|
+
def controller_permission
|
150
|
+
'discovered_hosts'
|
151
|
+
end
|
152
|
+
|
153
|
+
def action_permission
|
154
|
+
case params[:action]
|
155
|
+
when 'refresh_facts'
|
156
|
+
:view
|
157
|
+
when 'new', 'create'
|
158
|
+
:provision
|
159
|
+
when 'update_multiple_location', 'select_multiple_organization', 'update_multiple_organization', 'select_multiple_location'
|
160
|
+
:edit
|
161
|
+
when 'submit_multiple_destroy', 'multiple_destroy'
|
162
|
+
:destroy
|
163
|
+
else
|
164
|
+
super
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
145
168
|
def find_by_name
|
146
169
|
params[:id].downcase! if params[:id].present?
|
147
|
-
@host =
|
148
|
-
@host ||=
|
170
|
+
@host = resource_base.find_by_id(params[:id])
|
171
|
+
@host ||= resource_base.find_by_name(params[:id])
|
149
172
|
return false unless @host
|
150
173
|
end
|
151
174
|
|
@@ -162,6 +185,7 @@ class DiscoversController < ::ApplicationController
|
|
162
185
|
redirect_to(discovers_path) and return false
|
163
186
|
end
|
164
187
|
|
188
|
+
return @hosts
|
165
189
|
rescue => e
|
166
190
|
error _("Something went wrong while selecting hosts - %s") % e
|
167
191
|
redirect_to discovers_path
|
@@ -20,15 +20,15 @@ module DiscoversHelper
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def multiple_discovers_actions_select
|
23
|
-
actions = [[_('Delete hosts'), multiple_destroy_discovers_path
|
24
|
-
actions << [_('Assign Organization'), select_multiple_organization_discovers_path
|
25
|
-
actions << [_('Assign Location'), select_multiple_location_discovers_path
|
23
|
+
actions = [[_('Delete hosts'), multiple_destroy_discovers_path]]
|
24
|
+
actions << [_('Assign Organization'), select_multiple_organization_discovers_path] if SETTINGS[:organizations_enabled]
|
25
|
+
actions << [_('Assign Location'), select_multiple_location_discovers_path] if SETTINGS[:locations_enabled]
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
link_to(
|
30
|
-
end.flatten
|
31
|
-
|
27
|
+
select_action_button( _("Select Action"), {:id => 'submit_multiple'},
|
28
|
+
actions.map do |action|
|
29
|
+
link_to(action[0] , action[1], :'data-dialog-title' => _("%s - The following hosts are about to be changed") % action[0])
|
30
|
+
end.flatten
|
31
|
+
)
|
32
32
|
|
33
33
|
end
|
34
34
|
|
@@ -21,11 +21,11 @@ class Host::Discovered < ::Host::Base
|
|
21
21
|
# this seems like a rails bug, TODO: figure out whats really wrong here
|
22
22
|
scope :list, lambda { where(:type => "Host::Discovered").includes(:model, :location, :organization) }
|
23
23
|
|
24
|
-
def self.
|
25
|
-
raise(::Foreman::Exception.new("Invalid
|
24
|
+
def self.import_host_and_facts facts
|
25
|
+
raise(::Foreman::Exception.new(N_("Invalid facts, must be a Hash"))) unless facts.is_a?(Hash)
|
26
26
|
fact_name = Setting[:discovery_fact] || 'macaddress'
|
27
27
|
hostname = facts[fact_name].try(:downcase).try(:gsub,/:/,'')
|
28
|
-
raise(::Foreman::Exception.new("Invalid facts: hash does not contain the required fact '
|
28
|
+
raise(::Foreman::Exception.new(N_("Invalid facts: hash does not contain the required fact '%s'"), fact_name)) unless hostname
|
29
29
|
|
30
30
|
# filter facts
|
31
31
|
facts.reject!{|k,v| k =~ /kernel|operatingsystem|osfamily|ruby|path|time|swap|free|filesystem/i }
|
@@ -51,11 +51,11 @@ class Host::Discovered < ::Host::Base
|
|
51
51
|
end
|
52
52
|
|
53
53
|
h.save(:validate => false) if h.new_record?
|
54
|
-
state = h.
|
54
|
+
state = h.import_facts(facts)
|
55
55
|
return h, state
|
56
56
|
end
|
57
57
|
|
58
|
-
def
|
58
|
+
def import_facts facts
|
59
59
|
# Discovered Hosts won't report in via puppet, so we can use that field to
|
60
60
|
# record the last time it sent facts...
|
61
61
|
self.last_report = Time.now
|
@@ -66,7 +66,7 @@ class Host::Discovered < ::Host::Base
|
|
66
66
|
super + [:ip]
|
67
67
|
end
|
68
68
|
|
69
|
-
def
|
69
|
+
def populate_fields_from_facts facts = self.facts_hash
|
70
70
|
importer = super
|
71
71
|
self.subnet = Subnet.subnet_for(importer.ip)
|
72
72
|
self.save
|
@@ -81,7 +81,7 @@ class Host::Discovered < ::Host::Base
|
|
81
81
|
raise _("Could not get facts from proxy: %s") % e
|
82
82
|
end
|
83
83
|
|
84
|
-
return self.class.
|
84
|
+
return self.class.import_host_and_facts facts
|
85
85
|
end
|
86
86
|
|
87
87
|
def self.model_name
|
@@ -4,15 +4,15 @@
|
|
4
4
|
<tr>
|
5
5
|
<th class="ca"><%= check_box_tag "check_all", "", false, { :onclick => "toggleCheck()", :'check-title' => _("Select all items in this page"), :'uncheck-title'=> _("items selected. Uncheck to Clear") } %></th>
|
6
6
|
<th class=''><%= sort :name, :as => _('Name') %></th>
|
7
|
-
<th class="hidden-tablet hidden-
|
7
|
+
<th class="hidden-tablet hidden-xs"><%= sort :model, :as => _('Model') %></th>
|
8
8
|
<% if SETTINGS[:locations_enabled] -%>
|
9
|
-
<th class="hidden-tablet hidden-
|
9
|
+
<th class="hidden-tablet hidden-xs"><%= sort :location, :as => _('Location') %></th>
|
10
10
|
<% end -%>
|
11
11
|
<% if SETTINGS[:organizations_enabled] -%>
|
12
|
-
<th class="hidden-tablet hidden-
|
12
|
+
<th class="hidden-tablet hidden-xs"><%= sort :organization, :as => _('Organization') %></th>
|
13
13
|
<% end -%>
|
14
|
-
<th class="hidden-tablet hidden-
|
15
|
-
<th class="hidden-tablet hidden-
|
14
|
+
<th class="hidden-tablet hidden-xs"><%= sort :subnet, :as => _("Subnet") %></th>
|
15
|
+
<th class="hidden-tablet hidden-xs"><%= sort :last_report, :as => _("Last facts upload") %></th>
|
16
16
|
<th></th>
|
17
17
|
</tr>
|
18
18
|
<% @hosts.each do |host| -%>
|
@@ -21,15 +21,15 @@
|
|
21
21
|
<%= check_box_tag "host_ids[]", nil, false, :id => "host_ids_#{host.id}", :disabled => !authorized?, :class => 'host_select_boxes', :onclick => 'hostChecked(this)' -%>
|
22
22
|
</td>
|
23
23
|
<td><%= link_to("#{host}", discover_path(host) ) %> </td>
|
24
|
-
<td class="hidden-tablet hidden-
|
24
|
+
<td class="hidden-tablet hidden-xs"><%= model_name host %></td>
|
25
25
|
<% if SETTINGS[:locations_enabled] -%>
|
26
|
-
<td class="hidden-tablet hidden-
|
26
|
+
<td class="hidden-tablet hidden-xs"><%= host.location.try(:name) %></td>
|
27
27
|
<% end -%>
|
28
28
|
<% if SETTINGS[:organizations_enabled] -%>
|
29
|
-
<td class="hidden-tablet hidden-
|
29
|
+
<td class="hidden-tablet hidden-xs"><%= host.organization.try(:name) %></td>
|
30
30
|
<% end -%>
|
31
|
-
<td class="hidden-tablet hidden-
|
32
|
-
<td class="hidden-tablet hidden-
|
31
|
+
<td class="hidden-tablet hidden-xs"><%= host.subnet %></td>
|
32
|
+
<td class="hidden-tablet hidden-xs"><%= disc_report_column(host) %></td>
|
33
33
|
<td>
|
34
34
|
<%= action_buttons(
|
35
35
|
link_to(_("Provision"), hash_for_edit_discover_path(:id => host)),
|
@@ -40,17 +40,23 @@
|
|
40
40
|
<% end -%>
|
41
41
|
</table>
|
42
42
|
|
43
|
-
<div id="confirmation-modal" class="modal
|
44
|
-
<div class="modal-
|
45
|
-
<
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
43
|
+
<div id="confirmation-modal" class="modal fade">
|
44
|
+
<div class="modal-dialog">
|
45
|
+
<div class="modal-content">
|
46
|
+
<div class="modal-header">
|
47
|
+
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
48
|
+
<h4 class="modal-title"><%= _('Please Confirm') %></h4>
|
49
|
+
</div>
|
50
|
+
<div class="modal-body">
|
51
|
+
|
52
|
+
</div>
|
53
|
+
<div class="modal-footer">
|
54
|
+
<button type="button" class="btn btn-default" data-dismiss="modal"><%= _('Cancel') %></button>
|
55
|
+
<button type="button" class="btn btn-primary"><%= _('Submit') %></button>
|
56
|
+
</div>
|
57
|
+
</div><!-- /.modal-content -->
|
58
|
+
</div><!-- /.modal-dialog -->
|
59
|
+
</div><!-- /.modal -->
|
54
60
|
|
55
61
|
<%= page_entries_info @hosts %>
|
56
62
|
<%= will_paginate @hosts %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<%= render 'selected_hosts', :hosts => @hosts %>
|
2
2
|
|
3
|
-
<%= form_tag
|
3
|
+
<%= form_tag submit_multiple_destroy_discovers_path(:host_ids => params[:host_ids]), :onsubmit => "resetSelection()" do -%>
|
4
4
|
<span class="label label-warning"><%= _('Warning') -%></span>
|
5
5
|
<%= _('This might take a while, as all hosts, facts and reports will be destroyed as well') %>
|
6
6
|
<% end %>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<%= render 'selected_hosts', :hosts => @hosts %>
|
2
2
|
<div class="row">
|
3
|
-
<div class="
|
4
|
-
<%= form_for :location, :url =>
|
3
|
+
<div class="col-md-8">
|
4
|
+
<%= form_for :location, :url => update_multiple_location_discovers_path(:host_ids => params[:host_ids]) do |f| %>
|
5
5
|
<%= f.select :id, Location.all.map{|e| [e.name, e.id]},{:include_blank => _("Select location")},
|
6
6
|
:onchange => "toggle_multiple_ok_button(this)" %>
|
7
7
|
<%= f.hidden_field :optimistic_import, :value => "yes" %>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<%= render 'selected_hosts', :hosts => @hosts %>
|
2
2
|
<div class="row">
|
3
|
-
<div class="
|
4
|
-
<%= form_for :organization, :url =>
|
3
|
+
<div class="col-md-8">
|
4
|
+
<%= form_for :organization, :url => update_multiple_organization_discovers_path(:host_ids => params[:host_ids]) do |f| %>
|
5
5
|
<%= f.select :id, Organization.all.map{|e| [e.name, e.id]},{:include_blank => _("Select organization")},
|
6
6
|
:onchange => "toggle_multiple_ok_button(this)" %>
|
7
7
|
<%= f.hidden_field :optimistic_import, :value => "yes" %>
|
data/extra/build_iso.sh
CHANGED
@@ -88,7 +88,7 @@ fi
|
|
88
88
|
|
89
89
|
# Build the init script
|
90
90
|
echo "" >> opt/bootlocal.sh
|
91
|
-
echo "
|
91
|
+
echo "/opt/wait_for_network.sh" >> opt/bootlocal.sh # network can be slow to come up
|
92
92
|
echo "/opt/foreman_startup.rb" >> opt/bootlocal.sh
|
93
93
|
echo "/opt/discovery_init.sh" >> opt/bootlocal.sh
|
94
94
|
|
@@ -96,9 +96,19 @@ echo "/opt/discovery_init.sh" >> opt/bootlocal.sh
|
|
96
96
|
cp $SCRIPT_DIR/foreman_startup.rb opt/foreman_startup.rb
|
97
97
|
chmod 755 opt/foreman_startup.rb
|
98
98
|
|
99
|
+
# Copy the script that wait for network before trying to use it
|
100
|
+
cp $SCRIPT_DIR/wait_for_network.sh opt/wait_for_network.sh
|
101
|
+
chmod 755 opt/wait_for_network.sh
|
102
|
+
|
99
103
|
# Get the gems
|
100
104
|
mkdir opt/gems && cd opt/gems
|
101
|
-
|
105
|
+
gem fetch facter
|
106
|
+
gem fetch json_pure
|
107
|
+
gem fetch rack
|
108
|
+
gem fetch rack-protection
|
109
|
+
# Explicit version for tilt or it brakes sinatra (actual tilt version >= 2.0.0) :
|
110
|
+
gem fetch --version 1.3.4 tilt
|
111
|
+
gem fetch sinatra
|
102
112
|
|
103
113
|
# Build the fallback script
|
104
114
|
echo "#!/bin/sh" >> ../discovery_init.sh
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# vim: sw=2:ts=2:et:ft=ruby
|
2
|
+
|
3
|
+
box = {:name => 'f19', :libvirt => 'fm-fedora19', :image_name => /Fedora.*19/, :pty => true}
|
4
|
+
|
5
|
+
if ENV['box']
|
6
|
+
box = {:name => ENV['box'], :libvirt => ENV['box'], :image_name => ENV['box'], :os_user => ENV['box']}
|
7
|
+
end
|
8
|
+
|
9
|
+
Vagrant.configure("2") do |config|
|
10
|
+
config.vm.define box[:name], primary: box[:default] do |machine|
|
11
|
+
machine.vm.box = box[:name]
|
12
|
+
machine.vm.hostname = "foreman-#{box[:name]}.bulder.theforeman.org"
|
13
|
+
machine.vm.provision :shell, :path => 'build_image.sh', :args => [
|
14
|
+
ENV['base_image_url'],
|
15
|
+
ENV['buildnumber'],
|
16
|
+
ENV['proxy_repo'],
|
17
|
+
ENV['repoowner'],
|
18
|
+
ENV['branch'],
|
19
|
+
]
|
20
|
+
|
21
|
+
machine.vm.provider :libvirt do |p, override|
|
22
|
+
override.vm.box = "#{box[:libvirt]}"
|
23
|
+
override.vm.box_url = "http://m0dlx.com/files/foreman/boxes/#{box[:libvirt].sub(/^fm-/, '')}.box"
|
24
|
+
p.memory = 1024
|
25
|
+
end
|
26
|
+
|
27
|
+
machine.vm.provider :rackspace do |p, override|
|
28
|
+
override.vm.box = 'dummy'
|
29
|
+
p.server_name = machine.vm.hostname
|
30
|
+
p.flavor = /1GB/
|
31
|
+
p.image = box[:image_name]
|
32
|
+
override.ssh.pty = true if box[:pty]
|
33
|
+
end
|
34
|
+
|
35
|
+
# ~/.vagrant.d/Vagrantfile will need
|
36
|
+
# config.ssh.private_key_path = "~/.ssh/id_rsa" # private key for keypair below
|
37
|
+
|
38
|
+
config.vm.provider :openstack do |p, override|
|
39
|
+
override.vm.box = 'dummy'
|
40
|
+
p.server_name = machine.vm.hostname
|
41
|
+
p.flavor = /m1.tiny/
|
42
|
+
p.image = box[:image_name] # Might as well use consistent image names
|
43
|
+
p.ssh_username = box[:os_user] # login for the VM
|
44
|
+
|
45
|
+
# ~/.vagrant.d/Vagrantfile will need
|
46
|
+
# p.username = "admin" # e.g. "#{ENV['OS_USERNAME']}"
|
47
|
+
# p.api_key = "secret" # e.g. "#{ENV['OS_PASSWORD']}"
|
48
|
+
# p.endpoint = "http://openstack:5000/v2.0/tokens" # e.g. "#{ENV['OS_AUTH_URL']}/tokens"
|
49
|
+
# p.keypair_name = "my_key" # as stored in Nova
|
50
|
+
|
51
|
+
# You may need
|
52
|
+
# p.floating_ip = '172.20.10.160' # Must be hardcoded, cannot ask Openstack for an IP
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
# vim: sw=2:ts=2:et
|
3
|
+
set -x
|
4
|
+
|
5
|
+
base_image_url=${1}
|
6
|
+
buildnumber=${2}
|
7
|
+
proxy_repo=${3}
|
8
|
+
repoowner=${4}
|
9
|
+
branch=${5}
|
10
|
+
|
11
|
+
echo Building $repoowner/$branch from $base_image_url and $proxy_repo
|
12
|
+
|
13
|
+
cat > ./fedora.repo <<'EOF'
|
14
|
+
[fedora-edit-node]
|
15
|
+
name=Fedora $releasever - $basearch
|
16
|
+
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/
|
17
|
+
baseurl=http://mirror.rackspace.com/fedora/releases/$releasever/Everything/$basearch/os/
|
18
|
+
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
|
19
|
+
failovermethod=priority
|
20
|
+
retries=200
|
21
|
+
enabled=1
|
22
|
+
gpgcheck=1
|
23
|
+
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch
|
24
|
+
|
25
|
+
[updates-edit-node]
|
26
|
+
name=Fedora $releasever - $basearch - Updates
|
27
|
+
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/$basearch/
|
28
|
+
baseurl=http://mirror.rackspace.com/fedora/updates/$releasever/$basearch/
|
29
|
+
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch
|
30
|
+
failovermethod=priority
|
31
|
+
retries=200
|
32
|
+
enabled=1
|
33
|
+
gpgcheck=1
|
34
|
+
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch
|
35
|
+
EOF
|
36
|
+
|
37
|
+
cat > ./foreman.repo <<EOF2
|
38
|
+
[foreman]
|
39
|
+
name=Foreman nightly
|
40
|
+
baseurl=$proxy_repo
|
41
|
+
enabled=1
|
42
|
+
gpgcheck=0
|
43
|
+
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-foreman
|
44
|
+
EOF2
|
45
|
+
|
46
|
+
cat fedora.repo foreman.repo > edit-node.repo
|
47
|
+
|
48
|
+
export OVIRT_NODE_BASE=$PWD
|
49
|
+
export OVIRT_CACHE_DIR=~/ovirt-cache
|
50
|
+
export OVIRT_LOCAL_REPO=file://${OVIRT_CACHE_DIR}/ovirt
|
51
|
+
mkdir -p $OVIRT_CACHE_DIR
|
52
|
+
|
53
|
+
# give the VM some time to finish booting and network configuration
|
54
|
+
sleep 40
|
55
|
+
|
56
|
+
yum -y install livecd-tools appliance-tools-minimizer fedora-packager \
|
57
|
+
python-devel rpm-build createrepo selinux-policy-doc checkpolicy \
|
58
|
+
selinux-policy-devel autoconf automake python-mock python-lockfile git wget
|
59
|
+
git clone http://gerrit.ovirt.org/p/ovirt-node.git
|
60
|
+
git clone http://gerrit.ovirt.org/p/ovirt-node-iso.git
|
61
|
+
git clone https://github.com/$repoowner/foreman_discovery.git -b $branch
|
62
|
+
|
63
|
+
BASE_IMAGE=$(basename $base_image_url)
|
64
|
+
VERSION=$(grep AC_INIT foreman_discovery/extra/ovirt-node-plugin-foreman/configure.ac | grep -oE '[0-9].[0-9].[0-9]')-$buildnumber
|
65
|
+
|
66
|
+
wget -q -nc -c "$base_image_url"
|
67
|
+
|
68
|
+
function build() {
|
69
|
+
RPMSDIR=$(rpm --eval '%{_rpmdir}')
|
70
|
+
rm -f $RPMSDIR/noarch/*rpm
|
71
|
+
pushd foreman_discovery/extra/ovirt-node-plugin-foreman
|
72
|
+
git pull
|
73
|
+
make distclean
|
74
|
+
if [[ "$1" == "debug" ]]; then
|
75
|
+
./autogen.sh --enable-debug && make rpms
|
76
|
+
else
|
77
|
+
./autogen.sh && make rpms
|
78
|
+
fi
|
79
|
+
popd
|
80
|
+
cat edit-node.repo
|
81
|
+
ovirt-node/tools/edit-node --repo edit-node.repo --nogpgcheck \
|
82
|
+
--install $RPMSDIR/noarch/ovirt-node-plugin-foreman-0*.rpm \
|
83
|
+
$BASE_IMAGE
|
84
|
+
echo edit-node returned: $?
|
85
|
+
mv -f ovirt-node-iso-*.foreman.*.iso foreman.iso
|
86
|
+
rm -rf tftpboot
|
87
|
+
livecd-iso-to-pxeboot foreman.iso
|
88
|
+
mv -f tftpboot/vmlinuz0 discovery-$1-$VERSION-vmlinuz
|
89
|
+
mv -f tftpboot/initrd0.img discovery-$1-$VERSION-initrd.img
|
90
|
+
mv -f foreman.iso foreman-discovery-$1-$VERSION.iso
|
91
|
+
}
|
92
|
+
|
93
|
+
build prod
|
94
|
+
build debug
|
95
|
+
|
96
|
+
|
@@ -17,7 +17,7 @@
|
|
17
17
|
# MA 02110-1301, USA. A copy of the GNU General Public License is
|
18
18
|
# also available at http://www.gnu.org/copyleft/gpl.html.
|
19
19
|
|
20
|
-
AC_INIT([ovirt-node-plugin-foreman], [0.3.
|
20
|
+
AC_INIT([ovirt-node-plugin-foreman], [0.3.1], [foreman-dev@googlegroups.com])
|
21
21
|
AM_INIT_AUTOMAKE([-Wall -Werror foreign -Wno-portability tar-pax])
|
22
22
|
AC_SUBST([ENGINENAME], ['Foreman Discovery'])
|
23
23
|
PKG_PROG_PKG_CONFIG
|
@@ -29,6 +29,8 @@ require 'fileutils'
|
|
29
29
|
require 'net/http'
|
30
30
|
require 'net/https'
|
31
31
|
require 'uri'
|
32
|
+
require 'socket'
|
33
|
+
require 'resolv'
|
32
34
|
|
33
35
|
# For comparison
|
34
36
|
require 'rubygems'
|
@@ -74,73 +76,89 @@ def error msg
|
|
74
76
|
$stderr.puts "#{time_prefix} #{msg}"
|
75
77
|
end
|
76
78
|
|
77
|
-
def cmdline
|
78
|
-
|
79
|
+
def cmdline option=nil, default=nil
|
80
|
+
line = File.open("/proc/cmdline", 'r') { |f| f.read }
|
81
|
+
if option
|
82
|
+
result = line.split.map { |x| $1 if x.match(/^#{option}=(.*)/)}.compact
|
83
|
+
result.size == 1 ? result.first : default
|
84
|
+
else
|
85
|
+
line
|
86
|
+
end
|
79
87
|
end
|
80
88
|
|
81
89
|
def discover_server
|
82
90
|
debug "Parsing kernel line: #{cmdline}"
|
83
|
-
|
84
|
-
|
85
|
-
server = "http://#{server}"
|
86
|
-
end
|
87
|
-
server
|
91
|
+
discover_by_url or discover_by_ip or
|
92
|
+
discover_by_server or discover_by_dns_srv
|
88
93
|
end
|
89
94
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
95
|
+
# kept for backward compatibility
|
96
|
+
def discover_by_ip
|
97
|
+
ip = cmdline 'foreman.ip'
|
98
|
+
println "Discovered by PXE: #{ip}" if ip
|
99
|
+
URI.parse("http://#{ip}")
|
100
|
+
rescue
|
101
|
+
return nil
|
102
|
+
end
|
103
|
+
|
104
|
+
# kept for backward compatibility
|
105
|
+
def discover_by_server
|
106
|
+
server = cmdline 'foreman.server'
|
107
|
+
println "Discovered by SERVER: #{server}" if server
|
108
|
+
URI.parse("http://#{server}")
|
109
|
+
rescue
|
110
|
+
return nil
|
103
111
|
end
|
104
112
|
|
105
|
-
def
|
106
|
-
|
107
|
-
|
108
|
-
|
113
|
+
def discover_by_url
|
114
|
+
url = cmdline 'foreman.url'
|
115
|
+
println "Discovered by URL: #{url}" if url
|
116
|
+
URI.parse(url)
|
117
|
+
rescue
|
118
|
+
return nil
|
119
|
+
end
|
109
120
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
121
|
+
# SRV discovery will work only if DHCP returns valid search domain
|
122
|
+
def discover_by_dns_srv
|
123
|
+
resolver = Resolv::DNS.new
|
124
|
+
type = Resolv::DNS::Resource::IN::SRV
|
125
|
+
result = resolver.getresources("_x-foreman._tcp", type).first
|
126
|
+
hostname = result.target.to_s
|
127
|
+
if result.port == 443
|
128
|
+
scheme = 'https'
|
129
|
+
else
|
130
|
+
scheme = 'http'
|
116
131
|
end
|
132
|
+
uri = "#{scheme}://#{hostname}:#{result.port}"
|
133
|
+
println "Discovered by SRV: #{uri}"
|
134
|
+
URI.parse(uri)
|
135
|
+
rescue
|
136
|
+
return nil
|
117
137
|
end
|
118
138
|
|
119
139
|
def upload
|
120
140
|
ip = Facter.value('ipaddress')
|
121
|
-
|
122
|
-
|
141
|
+
uri = discover_server
|
142
|
+
error "Could not determine Foreman instance, add kernel command option" unless uri
|
143
|
+
println "Triggering import of facts from Foreman (#{uri}, ip=#{ip})"
|
123
144
|
data = ip.nil? ? {} : {'ip' => ip}
|
124
|
-
|
125
|
-
|
126
|
-
http =
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
return true
|
137
|
-
else
|
138
|
-
return false
|
139
|
-
end
|
140
|
-
rescue Exception => e
|
141
|
-
error "Could not send facts to Foreman: #{e}"
|
145
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
146
|
+
if uri.scheme == 'https' then
|
147
|
+
http.use_ssl = true
|
148
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
149
|
+
end
|
150
|
+
req = Net::HTTP::Post.new("/discovers")
|
151
|
+
req.set_form_data(data)
|
152
|
+
response = http.request(req)
|
153
|
+
debug "Response from Foreman #{response.code}: #{response.body}"
|
154
|
+
if response.code == "200"
|
155
|
+
return true
|
156
|
+
else
|
142
157
|
return false
|
143
158
|
end
|
159
|
+
rescue => e
|
160
|
+
error "Could not send facts to Foreman: #{e}"
|
161
|
+
return false
|
144
162
|
end
|
145
163
|
|
146
164
|
def write_cache(data)
|
@@ -172,15 +190,15 @@ end
|
|
172
190
|
println "Some interesting facts about this system:"
|
173
191
|
facts = Facter.to_hash.select {|k,v| k =~ /address|hardware|manufacturer|productname|memorytotal/}
|
174
192
|
facts.keys.sort.each {|k| println " #{k}: #{facts[k]}"}
|
175
|
-
println "
|
193
|
+
println "Logs from discovery services now follows:"
|
176
194
|
|
177
195
|
# loop, but only upload on changes
|
178
196
|
while true do
|
179
|
-
sleep DEBUG ? 30 : 60
|
180
197
|
uninteresting_facts=/kernel|operatingsystem|osfamily|ruby|path|time|swap|free|filesystem|version|selinux/i
|
181
198
|
facts = Facter.to_hash.reject! {|k,v| k =~ uninteresting_facts }
|
182
199
|
unless YAML.load(read_cache) == facts
|
183
200
|
debug "Fact cache invalid, reloading to foreman"
|
184
201
|
write_cache(YAML.dump(facts)) if upload
|
202
|
+
sleep DEBUG ? 30 : 60
|
185
203
|
end
|
186
204
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
n=1
|
3
|
+
|
4
|
+
for x in `cat /proc/cmdline`
|
5
|
+
do
|
6
|
+
case $x in
|
7
|
+
foreman.ip=*)
|
8
|
+
server="${x//foreman.ip=}"
|
9
|
+
;;
|
10
|
+
foreman.server=*)
|
11
|
+
server="${x//foreman.server=}"
|
12
|
+
;;
|
13
|
+
esac
|
14
|
+
done
|
15
|
+
|
16
|
+
echo "Testing ping to $server to see if network is up..."
|
17
|
+
|
18
|
+
until ping -w 1 -c 1 "$server" &>/dev/null ;do
|
19
|
+
sleep 1
|
20
|
+
n=$(( n+1 ))
|
21
|
+
[ $n -eq 180 ] && break
|
22
|
+
done
|
23
|
+
|
@@ -26,17 +26,17 @@ module ForemanDiscovery
|
|
26
26
|
|
27
27
|
initializer 'foreman_discovery.register_plugin', :after=> :finisher_hook do |app|
|
28
28
|
Foreman::Plugin.register :foreman_discovery do
|
29
|
-
requires_foreman '
|
29
|
+
requires_foreman '> 1.4'
|
30
30
|
|
31
31
|
# Add permissions
|
32
32
|
security_block :discovery do
|
33
|
-
permission :view_discovered_hosts, {:discovers => [:index, :show, :auto_complete_search, :refresh_facts] }
|
34
|
-
permission :provision_discovered_hosts, {:discovers => [:new, :create] }
|
33
|
+
permission :view_discovered_hosts, {:discovers => [:index, :show, :auto_complete_search, :refresh_facts] }, :resource_type => 'Host'
|
34
|
+
permission :provision_discovered_hosts, {:discovers => [:new, :create] }, :resource_type => 'Host'
|
35
35
|
permission :edit_discovered_hosts, {:discovers => [:edit, :update, :update_multiple_location,
|
36
36
|
:select_multiple_organization,
|
37
37
|
:update_multiple_organization,
|
38
|
-
:select_multiple_location] }
|
39
|
-
permission :destroy_discovered_hosts, {:discovers => [:destroy, :submit_multiple_destroy, :multiple_destroy] }
|
38
|
+
:select_multiple_location] }, :resource_type => 'Host'
|
39
|
+
permission :destroy_discovered_hosts, {:discovers => [:destroy, :submit_multiple_destroy, :multiple_destroy] }, :resource_type => 'Host'
|
40
40
|
|
41
41
|
end
|
42
42
|
|
@@ -7,7 +7,7 @@ msgid ""
|
|
7
7
|
msgstr ""
|
8
8
|
"Project-Id-Version: version 0.0.1\n"
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
10
|
-
"POT-Creation-Date: 2014-
|
10
|
+
"POT-Creation-Date: 2014-04-08 15:59+0200\n"
|
11
11
|
"PO-Revision-Date: 2013-03-01 15:45-0500\n"
|
12
12
|
"Last-Translator: \n"
|
13
13
|
"Language-Team: Foreman Team <foreman-dev@googlegroups.com>\n"
|
@@ -83,6 +83,12 @@ msgstr ""
|
|
83
83
|
msgid "Imported Host::Discovered"
|
84
84
|
msgstr ""
|
85
85
|
|
86
|
+
msgid "Invalid facts, must be a Hash"
|
87
|
+
msgstr ""
|
88
|
+
|
89
|
+
msgid "Invalid facts: hash does not contain the required fact '%s'"
|
90
|
+
msgstr ""
|
91
|
+
|
86
92
|
msgid "Last facts upload"
|
87
93
|
msgstr ""
|
88
94
|
|
@@ -116,7 +122,7 @@ msgstr ""
|
|
116
122
|
msgid "Refresh facts"
|
117
123
|
msgstr ""
|
118
124
|
|
119
|
-
msgid "Select
|
125
|
+
msgid "Select Action"
|
120
126
|
msgstr ""
|
121
127
|
|
122
128
|
msgid "Select all items in this page"
|
metadata
CHANGED
@@ -1,58 +1,58 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_discovery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Greg Sutcliffe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: open4
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: ftools
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: deface
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
description:
|
55
|
+
description: 'MaaS Discovery Plugin engine for Foreman '
|
56
56
|
email: gsutclif@redhat.com
|
57
57
|
executables: []
|
58
58
|
extensions: []
|
@@ -60,67 +60,66 @@ extra_rdoc_files:
|
|
60
60
|
- LICENSE
|
61
61
|
- README.md
|
62
62
|
files:
|
63
|
-
-
|
64
|
-
- README.md
|
65
|
-
- Rakefile
|
66
|
-
- app/controllers/discovers_controller.rb
|
63
|
+
- app/overrides/add_dashboard_table.rb
|
67
64
|
- app/helpers/discovers_helper.rb
|
68
65
|
- app/models/host/discovered.rb
|
69
66
|
- app/models/host/managed_extensions.rb
|
70
67
|
- app/models/setting/discovered.rb
|
71
|
-
- app/
|
72
|
-
- app/views/discovers/_discovers_list.html.erb
|
73
|
-
- app/views/discovers/_selected_hosts.html.erb
|
68
|
+
- app/controllers/discovers_controller.rb
|
74
69
|
- app/views/discovers/index.html.erb
|
75
|
-
- app/views/discovers/
|
70
|
+
- app/views/discovers/_selected_hosts.html.erb
|
71
|
+
- app/views/discovers/show.html.erb
|
76
72
|
- app/views/discovers/select_multiple_location.html.erb
|
73
|
+
- app/views/discovers/_discovers_list.html.erb
|
74
|
+
- app/views/discovers/multiple_destroy.html.erb
|
77
75
|
- app/views/discovers/select_multiple_organization.html.erb
|
78
|
-
- app/views/discovers/show.html.erb
|
79
|
-
- config/initializers/discovery_setup.rb
|
80
|
-
- config/routes.rb
|
81
|
-
- extra/build_iso.sh
|
82
|
-
- extra/discover_host
|
83
|
-
- extra/discovery_init.sh.example
|
84
|
-
- extra/disk_facts.rb
|
85
|
-
- extra/foreman_startup.rb
|
86
|
-
- extra/ovirt-node-plugin-foreman/COPYING
|
87
|
-
- extra/ovirt-node-plugin-foreman/Makefile.am
|
88
76
|
- extra/ovirt-node-plugin-foreman/README.md
|
89
|
-
- extra/ovirt-node-plugin-foreman/autogen.sh
|
90
|
-
- extra/ovirt-node-plugin-foreman/conf/Makefile.am
|
91
|
-
- extra/ovirt-node-plugin-foreman/conf/foreman-plugin.firewall.in
|
92
|
-
- extra/ovirt-node-plugin-foreman/conf/foreman-plugin.logs
|
93
|
-
- extra/ovirt-node-plugin-foreman/configure.ac
|
94
77
|
- extra/ovirt-node-plugin-foreman/ovirt-node-plugin-foreman.spec.in
|
95
|
-
- extra/ovirt-node-plugin-foreman/recipe/Makefile.am
|
96
78
|
- extra/ovirt-node-plugin-foreman/recipe/foreman-plugin-iso.ks
|
97
79
|
- extra/ovirt-node-plugin-foreman/recipe/foreman-plugin-minimizer.ks
|
98
|
-
- extra/ovirt-node-plugin-foreman/
|
80
|
+
- extra/ovirt-node-plugin-foreman/recipe/Makefile.am
|
81
|
+
- extra/ovirt-node-plugin-foreman/conf/foreman-plugin.firewall.in
|
82
|
+
- extra/ovirt-node-plugin-foreman/conf/Makefile.am
|
83
|
+
- extra/ovirt-node-plugin-foreman/conf/foreman-plugin.logs
|
84
|
+
- extra/ovirt-node-plugin-foreman/src/find-missing-libs
|
85
|
+
- extra/ovirt-node-plugin-foreman/src/discovery-version-fact.rb.in
|
99
86
|
- extra/ovirt-node-plugin-foreman/src/discover-host.rb.in
|
100
87
|
- extra/ovirt-node-plugin-foreman/src/discover-host.service
|
101
|
-
- extra/ovirt-node-plugin-foreman/src/
|
102
|
-
- extra/ovirt-node-plugin-foreman/
|
88
|
+
- extra/ovirt-node-plugin-foreman/src/Makefile.am
|
89
|
+
- extra/ovirt-node-plugin-foreman/configure.ac
|
90
|
+
- extra/ovirt-node-plugin-foreman/Makefile.am
|
91
|
+
- extra/ovirt-node-plugin-foreman/COPYING
|
92
|
+
- extra/ovirt-node-plugin-foreman/autogen.sh
|
93
|
+
- extra/build_iso.sh
|
94
|
+
- extra/discover_host
|
95
|
+
- extra/wait_for_network.sh
|
96
|
+
- extra/ovirt-node-build/build_image.sh
|
97
|
+
- extra/ovirt-node-build/Vagrantfile
|
98
|
+
- extra/discovery_init.sh.example
|
99
|
+
- extra/foreman_startup.rb
|
100
|
+
- extra/disk_facts.rb
|
101
|
+
- config/initializers/discovery_setup.rb
|
102
|
+
- config/routes.rb
|
103
103
|
- lib/discovery.rake
|
104
|
-
- lib/foreman_discovery.rb
|
105
104
|
- lib/foreman_discovery/engine.rb
|
106
|
-
- lib/foreman_discovery/facts.rb
|
107
105
|
- lib/foreman_discovery/version.rb
|
108
|
-
-
|
109
|
-
-
|
110
|
-
- locale/
|
106
|
+
- lib/foreman_discovery/facts.rb
|
107
|
+
- lib/foreman_discovery.rb
|
108
|
+
- locale/sv_SE/discovery.po
|
109
|
+
- locale/fr/discovery.po
|
111
110
|
- locale/en_GB/discovery.po
|
112
|
-
- locale/
|
111
|
+
- locale/foreman_discovery.pot
|
113
112
|
- locale/es/discovery.po
|
114
|
-
- locale/
|
115
|
-
-
|
116
|
-
-
|
117
|
-
-
|
118
|
-
- test/functional/discovers_controller_test.rb
|
113
|
+
- locale/Makefile
|
114
|
+
- LICENSE
|
115
|
+
- Rakefile
|
116
|
+
- README.md
|
119
117
|
- test/test_helper.rb
|
120
|
-
- test/test_plugin_helper.rb
|
121
118
|
- test/unit/facts.json
|
122
119
|
- test/unit/host_discovered_test.rb
|
123
120
|
- test/unit/setting_discovered_test.rb
|
121
|
+
- test/functional/discovers_controller_test.rb
|
122
|
+
- test/test_plugin_helper.rb
|
124
123
|
homepage: http://github.com/theforeman/foreman_discovery
|
125
124
|
licenses:
|
126
125
|
- GPL-3
|
@@ -131,24 +130,25 @@ require_paths:
|
|
131
130
|
- lib
|
132
131
|
required_ruby_version: !ruby/object:Gem::Requirement
|
133
132
|
requirements:
|
134
|
-
- -
|
133
|
+
- - '>='
|
135
134
|
- !ruby/object:Gem::Version
|
136
135
|
version: '0'
|
137
136
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
137
|
requirements:
|
139
|
-
- -
|
138
|
+
- - '>'
|
140
139
|
- !ruby/object:Gem::Version
|
141
|
-
version:
|
140
|
+
version: 1.3.1
|
142
141
|
requirements: []
|
143
142
|
rubyforge_project:
|
144
|
-
rubygems_version: 2.
|
143
|
+
rubygems_version: 2.0.3
|
145
144
|
signing_key:
|
146
145
|
specification_version: 4
|
147
146
|
summary: MaaS Discovery Plugin for Foreman
|
148
147
|
test_files:
|
149
|
-
- test/
|
148
|
+
- test/test_helper.rb
|
150
149
|
- test/unit/facts.json
|
151
|
-
- test/unit/setting_discovered_test.rb
|
152
150
|
- test/unit/host_discovered_test.rb
|
151
|
+
- test/unit/setting_discovered_test.rb
|
152
|
+
- test/functional/discovers_controller_test.rb
|
153
153
|
- test/test_plugin_helper.rb
|
154
|
-
|
154
|
+
has_rdoc:
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|