foreman_discovery 1.3.0 → 1.4.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ODM5ZGE4MTdiMTViZDllOTAxN2QzNDQzNmE4ZDI1NGVkOGIyOTUwZA==
4
+ OGNmNzE1ODY2NjM0ZWZmMmI0MzljNDI5NzkxZDllZDAxOTI5NzE3Zg==
5
5
  data.tar.gz: !binary |-
6
- NTJlNWM3MTVjNTE5MTBiNGNmNmY2YmZiN2RmMWJjZjIzYjJlZDJkMg==
6
+ MDk2NTBhMjNhYWU5NWI0ZDhhMzRlYWU1NDVmMjdhN2RiMDI5ZjVmOQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZDQ0NzQxYjFmMDgyZTgzYmQ2NDg2OTBiZjExNDY2NmQ1OGVkNWMwZmI4ZmI2
10
- NTNmYTc0N2VlMzliNWEzZTIyOTBhZDE4NGUxODkzZTc1Y2VhMDFkMGQ3ODZk
11
- N2ViMTA2MjZjY2I5OWZkOTc4ZGQ1NGVmOGYxZjI3ZTU3NjBlODk=
9
+ ZjA4NTZmNjczZjBiODExN2Q1ZDcyYjA1ODg5NmJjZjY4NDlkYWUyYzUwY2I4
10
+ ZTU2Yzc5ZGQzNWY3MzBlNGI5ZmU3ODY1ZThmZTI1MDg4YThmZDgzY2E1MTgy
11
+ ODc2ZmVhZjhkOWQxMDAzYzc2YjQ4NzllNGE5NzFkYzgzNzQ3YmI=
12
12
  data.tar.gz: !binary |-
13
- OGE0ZWM2ZWZlZDAxMjAwMDQ0MjhjNjFlOTk0MmVkMGY4MDk1MDIwZmNmZGJl
14
- OWY3Y2Y3ZTI0ZjRkZjc5MDUwYTgzYzI2ZGYwZWNmNzcxZTdmM2U2ZDU0YTEy
15
- YjI5MzVjNTA2MTMxNDdhOWFmYTY5ZTk4OTY1YmE5NDQwMGQyNTM=
13
+ MDMyNGQwYmJlYmZlODU0YWRjNzlkYjQ1YzFhMjE0ZTY4MDI0YjkxYWM1NmY0
14
+ OTRiMmM2NmJmNTYyY2M5MjA2ZjMyMDhiOTFkY2E0MDRiN2UwYzhmNjM5ZmIw
15
+ ZTA4NTQ4ZjE2ZTg3NWVlODU1Y2Q3NjRhNDZkNGNlYzE2YjcxMWI=
data/README.md CHANGED
@@ -66,7 +66,7 @@ Discovery output. For a login prompt (nightly images only) use tty2.
66
66
 
67
67
  ### Download via installer
68
68
 
69
- As of Foreman 1.5, the foreman-installer is able to automatically download
69
+ As of Foreman 1.6, the foreman-installer is able to automatically download
70
70
  latest stable CentOS6 images. For this, re-run the installer with the
71
71
  following option:
72
72
 
@@ -145,7 +145,12 @@ This can still be overriden with the command line opts.
145
145
 
146
146
  It is important to have *IPAPPEND 2* option which adds BOOTIF=MAC option which
147
147
  is then reported via facter as `discovery_bootif` which is key fact which is
148
- used for provisioning.
148
+ used for provisioning. Without this line, DNS will not work properly as well.
149
+
150
+ It is important to know that DNS servers from DHCP are enabled only for the
151
+ interface that was specified via the BOOTIF option. This means when a system
152
+ have multiple NICs, DNS will work for the correct interface - the one that was
153
+ booted from.
149
154
 
150
155
  _Warning_: For now, the selinux=0 option *must* be provided, the image is read
151
156
  only anyway but we plan to enable and test with SELinux too.
@@ -212,6 +217,16 @@ If the booted machine fails to register with Foreman, then there are a number of
212
217
  * Check DNS is working for that image, or use an IP in `foreman.url`
213
218
  * Check DHCP is handing IPs to the booted image correctly
214
219
 
220
+ When working with production images (no root password set), it is still
221
+ possible to log on as root. Generate some root password:
222
+
223
+ $ openssl passwd -salt RH redhat
224
+ RHhwCLrQXB8zE
225
+
226
+ And then provide it as an kernel command line option:
227
+
228
+ ... stateless rootpw=RHhwCLrQXB8zE
229
+
215
230
  # API
