foreman_remote_execution 4.2.2 → 4.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/js_ci.yml +29 -0
  3. data/.github/workflows/{ci.yml → ruby_ci.yml} +22 -50
  4. data/.prettierrc +4 -0
  5. data/.rubocop.yml +13 -49
  6. data/.rubocop_todo.yml +326 -102
  7. data/Gemfile +1 -4
  8. data/app/controllers/api/v2/job_invocations_controller.rb +28 -23
  9. data/app/controllers/foreman_remote_execution/concerns/api/v2/registration_commands_controller_extensions.rb +19 -0
  10. data/app/controllers/job_templates_controller.rb +4 -4
  11. data/app/controllers/ui_job_wizard_controller.rb +30 -0
  12. data/app/helpers/job_invocations_helper.rb +2 -2
  13. data/app/helpers/remote_execution_helper.rb +35 -8
  14. data/app/lib/actions/remote_execution/run_host_job.rb +68 -5
  15. data/app/lib/foreman_remote_execution/provider_input.rb +29 -0
  16. data/app/lib/foreman_remote_execution/renderer/scope/input.rb +1 -0
  17. data/app/models/concerns/foreman_remote_execution/host_extensions.rb +5 -5
  18. data/app/models/host_status/execution_status.rb +12 -5
  19. data/app/models/invocation_provider_input_value.rb +12 -0
  20. data/app/models/job_invocation.rb +28 -8
  21. data/app/models/job_invocation_composer.rb +72 -17
  22. data/app/models/remote_execution_provider.rb +17 -2
  23. data/app/models/setting/remote_execution.rb +10 -0
  24. data/app/models/ssh_execution_provider.rb +4 -4
  25. data/app/models/template_invocation.rb +2 -0
  26. data/app/overrides/execution_interface.rb +8 -8
  27. data/app/overrides/subnet_proxies.rb +6 -6
  28. data/app/services/renderer_methods.rb +12 -0
  29. data/app/views/job_invocations/_form.html.erb +8 -0
  30. data/app/views/template_invocations/show.html.erb +30 -23
  31. data/config/routes.rb +5 -0
  32. data/db/migrate/20180110104432_rename_template_invocation_permission.rb +1 -1
  33. data/db/migrate/20190111153330_remove_remote_execution_without_proxy_setting.rb +4 -4
  34. data/db/migrate/20210312074713_add_provider_inputs.rb +10 -0
  35. data/extra/cockpit/foreman-cockpit-session +6 -6
  36. data/foreman_remote_execution.gemspec +1 -2
  37. data/lib/foreman_remote_execution/engine.rb +22 -7
  38. data/lib/foreman_remote_execution/version.rb +1 -1
  39. data/lib/tasks/foreman_remote_execution_tasks.rake +1 -18
  40. data/locale/action_names.rb +1 -0
  41. data/locale/de/foreman_remote_execution.po +77 -27
  42. data/locale/en/foreman_remote_execution.po +77 -27
  43. data/locale/en_GB/foreman_remote_execution.po +77 -27
  44. data/locale/es/foreman_remote_execution.po +77 -27
  45. data/locale/foreman_remote_execution.pot +241 -163
  46. data/locale/fr/foreman_remote_execution.po +77 -27
  47. data/locale/ja/foreman_remote_execution.po +77 -27
  48. data/locale/ko/foreman_remote_execution.po +77 -27
  49. data/locale/pt_BR/foreman_remote_execution.po +77 -27
  50. data/locale/ru/foreman_remote_execution.po +77 -27
  51. data/locale/zh_CN/foreman_remote_execution.po +77 -27
  52. data/locale/zh_TW/foreman_remote_execution.po +77 -27
  53. data/package.json +4 -2
  54. data/test/functional/api/v2/job_invocations_controller_test.rb +38 -5
  55. data/test/functional/api/v2/registration_controller_test.rb +4 -13
  56. data/test/functional/ui_job_wizard_controller_test.rb +16 -0
  57. data/test/helpers/remote_execution_helper_test.rb +16 -0
  58. data/test/unit/job_invocation_composer_test.rb +86 -2
  59. data/test/unit/job_invocation_report_template_test.rb +57 -0
  60. data/webpack/JobWizard/JobWizard.js +96 -0
  61. data/webpack/JobWizard/JobWizard.scss +14 -0
  62. data/webpack/JobWizard/JobWizardConstants.js +6 -0
  63. data/webpack/JobWizard/JobWizardSelectors.js +38 -0
  64. data/webpack/JobWizard/__tests__/JobWizard.test.js +13 -0
  65. data/webpack/JobWizard/__tests__/__snapshots__/JobWizard.test.js.snap +32 -0
  66. data/webpack/JobWizard/__tests__/__snapshots__/integration.test.js.snap +43 -0
  67. data/webpack/JobWizard/__tests__/fixtures.js +26 -0
  68. data/webpack/JobWizard/__tests__/integration.test.js +156 -0
  69. data/webpack/JobWizard/index.js +32 -0
  70. data/webpack/JobWizard/steps/AdvancedFields/AdvancedFields.js +93 -0
  71. data/webpack/JobWizard/steps/AdvancedFields/Fields.js +181 -0
  72. data/webpack/JobWizard/steps/AdvancedFields/__tests__/AdvancedFields.test.js +25 -0
  73. data/webpack/JobWizard/steps/AdvancedFields/__tests__/__snapshots__/AdvancedFields.test.js.snap +249 -0
  74. data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.js +109 -0
  75. data/webpack/JobWizard/steps/CategoryAndTemplate/CategoryAndTemplate.test.js +52 -0
  76. data/webpack/JobWizard/steps/CategoryAndTemplate/__snapshots__/CategoryAndTemplate.test.js.snap +113 -0
  77. data/webpack/JobWizard/steps/CategoryAndTemplate/index.js +94 -0
  78. data/webpack/JobWizard/steps/form/FormHelpers.js +19 -0
  79. data/webpack/JobWizard/steps/form/GroupedSelectField.js +91 -0
  80. data/webpack/JobWizard/steps/form/SelectField.js +48 -0
  81. data/webpack/JobWizard/steps/form/__tests__/GroupedSelectField.test.js +38 -0
  82. data/webpack/JobWizard/steps/form/__tests__/SelectField.test.js +23 -0
  83. data/webpack/JobWizard/steps/form/__tests__/__snapshots__/GroupedSelectField.test.js.snap +37 -0
  84. data/webpack/JobWizard/steps/form/__tests__/__snapshots__/SelectField.test.js.snap +23 -0
  85. data/webpack/Routes/routes.js +12 -0
  86. data/webpack/__mocks__/foremanReact/common/helpers.js +1 -0
  87. data/webpack/__mocks__/foremanReact/history.js +1 -0
  88. data/webpack/__mocks__/foremanReact/redux/API/APISelectors.js +21 -2
  89. data/webpack/__mocks__/foremanReact/redux/API/index.js +5 -0
  90. data/webpack/__mocks__/foremanReact/routes/common/PageLayout/PageLayout.js +10 -0
  91. data/webpack/global_index.js +10 -0
  92. data/webpack/index.js +3 -4
  93. data/webpack/react_app/components/RecentJobsCard/RecentJobsCard.js +83 -0
  94. data/webpack/react_app/components/RecentJobsCard/constants.js +1 -0
  95. data/webpack/react_app/components/RecentJobsCard/index.js +1 -0
  96. data/webpack/react_app/components/RecentJobsCard/styles.css +15 -0
  97. data/webpack/react_app/components/RegistrationExtension/RexInterface.js +50 -0
  98. data/webpack/react_app/components/RegistrationExtension/__tests__/RexInterface.test.js +9 -0
  99. data/webpack/react_app/components/RegistrationExtension/__tests__/__snapshots__/RexInterface.test.js.snap +35 -0
  100. data/webpack/react_app/components/TargetingHosts/TargetingHostsPage.js +1 -1
  101. data/webpack/react_app/components/TargetingHosts/TargetingHostsPage.scss +0 -3
  102. data/webpack/react_app/components/TargetingHosts/__tests__/TargetingHostsSelectors.test.js +8 -3
  103. data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsPage.test.js.snap +1 -1
  104. data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsSelectors.test.js.snap +7 -2
  105. data/webpack/react_app/extend/fillRecentJobsCard.js +11 -0
  106. data/webpack/react_app/extend/fillregistrationAdvanced.js +11 -0
  107. data/webpack/react_app/extend/reducers.js +5 -0
  108. metadata +58 -20
  109. data/app/views/api/v2/registration/_form.html.erb +0 -12
