foreman_discovery 15.1.0 → 16.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/foreman/controller/discovered_extensions.rb +4 -0
  3. data/app/controllers/discovered_hosts_controller.rb +1 -0
  4. data/app/models/setting/discovered.rb +26 -33
  5. data/app/services/foreman_discovery/fact_parser.rb +1 -1
  6. data/app/services/foreman_discovery/host_converter.rb +29 -1
  7. data/app/services/foreman_discovery/import_hooks/subnet_and_taxonomy.rb +6 -14
  8. data/app/services/foreman_discovery/subnet_suggestion.rb +26 -0
  9. data/app/views/discovered_hosts/_discovered_host_modal.html.erb +2 -0
  10. data/config/routes.rb +2 -0
  11. data/extra/discover-host +21 -7
  12. data/lib/foreman_discovery/engine.rb +2 -2
  13. data/lib/foreman_discovery/version.rb +1 -1
  14. data/locale/ca/LC_MESSAGES/foreman_discovery.mo +0 -0
  15. data/locale/ca/foreman_discovery.edit.po +111 -91
  16. data/locale/ca/foreman_discovery.po +17 -2
  17. data/locale/de/LC_MESSAGES/foreman_discovery.mo +0 -0
  18. data/locale/de/foreman_discovery.edit.po +113 -93
  19. data/locale/de/foreman_discovery.po +19 -4
  20. data/locale/en/LC_MESSAGES/foreman_discovery.mo +0 -0
  21. data/locale/en/foreman_discovery.edit.po +98 -78
  22. data/locale/en/foreman_discovery.po +16 -1
  23. data/locale/en_GB/LC_MESSAGES/foreman_discovery.mo +0 -0
  24. data/locale/en_GB/foreman_discovery.edit.po +113 -93
  25. data/locale/en_GB/foreman_discovery.po +19 -4
  26. data/locale/es/LC_MESSAGES/foreman_discovery.mo +0 -0
  27. data/locale/es/foreman_discovery.edit.po +112 -92
  28. data/locale/es/foreman_discovery.po +18 -3
  29. data/locale/foreman_discovery.pot +99 -79
  30. data/locale/fr/LC_MESSAGES/foreman_discovery.mo +0 -0
  31. data/locale/fr/foreman_discovery.edit.po +112 -92
  32. data/locale/fr/foreman_discovery.po +18 -3
  33. data/locale/gl/LC_MESSAGES/foreman_discovery.mo +0 -0
  34. data/locale/gl/foreman_discovery.edit.po +111 -91
  35. data/locale/gl/foreman_discovery.po +17 -2
  36. data/locale/it/LC_MESSAGES/foreman_discovery.mo +0 -0
  37. data/locale/it/foreman_discovery.edit.po +112 -92
  38. data/locale/it/foreman_discovery.po +18 -3
  39. data/locale/ja/LC_MESSAGES/foreman_discovery.mo +0 -0
  40. data/locale/ja/foreman_discovery.edit.po +113 -93
  41. data/locale/ja/foreman_discovery.po +19 -4
  42. data/locale/ko/LC_MESSAGES/foreman_discovery.mo +0 -0
  43. data/locale/ko/foreman_discovery.edit.po +112 -92
  44. data/locale/ko/foreman_discovery.po +18 -3
  45. data/locale/pt_BR/LC_MESSAGES/foreman_discovery.mo +0 -0
  46. data/locale/pt_BR/foreman_discovery.edit.po +113 -93
  47. data/locale/pt_BR/foreman_discovery.po +19 -4
  48. data/locale/ru/LC_MESSAGES/foreman_discovery.mo +0 -0
  49. data/locale/ru/foreman_discovery.edit.po +113 -93
  50. data/locale/ru/foreman_discovery.po +19 -4
  51. data/locale/sv_SE/LC_MESSAGES/foreman_discovery.mo +0 -0
  52. data/locale/sv_SE/foreman_discovery.edit.po +112 -92
  53. data/locale/sv_SE/foreman_discovery.po +18 -3
  54. data/locale/zh_CN/LC_MESSAGES/foreman_discovery.mo +0 -0
  55. data/locale/zh_CN/foreman_discovery.edit.po +112 -92
  56. data/locale/zh_CN/foreman_discovery.po +18 -3
  57. data/locale/zh_TW/LC_MESSAGES/foreman_discovery.mo +0 -0
  58. data/locale/zh_TW/foreman_discovery.edit.po +112 -92
  59. data/locale/zh_TW/foreman_discovery.po +18 -3
  60. data/test/facts/bond0-eth0-eth1-active-passive.json +128 -0
  61. data/test/facts/facts_with_lldp_bond_candidate.json +2 -9
  62. data/test/functional/api/v2/discovered_hosts_controller_test.rb +1 -0
  63. data/test/integration/discovered_hosts_test.rb +1 -0
  64. data/test/test_helper_discovery.rb +12 -0
  65. data/test/unit/discovered_extensions_test.rb +49 -0
  66. data/test/unit/discovery_attribute_set_test.rb +1 -0
  67. data/test/unit/discovery_rule_test.rb +1 -0
  68. data/test/unit/host_discovered_test.rb +32 -13
  69. data/test/unit/managed_extensions_test.rb +1 -0
  70. metadata +5 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 279682fd72f6cdf11166d4feb018e13f7fbe17137a23186507178000a387aeb0
4
- data.tar.gz: 2d2fb544411f4db3594f0cd46ddc2a89afe216a12fdbdff769fc39e63e78879d
3
+ metadata.gz: 40c64a4f3c756e207293b6e5be67190294b9c4f2ab5054e08edd8d085718556f
4
+ data.tar.gz: b22ef9bf418ac18e94170429e7368cb1c6f94b9b0d2290b60341a9415e908b01
5
5
  SHA512:
6
- metadata.gz: 5ffd16f5840e43beed5ae06306292569d445027b4a0a48a547cf16e9e3f8e8eba9ccb94796cbe20d723b478c02e5fa0a0b2667f1fa8417b1a0520575cd8f121a
7
- data.tar.gz: 1e7defe44767c8dc6d2716d7a5eec5a30b57ef24008cf4a10ec3e6e88bc766b8fcd7a147d44d9ccd032a5ace60f981e6fd9502217760b30746c336b9bf84486f
6
+ metadata.gz: d9f9013fa2d04e883da3c0c8c42b5a6e3552093323698359b8e9b70179f0284ccf35d633eac5720cc03fa79678af915b5eda3c7508be775b0836128ef6d738d8
7
+ data.tar.gz: 688c8d68c1a87aff1fda0a00eef057daf0c35a06ce007746e568763e868c82ee718d15a51d1124cb9dc1a47498ec94bc7f33e62d986ba7ed23e3eb6babfd140f
@@ -41,6 +41,8 @@ module Foreman::Controller::DiscoveredExtensions
41
41
  # trigger the provisioning
42
42
  def perform_auto_provision original_host, rule