216
231
 
217
232
  see the [API README](README.api.md)
@@ -5,17 +5,23 @@ module Api
5
5
  before_filter :find_resource, :except => %w{index create facts}
6
6
  skip_before_filter :authorize, :only => :facts
7
7
 
8
- api :GET, "/discovered_hosts/", "List all discovered hosts"
9
- param :search, String, :desc => "Filter results"
10
- param :order, String, :desc => "Sort results"
11
- param :page, String, :desc => "paginate results"
12
- param :per_page, String, :desc => "number of entries per request"
8
+ resource_description do
9
+ resource_id 'discovered_hosts'
10
+ api_version 'v2'
11
+ api_base_url "/api/v2"
12
+ end
13
+
14
+ api :GET, "/discovered_hosts/", N_("List all discovered hosts")
15
+ param :search, String, :desc => N_("filter results")
16
+ param :order, String, :desc => N_("sort results")
17
+ param :page, String, :desc => N_("paginate results")
18
+ param :per_page, String, :desc => N_("number of entries per request")
13
19
 
14
20
  def index
15
21
  @discovered_hosts = resource_scope.search_for(*search_options).paginate(paginate_options)
16
22
  end
17
23
 
18
- api :GET, "/discovered_hosts/:id/", "Show a discovered host"
24
+ api :GET, "/discovered_hosts/:id/", N_("Show a discovered host")
19
25
  param :id, :identifier_dottable, :required => true
20
26
 
21
27
  def show
@@ -29,7 +35,7 @@ module Api
29
35
  end
30
36
  end
31
37
 
32
- api :POST, "/discovered_hosts/", "Create a discovered host"
38
+ api :POST, "/discovered_hosts/", N_("Create a discovered host")
33
39
  param_group :discovered_host, :as => :create
34
40
 
35
41
  def create
@@ -37,13 +43,13 @@ module Api
37
43
  process_response @discovered_host.save
38
44
  end
39
45
 
40
- api :PUT, "/discovered_hosts/:id/", "Provision a discovered host"
46
+ api :PUT, "/discovered_hosts/:id/", N_("Provision a discovered host")
41
47
  param :id, :identifier, :required => true
42
48
  param :discovered_host, Hash, :action_aware => true do
43
49
  param :name, String
44
50
  param :environment_id, String
45
- param :ip, String, :desc => "not required if using a subnet with dhcp proxy"
46
- param :mac, String, :desc => "not required if its a virtual machine"
51
+ param :ip, String, :desc => N_("not required if using a subnet with DHCP proxy")
52
+ param :mac, String, :desc => N_("not required if it's a virtual machine")
47
53
  param :architecture_id, :number
48
54
  param :domain_id, :number
49
55
  param :puppet_proxy_id, :number
@@ -63,7 +69,7 @@ module Api
63
69
  param :enabled, :bool
64
70
  param :provision_method, String
65
71
  param :managed, :bool
66
- param :progress_report_id, String, :desc => 'UUID to track orchestration tasks status, GET /api/orchestration/:UUID/tasks'
72
+ param :progress_report_id, String, :desc => N_("UUID to track orchestration tasks status, GET /api/orchestration/:UUID/tasks")
67
73
  param :capabilities, String
68
74
  end
69
75
 
@@ -76,15 +82,15 @@ module Api
76
82
  process_response @host.update_attributes(params[:discovered_host])
77
83
  end
78
84
 
79
- api :DELETE, "/discovered_hosts/:id/", "Delete a discovered host"
85
+ api :DELETE, "/discovered_hosts/:id/", N_("Delete a discovered host")
80
86
  param :id, :identifier, :required => true
81
87
 
82
88
  def destroy
83
89
  process_response @discovered_host.destroy
84
90
  end
85
91
 
86
- api :POST, "/discovered_hosts/facts", "Upload facts for a host, creating the host if required."
87
- param :facts, Hash, :required => true, :desc => "hash containing the facts for the host"
92
+ api :POST, "/discovered_hosts/facts", N_("Upload facts for a host, creating the host if required")
93
+ param :facts, Hash, :required => true, :desc => N_("hash containing facts for the host")
88
94
 
89
95
  def facts
90
96
  @discovered_host, state = Host::Discovered.import_host_and_facts(params[:facts])