@@ -1,12 +1,16 @@
1
1
  <% items = [{ :caption => _('Job invocations'), :url => job_invocations_path },
2
2
  { :caption => @template_invocation.job_invocation.description,
3
- :url => job_invocation_path(@template_invocation.job_invocation_id) },
4
- { :caption => _('Template Invocation for %s') % @template_invocation.host.name }] %>
3
+ :url => job_invocation_path(@template_invocation.job_invocation_id) }]
5
4
 
6
- <% breadcrumbs(:resource_url => template_invocations_api_job_invocation_path(@template_invocation.job_invocation_id),
5
+ if @host
6
+ items << { :caption => _('Template Invocation for %s') % @host.name }
7
+ breadcrumbs(:resource_url => template_invocations_api_job_invocation_path(@template_invocation.job_invocation_id),
7
8
  :name_field => 'host_name',
8
9
  :switcher_item_url => template_invocation_path(':id'),
9
10
  :items => items)
11
+ else
12
+ breadcrumbs(items: items, switchable: false)
13
+ end
10
14
  %>
11
15
 
12
16
  <% stylesheet 'foreman_remote_execution/foreman_remote_execution' %>
@@ -18,31 +22,34 @@
18
22
  <%= button_group(link_to_function(_('Toggle command'), '$("div.preview").toggle()', :class => 'btn btn-default'),
19
23
  link_to_function(_('Toggle STDERR'), '$("div.line.stderr").toggle()', :class => 'btn btn-default'),
20
24
  link_to_function(_('Toggle STDOUT'), '$("div.line.stdout").toggle()', :class => 'btn btn-default'),
21
- link_to_function(_('Toggle DEBUG'), '$("div.line.debug").toggle()', :class => 'btn btn-default')) %>
25
+ link_to_function(_('Toggle DEBUG'), '$("div.line.debug").toggle()', :class => 'btn btn-default')) if @host %>
22
26
  <%= button_group(template_invocation_task_buttons(@template_invocation_task, @template_invocation.job_invocation)) %>