43
43
  raise(::Foreman::Exception.new(N_("No hostgroup associated with rule '%s'"), rule)) if rule.hostgroup.nil?
44
+
45
+ logger.debug "Auto-provisioning via rule #{rule} hostgroup #{rule.hostgroup} subnet #{rule.hostgroup.subnet}"
44
46
  host = ::ForemanDiscovery::HostConverter.to_managed(original_host)
45
47
  host.hostgroup_id = rule.hostgroup_id
46
48
  host.comment = "Auto-discovered and provisioned via rule '#{rule.name}'"
@@ -55,6 +57,8 @@ module Foreman::Controller::DiscoveredExtensions
55
57
  # explicitly set all inheritable attributes from hostgroup
56
58
  host.attributes = host.apply_inherited_attributes(hostgroup_id: rule.hostgroup_id)
57
59
  host.set_hostgroup_defaults
60
+ # change subnet and fetch unused IPs
61
+ ::ForemanDiscovery::HostConverter.unused_ip_for_host(host, rule.hostgroup.subnet, rule.hostgroup.subnet6)
58
62
  # save! does not work here
59
63
  if host.save
60
64
  host
@@ -78,6 +78,7 @@ class DiscoveredHostsController < ::ApplicationController
78
78
  def perform_update(host, success_message = nil)
79
79
  Taxonomy.no_taxonomy_scope do
80
80
  ::ForemanDiscovery::HostConverter.set_build_clean_facts(host)
81
+ ::ForemanDiscovery::HostConverter.unused_ip_for_host(host)
81
82
  if host.save
82
83
  success_options = { :success_redirect => host_path(host), :redirect_xhr => request.xhr? }
83
84
  success_options[:success_msg] = success_message if success_message
@@ -10,39 +10,32 @@ class Setting::Discovered < ::Setting
10
10
  BLANK_ATTRS << 'discovery_facts_ipmi'
11
11
  BLANK_ATTRS << 'discovery_prefix'
12
12
 
13
- def self.load_defaults
14
- # Check the table exists
15
- return unless super
16
-
17
- Setting.transaction do
18
- [
19
- self.set('discovery_location', N_("The default location to place discovered hosts in"), "", N_("Discovery location"), nil, { :collection => Proc.new {Hash[Location.all.map{|loc| [loc[:title], loc[:title]]}]} }),
20
- self.set('discovery_organization', N_("The default organization to place discovered hosts in"), "", N_("Discovery organization"), nil, { :collection => Proc.new {Hash[Organization.all.map{|org| [org[:title], org[:title]]}]} }),
21
- self.set('discovery_fact', N_("Fact name to use for primary interface detection"), "discovery_bootif", N_("Interface fact")),
22
- self.set('discovery_auto_bond', N_("Automatic bond interface (if another interface is detected on the same VLAN via LLDP)"), false, N_("Create bond interfaces")),
23
- self.set('discovery_clean_facts', N_("Clean all reported facts during provisioning (except discovery facts)"), false, N_("Clean all facts")),
24
- self.set('discovery_hostname', N_("List of facts to use for the hostname (separated by comma, first wins)"), "discovery_bootif", N_("Hostname facts")),
25
- self.set('discovery_auto', N_("Automatically provision newly discovered hosts, according to the provisioning rules"), false, N_("Auto provisioning")),
26
- self.set('discovery_reboot', N_("Automatically reboot or kexec discovered host during provisioning"), true, N_("Reboot")),
27
- self.set('discovery_prefix', N_("The default prefix to use for the host name, must start with a letter"), "mac", N_("Hostname prefix")),
28
- self.set('discovery_fact_column', N_("Extra facter columns to show in host lists (separate by comma)"), "", N_("Fact columns")),
29
- self.set('discovery_facts_highlights', N_("Regex to organize facts for highlights section - e.g. ^(abc|cde)$"), "", N_("Highlighted facts")),
30
- self.set('discovery_facts_storage', N_("Regex to organize facts for storage section"), "", N_("Storage facts")),
31
- self.set('discovery_facts_software', N_("Regex to organize facts for software section"), "", N_("Software facts")),
32
- self.set('discovery_facts_hardware', N_("Regex to organize facts for hardware section"), "", N_("Hardware facts")),
33
- self.set('discovery_facts_network', N_("Regex to organize facts for network section"), "", N_("Network facts")),
34
- self.set('discovery_facts_ipmi', N_("Regex to organize facts for ipmi section"), "", N_("IPMI facts")),
35
- self.set('discovery_lock', N_("Automatically generate PXE configuration to pin a newly discovered host to discovery"), false, N_("Lock PXE")),
36
- self.set('discovery_pxelinux_lock_template', N_("PXELinux template to be used when pinning a host to discovery"), 'pxelinux_discovery', N_("Locked PXELinux template name"), nil, { :collection => Proc.new {Hash[ProvisioningTemplate.where(:template_kind => TemplateKind.find_by_name(:snippet)).map{|template| [template[:name], template[:name]]}]} }),
37
- self.set('discovery_pxegrub_lock_template', N_("PXEGrub template to be used when pinning a host to discovery"), 'pxegrub_discovery', N_("Locked PXEGrub template name"), nil, { :collection => Proc.new {Hash[ProvisioningTemplate.where(:template_kind => TemplateKind.find_by_name(:snippet)).map{|template| [template[:name], template[:name]]}]} }),
38
- self.set('discovery_pxegrub2_lock_template', N_("PXEGrub2 template to be used when pinning a host to discovery"), 'pxegrub2_discovery', N_("Locked PXEGrub2 template name"), nil, { :collection => Proc.new {Hash[ProvisioningTemplate.where(:template_kind => TemplateKind.find_by_name(:snippet)).map{|template| [template[:name], template[:name]]}]} }),
39
- self.set('discovery_always_rebuild_dns', N_("Force DNS entries creation when provisioning discovered host"), true, N_("Force DNS")),
40
- self.set('discovery_error_on_existing', N_("Do not allow to discover existing managed host matching MAC of a provisioning NIC (errors out early)"), false, N_("Error on existing NIC")),
41
- self.set('discovery_naming', N_("Discovery hostname naming pattern"), 'Fact', N_("Type of name generator"), nil, {:collection => Proc.new {::Host::Discovered::NAMING_PATTERNS} }),
42
- ].compact.each { |s| self.create s.update(:category => "Setting::Discovered")}
43
- end
44
-
45
- true
13
+ def self.default_settings
14
+ [
15
+ self.set('discovery_location', N_("The default location to place discovered hosts in"), "", N_("Discovery location"), nil, { :collection => Proc.new {Hash[Location.all.map{|loc| [loc[:title], loc[:title]]}]} }),
16
+ self.set('discovery_organization', N_("The default organization to place discovered hosts in"), "", N_("Discovery organization"), nil, { :collection => Proc.new {Hash[Organization.all.map{|org| [org[:title], org[:title]]}]} }),
17
+ self.set('discovery_fact', N_("Fact name to use for primary interface detection"), "discovery_bootif", N_("Interface fact")),
18
+ self.set('discovery_auto_bond', N_("Automatic bond interface (if another interface is detected on the same VLAN via LLDP)"), false, N_("Create bond interfaces")),
19
+ self.set('discovery_clean_facts', N_("Clean all reported facts during provisioning (except discovery facts)"), false, N_("Clean all facts")),
20
+ self.set('discovery_hostname', N_("List of facts to use for the hostname (separated by comma, first wins)"), "discovery_bootif", N_("Hostname facts")),
21
+ self.set('discovery_auto', N_("Automatically provision newly discovered hosts, according to the provisioning rules"), false, N_("Auto provisioning")),
22
+ self.set('discovery_reboot', N_("Automatically reboot or kexec discovered host during provisioning"), true, N_("Reboot")),
23
+ self.set('discovery_prefix', N_("The default prefix to use for the host name, must start with a letter"), "mac", N_("Hostname prefix")),
24
+ self.set('discovery_fact_column', N_("Extra facter columns to show in host lists (separate by comma)"), "", N_("Fact columns")),
25
+ self.set('discovery_facts_highlights', N_("Regex to organize facts for highlights section - e.g. ^(abc|cde)$"), "", N_("Highlighted facts")),
26
+ self.set('discovery_facts_storage', N_("Regex to organize facts for storage section"), "", N_("Storage facts")),
27
+ self.set('discovery_facts_software', N_("Regex to organize facts for software section"), "", N_("Software facts")),
28
+ self.set('discovery_facts_hardware', N_("Regex to organize facts for hardware section"), "", N_("Hardware facts")),
29
+ self.set('discovery_facts_network', N_("Regex to organize facts for network section"), "", N_("Network facts")),
30
+ self.set('discovery_facts_ipmi', N_("Regex to organize facts for ipmi section"), "", N_("IPMI facts")),
31
+ self.set('discovery_lock', N_("Automatically generate PXE configuration to pin a newly discovered host to discovery"), false, N_("Lock PXE")),
32
+ self.set('discovery_pxelinux_lock_template', N_("PXELinux template to be used when pinning a host to discovery"), 'pxelinux_discovery', N_("Locked PXELinux template name"), nil, { :collection => Proc.new {Hash[ProvisioningTemplate.where(:template_kind => TemplateKind.find_by_name(:snippet)).map{|template| [template[:name], template[:name]]}]} }),
33
+ self.set('discovery_pxegrub_lock_template', N_("PXEGrub template to be used when pinning a host to discovery"), 'pxegrub_discovery', N_("Locked PXEGrub template name"), nil, { :collection => Proc.new {Hash[ProvisioningTemplate.where(:template_kind => TemplateKind.find_by_name(:snippet)).map{|template| [template[:name], template[:name]]}]} }),
34
+ self.set('discovery_pxegrub2_lock_template', N_("PXEGrub2 template to be used when pinning a host to discovery"), 'pxegrub2_discovery', N_("Locked PXEGrub2 template name"), nil, { :collection => Proc.new {Hash[ProvisioningTemplate.where(:template_kind => TemplateKind.find_by_name(:snippet)).map{|template| [template[:name], template[:name]]}]} }),
35
+ self.set('discovery_always_rebuild_dns', N_("Force DNS entries creation when provisioning discovered host"), true, N_("Force DNS")),
36
+ self.set('discovery_error_on_existing', N_("Do not allow to discover existing managed host matching MAC of a provisioning NIC (errors out early)"), false, N_("Error on existing NIC")),
37
+ self.set('discovery_naming', N_("Discovery hostname naming pattern"), 'Fact', N_("Type of name generator"), nil, {:collection => Proc.new {::Host::Discovered::NAMING_PATTERNS} }),
38
+ ]
46
39
  end