@@ -15,9 +15,11 @@ class DiscoveredHostsController < ::ApplicationController
15
15
  layout 'layouts/application'
16
16
 
17
17
  def index
18
- hosts = ::Host::Discovered.search_for(params[:search], :order => params[:order])
18
+ search = resource_base.search_for(params[:search], :order => params[:order])
19
19
  respond_to do |format|
20
- format.html { @hosts = hosts.list.paginate :page => params[:page] }
20
+ format.html do
21
+ @hosts = search.paginate(:page => params[:page])
22
+ end
21
23
  format.json { render :json => hosts }
22
24
  end
23
25
  end
@@ -20,16 +20,21 @@ class Host::Discovered < ::Host::Base
20
20
  scoped_search :in => :organization, :on => :name, :rename => :organization, :complete_value => true if SETTINGS[:organizations_enabled]
21
21
  scoped_search :in => :subnet, :on => :network, :complete_value => true, :rename => :subnet
22
22
 
23
- # This `where` shouldn't be necessary, but randomly the sql query on the line above
24
- # sometimes loses the `where` clause, leading to all Hosts on the Discovery index
25
- # this seems like a rails bug, TODO: figure out whats really wrong here
26
- scope :list, lambda { where(:type => "Host::Discovered").includes(:model, :location, :organization) }
23
+ default_scope lambda {
24
+ org = Organization.current
25
+ loc = Location.current
26
+ conditions = {}
27
+ conditions[:organization_id] = org.subtree_ids if org
28
+ conditions[:location_id] = loc.subtree_ids if loc
29
+ where(conditions)
30
+ }
27
31
 
28
32
  def self.import_host_and_facts facts
29
33
  raise(::Foreman::Exception.new(N_("Invalid facts, must be a Hash"))) unless facts.is_a?(Hash)
30
34
  fact_name = Setting[:discovery_fact] || 'macaddress'
31
- hostname = facts[fact_name].try(:downcase).try(:gsub,/:/,'').try(:sub,/^/,'mac')
35
+ hostname = facts[fact_name].try(:downcase).try(:gsub,/:/,'').try(:sub,/^/,'mac')
32
36
  raise(::Foreman::Exception.new(N_("Invalid facts: hash does not contain the required fact '%s'"), fact_name)) unless hostname
37
+ raise(::Foreman::Exception.new(N_("Invalid facts: hash does not contain IP address"))) unless facts['ipaddress']
33
38
 
34
39
  # filter facts
35
40
  facts.reject!{|k,v| k =~ /kernel|operatingsystem|osfamily|ruby|path|time|swap|free|filesystem/i }
@@ -70,13 +75,13 @@ class Host::Discovered < ::Host::Base
70
75
  super + [:ip]
71
76
  end
72
77
 
73
- def populate_fields_from_facts facts = self.facts_hash
78
+ def populate_fields_from_facts facts = self.facts_hash, type = 'puppet'
74
79
  importer = super
75
80
  self.subnet = Subnet.subnet_for(importer.ip)
76
81
  self.save
77
82
  end
78
83
 
79
- # no need to store anything in the db if the password is our default
84
+ # no need to store anything in the db if the password is our default
80
85
  def root_pass
81
86
  read_attribute(:root_pass).blank? ? (hostgroup.try(:root_pass) || Setting[:root_pass]) : read_attribute(:root_pass)
82
87
  end
@@ -0,0 +1,16 @@
1
+ <h4 class="ca"><%= _('Discovered Host Pool') %> - <%= @current_permission %></h4>
2
+ <% all_hosts = Host::Discovered.search_for '' %>
3
+ <% hosts = all_hosts.limit(5) %>
4
+ <% if hosts.empty? %>
5
+ <p class="ca"><%= _("No discovered hosts available") %></p>
6
+ <% else %>
7
+ <table class="table table-striped ellipsis">
8
+ <% hosts.each do |host| %>
9
+ <tr>
10
+ <td><%= link_to h(host.name), discovered_host_path(host) %></td>
11
+ <td><%= host.ip %></td>
12
+ </tr>
13
+ <% end %>
14
+ </table>
15
+ <p class="ca"><%= link_to n_("Total pool size","Total pool size", all_hosts.size), discovered_hosts_path %> - <%= all_hosts.size %> </p>
16
+ <% end %>
data/config/routes.rb CHANGED
@@ -26,7 +26,7 @@ Rails.application.routes.draw do
26
26
  ## API