23
27
  </div>
24
28
  </div>
29
+ <% if @host %>
30
+ <h3><%= _('Target: ') %><%= link_to(@host.name, host_path(@host)) %></h3>
25
31
 
26
- <h3><%= _('Target: ') %><%= link_to(@host.name, host_path(@host)) %></h3>
27
-
28
- <div class="preview hidden">
29
- <%= preview_box(@template_invocation, @host) %>
30
- </div>
32
+ <div class="preview hidden">
33
+ <%= preview_box(@template_invocation, @host) %>
34
+ </div>
31
35
 
32
- <div class="terminal" data-refresh-url="<%= template_invocation_path(@template_invocation) %>">
33
- <% if @error %>
34
- <div class="line error"><%= @error %></div>
35
- <% else %>
36
- <%= link_to_function(_('Scroll to bottom'), '$("html, body").animate({ scrollTop: $(document).height() }, "slow");', :class => 'pull-right scroll-link-bottom') %>
36
+ <div class="terminal" data-refresh-url="<%= template_invocation_path(@template_invocation) %>">
37
+ <% if @error %>
38
+ <div class="line error"><%= @error %></div>
39
+ <% else %>
40
+ <%= link_to_function(_('Scroll to bottom'), '$("html, body").animate({ scrollTop: $(document).height() }, "slow");', :class => 'pull-right scroll-link-bottom') %>
37
41
 
38
- <div class="printable">
39
- <%= render :partial => 'output_line_set', :collection => normalize_line_sets(@line_sets) %>
40
- </div>
42
+ <div class="printable">
43
+ <%= render :partial => 'output_line_set', :collection => normalize_line_sets(@line_sets) %>
44
+ </div>
41
45
 
42
- <%= link_to_function(_('Scroll to top'), '$("html, body").animate({ scrollTop: 0 }, "slow");', :class => 'pull-right scroll-link-top') %>
43
- <% end %>
44
- </div>
46
+ <%= link_to_function(_('Scroll to top'), '$("html, body").animate({ scrollTop: 0 }, "slow");', :class => 'pull-right scroll-link-top') %>
47
+ <% end %>
48
+ </div>
45
49
 
46
- <script>
47
- <%= render :partial => 'refresh.js' %>
48
- </script>
50
+ <script>
51
+ <%= render :partial => 'refresh.js' %>
52
+ </script>
53
+ <% else %>
54
+ <%= _("Could not display data for job invocation.") %>
55
+ <% end %>
data/config/routes.rb CHANGED
@@ -43,6 +43,10 @@ Rails.application.routes.draw do
43
43
  get 'cockpit/host_ssh_params/:id', to: 'cockpit#host_ssh_params'
44
44
  end
45
45
  get 'cockpit/redirect', to: 'cockpit#redirect'
46
+ get 'ui_job_wizard/categories', to: 'ui_job_wizard#categories'
47
+ get 'ui_job_wizard/template/:id', to: 'ui_job_wizard#template'
48
+
49
+ match '/experimental/job_wizard', to: 'react#index', :via => [:get]
46
50
 
47
51
  namespace :api, :defaults => {:format => 'json'} do
48
52
  scope '(:apiv)', :module => :v2, :defaults => {:apiv => 'v2'}, :apiv => /v1|v2/, :constraints => ApiConstraints.new(:version => 2, :default => true) do
@@ -56,6 +60,7 @@ Rails.application.routes.draw do
56
60
  post 'rerun'
57
61
  get 'template_invocations', :to => 'template_invocations#template_invocations'
58
62
  get 'outputs'