47
40
 
48
41
  def self.discovery_fact_column_array
@@ -6,7 +6,7 @@ module ForemanDiscovery
6
6
  raise(::Foreman::Exception.new(N_("Discovered host '%{host}' has all NICs filtered out, filter: %{filter}") %
7
7
  {:host => host, :filter => Setting[:ignored_interface_identifiers]})) if interfaces.size == 0
8
8
  bootif_mac = FacterUtils::bootif_mac(facts).try(:downcase)
9
- detected = interfaces.detect { |_, values| values[:macaddress].try(:downcase) == bootif_mac && values[:ipaddress].present? }
9
+ detected = interfaces.detect { |_, values| values[:macaddress].try(:downcase) == bootif_mac && (values[:ipaddress].present? || values[:ipaddress6].present?) }
10
10
  Rails.logger.debug "Discovery fact parser detected primary interface: #{detected}"
11
11
  # return the detected interface as array [name, facts]
12
12
  detected || raise(::Foreman::Exception.new(N_("Unable to find primary NIC with %{mac} specified via '%{fact}', NIC filter: %{filter}") %
@@ -1,5 +1,4 @@
1
1
  class ForemanDiscovery::HostConverter
2
-
3
2
  # Converts discovered host to managed host without uptading the database.
4
3
  # Record must be saved explicitly (using save! or update_attributes! or similar).
5
4
  # Creates shallow copy.
@@ -35,4 +34,33 @@ class ForemanDiscovery::HostConverter
35
34
  host.build = true
36
35
  end
37
36
 
37
+ def self.unused_ip_for_subnet(subnet, mac, existing_ip)
38
+ ipam = subnet.unused_ip(mac)
39
+ raise(::Foreman::Exception.new(N_("IPAM must be configured for subnet '%s'"), subnet)) unless ipam.present?
40
+
41
+ # None IPAM returns nil - in that case keep the current address
42
+ suggested_ip = ipam.suggest_ip
43
+ suggested_ip.nil? ? existing_ip : suggested_ip
44
+ end
45
+
46
+ def self.unused_ip_for_host(host, new_subnet = nil, new_subnet6 = nil)
47
+ host.interfaces.each do |interface|
48
+ next unless interface.managed?
49
+
50
+ interface.subnet = new_subnet if new_subnet
51
+ interface.subnet6 = new_subnet6 if new_subnet6
52
+ interface.ip = unused_ip_for_subnet(interface.subnet, interface.mac, interface.ip) if interface.subnet
53
+ interface.ip6 = unused_ip_for_subnet(interface.subnet6, interface.mac, interface.ip6) if interface.subnet6
54
+ interface.save!
55
+ end
56
+ end
57
+
58
+ def self.change_subnet_and_unused_ip(host, hostgroup)
59
+ if host.subnet != hostgroup.subnet || host.subnet6 != hostgroup.subnet6
60
+ Rails.logger.debug "Discovered host subnets #{[host.subnet, host.subnet6]} do not match hostgroup subnets #{[hostgroup.subnet, hostgroup.subnet6]}"
61
+ unused_ip_for_host(host, host.hostgroup.subnet, host.hostgroup.subnet6)
62
+ else
63
+ Rails.logger.debug "Discovered host subnets #{[host.subnet, host.subnet6]} match hostgroup subnets"
64
+ end
65
+ end
38
66
  end
@@ -4,14 +4,15 @@ module ForemanDiscovery
4
4
  class SubnetAndTaxonomy < ImportHook
5
5
  def after_populate
6
6
  primary_ip = host.primary_interface.ip
7
+ primary_ip6 = host.primary_interface.ip6
7
8
 
8
- unless primary_ip
9
+ unless primary_ip || primary_ip6
9
10
  logger.warn "Unable to assign subnet - reboot trigger may not be possible, primary interface is missing IP address"
10
11
  return
11
12
  end
12
13
 
13
14
  # set subnet
14
- set_subnet(primary_ip)
15
+ set_subnets(primary_ip, primary_ip6)
15
16
  # set location and organization
16
17
  set_location
17
18
  set_organization
@@ -19,18 +20,9 @@ module ForemanDiscovery
19
20
 
20
21
  private
21
22
 
22
- def set_subnet(ip)
23
- host.primary_interface.subnet = suggested_subnet(ip)
24
- end
25
-
26
- def suggested_subnet(ip)
27
- subnet = Subnet.subnet_for(ip)
28
- if subnet
29
- logger.info "Detected subnet: #{subnet} with taxonomy #{subnet.organizations.collect(&:name)}/#{subnet.locations.collect(&:name)}"
30
- else
31
- logger.warn "Subnet could not be detected for #{ip}"
32
- end
33
- subnet
23
+ def set_subnets(ip, ip6)
24
+ host.primary_interface.subnet = ForemanDiscovery::SubnetSuggestion.for(ip: ip, kind: 'IPv4') if ip
25
+ host.primary_interface.subnet6 = ForemanDiscovery::SubnetSuggestion.for(ip: ip6, kind: 'IPv6') if ip6
34
26
  end
35
27
 
36
28
  def set_location
@@ -0,0 +1,26 @@
1
+ module ForemanDiscovery
2
+ class SubnetSuggestion
3
+ attr_accessor :ip, :kind
4
+
5
+ def self.for(ip:, kind:)
6
+ new(ip: ip, kind: kind).()
7
+ end
8
+
9
+ def initialize(ip:, kind:)
10
+ self.ip = ip
11
+ self.kind = kind
12
+ end
13
+
14
+ def call
15
+ return unless ip
16
+
17
+ subnet = Subnet.unscoped.subnet_for(ip)
18
+ if subnet
19
+ Rails.logger.info "Detected #{kind} subnet: #{subnet} with taxonomy #{subnet.organizations.collect(&:name)}/#{subnet.locations.collect(&:name)}"
20
+ else
21
+ Rails.logger.info "#{kind} subnet could not be detected for #{ip}"
22
+ end
23
+ subnet
24
+ end
25
+ end
26
+ end
@@ -17,6 +17,8 @@
17
17
  <% if show_location_tab? %>
18
18
  <%= select_f f, :location_id, Location.my_locations, :id, :to_label, {}, {:size => 'col-md-10'} %>
19
19
  <% end %>
20
+
21
+ <div>Changing the Host's Subnet is not possible via Customize Host form, use Create Host or Auto provisioning and set the desired Subnet in the Hostgroup.</div>
20
22
  </div>
21
23
  <div class="modal-footer">
22
24
  <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
@@ -6,6 +6,8 @@ Rails.application.routes.draw do
6
6
  post 'os_selected_discovered_hosts' => 'hosts#os_selected'
7
7
  post 'medium_selected_discovered_hosts' => 'hosts#medium_selected'
8
8
 
9
+ get 'discovered_hosts/help', :action => :welcome, :controller => 'discovered_hosts'
10
+
9
11
  constraints(:id => /[^\/]+/) do
10
12
  resources :discovered_hosts, :except => [:new, :create] do
11
13
  member do
@@ -3,10 +3,12 @@ require 'optparse'
3
3
  require 'json'
4
4
  require 'rest-client'
5
5
 
6
- def find_base name="default"
7
- return name if File.exists?(name)
6
+ def find_base name = "default"
7
+ return name if File.exist?(name)
8
+
8
9
  file = File.absolute_path(File.dirname(__FILE__) + "../../test/facts/#{name}.json")
9
- raise "Unable to find file #{file}" unless File.exists?(file)
10
+ raise "Unable to find file #{file}" unless File.exist?(file)
11
+
10
12
  file
11
13
  end
12
14
 
@@ -14,6 +16,7 @@ base = find_base
14
16
  version = "3.4.0"
15
17
  interfaces = []
16
18
  preserve_interfaces = false
19
+ use_facts_endpoint = false
17
20
  primary = nil
18
21
  bootif = nil
19
22
  url = "http://admin:changeme@localhost:3000"
@@ -38,6 +41,10 @@ OptionParser.new do |opts|
38
41
  preserve_interfaces = true
39
42
  end
40
43
 
44
+ opts.on("-a", "--facts", "Use host facts endpoint") do |v|
45
+ use_facts_endpoint = true
46
+ end
47
+
41
48
  opts.on("-pNAME", "--primary=NAME", "Interface to use as primary (defaults to the first one)") do |v|
42
49
  primary = v
43
50
  end
@@ -70,8 +77,8 @@ unless preserve_interfaces
70
77
  json["interfaces"] = interfaces.map{|i| i.first}.join(',')
71
78
  interfaces.each do |iface|
72
79
  name, subnet, ipo, mac = iface
73
- mac = (["52"] + 5.times.map { '%02x' % rand(0..255) }).join(':') unless mac
74
- ipo = rand(1..253) unless ipo
80
+ mac ||= (["52"] + 5.times.map { '%02x' % rand(0..255) }).join(':')
81
+ ipo ||= rand(1..253)
75
82
  ip = "192.168.#{subnet}.#{ipo}"
76
83
  json["macaddress_#{name}"] = mac
77
84
  json["ipaddress_#{name}"] = ip
@@ -83,7 +90,14 @@ unless preserve_interfaces
83
90
  end
84
91
  end
85
92
  puts JSON.pretty_generate(json)
86
- resource = RestClient::Resource.new(url + "/api/v2/discovered_hosts/facts", verify_ssl: OpenSSL::SSL::VERIFY_NONE)
87
- response = resource.post({"facts" => json}.to_json, {content_type: :json, accept: :json})
93
+ if use_facts_endpoint
94
+ endpoint = url + "/api/v2/hosts/facts"
95
+ payload = {"facts" => json, "name" => json["hostname"] || json["networking"]["fqdn"]}
96
+ else
97
+ endpoint = url + "/api/v2/discovered_hosts/facts"
98
+ payload = {"facts" => json}
99
+ end
100
+ resource = RestClient::Resource.new(endpoint, verify_ssl: OpenSSL::SSL::VERIFY_NONE)
101
+ response = resource.post(payload.to_json, {content_type: :json, accept: :json})
88
102
  puts response.code
89
103
  puts response.body
@@ -43,12 +43,12 @@ module ForemanDiscovery
43
43
 
44
44
  initializer 'foreman_discovery.register_plugin', :before => :finisher_hook do |app|
45
45
  Foreman::Plugin.register :foreman_discovery do
46
- requires_foreman '>= 1.22.0'
46
+ requires_foreman '>= 1.24.0'
47
47
 
48
48
  # discovered hosts permissions
49
49
  security_block :discovery do
50
50
  permission :view_discovered_hosts, {
51
- :discovered_hosts => [:index, :show, :auto_complete_search],
51
+ :discovered_hosts => [:index, :show, :auto_complete_search, :welcome],
52
52
  :"api/v2/discovered_hosts" => [:index, :show]
53
53
  }, :resource_type => 'Host'
54
54
  permission :submit_discovered_hosts, {
@@ -1,3 +1,3 @@
1
1
  module ForemanDiscovery
2
- VERSION = "15.1.0"
2
+ VERSION = "16.0.0"
3
3
  end
@@ -7,10 +7,10 @@
7
7
  # Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>, 2015-2016
8
8
  msgid ""
9
9
  msgstr ""
10
- "Project-Id-Version: foreman_discovery 15.0.0\n"
10
+ "Project-Id-Version: foreman_discovery 15.1.0\n"
11
11
  "Report-Msgid-Bugs-To: \n"
12
- "POT-Creation-Date: 2019-05-13 15:39+0200\n"
13
- "PO-Revision-Date: 2019-04-18 19:36+0000\n"
12
+ "POT-Creation-Date: 2019-10-22 11:55+0200\n"
13
+ "PO-Revision-Date: 2019-10-22 20:43+0000\n"
14
14
  "Last-Translator: Lukáš Zapletal\n"
15
15
  "Language-Team: Catalan (http://www.transifex.com/foreman/foreman/language/ca/)\n"
16
16
  "MIME-Version: 1.0\n"
@@ -99,7 +99,7 @@ msgid "Execute rules against a discovered host"
99
99
  msgstr ""
100
100
 
101
101
  #: ../app/controllers/api/v2/discovered_hosts_controller.rb:122
102
- #: ../app/controllers/discovered_hosts_controller.rb:159
102
+ #: ../app/controllers/discovered_hosts_controller.rb:160
103
103
  msgid "Host %{host} was provisioned with rule %{rule}"
104
104
  msgstr "L'amfitrió %{host} va ser aprovisionat amb la regla %{rule}"
105
105
 
@@ -108,7 +108,7 @@ msgid "Unable to provision %{host}: %{errors}"
108
108
  msgstr "No es pot aprovisionar a %{host}: %{errors}"
109
109
 
110
110
  #: ../app/controllers/api/v2/discovered_hosts_controller.rb:131
111
- #: ../app/controllers/discovered_hosts_controller.rb:166
111
+ #: ../app/controllers/discovered_hosts_controller.rb:167
112
112
  msgid "No rule found for host %s"
113
113
  msgstr "No s'ha trobat cap regla per a l'amfitrió %s"
114
114
 
@@ -117,12 +117,12 @@ msgid "Execute rules against all currently discovered hosts"
117
117
  msgstr "Executa les regles contra tots els amfitrions detectats actualment"
118
118
 
119
119
  #: ../app/controllers/api/v2/discovered_hosts_controller.rb:142
120
- #: ../app/controllers/discovered_hosts_controller.rb:172
120
+ #: ../app/controllers/discovered_hosts_controller.rb:173
121
121
  msgid "Errors during auto provisioning: %s"
122
122
  msgstr "Erros durant l'auto aprovisionament: %s"
123
123
 
124
124
  #: ../app/controllers/api/v2/discovered_hosts_controller.rb:145
125
- #: ../app/controllers/discovered_hosts_controller.rb:175
125
+ #: ../app/controllers/discovered_hosts_controller.rb:176
126
126
  msgid "No discovered hosts to provision"
127
127
  msgstr "Sense amfitrions descoberts per aprovisionar"
128
128
 
@@ -143,7 +143,7 @@ msgid "Rebooting all discovered hosts"
143
143
  msgstr "S'estan reiniciant tots els amfitrions descoberts"
144
144
 
145
145
  #: ../app/controllers/api/v2/discovered_hosts_controller.rb:207
146
- #: ../app/controllers/discovered_hosts_controller.rb:128
146
+ #: ../app/controllers/discovered_hosts_controller.rb:129
147
147
  msgid "Discovered hosts are rebooting now"
148
148
  msgstr "Ara s'estan reiniciant els amfitrions descoberts"
149
149
 
@@ -217,11 +217,11 @@ msgstr ""
217
217
  msgid "No hostgroup associated with rule '%s'"
218
218
  msgstr ""
219
219
 
220
- #: ../app/controllers/concerns/foreman/controller/discovered_extensions.rb:69
220
+ #: ../app/controllers/concerns/foreman/controller/discovered_extensions.rb:73
221
221
  msgid "Errors during reboot: %s"
222
222
  msgstr "Errors durant el reinici: %s"
223
223
 
224
- #: ../app/controllers/concerns/foreman/controller/discovered_extensions.rb:87
224
+ #: ../app/controllers/concerns/foreman/controller/discovered_extensions.rb:91
225
225
  msgid "No discovered hosts to reboot"
226
226
  msgstr ""
227
227
 
@@ -229,91 +229,91 @@ msgstr ""
229
229
  msgid "Successfully provisioned %s"
230
230
  msgstr ""
231
231
 
232
- #: ../app/controllers/discovered_hosts_controller.rb:96
232
+ #: ../app/controllers/discovered_hosts_controller.rb:97
233
233
  msgid "Facts refreshed for %s"
234
234
  msgstr "Els objectes d'interès que s'han refrescat per a %s"
235
235
 
236
- #: ../app/controllers/discovered_hosts_controller.rb:98
236
+ #: ../app/controllers/discovered_hosts_controller.rb:99
237
237
  msgid "Failed to refresh facts for %s"
238
238
  msgstr "No s'ha pogut refrescar els objectes d'interès per a %s"
239
239
 
240
- #: ../app/controllers/discovered_hosts_controller.rb:101
240
+ #: ../app/controllers/discovered_hosts_controller.rb:102
241
241
  msgid "Failed to refresh facts for %{hostname} with error %{error_message}"
242
242
  msgstr ""
243
243
 
244
- #: ../app/controllers/discovered_hosts_controller.rb:108
244
+ #: ../app/controllers/discovered_hosts_controller.rb:109
245
245
  msgid "Host of type %s can not be rebooted"
246
246
  msgstr ""
247
247
 
248
- #: ../app/controllers/discovered_hosts_controller.rb:112
248
+ #: ../app/controllers/discovered_hosts_controller.rb:113
249
249
  msgid "Rebooting host %s"
250
250
  msgstr "S'està reiniciant l'amfitrió %s"
251
251
 
252
- #: ../app/controllers/discovered_hosts_controller.rb:114
252
+ #: ../app/controllers/discovered_hosts_controller.rb:115
253
253
  msgid "Failed to reboot host %s"
254
254
  msgstr "No s'ha pogut reiniciar l'amfitrió %s."
255
255
 
256
- #: ../app/controllers/discovered_hosts_controller.rb:117
256
+ #: ../app/controllers/discovered_hosts_controller.rb:118
257
257
  msgid "Failed to reboot host %{hostname} with error %{error_message}"
258
258
  msgstr ""
259
259
 
260
- #: ../app/controllers/discovered_hosts_controller.rb:131
260
+ #: ../app/controllers/discovered_hosts_controller.rb:132
261
261
  msgid "Failed to reboot hosts with error %s"
262
262
  msgstr ""
263
263
 
264
- #: ../app/controllers/discovered_hosts_controller.rb:149
264
+ #: ../app/controllers/discovered_hosts_controller.rb:150
265
265
  msgid "Destroyed selected hosts"
266
266
  msgstr "S'han destruït els amfitrions seleccionats"
267
267
 
268
- #: ../app/controllers/discovered_hosts_controller.rb:151
268
+ #: ../app/controllers/discovered_hosts_controller.rb:152
269
269
  msgid "The following hosts were not deleted: %s"
270
270
  msgstr ""
271
271
 
272
- #: ../app/controllers/discovered_hosts_controller.rb:163
272
+ #: ../app/controllers/discovered_hosts_controller.rb:164
273
273
  msgid "Failed to auto provision host %s: %s"
274
274
  msgstr "No s'ha pogut auto aprovisionar l'amfitrió %s: %s"
275
275
 
276
- #: ../app/controllers/discovered_hosts_controller.rb:191
276
+ #: ../app/controllers/discovered_hosts_controller.rb:192
277
277
  msgid "Discovered hosts are provisioning now"
278
278
  msgstr "Els amfitrions descoberts ara tenen aprovisionament"
279
279
 
280
- #: ../app/controllers/discovered_hosts_controller.rb:223
280
+ #: ../app/controllers/discovered_hosts_controller.rb:224
281
281
  msgid "Highlights"
282
282
  msgstr ""
283
283
 
284
- #: ../app/controllers/discovered_hosts_controller.rb:223
284
+ #: ../app/controllers/discovered_hosts_controller.rb:224
285
285
  msgid "Storage"
286
286
  msgstr ""
287
287
 
288
- #: ../app/controllers/discovered_hosts_controller.rb:223
288
+ #: ../app/controllers/discovered_hosts_controller.rb:224
289
289
  msgid "Hardware"
290
290
  msgstr ""
291
291
 
292
- #: ../app/controllers/discovered_hosts_controller.rb:223
292
+ #: ../app/controllers/discovered_hosts_controller.rb:224
293
293
  msgid "Network"
294
294
  msgstr ""
295
295
 
296
- #: ../app/controllers/discovered_hosts_controller.rb:223
296
+ #: ../app/controllers/discovered_hosts_controller.rb:224
297
297
  msgid "Software"
298
298
  msgstr ""
299
299
 
300
- #: ../app/controllers/discovered_hosts_controller.rb:223
300
+ #: ../app/controllers/discovered_hosts_controller.rb:224
301
301
  msgid "IPMI"
302
302
  msgstr ""
303
303
 
304
- #: ../app/controllers/discovered_hosts_controller.rb:223
304
+ #: ../app/controllers/discovered_hosts_controller.rb:224
305
305
  msgid "Miscellaneous"
306
306
  msgstr ""
307
307
 
308
- #: ../app/controllers/discovered_hosts_controller.rb:301
308
+ #: ../app/controllers/discovered_hosts_controller.rb:302
309
309
  msgid "No hosts were found with that id or name"
310
310
  msgstr "No s'ha trobat cap amfitrió amb aquest ID o nom"
311
311
 
312
- #: ../app/controllers/discovered_hosts_controller.rb:305
312
+ #: ../app/controllers/discovered_hosts_controller.rb:306
313
313
  msgid "No hosts selected"
314
314
  msgstr "Cap amfitrió seleccionat"
315
315
 
316
- #: ../app/controllers/discovered_hosts_controller.rb:311
316
+ #: ../app/controllers/discovered_hosts_controller.rb:312
317
317
  msgid "Something went wrong while selecting hosts - %s"
318
318
  msgstr "Alguna cosa va anar malament mentre se seleccionaven els amfitrions - %s"
319
319
 
@@ -342,7 +342,7 @@ msgstr "Refresca els objectes d'interès"
342
342
 
343
343
  #: ../app/helpers/discovered_hosts_helper.rb:16
344
344
  #: ../app/helpers/discovered_hosts_helper.rb:30
345
- #: ../app/models/setting/discovered.rb:26
345
+ #: ../app/models/setting/discovered.rb:22
346
346
  #: ../app/views/discovered_hosts/_discovered_hosts_list.html.erb:39
347
347
  msgid "Reboot"
348
348
  msgstr "Reinicia"
@@ -466,51 +466,51 @@ msgid_plural ""
466
466
  msgstr[0] ""
467
467
  msgstr[1] ""
468
468
 
469
- #: ../app/models/host/discovered.rb:41
469
+ #: ../app/models/host/discovered.rb:40
470
470
  msgid "Fact + prefix"
471
471
  msgstr ""
472
472
 
473
- #: ../app/models/host/discovered.rb:42
473
+ #: ../app/models/host/discovered.rb:41
474
474
  msgid "Random name"
475
475
  msgstr ""
476
476
 
477
- #: ../app/models/host/discovered.rb:43
477
+ #: ../app/models/host/discovered.rb:42
478
478
  msgid "MAC-based name"
479
479
  msgstr ""
480
480
 
481
- #: ../app/models/host/discovered.rb:52
481
+ #: ../app/models/host/discovered.rb:51
482
482
  msgid "Invalid facts, must be a Hash"
483
483
  msgstr "Objectes d'interès no vàlids, han de tenir un Hash"
484
484
 
485
- #: ../app/models/host/discovered.rb:57
485
+ #: ../app/models/host/discovered.rb:56
486
486
  msgid ""
487
487
  "Expected discovery_fact '%s' is missing, unable to detect primary interface "
488
488
  "and set hostname"
489
489
  msgstr ""
490
490
 
491
- #: ../app/models/host/discovered.rb:70
491
+ #: ../app/models/host/discovered.rb:69
492
492
  msgid ""
493
493
  "Invalid facts: hash does not contain a valid value for any of the facts in "
494
494
  "the discovery_hostname setting: %s"
495
495
  msgstr ""
496
496
 
497
- #: ../app/models/host/discovered.rb:96
497
+ #: ../app/models/host/discovered.rb:95
498
498
  msgid "Facts could not be imported"
499
499
  msgstr ""
500
500
 
501
- #: ../app/models/host/discovered.rb:151
501
+ #: ../app/models/host/discovered.rb:150
502
502
  msgid "Could not get facts from proxy %{url}: %{error}"
503
503
  msgstr "No s'han pogut obtenir els objectes d'interès del servidor intermediari %{url}: %{error}"
504
504
 
505
- #: ../app/models/host/discovered.rb:159
505
+ #: ../app/models/host/discovered.rb:158
506
506
  msgid "Unable to reboot %{name} via %{url}: %{msg}"
507
507
  msgstr "No es pot reiniciar %{name} a través de %{url}: %{msg}"
508
508
 
509
- #: ../app/models/host/discovered.rb:167
509
+ #: ../app/models/host/discovered.rb:166
510
510
  msgid "Unable to perform kexec on %{name} via %{url}: %{msg}"
511
511
  msgstr "No es pot realitzar kexec a %{name} a través de %{url}: %{msg}"
512
512
 
513
- #: ../app/models/host/discovered.rb:186
513
+ #: ../app/models/host/discovered.rb:185
514
514
  msgid "Invalid hostname: Could not normalize the hostname"
515
515
  msgstr ""
516
516
 
@@ -538,191 +538,191 @@ msgstr ""
538
538
  msgid "Rebuild DNS for %s"
539
539
  msgstr ""
540
540
 
541
- #: ../app/models/setting/discovered.rb:19
541
+ #: ../app/models/setting/discovered.rb:15
542
542
  msgid "The default location to place discovered hosts in"
543
543
  msgstr ""
544
544
 
545
- #: ../app/models/setting/discovered.rb:19
545
+ #: ../app/models/setting/discovered.rb:15
546
546
  msgid "Discovery location"
547
547
  msgstr ""
548
548
 
549
- #: ../app/models/setting/discovered.rb:20
549
+ #: ../app/models/setting/discovered.rb:16
550
550
  msgid "The default organization to place discovered hosts in"
551
551
  msgstr ""
552
552
 
553
- #: ../app/models/setting/discovered.rb:20
553
+ #: ../app/models/setting/discovered.rb:16
554
554
  msgid "Discovery organization"
555
555
  msgstr ""
556
556
 
557
- #: ../app/models/setting/discovered.rb:21
557
+ #: ../app/models/setting/discovered.rb:17
558
558
  msgid "Fact name to use for primary interface detection"
559
559
  msgstr ""
560
560
 
561
- #: ../app/models/setting/discovered.rb:21
561
+ #: ../app/models/setting/discovered.rb:17
562
562
  msgid "Interface fact"
563
563
  msgstr ""
564
564
 
565
- #: ../app/models/setting/discovered.rb:22
565
+ #: ../app/models/setting/discovered.rb:18
566
566
  msgid ""
567
567
  "Automatic bond interface (if another interface is detected on the same VLAN "
568
568
  "via LLDP)"
569
569
  msgstr ""
570
570
 
571
- #: ../app/models/setting/discovered.rb:22
571
+ #: ../app/models/setting/discovered.rb:18
572
572
  msgid "Create bond interfaces"
573
573
  msgstr ""
574
574
 
575
- #: ../app/models/setting/discovered.rb:23
575
+ #: ../app/models/setting/discovered.rb:19
576
576
  msgid "Clean all reported facts during provisioning (except discovery facts)"
577
577
  msgstr ""
578
578
 
579
- #: ../app/models/setting/discovered.rb:23
579
+ #: ../app/models/setting/discovered.rb:19
580
580
  msgid "Clean all facts"
581
581
  msgstr ""
582
582
 
583
- #: ../app/models/setting/discovered.rb:24
583
+ #: ../app/models/setting/discovered.rb:20
584
584
  msgid "List of facts to use for the hostname (separated by comma, first wins)"
585
585
  msgstr ""
586
586
 
587
- #: ../app/models/setting/discovered.rb:24
587
+ #: ../app/models/setting/discovered.rb:20
588
588
  msgid "Hostname facts"
589
589
  msgstr ""
590
590
 
591
- #: ../app/models/setting/discovered.rb:25
591
+ #: ../app/models/setting/discovered.rb:21
592
592
  msgid ""
593
593
  "Automatically provision newly discovered hosts, according to the "
594
594
  "provisioning rules"
595
595
  msgstr ""
596
596
 
597
- #: ../app/models/setting/discovered.rb:25
597
+ #: ../app/models/setting/discovered.rb:21
598
598
  msgid "Auto provisioning"
599
599
  msgstr ""
600
600
 
601
- #: ../app/models/setting/discovered.rb:26
601
+ #: ../app/models/setting/discovered.rb:22
602
602
  msgid "Automatically reboot or kexec discovered host during provisioning"
603
603
  msgstr ""
604
604
 
605
- #: ../app/models/setting/discovered.rb:27
605
+ #: ../app/models/setting/discovered.rb:23
606
606
  msgid "The default prefix to use for the host name, must start with a letter"
607
607
  msgstr ""
608
608
 
609
- #: ../app/models/setting/discovered.rb:27
609
+ #: ../app/models/setting/discovered.rb:23
610
610
  msgid "Hostname prefix"
611
611
  msgstr ""
612
612
 
613
- #: ../app/models/setting/discovered.rb:28
613
+ #: ../app/models/setting/discovered.rb:24
614
614
  msgid "Extra facter columns to show in host lists (separate by comma)"
615
615
  msgstr ""
616
616
 
617
- #: ../app/models/setting/discovered.rb:28
617
+ #: ../app/models/setting/discovered.rb:24
618
618
  msgid "Fact columns"
619
619
  msgstr ""
620
620
 
621
- #: ../app/models/setting/discovered.rb:29
621
+ #: ../app/models/setting/discovered.rb:25
622
622
  msgid "Regex to organize facts for highlights section - e.g. ^(abc|cde)$"
623
623
  msgstr ""
624
624
 
625
- #: ../app/models/setting/discovered.rb:29
625
+ #: ../app/models/setting/discovered.rb:25
626
626
  msgid "Highlighted facts"
627
627
  msgstr ""
628
628
 
629
- #: ../app/models/setting/discovered.rb:30
629
+ #: ../app/models/setting/discovered.rb:26
630
630
  msgid "Regex to organize facts for storage section"
631
631
  msgstr "Expressió regular per a organitzar els objectes d'interès per a la secció d'emmagatzematge"
632
632
 
633
- #: ../app/models/setting/discovered.rb:30
633
+ #: ../app/models/setting/discovered.rb:26
634
634
  msgid "Storage facts"
635
635
  msgstr ""
636
636
 
637
- #: ../app/models/setting/discovered.rb:31
637
+ #: ../app/models/setting/discovered.rb:27
638
638
  msgid "Regex to organize facts for software section"
639
639
  msgstr "Expressió regular per a organitzar els objectes d'interès per a la secció de programari"
640
640
 
641
- #: ../app/models/setting/discovered.rb:31
641
+ #: ../app/models/setting/discovered.rb:27
642
642
  msgid "Software facts"
643
643
  msgstr ""
644
644
 
645
- #: ../app/models/setting/discovered.rb:32
645
+ #: ../app/models/setting/discovered.rb:28
646
646
  msgid "Regex to organize facts for hardware section"
647
647
  msgstr "Expressió regular per a organitzar els objectes d'interès per a la secció de programari"
648
648
 
649
- #: ../app/models/setting/discovered.rb:32
649
+ #: ../app/models/setting/discovered.rb:28
650
650
  msgid "Hardware facts"
651
651
  msgstr ""
652
652
 
653
- #: ../app/models/setting/discovered.rb:33
653
+ #: ../app/models/setting/discovered.rb:29
654
654
  msgid "Regex to organize facts for network section"
655
655
  msgstr "Expressió regular per a organitzar els objectes d'interès per a la secció de xarxa"
656
656
 
657
- #: ../app/models/setting/discovered.rb:33
657
+ #: ../app/models/setting/discovered.rb:29
658
658
  msgid "Network facts"
659
659
  msgstr ""
660
660
 
661
- #: ../app/models/setting/discovered.rb:34
661
+ #: ../app/models/setting/discovered.rb:30
662
662
  msgid "Regex to organize facts for ipmi section"
663
663
  msgstr "Expressió regular per a organitzar els objectes d'interès per a la secció ipmi"
664
664
 
665
- #: ../app/models/setting/discovered.rb:34
665
+ #: ../app/models/setting/discovered.rb:30
666
666
  msgid "IPMI facts"
667
667
  msgstr ""
668
668
 
669
- #: ../app/models/setting/discovered.rb:35
669
+ #: ../app/models/setting/discovered.rb:31
670
670
  msgid ""
671
671
  "Automatically generate PXE configuration to pin a newly discovered host to "
672
672
  "discovery"
673
673
  msgstr ""
674
674
 
675
- #: ../app/models/setting/discovered.rb:35
675
+ #: ../app/models/setting/discovered.rb:31
676
676
  msgid "Lock PXE"
677
677
  msgstr ""
678
678
 
679
- #: ../app/models/setting/discovered.rb:36
679
+ #: ../app/models/setting/discovered.rb:32
680
680
  msgid "PXELinux template to be used when pinning a host to discovery"
681
681
  msgstr ""
682
682
 
683
- #: ../app/models/setting/discovered.rb:36
683
+ #: ../app/models/setting/discovered.rb:32
684
684
  msgid "Locked PXELinux template name"
685
685
  msgstr ""
686
686
 
687
- #: ../app/models/setting/discovered.rb:37
687
+ #: ../app/models/setting/discovered.rb:33
688
688
  msgid "PXEGrub template to be used when pinning a host to discovery"
689
689
  msgstr ""
690
690
 
691
- #: ../app/models/setting/discovered.rb:37
691
+ #: ../app/models/setting/discovered.rb:33
692
692
  msgid "Locked PXEGrub template name"
693
693
  msgstr ""
694
694
 
695
- #: ../app/models/setting/discovered.rb:38
695
+ #: ../app/models/setting/discovered.rb:34
696
696
  msgid "PXEGrub2 template to be used when pinning a host to discovery"
697
697
  msgstr ""
698
698
 
699
- #: ../app/models/setting/discovered.rb:38
699
+ #: ../app/models/setting/discovered.rb:34
700
700
  msgid "Locked PXEGrub2 template name"
701
701
  msgstr ""
702
702
 
703
- #: ../app/models/setting/discovered.rb:39
703
+ #: ../app/models/setting/discovered.rb:35
704
704
  msgid "Force DNS entries creation when provisioning discovered host"
705
705
  msgstr ""
706
706
 
707
- #: ../app/models/setting/discovered.rb:39
707
+ #: ../app/models/setting/discovered.rb:35
708
708
  msgid "Force DNS"
709
709
  msgstr ""
710
710
 
711
- #: ../app/models/setting/discovered.rb:40
711
+ #: ../app/models/setting/discovered.rb:36
712
712
  msgid ""
713
713
  "Do not allow to discover existing managed host matching MAC of a "
714
714
  "provisioning NIC (errors out early)"
715
715
  msgstr ""
716
716
 
717
- #: ../app/models/setting/discovered.rb:40
717
+ #: ../app/models/setting/discovered.rb:36
718
718
  msgid "Error on existing NIC"
719
719
  msgstr ""
720
720
 
721
- #: ../app/models/setting/discovered.rb:41
721
+ #: ../app/models/setting/discovered.rb:37
722
722
  msgid "Discovery hostname naming pattern"
723
723
  msgstr ""
724
724
 
725
- #: ../app/models/setting/discovered.rb:41
725
+ #: ../app/models/setting/discovered.rb:37
726
726
  msgid "Type of name generator"
727
727
  msgstr ""
728
728
 
@@ -740,6 +740,10 @@ msgid ""
740
740
  "%{filter}"
741
741
  msgstr ""
742
742
 
743
+ #: ../app/services/foreman_discovery/host_converter.rb:39
744
+ msgid "IPAM must be configured for subnet '%s'"
745
+ msgstr ""
746
+
743
747
  #: ../app/services/foreman_discovery/node_api/node_resource.rb:75
744
748
  msgid "Image API returned HTTP/%{code} with '%{body}"
745
749
  msgstr ""
@@ -778,11 +782,11 @@ msgstr "Les CPU"
778
782
  msgid "Memory"
779
783
  msgstr "Memòria"
780
784
 
781
- #: ../app/views/discovered_hosts/_discovered_host_modal.html.erb:23
785
+ #: ../app/views/discovered_hosts/_discovered_host_modal.html.erb:25
782
786
  msgid "Customize Host"
783
787
  msgstr ""
784
788
 
785
- #: ../app/views/discovered_hosts/_discovered_host_modal.html.erb:24
789
+ #: ../app/views/discovered_hosts/_discovered_host_modal.html.erb:26
786
790
  msgid "Create Host"
787
791
  msgstr "Crea un amfitrió"
788
792
 
@@ -1092,3 +1096,19 @@ msgid ""
1092
1096
  "ID of Discovery Proxy to use within this subnet for managing connection to "
1093
1097
  "discovered hosts"
1094
1098
  msgstr ""
1099
+
1100
+ #: action_names.rb:2
1101
+ msgid "Import Puppet classes"
1102
+ msgstr ""
1103
+
1104
+ #: action_names.rb:3
1105
+ msgid "Import facts"
1106
+ msgstr ""
1107
+
1108
+ #: action_names.rb:4
1109
+ msgid "Action with sub plans"
1110
+ msgstr ""
1111
+
1112
+ #: action_names.rb:5
1113
+ msgid "Remote action:"
1114
+ msgstr ""