27
27
  namespace :api, :defaults => {:format => 'json'} do
28
28
  scope "(:apiv)", :module => :v2, :defaults => {:apiv => 'v2'}, :apiv => /v1|v2/, :constraints => ApiConstraints.new(:version => 2) do
29
- resources :discovered_hosts do
29
+ resources :discovered_hosts, :except => [:new, :edit] do
30
30
  collection do
31
31
  post 'facts'
32
32
  end
@@ -1,4 +1,3 @@
1
- require 'deface'
2
1
  require 'fast_gettext'
3
2
  require 'gettext_i18n_rails'
4
3
 
@@ -19,25 +18,36 @@ module ForemanDiscovery
19
18
 
20
19
  initializer 'foreman_discovery.register_gettext', :after => :load_config_initializers do |app|
21
20
  locale_dir = File.join(File.expand_path('../../..', __FILE__), 'locale')
22
- locale_domain = 'discovery'
21
+ locale_domain = 'foreman_discovery'
23
22
 
24
23
  Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
25
24
  end
26
25
 
27
26
  initializer 'foreman_discovery.register_plugin', :after=> :finisher_hook do |app|
28
27
  Foreman::Plugin.register :foreman_discovery do
29
- requires_foreman '> 1.4'
28
+ requires_foreman '> 1.5'
30
29
 
31
30
  # Add permissions
32
31
  security_block :discovery do
33
- permission :view_discovered_hosts, {:discovered_hosts => [:index, :show, :auto_complete_search, :refresh_facts] }, :resource_type => 'Host'
34
- permission :provision_discovered_hosts, {:discovered_hosts => [:new, :create] }, :resource_type => 'Host'
35
- permission :edit_discovered_hosts, {:discovered_hosts => [:edit, :update, :update_multiple_location,
36
- :select_multiple_organization,
37
- :update_multiple_organization,
38
- :select_multiple_location] }, :resource_type => 'Host'
39
- permission :destroy_discovered_hosts, {:discovered_hosts => [:destroy, :submit_multiple_destroy, :multiple_destroy] }, :resource_type => 'Host'
40
-
32
+ permission :view_discovered_hosts, {
33
+ :discovered_hosts => [:index, :show, :auto_complete_search],
34
+ :"api/v2/discovered_hosts" => [:index, :show]
35
+ }, :resource_type => 'Host'
36
+ permission :provision_discovered_hosts, {
37
+ :discovered_hosts => [:new, :create],
38
+ :"api/v2/discovered_hosts" => [:create]
39
+ }, :resource_type => 'Host'
40
+ permission :edit_discovered_hosts, {
41
+ :discovered_hosts => [:edit, :update, :update_multiple_location,
42
+ :select_multiple_organization,
43
+ :update_multiple_organization,
44
+ :select_multiple_location, :refresh_facts],
45
+ :"api/v2/discovered_hosts" => [:update, :facts]
46
+ }, :resource_type => 'Host'
47
+ permission :destroy_discovered_hosts, {
48
+ :discovered_hosts => [:destroy, :submit_multiple_destroy, :multiple_destroy],
49
+ :"api/v2/discovered_hosts" => [:destroy]
50
+ }, :resource_type => 'Host'
41
51
  end
42
52
 
43
53
  # Add a new role called 'Discovery' if it doesn't exist
@@ -45,9 +55,20 @@ module ForemanDiscovery
45
55
 
46
56
  #add menu entry
47
57
  menu :top_menu, :discovery, :url_hash => {:controller=> :discovered_hosts, :action=>:index},
48
- :caption=> N_('Discovered hosts'),
49
- :parent => :hosts_menu,
50
- :after=>:hosts
58
+ :caption=> N_('Discovered hosts'),
59
+ :parent => :hosts_menu,
60
+ :after=>:hosts
61
+
62
+ # add dashboard widget
63
+ widget 'discovery_widget', :name=>N_('Discovery widget'), :sizex => 4, :sizey =>1
64
+
65
+ end
66
+ end
67
+ initializer "foreman_discovery.apipie" do
68
+ # this condition is here for compatibility reason to work with Foreman 1.4.x
69
+ if Apipie.configuration.api_controllers_matcher.is_a?(Array) && Apipie.configuration.respond_to?(:checksum_path)
70
+ Apipie.configuration.api_controllers_matcher << "#{ForemanDiscovery::Engine.root}/app/controllers/api/v2/*.rb"
71
+ Apipie.configuration.checksum_path += ['/discovered_hosts/']
51
72
  end