63
+ post 'outputs'
59
64
  end
60
65
  end
61
66
 
@@ -16,7 +16,7 @@ class RenameTemplateInvocationPermission < ActiveRecord::Migration[4.2]
16
16
  return if old_permission.nil?
17
17
 
18
18
  new_permission = Permission.find_or_create_by(:name => new,
19
- :resource_type => 'TemplateInvocation')
19
+ :resource_type => 'TemplateInvocation')
20
20
  old_permission.filterings.each do |filtering|
21
21
  filtering.permission_id = new_permission.id
22
22
  filtering.save!
@@ -5,9 +5,9 @@ class RemoveRemoteExecutionWithoutProxySetting < ActiveRecord::Migration[5.2]
5
5
 
6
6
  def down
7
7
  Setting.create!(:name => 'remote_execution_without_proxy',
8
- :description => N_('When enabled, the remote execution will try to run '\
9
- 'the commands directly, when no proxy with remote execution '\
10
- 'feature is configured for the host.'),
11
- :default => false, :full_name => N_('Fallback Without Proxy'))
8
+ :description => N_('When enabled, the remote execution will try to run '\
9
+ 'the commands directly, when no proxy with remote execution '\
10
+ 'feature is configured for the host.'),
11
+ :default => false, :full_name => N_('Fallback Without Proxy'))
12
12
  end
13
13
  end
@@ -0,0 +1,10 @@
1
+ class AddProviderInputs < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :invocation_provider_input_values do |t|
4
+ t.references :template_invocation, :null => false, :index => { :name => 'idx_inv_provider_input_values_on_templ_inv_id' }
5
+ t.string :value, :null => false, :limit => 255
6
+ t.string :name, :null => false, :limit => 255
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -56,13 +56,13 @@ end
56
56
 
57
57
  def send_auth_challenge(challenge)
58
58
  send_control({ "command" => "authorize",
59
- "cookie" => "1234", # must be present, but value doesn't matter
60
- "challenge" => challenge})
59
+ "cookie" => "1234", # must be present, but value doesn't matter
60
+ "challenge" => challenge})
61
61
  end
62
62
 
63
63
  def send_auth_response(response)
64
64
  send_control({ "command" => "authorize",
65
- "response" => response})
65
+ "response" => response})
66
66
  end
67
67
 
68
68
  def read_auth_reply
@@ -76,9 +76,9 @@ end
76
76
  def exit_with_problem(problem, message, auth_methods)
77
77
  LOG.error("#{problem} - #{message}")
78
78
  send_control({ "command" => "init",
79
- "problem" => problem,
80
- "message" => message,
81
- "auth-method-results" => auth_methods})
79
+ "problem" => problem,
80
+ "message" => message,
81
+ "auth-method-results" => auth_methods})
82
82
  exit 1
83
83
  end
84
84
 
@@ -26,9 +26,8 @@ Gem::Specification.new do |s|
26
26
  s.add_dependency 'deface'
27
27
  s.add_dependency 'dynflow', '>= 1.0.2', '< 2.0.0'
28
28
  s.add_dependency 'foreman_remote_execution_core'
29
- s.add_dependency 'foreman-tasks', '>= 0.15.1'
29
+ s.add_dependency 'foreman-tasks', '>= 4.1.0'
30
30
 
31
31
  s.add_development_dependency 'factory_bot_rails', '~> 4.8.0'
32
- s.add_development_dependency 'rubocop', '~> 0.80.0'
33
32
  s.add_development_dependency 'rdoc'
34
33
  end
@@ -1,5 +1,3 @@
1
- require 'foreman_remote_execution_core'
2
-
3
1
  module ForemanRemoteExecution
4
2
  DYNFLOW_QUEUE = :remote_execution
5
3
 
@@ -54,12 +52,12 @@ module ForemanRemoteExecution
54
52
  initializer 'foreman_remote_execution.register_plugin', before: :finisher_hook do |_app|
55
53
  Foreman::Plugin.register :foreman_remote_execution do
56
54
  requires_foreman '>= 2.2'
55
+ register_global_js_file 'global'
57
56
 
58
57
  apipie_documented_controllers ["#{ForemanRemoteExecution::Engine.root}/app/controllers/api/v2/*.rb"]
59
58
  ApipieDSL.configuration.dsl_classes_matchers += [
60
59
  "#{ForemanRemoteExecution::Engine.root}/app/lib/foreman_remote_execution/renderer/**/*.rb",
61
60
  ]
62
-
63
61
  automatic_assets(false)
64
62
  precompile_assets(*assets_to_precompile)
65
63
 
