foreman_discovery 2.0.0.rc1 → 2.0.0.rc2
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 +4 -4
- data/app/controllers/api/v2/discovered_hosts_controller.rb +7 -5
- data/app/controllers/concerns/foreman/controller/discovered_extensions.rb +5 -1
- data/app/controllers/discovered_hosts_controller.rb +1 -1
- data/app/models/discovery_rule.rb +4 -2
- data/app/models/host/discovered.rb +12 -2
- data/app/views/api/v2/discovered_hosts/main.json.rabl +2 -1
- data/app/views/dashboard/_discovery_widget_host_list.html.erb +1 -1
- data/app/views/discovered_hosts/_discovered_host.html.erb +1 -1
- data/app/views/discovered_hosts/_discovered_hosts_list.html.erb +1 -1
- data/app/views/discovery_rules/_form.html.erb +21 -1
- data/app/views/discovery_rules/index.html.erb +1 -1
- data/lib/foreman_discovery/engine.rb +2 -8
- data/lib/foreman_discovery/version.rb +1 -1
- data/locale/foreman_discovery.pot +196 -15
- data/test/unit/discovered_extensions_test.rb +75 -6
- data/test/unit/discovery_attribute_set_test.rb +3 -2
- data/test/unit/facts.json +1 -1
- data/test/unit/host_discovered_test.rb +15 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4867b305c73d5a8a992739eb70afeb56d9f81208
|
4
|
+
data.tar.gz: 5c458bfbefdec94578c3a7d2be4247352e3e9e82
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd114518a9ae24804c244261ae205a10d913493d72128233d7d68927d1f0ffe98926569c799ce904e6fbbbececed87a100e8daf19724e10fa3bcb80cce9dea3d
|
7
|
+
data.tar.gz: 37e81bd18f86d2e3ab0a3460f55a2e88ae44dc768a804bac5347e269b7350d450aa62b11a1df6ff50c2371ee76ba7b2429d2c37c2a795203aba9c7884d2e1a3d
|
@@ -105,11 +105,13 @@ module Api
|
|
105
105
|
Host.transaction do
|
106
106
|
@discovered_host, state = Host::Discovered.import_host_and_facts(params[:facts])
|
107
107
|
end
|
108
|
-
|
109
|
-
|
110
|
-
state =
|
111
|
-
|
112
|
-
|
108
|
+
if Setting['discovery_auto']
|
109
|
+
@discovered_host.transaction do
|
110
|
+
if state && rule = find_discovery_rule(@discovered_host)
|
111
|
+
state = perform_auto_provision(@discovered_host, rule)
|
112
|
+
else
|
113
|
+
Rails.logger.warn "Discovered facts import unsuccessful, skipping auto provisioning"
|
114
|
+
end
|
113
115
|
end
|
114
116
|
end
|
115
117
|
process_response state
|
@@ -33,10 +33,14 @@ module Foreman::Controller::DiscoveredExtensions
|
|
33
33
|
host.type = 'Host::Managed'
|
34
34
|
host.managed = true
|
35
35
|
host.build = true
|
36
|
-
host.name = host.render_template(rule.hostname) unless rule.hostname.empty?
|
37
36
|
host.hostgroup_id = rule.hostgroup_id
|
38
37
|
host.comment = "Auto-discovered and provisioned via rule '#{rule.name}'"
|
39
38
|
host.discovery_rule = rule
|
39
|
+
# render hostname only when all other fields are set
|
40
|
+
original_name = host.name
|
41
|
+
host.name = host.render_template(rule.hostname) unless rule.hostname.empty?
|
42
|
+
# fallback to the original if template did not expand
|
43
|
+
host.name = original_name if host.name.empty?
|
40
44
|
Host.transaction do
|
41
45
|
if host.save #save! does not work here
|
42
46
|
delete_discovery_attribute_set(host.id)
|
@@ -240,7 +240,7 @@ class DiscoveredHostsController < ::ApplicationController
|
|
240
240
|
def find_multiple
|
241
241
|
# Lets search by name or id and make sure one of them exists first
|
242
242
|
if params[:host_names].present? or params[:host_ids].present?
|
243
|
-
@hosts = Host::Discovered.where("id IN (?) or name IN (?)", params[:host_ids], params[:host_names] )
|
243
|
+
@hosts = Host::Discovered.includes(:model, :fact_values, :interfaces, :location, :organization).where("id IN (?) or name IN (?)", params[:host_ids], params[:host_names] )
|
244
244
|
if @hosts.empty?
|
245
245
|
error _('No hosts were found with that id or name')
|
246
246
|
redirect_to(discovered_hosts_path) and return false
|
@@ -12,8 +12,8 @@ class DiscoveryRule < ActiveRecord::Base
|
|
12
12
|
validates :hostname, :format => { :with => /\A[a-zA-Z<]/, :message => N_("must start with a letter or ERB.") },
|
13
13
|
:allow_blank => true
|
14
14
|
validates :hostgroup_id, :presence => true
|
15
|
-
validates :max_count, :numericality => { only_integer
|
16
|
-
validates :priority, :presence => true, numericality: true
|
15
|
+
validates :max_count, :numericality => { :only_integer => true, :greater_than_or_equal_to => 0 }
|
16
|
+
validates :priority, :presence => true, :numericality => { :only_integer => true, :greater_than_or_equal_to => 0 }
|
17
17
|
validates_lengths_from_database
|
18
18
|
|
19
19
|
belongs_to :hostgroup
|
@@ -21,4 +21,6 @@ class DiscoveryRule < ActiveRecord::Base
|
|
21
21
|
|
22
22
|
scoped_search :on => :name, :complete_value => :true
|
23
23
|
scoped_search :on => :priority
|
24
|
+
scoped_search :on => :search
|
25
|
+
scoped_search :on => :enabled
|
24
26
|
end
|
@@ -54,7 +54,16 @@ class Host::Discovered < ::Host::Base
|
|
54
54
|
h = ::Host::Discovered.find_by_name hostname
|
55
55
|
h ||= Host.new :name => hostname, :type => "Host::Discovered"
|
56
56
|
h.type = "Host::Discovered"
|
57
|
-
|
57
|
+
|
58
|
+
macfact = facts[fact_name].try(:downcase)
|
59
|
+
begin
|
60
|
+
macfact = Net::Validations.normalize_mac(macfact)
|
61
|
+
rescue ArgumentError => e
|
62
|
+
macfact = facts['discovery_bootif'].try(:downcase)
|
63
|
+
h.name = facts['discovery_bootif'].try(:downcase).try(:gsub,/:/,'').try(:sub,/^/, hostname_prefix)
|
64
|
+
end
|
65
|
+
h.mac = macfact
|
66
|
+
|
58
67
|
|
59
68
|
if SETTINGS[:locations_enabled]
|
60
69
|
begin
|
@@ -110,7 +119,8 @@ class Host::Discovered < ::Host::Base
|
|
110
119
|
if disks.any?
|
111
120
|
disks.values.each { |size| disks_size += (size.to_f rescue 0) }
|
112
121
|
disk_count = disks.size
|
113
|
-
disks_size
|
122
|
+
# Turning disks_size to closest Mega for easier to read UI
|
123
|
+
disks_size = (disks_size / 1024 / 1024).ceil if disks_size > 0
|
114
124
|
end
|
115
125
|
|
116
126
|
{:cpu_count => cpu_count, :memory => memory, :disk_count => disk_count, :disks_size => disks_size}
|
@@ -2,7 +2,8 @@ object @discovered_host
|
|
2
2
|
|
3
3
|
extends "api/v2/discovered_hosts/base"
|
4
4
|
|
5
|
-
attributes :ip, :mac, :last_report, :subnet_id, :subnet_name, :
|
5
|
+
attributes :ip, :mac, :last_report, :subnet_id, :subnet_name, :memory, :disk_count, :disks_size
|
6
|
+
attribute :cpu_count => :cpus
|
6
7
|
|
7
8
|
if SETTINGS[:organizations_enabled]
|
8
9
|
attributes :organization_id, :organization_name
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<td class="hidden-tablet hidden-xs"><%= number_to_human_size(discovery_attribute(host, :memory, 0) * 1024 * 1024) %></td>
|
6
6
|
<% unless defined? hide_disk %>
|
7
7
|
<td class="hidden-tablet hidden-xs"><%= discovery_attribute(host, :disk_count) %></td>
|
8
|
-
<td class="hidden-tablet hidden-xs"><%= number_to_human_size(discovery_attribute(host, :disks_size, 0)) %></td>
|
8
|
+
<td class="hidden-tablet hidden-xs"><%= number_to_human_size(discovery_attribute(host, :disks_size, 0) * 1024 * 1024) %></td>
|
9
9
|
<% if Setting['discovery_fact_column'].present? %>
|
10
10
|
<td class="hidden-tablet hidden-xs"><%= host.facts_hash[Setting['discovery_fact_column']] || 'N/A' %></td>
|
11
11
|
<% end %>
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<th class=''><%= sort :name, :as => _('Name') %></th>
|
7
7
|
<th class="hidden-tablet hidden-xs"><%= sort :model, :as => _('Model') %></th>
|
8
8
|
<th class="hidden-tablet hidden-xs"><%= sort :ip, :as => _('IP Address') %></th>
|
9
|
-
<th class="hidden-tablet hidden-xs"><%= sort :cpu_count, :as => _('
|
9
|
+
<th class="hidden-tablet hidden-xs"><%= sort :cpu_count, :as => _('CPUs') %></th>
|
10
10
|
<th class="hidden-tablet hidden-xs"><%= sort :memory, :as => _('Memory') %></th>
|
11
11
|
<th class="hidden-tablet hidden-xs"><%= sort :disk_count, :as => _('Disk count') %></th>
|
12
12
|
<th class="hidden-tablet hidden-xs"><%= sort :disks_size, :as => _('Disks size') %></th>
|
@@ -6,7 +6,27 @@
|
|
6
6
|
:control_group_id => 'search_group', :size => 'col-md-9' %>
|
7
7
|
<%= select_f f, :hostgroup_id, accessible_hostgroups, :id, :to_label, { :include_blank => false },
|
8
8
|
{ :help_inline => _('Target host group for this rule with all properties set')} %>
|
9
|
-
<%= text_f f, :hostname, :help_inline =>
|
9
|
+
<%= text_f f, :hostname, :help_inline => popover(
|
10
|
+
_("Template"),
|
11
|
+
"<div>" +
|
12
|
+
_("Specify target hostname template pattern in the same syntax as in Provisioning Templates (ERB).") +
|
13
|
+
"</div>"+
|
14
|
+
"<div>" +
|
15
|
+
_("Domain will be appended automatically. A hostname based on MAC address will be used when left blank. In addition to @host attribute function rand for random integers is available. Examples:") +
|
16
|
+
"</div>"+
|
17
|
+
"<pre>"+
|
18
|
+
"myhost-<%= rand(99999) %>" + "\n\n" +
|
19
|
+
"abc-<%= @host.facts['bios_vendor'] + " + "\n" +
|
20
|
+
" '-' + rand(99999) %>" + "\n\n" +
|
21
|
+
"xyz-<%= @host.hostgroup.name %>" + "\n\n" +
|
22
|
+
"srv-<%= @host.discovery_rule.name %>" + "\n\n" +
|
23
|
+
"server-<%= @host.ip.gsub('.','-') + " + "\n" +
|
24
|
+
" '-' + @host.hostgroup.subnet.name %>" + "\n" +
|
25
|
+
"</pre>"+
|
26
|
+
"</div>"+
|
27
|
+
"<div>"+
|
28
|
+
_("When creating hostname patterns, make sure the resulting host names are unique. Hostnames must not start with numbers. A good approach is to use unique information provided by facter (MAC address, BIOS or serial ID).") +
|
29
|
+
"</div>", :title => _("Hostname for provisioned hosts")).html_safe %>
|
10
30
|
<%= text_f f, :max_count, :label => _('Hosts limit'), :help_inline => _('Maximum hosts provisioned with this rule (0 = unlimited)') %>
|
11
31
|
<%= text_f f, :priority, :help_inline => _('Rule priority (lower integer means higher priority)') %>
|
12
32
|
<%= checkbox_f f, :enabled %>
|
@@ -13,7 +13,7 @@
|
|
13
13
|
</tr>
|
14
14
|
<% for rule in @discovery_rules %>
|
15
15
|
<tr>
|
16
|
-
<td class='col-md-3'><%= link_to_if_authorized(
|
16
|
+
<td class='col-md-3 display-two-pane'><%= link_to_if_authorized(rule.name, hash_for_edit_discovery_rule_path(:id => rule).merge(:auth_object => rule, :authorizer => authorizer)) %></td>
|
17
17
|
<td><%= rule.priority %></td>
|
18
18
|
<td><%= rule.search %></td>
|
19
19
|
<td><%= rule.hostgroup.name %></td>
|
@@ -36,7 +36,7 @@ module ForemanDiscovery
|
|
36
36
|
|
37
37
|
initializer 'foreman_discovery.register_plugin', :after=> :finisher_hook do |app|
|
38
38
|
Foreman::Plugin.register :foreman_discovery do
|
39
|
-
requires_foreman '
|
39
|
+
requires_foreman '~> 1.7.0'
|
40
40
|
|
41
41
|
# discovered hosts permissions
|
42
42
|
security_block :discovery do
|
@@ -104,13 +104,7 @@ module ForemanDiscovery
|
|
104
104
|
widget 'discovery_widget', :name=>N_('Discovery widget'), :sizex => 7, :sizey =>1
|
105
105
|
|
106
106
|
# add template helpers
|
107
|
-
allowed_template_helpers :rand
|
108
|
-
|
109
|
-
# apipie API documentation
|
110
|
-
# Only available in 1.8, otherwise it has to be in the initializer below
|
111
|
-
if (SETTINGS[:version].to_s.include?('develop') or Gem::Version.new(SETTINGS[:version]) >= Gem::Version.new('1.8'))
|
112
|
-
apipie_documented_controllers ["#{ForemanDiscovery::Engine.root}/app/controllers/api/v2/*.rb"]
|
113
|
-
end
|
107
|
+
allowed_template_helpers :rand
|
114
108
|
end
|
115
109
|
end
|
116
110
|
|
@@ -1,21 +1,22 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# This file is distributed under the same license as the
|
4
|
-
#
|
1
|
+
# SOME DESCRIPTIVE TITLE.
|
2
|
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
3
|
+
# This file is distributed under the same license as the foreman package.
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5
5
|
#
|
6
|
+
#, fuzzy
|
6
7
|
msgid ""
|
7
8
|
msgstr ""
|
8
|
-
"Project-Id-Version:
|
9
|
+
"Project-Id-Version: foreman 1.0.0\n"
|
9
10
|
"Report-Msgid-Bugs-To: \n"
|
10
|
-
"POT-Creation-Date:
|
11
|
-
"PO-Revision-Date:
|
12
|
-
"Last-Translator:
|
13
|
-
"Language-Team:
|
11
|
+
"POT-Creation-Date: 2015-01-28 17:53+0100\n"
|
12
|
+
"PO-Revision-Date: 2015-01-28 17:53+0100\n"
|
13
|
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14
|
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14
15
|
"Language: \n"
|
15
16
|
"MIME-Version: 1.0\n"
|
16
17
|
"Content-Type: text/plain; charset=UTF-8\n"
|
17
18
|
"Content-Transfer-Encoding: 8bit\n"
|
18
|
-
"Plural-Forms: nplurals=
|
19
|
+
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
19
20
|
|
20
21
|
msgid "%s - The following hosts are about to be changed"
|
21
22
|
msgstr ""
|
@@ -32,15 +33,30 @@ msgstr ""
|
|
32
33
|
msgid "Assign Organization"
|
33
34
|
msgstr ""
|
34
35
|
|
36
|
+
msgid "Auto Provision"
|
37
|
+
msgstr ""
|
38
|
+
|
39
|
+
msgid "Auto Provision All"
|
40
|
+
msgstr ""
|
41
|
+
|
42
|
+
msgid "Automatically provision newly discovered hosts, according to the provisioning rules"
|
43
|
+
msgstr ""
|
44
|
+
|
45
|
+
msgid "CPUs"
|
46
|
+
msgstr ""
|
47
|
+
|
35
48
|
msgid "Cancel"
|
36
49
|
msgstr ""
|
37
50
|
|
38
|
-
msgid "Could not get facts from proxy: %
|
51
|
+
msgid "Could not get facts from proxy %{url}: %{error}"
|
39
52
|
msgstr ""
|
40
53
|
|
41
54
|
msgid "Create a discovered host"
|
42
55
|
msgstr ""
|
43
56
|
|
57
|
+
msgid "Create a discovery rule"
|
58
|
+
msgstr ""
|
59
|
+
|
44
60
|
msgid "Delete"
|
45
61
|
msgstr ""
|
46
62
|
|
@@ -50,12 +66,21 @@ msgstr ""
|
|
50
66
|
msgid "Delete a discovered host"
|
51
67
|
msgstr ""
|
52
68
|
|
69
|
+
msgid "Delete a rule"
|
70
|
+
msgstr ""
|
71
|
+
|
53
72
|
msgid "Delete hosts"
|
54
73
|
msgstr ""
|
55
74
|
|
56
75
|
msgid "Destroyed selected hosts"
|
57
76
|
msgstr ""
|
58
77
|
|
78
|
+
msgid "Disable"
|
79
|
+
msgstr ""
|
80
|
+
|
81
|
+
msgid "Disable rule?"
|
82
|
+
msgstr ""
|
83
|
+
|
59
84
|
msgid "Discovered Host Pool"
|
60
85
|
msgstr ""
|
61
86
|
|
@@ -65,9 +90,57 @@ msgstr ""
|
|
65
90
|
msgid "Discovered hosts"
|
66
91
|
msgstr ""
|
67
92
|
|
93
|
+
msgid "Discovered hosts are provisioning now"
|
94
|
+
msgstr ""
|
95
|
+
|
96
|
+
msgid "Discovery Rules"
|
97
|
+
msgstr ""
|
98
|
+
|
99
|
+
msgid "Discovery rules"
|
100
|
+
msgstr ""
|
101
|
+
|
68
102
|
msgid "Discovery widget"
|
69
103
|
msgstr ""
|
70
104
|
|
105
|
+
msgid "DiscoveryRule|Enabled"
|
106
|
+
msgstr ""
|
107
|
+
|
108
|
+
msgid "DiscoveryRule|Name"
|
109
|
+
msgstr ""
|
110
|
+
|
111
|
+
msgid "DiscoveryRule|Priority"
|
112
|
+
msgstr ""
|
113
|
+
|
114
|
+
msgid "DiscoveryRule|Query"
|
115
|
+
msgstr ""
|
116
|
+
|
117
|
+
msgid "Disk count"
|
118
|
+
msgstr ""
|
119
|
+
|
120
|
+
msgid "Disks size"
|
121
|
+
msgstr ""
|
122
|
+
|
123
|
+
msgid "Domain will be appended automatically. A hostname based on MAC address will be used when left blank. In addition to @host attribute function rand for random integers is available. Examples:"
|
124
|
+
msgstr ""
|
125
|
+
|
126
|
+
msgid "Edit Discovery Rule"
|
127
|
+
msgstr ""
|
128
|
+
|
129
|
+
msgid "Enable"
|
130
|
+
msgstr ""
|
131
|
+
|
132
|
+
msgid "Enable rule?"
|
133
|
+
msgstr ""
|
134
|
+
|
135
|
+
msgid "Errors during auto provisioning: %s"
|
136
|
+
msgstr ""
|
137
|
+
|
138
|
+
msgid "Execute rules against a discovered host"
|
139
|
+
msgstr ""
|
140
|
+
|
141
|
+
msgid "Execute rules against all currently discovered hosts"
|
142
|
+
msgstr ""
|
143
|
+
|
71
144
|
msgid "Fact"
|
72
145
|
msgstr ""
|
73
146
|
|
@@ -77,19 +150,49 @@ msgstr ""
|
|
77
150
|
msgid "Facts refreshed for %s"
|
78
151
|
msgstr ""
|
79
152
|
|
80
|
-
msgid "Failed to
|
153
|
+
msgid "Failed to auto provision host %s: %s"
|
154
|
+
msgstr ""
|
155
|
+
|
156
|
+
msgid "Failed to import facts for discovered host"
|
157
|
+
msgstr ""
|
158
|
+
|
159
|
+
msgid "Failed to import facts for discovered host: %s"
|
81
160
|
msgstr ""
|
82
161
|
|
83
|
-
msgid "Failed to
|
162
|
+
msgid "Failed to reboot host %s"
|
84
163
|
msgstr ""
|
85
164
|
|
86
|
-
msgid "Failed to reboot
|
165
|
+
msgid "Failed to reboot host %{hostname} with error %{error_message}"
|
87
166
|
msgstr ""
|
88
167
|
|
89
168
|
msgid "Failed to refresh facts for %s"
|
90
169
|
msgstr ""
|
91
170
|
|
92
|
-
msgid "
|
171
|
+
msgid "Host"
|
172
|
+
msgstr ""
|
173
|
+
|
174
|
+
msgid "Host %{host} was provisioned with rule %{rule}"
|
175
|
+
msgstr ""
|
176
|
+
|
177
|
+
msgid "Host group"
|
178
|
+
msgstr ""
|
179
|
+
|
180
|
+
msgid "Host of type %s can not be rebooted"
|
181
|
+
msgstr ""
|
182
|
+
|
183
|
+
msgid "Hostname for provisioned hosts"
|
184
|
+
msgstr ""
|
185
|
+
|
186
|
+
msgid "Hosts limit"
|
187
|
+
msgstr ""
|
188
|
+
|
189
|
+
msgid "Hosts/limit"
|
190
|
+
msgstr ""
|
191
|
+
|
192
|
+
msgid "IP Address"
|
193
|
+
msgstr ""
|
194
|
+
|
195
|
+
msgid "Imported discovered host"
|
93
196
|
msgstr ""
|
94
197
|
|
95
198
|
msgid "Invalid facts, must be a Hash"
|
@@ -107,24 +210,48 @@ msgstr ""
|
|
107
210
|
msgid "List all discovered hosts"
|
108
211
|
msgstr ""
|
109
212
|
|
213
|
+
msgid "List all discovery rules"
|
214
|
+
msgstr ""
|
215
|
+
|
110
216
|
msgid "Location"
|
111
217
|
msgstr ""
|
112
218
|
|
219
|
+
msgid "Maximum hosts provisioned with this rule (0 = unlimited)"
|
220
|
+
msgstr ""
|
221
|
+
|
222
|
+
msgid "Memory"
|
223
|
+
msgstr ""
|
224
|
+
|
113
225
|
msgid "Model"
|
114
226
|
msgstr ""
|
115
227
|
|
228
|
+
msgid "N/A"
|
229
|
+
msgstr ""
|
230
|
+
|
116
231
|
msgid "Name"
|
117
232
|
msgstr ""
|
118
233
|
|
234
|
+
msgid "New Discovery Rule"
|
235
|
+
msgstr ""
|
236
|
+
|
237
|
+
msgid "New Rule"
|
238
|
+
msgstr ""
|
239
|
+
|
119
240
|
msgid "No discovered hosts available"
|
120
241
|
msgstr ""
|
121
242
|
|
243
|
+
msgid "No discovered hosts to provision"
|
244
|
+
msgstr ""
|
245
|
+
|
122
246
|
msgid "No hosts selected"
|
123
247
|
msgstr ""
|
124
248
|
|
125
249
|
msgid "No hosts were found with that id or name"
|
126
250
|
msgstr ""
|
127
251
|
|
252
|
+
msgid "No rule found for host %s"
|
253
|
+
msgstr ""
|
254
|
+
|
128
255
|
msgid "Organization"
|
129
256
|
msgstr ""
|
130
257
|
|
@@ -137,12 +264,33 @@ msgstr ""
|
|
137
264
|
msgid "Provision a discovered host"
|
138
265
|
msgstr ""
|
139
266
|
|
267
|
+
msgid "Reboot"
|
268
|
+
msgstr ""
|
269
|
+
|
140
270
|
msgid "Rebooting %s"
|
141
271
|
msgstr ""
|
142
272
|
|
273
|
+
msgid "Rebooting a discovered host"
|
274
|
+
msgstr ""
|
275
|
+
|
276
|
+
msgid "Rebooting host %s"
|
277
|
+
msgstr ""
|
278
|
+
|
143
279
|
msgid "Refresh facts"
|
144
280
|
msgstr ""
|
145
281
|
|
282
|
+
msgid "Refreshing the facts of a discovered host"
|
283
|
+
msgstr ""
|
284
|
+
|
285
|
+
msgid "Rule disabled"
|
286
|
+
msgstr ""
|
287
|
+
|
288
|
+
msgid "Rule enabled"
|
289
|
+
msgstr ""
|
290
|
+
|
291
|
+
msgid "Rule priority (lower integer means higher priority)"
|
292
|
+
msgstr ""
|
293
|
+
|
146
294
|
msgid "Select Action"
|
147
295
|
msgstr ""
|
148
296
|
|
@@ -158,15 +306,30 @@ msgstr ""
|
|
158
306
|
msgid "Show a discovered host"
|
159
307
|
msgstr ""
|
160
308
|
|
309
|
+
msgid "Show a discovery rule"
|
310
|
+
msgstr ""
|
311
|
+
|
312
|
+
msgid "Show fact as an extra column in the discovered hosts list"
|
313
|
+
msgstr ""
|
314
|
+
|
161
315
|
msgid "Something went wrong while selecting hosts - %s"
|
162
316
|
msgstr ""
|
163
317
|
|
318
|
+
msgid "Specify target hostname template pattern in the same syntax as in Provisioning Templates (ERB)."
|
319
|
+
msgstr ""
|
320
|
+
|
164
321
|
msgid "Submit"
|
165
322
|
msgstr ""
|
166
323
|
|
167
324
|
msgid "Subnet"
|
168
325
|
msgstr ""
|
169
326
|
|
327
|
+
msgid "Target host group for this rule with all properties set"
|
328
|
+
msgstr ""
|
329
|
+
|
330
|
+
msgid "Template"
|
331
|
+
msgstr ""
|
332
|
+
|
170
333
|
msgid "The default fact name to use for the MAC of the system"
|
171
334
|
msgstr ""
|
172
335
|
|
@@ -176,6 +339,9 @@ msgstr ""
|
|
176
339
|
msgid "The default organization to place discovered hosts in"
|
177
340
|
msgstr ""
|
178
341
|
|
342
|
+
msgid "The default prefix to use for the host name, must start with a letter"
|
343
|
+
msgstr ""
|
344
|
+
|
179
345
|
msgid "The following hosts were not deleted: %s"
|
180
346
|
msgstr ""
|
181
347
|
|
@@ -190,6 +356,9 @@ msgstr[1] ""
|
|
190
356
|
msgid "UUID to track orchestration tasks status, GET /api/orchestration/:UUID/tasks"
|
191
357
|
msgstr ""
|
192
358
|
|
359
|
+
msgid "Update a rule"
|
360
|
+
msgstr ""
|
361
|
+
|
193
362
|
msgid "Upload facts for a host, creating the host if required"
|
194
363
|
msgstr ""
|
195
364
|
|
@@ -199,6 +368,12 @@ msgstr ""
|
|
199
368
|
msgid "Warning"
|
200
369
|
msgstr ""
|
201
370
|
|
371
|
+
msgid "When creating hostname patterns, make sure the resulting host names are unique. Hostnames must not start with numbers. A good approach is to use unique information provided by facter (MAC address, BIOS or serial ID)."
|
372
|
+
msgstr ""
|
373
|
+
|
374
|
+
msgid "can't contain white spaces."
|
375
|
+
msgstr ""
|
376
|
+
|
202
377
|
msgid "filter results"
|
203
378
|
msgstr ""
|
204
379
|
|
@@ -208,6 +383,9 @@ msgstr ""
|
|
208
383
|
msgid "items selected. Uncheck to Clear"
|
209
384
|
msgstr ""
|
210
385
|
|
386
|
+
msgid "must start with a letter or ERB."
|
387
|
+
msgstr ""
|
388
|
+
|
211
389
|
msgid "not required if it's a virtual machine"
|
212
390
|
msgstr ""
|
213
391
|
|
@@ -220,5 +398,8 @@ msgstr ""
|
|
220
398
|
msgid "paginate results"
|
221
399
|
msgstr ""
|
222
400
|
|
401
|
+
msgid "required if value is not inherited from host group or default password in settings"
|
402
|
+
msgstr ""
|
403
|
+
|
223
404
|
msgid "sort results"
|
224
405
|
msgstr ""
|
@@ -95,12 +95,81 @@ class FindDiscoveryRulesTest < ActiveSupport::TestCase
|
|
95
95
|
assert_equal host.name, "macaabbccddeeff"
|
96
96
|
end
|
97
97
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
98
|
+
def setup_normal_renderer
|
99
|
+
Setting[:safemode_render] = false
|
100
|
+
@facts.merge!({"somefact" => "abc"})
|
101
|
+
end
|
102
|
+
|
103
|
+
def setup_safemode_renderer
|
104
|
+
Setting[:safemode_render] = true
|
105
|
+
@facts.merge!({"somefact" => "abc"})
|
106
|
+
end
|
107
|
+
|
108
|
+
[:normal_renderer, :safemode_renderer].each do |renderer_name|
|
109
|
+
test "#{renderer_name} is properly configured" do
|
110
|
+
send "setup_#{renderer_name}"
|
111
|
+
if renderer_name == :normal_renderer
|
112
|
+
assert Setting[:safemode_render] == false
|
113
|
+
else
|
114
|
+
assert Setting[:safemode_render] == true
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
test "hostname falls back to original name on empty response via #{renderer_name}" do
|
119
|
+
host = Host::Discovered.import_host_and_facts(@facts).first
|
120
|
+
r1 = FactoryGirl.create(:discovery_rule,
|
121
|
+
:search => "facts.somefact = abc",
|
122
|
+
:hostname => '<%= "" %>')
|
123
|
+
perform_auto_provision host, r1
|
124
|
+
assert_equal "macaabbccddeeff", host.name
|
125
|
+
end
|
126
|
+
|
127
|
+
test "hostname is rendered after auto provisioning using #{renderer_name}" do
|
128
|
+
host = Host::Discovered.import_host_and_facts(@facts).first
|
129
|
+
r1 = FactoryGirl.create(:discovery_rule,
|
130
|
+
:search => "facts.somefact = abc",
|
131
|
+
:hostname => 'x<%= 1+1 %>')
|
132
|
+
perform_auto_provision host, r1
|
133
|
+
assert_equal "x2", host.name
|
134
|
+
end
|
135
|
+
|
136
|
+
test "function rand is renderer properly using #{renderer_name}" do
|
137
|
+
host = Host::Discovered.import_host_and_facts(@facts).first
|
138
|
+
r1 = FactoryGirl.create(:discovery_rule,
|
139
|
+
:search => "facts.somefact = abc",
|
140
|
+
:hostname => 'x<%= rand(4) %>')
|
141
|
+
perform_auto_provision host, r1
|
142
|
+
assert_match(/x[0123]/, host.name)
|
143
|
+
end
|
144
|
+
|
145
|
+
test "hostname attribute name is renderer properly using #{renderer_name}" do
|
146
|
+
host = Host::Discovered.import_host_and_facts(@facts).first
|
147
|
+
r1 = FactoryGirl.create(:discovery_rule,
|
148
|
+
:search => "facts.somefact = abc",
|
149
|
+
:hostname => 'x<%= @host.name %>')
|
150
|
+
perform_auto_provision host, r1
|
151
|
+
assert_equal "xmacaabbccddeeff", host.name
|
152
|
+
end
|
153
|
+
|
154
|
+
test "hostname attribute ip is renderer properly using #{renderer_name}" do
|
155
|
+
host = Host::Discovered.import_host_and_facts(@facts).first
|
156
|
+
r1 = FactoryGirl.create(:discovery_rule,
|
157
|
+
:search => "facts.somefact = abc",
|
158
|
+
:hostname => 'x<%= @host.ip.gsub(".","-") %>')
|
159
|
+
perform_auto_provision host, r1
|
160
|
+
assert_equal "x192-168-100-42", host.name
|
161
|
+
end
|
162
|
+
|
163
|
+
test "hostname attribute facts_hash is renderer properly using #{renderer_name}" do
|
164
|
+
skip "until http://projects.theforeman.org/issues/2948 is fixed"
|
165
|
+
host = Host::Discovered.import_host_and_facts(@facts).first
|
166
|
+
r1 = FactoryGirl.create(:discovery_rule,
|
167
|
+
:search => "facts.somefact = abc",
|
168
|
+
:hostname => 'x<%= @host.facts["somefact"] %>')
|
169
|
+
perform_auto_provision host, r1
|
170
|
+
assert_equal "xabc", host.name
|
171
|
+
end
|
172
|
+
|
104
173
|
end
|
105
174
|
|
106
175
|
end
|
@@ -31,9 +31,10 @@ class DiscoveryAttributeSetTest < ActiveSupport::TestCase
|
|
31
31
|
test "can search discovered hosts by disks_size" do
|
32
32
|
raw = parse_json_fixture('/facts.json')
|
33
33
|
host = Host::Discovered.import_host_and_facts(raw['facts']).first
|
34
|
-
|
34
|
+
disks_size = (host.facts_hash['blockdevice_sda_size'].to_f / 1024 / 1024).ceil
|
35
|
+
results = Host::Discovered.search_for("disks_size = #{disks_size}")
|
35
36
|
assert_equal 1, results.count
|
36
|
-
results = Host::Discovered.search_for("disks_size > #{
|
37
|
+
results = Host::Discovered.search_for("disks_size > #{disks_size}")
|
37
38
|
assert_equal 0, results.count
|
38
39
|
end
|
39
40
|
|
data/test/unit/facts.json
CHANGED
@@ -21,7 +21,7 @@ class HostDiscoveredTest < ActiveSupport::TestCase
|
|
21
21
|
test "should import facts from yaml as Host::Discovered" do
|
22
22
|
raw = parse_json_fixture('/facts.json')
|
23
23
|
assert Host::Discovered.import_host_and_facts(raw['facts'])
|
24
|
-
assert Host::Discovered.find_by_name('
|
24
|
+
assert Host::Discovered.find_by_name('macaabbccddeef5')
|
25
25
|
end
|
26
26
|
|
27
27
|
test "should raise when fact_name setting isn't present" do
|
@@ -39,19 +39,29 @@ class HostDiscoveredTest < ActiveSupport::TestCase
|
|
39
39
|
assert host.refresh_facts
|
40
40
|
end
|
41
41
|
|
42
|
-
test "should create discovered host with fact_name as a name" do
|
42
|
+
test "should create discovered host with fact_name as a name if it is a valid mac" do
|
43
|
+
raw = parse_json_fixture('/facts.json')
|
44
|
+
Setting[:discovery_fact] = 'somefact'
|
45
|
+
facts = raw['facts'].merge({"somefact" => "bb:aa:cc:dd:ee:ff"})
|
46
|
+
host = Host::Discovered.import_host_and_facts(facts).first
|
47
|
+
assert_equal 'macbbaaccddeeff', host.name
|
48
|
+
assert_equal 'bb:aa:cc:dd:ee:ff', host.mac
|
49
|
+
end
|
50
|
+
|
51
|
+
test "should create discovered host with default name if fact_name isn't a valid mac" do
|
52
|
+
skip "until http://projects.theforeman.org/issues/9044 is fixed in 1.7.3"
|
43
53
|
raw = parse_json_fixture('/facts.json')
|
44
54
|
Setting[:discovery_fact] = 'lsbdistcodename'
|
45
55
|
host = Host::Discovered.import_host_and_facts(raw['facts']).first
|
46
|
-
assert_equal '
|
56
|
+
assert_equal 'macaabbccddeef5', host.name
|
57
|
+
assert_equal 'aa:bb:cc:dd:ee:f5', host.mac
|
47
58
|
end
|
48
59
|
|
49
60
|
test "should create discovered host with prefix" do
|
50
61
|
raw = parse_json_fixture('/facts.json')
|
51
62
|
Setting[:discovery_prefix] = 'test'
|
52
|
-
Setting[:discovery_fact] = 'lsbdistcodename'
|
53
63
|
host = Host::Discovered.import_host_and_facts(raw['facts']).first
|
54
|
-
assert_equal '
|
64
|
+
assert_equal 'testaabbccddeef5', host.name
|
55
65
|
end
|
56
66
|
|
57
67
|
test "should not name discovered host with prefix that starts with a number, fallback to 'mac'" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_discovery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Greg Sutcliffe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deface
|