52
73
  end
53
74
  # Include extensions to models in this config.to_prepare block
@@ -1,3 +1,3 @@
1
1
  module ForemanDiscovery
2
- VERSION = "1.3.0"
2
+ VERSION = "1.4.0.rc1"
3
3
  end
data/locale/Makefile ADDED
@@ -0,0 +1,62 @@
1
+ #
2
+ # Makefile for PO merging and MO generation. More info in the README.
3
+ #
4
+ # make all-mo (default) - generate MO files
5
+ # make check - check translations using translate-tool
6
+ # make tx-update - download and merge translations from Transifex
7
+ # make clean - clean everything
8
+ #
9
+ DOMAIN = foreman_discovery
10
+ VERSION = $(shell ruby -e 'require "rubygems";spec = Gem::Specification::load(Dir.glob("../*.gemspec")[0]);puts spec.version')
11
+ POTFILE = $(DOMAIN).pot
12
+ MOFILE = $(DOMAIN).mo
13
+ POFILES = $(shell find . -name '*.po')
14
+ MOFILES = $(patsubst %.po,%.mo,$(POFILES))
15
+ POXFILES = $(patsubst %.po,%.pox,$(POFILES))
16
+
17
+ %.mo: %.po
18
+ mkdir -p $(shell dirname $@)/LC_MESSAGES
19
+ msgfmt -o $(shell dirname $@)/LC_MESSAGES/$(MOFILE) $<
20
+
21
+ # Generate MO files from PO files
22
+ all-mo: $(MOFILES)
23
+
24
+ # Check for malformed strings
25
+ %.pox: %.po
26
+ msgfmt -c $<
27
+ pofilter --nofuzzy -t variables -t blank -t urls -t emails -t long -t newlines \
28
+ -t endwhitespace -t endpunc -t puncspacing -t options -t printf -t validchars --gnome $< > $@
29
+ cat $@
30
+ ! grep -q msgid $@
31
+
32
+ check: $(POXFILES)
33
+ msgfmt -c ${POTFILE}
34
+
35
+ # Merge PO files
36
+ update-po:
37
+ for f in $(shell find ./ -name "*.po") ; do \
38
+ msgmerge -N --backup=none -U $$f ${POTFILE} ; \
39
+ done
40
+
41
+ # Unify duplicate translations
42
+ uniq-po:
43
+ for f in $(shell find ./ -name "*.po") ; do \
44
+ msguniq $$f -o $$f ; \
45
+ done
46
+
47
+ tx-pull:
48
+ tx pull -f
49
+ for f in $(POFILES) ; do \
50
+ sed -i 's/^\("Project-Id-Version: \).*$$/\1$(DOMAIN) $(VERSION)\\n"/' $$f; \
51
+ done
52
+ -git commit -a -m "i18n - pulling from tx"
53
+
54
+ reset-po:
55
+ # merging po files is unnecessary when using transifex.com
56
+ git checkout -- ../locale/*/*po
57
+
58
+ tx-update: tx-pull reset-po $(MOFILES)
59
+ # amend mo files
60
+ git add ../locale/*/LC_MESSAGES
61
+ git commit -a --amend -m "i18n - pulling from tx"
62
+ -echo Changes commited!
@@ -4,13 +4,14 @@
4
4
  #
5
5
  #
6
6
  # Translators:
7
- # bechtoldt <mail@arnoldbechtoldt.com>, 2014
7
+ # Arnold Bechtoldt <mail@arnoldbechtoldt.com>, 2014
8
+ # simon11 <simon.stieger.98@live.de>, 2014
8
9
  msgid ""
9
10
  msgstr ""
10
- "Project-Id-Version: Foreman\n"
11
+ "Project-Id-Version: foreman_discovery 1.3.0\n"
11
12
  "Report-Msgid-Bugs-To: \n"
12
- "POT-Creation-Date: 2014-04-08 15:59+0200\n"
13
- "PO-Revision-Date: 2014-04-09 10:00+0000\n"
13
+ "POT-Creation-Date: 2014-08-07 10:19+0100\n"
14
+ "PO-Revision-Date: 2014-08-08 09:41+0000\n"
14
15
  "Last-Translator: Lukáš Zapletal\n"