@@ -68,7 +66,8 @@ module ForemanRemoteExecution
68
66
  permission :view_job_templates, { :job_templates => [:index, :show, :revision, :auto_complete_search, :auto_complete_job_category, :preview, :export],
69
67
  :'api/v2/job_templates' => [:index, :show, :revision, :export],
70
68
  :'api/v2/template_inputs' => [:index, :show],
71
- :'api/v2/foreign_input_sets' => [:index, :show]}, :resource_type => 'JobTemplate'
69
+ :'api/v2/foreign_input_sets' => [:index, :show],
70
+ :ui_job_wizard => [:categories, :template]}, :resource_type => 'JobTemplate'
72
71
  permission :create_job_templates, { :job_templates => [:new, :create, :clone_template, :import],
73
72
  :'api/v2/job_templates' => [:create, :clone, :import] }, :resource_type => 'JobTemplate'
74
73
  permission :edit_job_templates, { :job_templates => [:edit, :update],
@@ -137,6 +136,13 @@ module ForemanRemoteExecution
137
136
  parent: :monitor_menu,
138
137
  after: :audits
139
138
 
139
+ menu :labs_menu, :job_wizard,
140
+ url_hash: { controller: 'job_wizard', action: :index },
141
+ caption: N_('Job wizard'),
142
+ parent: :lab_features_menu,
143
+ url: '/experimental/job_wizard',
144
+ after: :host_wizard
145
+
140
146
  register_custom_status HostStatus::ExecutionStatus
141
147
  # add dashboard widget
142
148
  # widget 'foreman_remote_execution_widget', name: N_('Foreman plugin template widget'), sizex: 4, sizey: 1
@@ -146,6 +152,8 @@ module ForemanRemoteExecution
146
152
  ctx.permit :execution
147
153
  end
148
154
 
155
+ extend_template_helpers ForemanRemoteExecution::RendererMethods
156
+
149
157
  extend_rabl_template 'api/v2/smart_proxies/main', 'api/v2/smart_proxies/pubkey'
150
158
  extend_rabl_template 'api/v2/interfaces/main', 'api/v2/interfaces/execution_flag'
151
159
  extend_rabl_template 'api/v2/subnets/show', 'api/v2/subnets/remote_execution_proxies'
@@ -154,9 +162,15 @@ module ForemanRemoteExecution
154
162
 
155
163
  # Extend Registration module
156
164
  extend_allowed_registration_vars :remote_execution_interface
157
- extend_page 'registration/_form' do |cx|
158
- cx.add_pagelet :global_registration, name: N_('Remote Execution'), partial: 'api/v2/registration/form', priority: 100, id: 'remote_execution_interface'
159
- end
165
+ ForemanTasks.dynflow.eager_load_actions!
166
+ extend_observable_events(
167
+ ::Dynflow::Action.descendants.select do |klass|
168
+ klass <= ::Actions::ObservableAction
169
+ end.map(&:namespaced_event_names) +
170
+ RemoteExecutionFeature.all.pluck(:label).map do |label|
171
+ ::Actions::RemoteExecution::RunHostJob.feature_job_event_name(label)
172
+ end
173
+ )
160
174
  end
161
175
  end
162
176
 
@@ -215,6 +229,7 @@ module ForemanRemoteExecution
215
229
  ::Api::V2::SubnetsController.include ::ForemanRemoteExecution::Concerns::Api::V2::SubnetsControllerExtensions
216
230
  ::Api::V2::RegistrationController.prepend ::ForemanRemoteExecution::Concerns::Api::V2::RegistrationControllerExtensions
217
231
  ::Api::V2::RegistrationController.include ::ForemanRemoteExecution::Concerns::Api::V2::RegistrationControllerExtensions::ApipieExtensions
232
+ ::Api::V2::RegistrationCommandsController.include ::ForemanRemoteExecution::Concerns::Api::V2::RegistrationCommandsControllerExtensions::ApipieExtensions
218
233
  end
219
234
 
220
235
  initializer 'foreman_remote_execution.register_gettext', after: :load_config_initializers do |_app|
@@ -1,3 +1,3 @@
1
1
  module ForemanRemoteExecution
2
- VERSION = '4.2.2'.freeze
2
+ VERSION = '4.5.0'.freeze
3
3
  end
@@ -20,26 +20,9 @@ namespace :test do
20
20
  end
21
21
  end
22
22
 
23
- namespace :foreman_remote_execution do
24
- task :rubocop do
25
- begin
26
- require 'rubocop/rake_task'
27
- RuboCop::RakeTask.new(:rubocop_foreman_remote_execution) do |task|
28
- task.patterns = ["#{ForemanRemoteExecution::Engine.root}/app/**/*.rb",
29
- "#{ForemanRemoteExecution::Engine.root}/lib/**/*.rb",
30
- "#{ForemanRemoteExecution::Engine.root}/test/**/*.rb"]
31
- end
32
- rescue
33
- puts 'Rubocop not loaded.'
34
- end
35
-
36
- Rake::Task['rubocop_foreman_remote_execution'].invoke
37
- end
38
- end
39
-
40
23
  Rake::Task[:test].enhance ['test:foreman_remote_execution']
41
24
 
42
25
  load 'tasks/jenkins.rake'
43
26
  if Rake::Task.task_defined?(:'jenkins:unit')
44
- Rake::Task['jenkins:unit'].enhance ['test:foreman_remote_execution', 'foreman_remote_execution:rubocop']
27
+ Rake::Task['jenkins:unit'].enhance ['test:foreman_remote_execution']
45
28
  end
@@ -1,4 +1,5 @@
1
1
  # Autogenerated!
2
+ _("Preupgrade job")
2
3
  _("Action with sub plans")
3
4
  _("Import facts")
4
5
  _("Import Puppet classes")
@@ -27,6 +27,11 @@ msgstr "vor %s"
27
27
  msgid "%{description} on %{host}"
28
28
  msgstr "%{description} auf %{host}"
29
29
 
30
+ msgid "...and %{count} more"
31
+ msgid_plural "...and %{count} more"
32
+ msgstr[0] ""
33
+ msgstr[1] ""
34
+
30
35
  msgid "A comma separated list of input names to be excluded from the foreign template."
31
36
  msgstr "Kommagetrennte Liste von Eingabenamen, die aus der Fremdvorlage auszuschließen ist"
32
37
 
@@ -54,6 +59,12 @@ msgstr "Aktionen"
54
59
  msgid "Add Foreign Input Set"
55
60
  msgstr "Fremdeingabe-Satz hinzufügen"
56
61
 
62
+ msgid "Advanced fields"
63
+ msgstr ""
64
+
65
+ msgid "All fields are required."
66
+ msgstr ""
67
+
57
68
  msgid "Alphabetical"
58
69
  msgstr ""
59
70
 
@@ -96,6 +107,12 @@ msgstr "bookmark_id und search_query konnte nicht angegeben werden"
96
107
  msgid "Cannot specify both recurrence and scheduling"
97
108
  msgstr "Wiederholung und Planung konnten nicht angegeben werden"
98
109
 
110
+ msgid "Category And Template"
111
+ msgstr ""
112
+
113
+ msgid "Category and template"
114
+ msgstr ""
115
+
99
116
  msgid "Choose a job template that is pre-selected in job invocation form"
100
117
  msgstr ""
101
118
 
@@ -126,6 +143,9 @@ msgstr ""
126
143
  msgid "Control concurrency level and distribution over time"
127
144
  msgstr "Parallelitätsebene und zeitliche Verteilung steuern"
128
145
 
146
+ msgid "Could not display data for job invocation."
147
+ msgstr ""
148
+
129
149
  msgid "Could not find any suitable interface for execution"
130
150
  msgstr ""
131
151
 
@@ -228,6 +248,12 @@ msgstr " Effektive Benutzer-Methode \"%{current_value}\" ist keine %{valid_metho
228
248
  msgid "Effective user options"
229
249
  msgstr "Effektive Benutzeroptionen"
230
250
 
251
+ msgid "Effective user password"
252
+ msgstr ""
253
+
254
+ msgid "Effective user password is only applicable for SSH provider. Other providers ignore this field. <br> Password is stored encrypted in DB until the job finishes. For future or recurring executions, it is removed after the last execution."
255
+ msgstr ""
256
+
231
257
  msgid "Enable Global Proxy"
232
258
  msgstr ""
233
259
 
@@ -264,18 +290,12 @@ msgstr "Fehlgeschlagen"
264
290
  msgid "Failed rendering template: %s"
265
291
  msgstr "Rendern der Vorlage fehlgeschlagen: %s"
266
292
 
267
- msgid "Fallback Without Proxy"
268
- msgstr ""
269
-
270
293
  msgid "Fallback to Any Proxy"
271
294
  msgstr ""
272
295
 
273
296
  msgid "Feature input %{input_name} not defined in template %{template_name}"
274
297
  msgstr "Funktionseingabe %{input_name} nicht definiert in Vorlage %{template_name}"
275
298
 
276
- msgid "Filter"
277
- msgstr "Filter"
278
-
279
299
  msgid "Foreign input set"
280
300
  msgstr "Fremdeingabe-Satz"
281
301
 
@@ -288,6 +308,9 @@ msgstr ""
288
308
  msgid "Get output for a host"
289
309
  msgstr "Ausgabe für einen Host abfragen"
290
310
 
311
+ msgid "Get outputs of hosts in a job"
312
+ msgstr ""
313
+
291
314
  msgid "Get raw output for a host"
292
315
  msgstr ""
293
316
 
@@ -306,9 +329,15 @@ msgstr ""
306
329
  msgid "Host with id '%{id}' was not found"
307
330
  msgstr "Host mit ID '%{id}' nicht gefunden"
308
331
 
332
+ msgid "Hosts gone missing"
333
+ msgstr ""
334
+
309
335
  msgid "How often the job should occur, in the cron format"
310
336
  msgstr "Wie oft der Job auftreten soll, in Cron-Format"
311
337
 
338
+ msgid "Identifier of the Host interface for Remote execution"
339
+ msgstr ""
340
+
312
341
  msgid "Import"
313
342
  msgstr "Import"
314
343
 
@@ -336,6 +365,12 @@ msgstr "Beschreibung des Eingabe-Satzes"
336
365
  msgid "Inputs to use"
337
366
  msgstr "Zu verwendende Eingaben"
338
367
 
368
+ msgid "Interface with the '%s' identifier was specified as a remote execution interface, however the interface was not found on the host. If the interface exists, it needs to be created in Foreman during the registration."
369
+ msgstr ""
370
+
371
+ msgid "Internal proxy selector can only be used if Katello is enabled"
372
+ msgstr ""
373
+
339
374
  msgid "Invocation type, one of %s"
340
375
  msgstr "Jobtyp, einer von %s"
341
376
 
@@ -387,6 +422,9 @@ msgstr "Job-Vorlage erfolgreich importiert"
387
422
  msgid "Job templates"
388
423
  msgstr "Job-Vorlagen"
389
424
 
425
+ msgid "Job wizard"
426
+ msgstr ""
427
+
390
428
  msgid "JobTemplate|Locked"
391
429
  msgstr "Gesperrt"
392
430
 
@@ -432,6 +470,9 @@ msgstr "Job-Vorlagen pro Standort auflisten"
432
470
  msgid "List job templates per organization"
433
471
  msgstr "Job-Vorlagen pro Organisation auflisten"
434
472
 
473
+ msgid "List of proxy IDs to be used for remote execution"
474
+ msgstr ""
475
+
435
476
  msgid "List remote execution features"
436
477
  msgstr "Entfernte Ausführungsfunktionen auflisten"
437
478
 
@@ -459,6 +500,9 @@ msgstr "Neue Job-Vorlage"
459
500
  msgid "No execution finished yet"
460
501
  msgstr "Noch keine Ausführung abgeschlossen"
461
502
 
503
+ msgid "No hosts found."
504
+ msgstr ""
505
+
462
506
  msgid "No template mapped to feature %{feature_name}"
463
507
  msgstr "Der Funktion %{feature_name} wurde keine Vorlage zugewiesen"
464
508
 
@@ -503,6 +547,9 @@ msgstr ""
503
547
  "Port für die Verwendung von SSH Kommunikation. Standardport 22. \n"
504
548
  "Sie können diese Einstellung pro Host mit dem Parameter remote_execution_ssh_port überschreiben."
505
549
 
550
+ msgid "Preupgrade job"
551
+ msgstr ""
552
+
506
553
  msgid "Preview"
507
554
  msgstr "Vorschau"
508
555
 
@@ -542,6 +589,9 @@ msgstr "Entfernte Ausführung"
542
589
  msgid "Remote Execution Features"
543
590
  msgstr "Entfernte Ausführungsfunktionen "
544
591
 
592
+ msgid "Remote Execution Interface"
593
+ msgstr ""
594
+
545
595
  msgid "Remote action:"
546
596
  msgstr "Entfernte Aktion"
547
597
 
@@ -581,6 +631,9 @@ msgstr "Wird aufgelöst zu"
581
631
  msgid "Results"
582
632
  msgstr ""
583
633
 
634
+ msgid "Review details"
635
+ msgstr ""
636
+
584
637
  msgid "Run"
585
638
  msgstr "Ausführen"
586
639
 
@@ -596,6 +649,9 @@ msgstr "Höchstens n Aufgaben gleichzeitig ausführen"
596
649
  msgid "Run at most N tasks at a time. If this is set and proxy batch triggering is enabled, then tasks are triggered on the smart proxy in batches of size 1."
597
650
  msgstr ""
598
651
 
652
+ msgid "Run job"
653
+ msgstr ""
654
+
599
655
  msgid "SSH"
600
656
  msgstr "SSH"
601
657
 
@@ -632,9 +688,6 @@ msgstr "Zum Ende scrollen"
632
688
  msgid "Scroll to top"
633
689
  msgstr "Zum Anfang scrollen"
634
690
 
635
- msgid "Search"
636
- msgstr "Suchen"
637
-
638
691
  msgid "Search Query"
639
692
  msgstr ""
640
693
 
@@ -662,6 +715,12 @@ msgstr ""
662
715
  msgid "Should the ip addresses on host interfaces be preferred over the fqdn? It is useful when DNS not resolving the fqdns properly. You may override this per host by setting a parameter called remote_execution_connect_by_ip. This setting only applies to IPv4. When the host has only an IPv6 address on the interface used for remote execution, hostname will be used even if this setting is set to true."
663
716
  msgstr ""
664
717
 
718
+ msgid "Should this interface be used for remote execution?"
719
+ msgstr ""
720
+
721
+ msgid "Show Job status for the hosts"
722
+ msgstr ""
723
+
665
724
  msgid "Show foreign input set details"
666
725
  msgstr " Details zu Fremdeingabe-Satz anzeigen"
667
726
 
@@ -692,12 +751,6 @@ msgstr "Erfolgreich"
692
751
  msgid "Success"
693
752
  msgstr "Erfolg"
694
753
 
695
- msgid "Sudo password"
696
- msgstr ""
697
-
698
- msgid "Sudo password is only applicable for SSH provider. Other providers ignore this field. <br> Password is stored encrypted in DB until the job finishes. For future or recurring executions, it is removed after the last execution."
699
- msgstr ""
700
-
701
754
  msgid "Sync Job Templates"
702
755
  msgstr ""
703
756
 
@@ -763,6 +816,9 @@ msgstr "Der Benutzer kann auf die Vorlage %{template_name}, die der Funktion %{f
763
816
  msgid "There was an error while updating the status, try refreshing the page."
764
817
  msgstr "Beim Status-Update ist ein Fehler aufgetreten, versuchen Sie die Seite zu aktualisieren."
765
818
 
819
+ msgid "This can happen if the host is removed or moved to another organization or location after the job was started"
820
+ msgstr ""
821
+
766
822
  msgid "This template is locked for editing."
767
823
  msgstr "Diese Vorlage ist schreibgeschützt."
768
824
 
@@ -889,9 +945,6 @@ msgstr "Welcher Benutzer zur Ausführung des Skripts verwendet werden soll (mitt
889
945
  msgid "What user should be used to run the script (using sudo-like mechanisms). Defaults to a template parameter or global setting."
890
946
  msgstr "Welcher Benutzer zur Ausführung des Skripts (mittels sudo-ähnlichen Mechanismen) verwendet werden soll. Standardmäßig wird ein Vorlagenparameter oder eine allgemeine Einstellung verwendet."
891
947
 
892
- msgid "When enabled, the remote execution will try to run the commands directly, when no proxy with remote execution feature is configured for the host."
893
- msgstr ""
894
-
895
948
  msgid "When enabled, working directories will be removed after task completion. You may override this per host by setting a parameter called remote_execution_cleanup_working_dirs."
896
949
  msgstr ""
897
950
 
@@ -925,9 +978,15 @@ msgstr "Eingabe-Satz für diese Vorlage hinzufügen, um auf andere Vorlage-Einga
925
978
  msgid "cancelled"
926
979
  msgstr "abgebrochen"
927
980
 
981
+ msgid "default_capsule method missing from SmartProxy"
982
+ msgstr ""
983
+
928
984
  msgid "effective user"
929
985
  msgstr ""
930
986
 
987
+ msgid "error"
988
+ msgstr ""
989
+
931
990
  msgid "error during rendering: %s"
932
991
  msgstr "Fehler beim Rendern: %s"
933
992
 
@@ -952,9 +1011,6 @@ msgstr "enthaltene Vorlage '%s' nicht gefunden"
952
1011
  msgid "input macro with name '%s' used, but no input with such name defined for this template"
953
1012
  msgstr "Es wurde ein Eingabe-Macro namens '%s' verwendet, aber es wurde keine Eingabe mit diesem Namen für diese Vorlage definiert"
954
1013
 
955
- msgid "planned"
956
- msgstr "geplant"
957
-
958
1014
  msgid "queued"
959
1015
  msgstr "in der Warteschlange"
960
1016
 
@@ -964,9 +1020,6 @@ msgstr ""
964
1020
  msgid "remove template input set"
965
1021
  msgstr "Vorlageneingabe-Satz entfernen"
966
1022
 
967
- msgid "running"
968
- msgstr "wird ausgeführt"
969
-
970
1023
  msgid "running %{percent}%%"
971
1024
  msgstr "wird ausgeführt %{percent}%%"
972
1025
 
@@ -976,9 +1029,6 @@ msgstr "Sekunden"
976
1029
  msgid "succeeded"
977
1030
  msgstr "erfolgreich"
978
1031
 
979
- msgid "success"
980
- msgstr "erfolgreich"
981
-
982
1032
  msgid "tasks at a time"
983
1033
  msgstr ""
984
1034