15
16
  "Language-Team: German (http://www.transifex.com/projects/p/foreman/language/de/)\n"
16
17
  "MIME-Version: 1.0\n"
@@ -20,13 +21,13 @@ msgstr ""
20
21
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
21
22
 
22
23
  msgid "%s - The following hosts are about to be changed"
23
- msgstr "%s - Die folgenden Hosts werden gerade geändert"
24
+ msgstr "%s - Die folgenden Hosts werden geändert"
24
25
 
25
26
  msgid "%s ago"
26
27
  msgstr "vor %s"
27
28
 
28
29
  msgid "Are you sure?"
29
- msgstr "Sind Sie sicher?"
30
+ msgstr "Bist du sicher?"
30
31
 
31
32
  msgid "Assign Location"
32
33
  msgstr "Standort zuweisen"
@@ -40,20 +41,26 @@ msgstr "Abbrechen"
40
41
  msgid "Could not get facts from proxy: %s"
41
42
  msgstr "Konnte keine Fakten vom Proxy empfangen: %s"
42
43
 
44
+ msgid "Create a discovered host"
45
+ msgstr ""
46
+
43
47
  msgid "Delete"
44
48
  msgstr "Löschen"
45
49
 
46
50
  msgid "Delete %s?"
47
- msgstr "Löschen %s?"
51
+ msgstr "%s löschen?"
52
+
53
+ msgid "Delete a discovered host"
54
+ msgstr ""
48
55
 
49
56
  msgid "Delete hosts"
50
- msgstr "Lösche Hosts"
57
+ msgstr "Hosts löschen"
51
58
 
52
59
  msgid "Destroyed selected hosts"
53
- msgstr "ausgewählte gelöschte Systeme"
60
+ msgstr "Ausgewählte Hosts gelöscht"
54
61
 
55
62
  msgid "Discovered host: %s"
56
- msgstr "Entdeckte Hosts: %s"
63
+ msgstr "Entdeckter Host: %s"
57
64
 
58
65
  msgid "Discovered hosts"
59
66
  msgstr "Entdeckte Hosts"
@@ -62,10 +69,10 @@ msgid "Fact"
62
69
  msgstr "Fakt"
63
70
 
64
71
  msgid "Facts discovered on this host"
65
- msgstr "Auf diesem Host entdeckte Fakten:"
72
+ msgstr "Auf diesem Host entdeckte Fakten"
66
73
 
67
74
  msgid "Facts refreshed for %s"
68
- msgstr "Fakten erneuert für %s"
75
+ msgstr "Fakten für %s erneuert"
69
76
 
70
77
  msgid "Failed to import facts for Host::Discovered"
71
78
  msgstr "Fakten für Host::Discovered konnten nicht importiert werden"
@@ -77,7 +84,7 @@ msgid "Failed to reboot: %s"
77
84
  msgstr "Neustart fehlgeschlagen: %s"
78
85
 
79
86
  msgid "Failed to refresh facts for %s"
80
- msgstr "Konnte für %s keine Fakten erneuern"
87
+ msgstr "Fakten für %s konnten nicht erneuert werden"
81
88
 
82
89
  msgid "Host Pool"
83
90
  msgstr "Host-Pool"
@@ -86,16 +93,19 @@ msgid "Imported Host::Discovered"
86
93
  msgstr "Host::Discovered wurde importiert"
87
94
 
88
95
  msgid "Invalid facts, must be a Hash"
89
- msgstr ""
96
+ msgstr "Ungültige Fakten, es muss sich um einen Hash handeln"
90
97
 
91
98
  msgid "Invalid facts: hash does not contain the required fact '%s'"
92
- msgstr ""
99
+ msgstr "Ungültige Fakten: Der Hash enthält den benötigten Fakt nicht: %s"
93
100
 
94
101
  msgid "Last facts upload"
95
102
  msgstr "Letzter Fakten-Upload"
96
103
 
104
+ msgid "List all discovered hosts"
105
+ msgstr ""
106
+
97
107
  msgid "Location"
98
- msgstr "Lokation"
108
+ msgstr "Ort"
99
109
 
100
110
  msgid "Model"
101
111
  msgstr "Modell"
@@ -104,22 +114,25 @@ msgid "Name"
104
114
  msgstr "Name"
105
115
 
106
116
  msgid "No hosts selected"
107
- msgstr "Keine Systeme ausgewählt"
117
+ msgstr "Keine Hosts ausgewählt"
108
118
 
109
119
  msgid "No hosts were found with that id or name"
110
- msgstr "es wurden keine Systeme mit dieser ID oder Namen gefunden"
120
+ msgstr "Es wurden keine Systeme mit dieser ID oder diesem Namen gefunden"
111
121
 
112
122
  msgid "Organization"
113
123
  msgstr "Organisation"
114
124
 
115
125
  msgid "Please Confirm"
116
- msgstr "bitte bestätigen"
126
+ msgstr "Bitte bestätigen"
117
127
 
118
128
  msgid "Provision"
119
129
  msgstr "Bereitstellen"
120
130
 
131
+ msgid "Provision a discovered host"
132
+ msgstr ""
133
+
121
134
  msgid "Rebooting %s"
122
- msgstr "Starte %s neu"
135
+ msgstr "%s wird neu gestartet"
123
136
 
124
137
  msgid "Refresh facts"
125
138
  msgstr "Fakten erneuern"
@@ -131,13 +144,16 @@ msgid "Select all items in this page"
131
144
  msgstr "Alle Elemente auf dieser Seite auswählen"
132
145
 
133
146
  msgid "Select location"
134
- msgstr "Lokation auswählen"
147
+ msgstr "Ort auswählen"
135
148
 
136
149
  msgid "Select organization"
137
150
  msgstr "Organisation auswählen"
138
151
 
152
+ msgid "Show a discovered host"
153
+ msgstr ""
154
+
139
155
  msgid "Something went wrong while selecting hosts - %s"
140
- msgstr "Bei der Systemauswahl von %s ist ein Fehler aufgetreten"
156
+ msgstr "Beim Auswählen der Hosts ist ein Fehler aufgetreten - %s"
141
157
 
142
158
  msgid "Submit"
143
159
  msgstr "Absenden"
@@ -149,21 +165,28 @@ msgid "The default fact name to use for the MAC of the system"
149
165
  msgstr "Der Standard-Faktenname zum Verwenden für die MAC des Systems"
150
166
 
151
167
  msgid "The default location to place discovered hosts in"
152
- msgstr "Standard-Lokation zum Platzieren entdeckter Hosts"
168
+ msgstr "Standard-Ort zum Platzieren entdeckter Hosts"
153
169
 
154
170
  msgid "The default organization to place discovered hosts in"
155
171
  msgstr "Standard-Organisation zum Platzieren entdeckter Hosts"
156
172
 
157
173
  msgid "The following hosts were not deleted: %s"
158
- msgstr "Die folgende Systeme wurden nicht gelöscht: %s"
174
+ msgstr "Die folgenden Systeme wurden nicht gelöscht: %s"
159
175
 
160
176
  msgid ""
161
177
  "This might take a while, as all hosts, facts and reports will be destroyed "
162
178
  "as well"
163
179
  msgstr "Dies kann eine Weile dauern, weil alle Systeme, Fakten und Reporte auch gelöscht werden"
164
180
 
181
+ msgid ""
182
+ "UUID to track orchestration tasks status, GET /api/orchestration/:UUID/tasks"
183
+ msgstr ""
184
+
165
185
  msgid "Unassigned hosts"
166
- msgstr "Unzugeordnete Hosts"
186
+ msgstr "Nicht zugeordnete Hosts"
187
+
188
+ msgid "Upload facts for a host, creating the host if required"
189
+ msgstr ""
167
190
 
168
191
  msgid "Value"
169
192
  msgstr "Wert"
@@ -171,5 +194,26 @@ msgstr "Wert"
171
194
  msgid "Warning"
172
195
  msgstr "Warnung"
173
196
 
197
+ msgid "filter results"
198
+ msgstr ""
199
+
200
+ msgid "hash containing facts for the host"
201
+ msgstr ""
202
+
174
203
  msgid "items selected. Uncheck to Clear"
175
- msgstr "Elemente ausgewählt. Abwählen um zu Leeren"
204
+ msgstr "Elemente ausgewählt. Zum Leeren abwählen"
205
+
206
+ msgid "not required if it's a virtual machine"
207
+ msgstr ""
208
+
209
+ msgid "not required if using a subnet with DHCP proxy"
210
+ msgstr ""
211
+
212
+ msgid "number of entries per request"
213
+ msgstr ""
214
+
215
+ msgid "paginate results"
216
+ msgstr ""
217
+
218
+ msgid "sort results"
219
+ msgstr ""