foreman_remote_execution 6.2.0 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/api/v2/job_invocations_controller.rb +1 -0
  3. data/app/helpers/hosts_extensions_helper.rb +62 -0
  4. data/app/lib/actions/remote_execution/run_host_job.rb +4 -0
  5. data/app/lib/actions/remote_execution/run_hosts_job.rb +4 -0
  6. data/app/models/job_invocation_composer.rb +6 -2
  7. data/app/models/job_template.rb +4 -1
  8. data/app/models/ssh_execution_provider.rb +3 -3
  9. data/app/views/api/v2/job_invocations/base.json.rabl +1 -1
  10. data/app/views/job_invocations/_card_target_hosts.html.erb +8 -0
  11. data/app/views/job_invocations/_form.html.erb +2 -0
  12. data/db/migrate/20220331112719_add_ssh_user_to_job_invocation.rb +5 -0
  13. data/lib/foreman_remote_execution/engine.rb +6 -3
  14. data/lib/foreman_remote_execution/version.rb +1 -1
  15. data/locale/action_names.rb +3 -3
  16. data/locale/de/foreman_remote_execution.po +23 -23
  17. data/locale/en/foreman_remote_execution.po +23 -23
  18. data/locale/en_GB/foreman_remote_execution.po +23 -23
  19. data/locale/es/foreman_remote_execution.po +23 -23
  20. data/locale/foreman_remote_execution.pot +64 -66
  21. data/locale/fr/foreman_remote_execution.po +23 -23
  22. data/locale/ja/foreman_remote_execution.po +23 -23
  23. data/locale/ko/foreman_remote_execution.po +23 -23
  24. data/locale/pt_BR/foreman_remote_execution.po +23 -23
  25. data/locale/ru/foreman_remote_execution.po +23 -23
  26. data/locale/zh_CN/foreman_remote_execution.po +23 -23
  27. data/locale/zh_TW/foreman_remote_execution.po +23 -23
  28. data/webpack/JobWizard/JobWizardConstants.js +2 -2
  29. data/webpack/JobWizard/__tests__/fixtures.js +8 -4
  30. data/webpack/JobWizard/steps/AdvancedFields/__tests__/AdvancedFields.test.js +2 -2
  31. data/webpack/JobWizard/steps/HostsAndInputs/SelectGQL.js +2 -1
  32. data/webpack/JobWizard/steps/HostsAndInputs/SelectedChips.js +1 -1
  33. data/webpack/JobWizard/steps/HostsAndInputs/buildHostQuery.js +1 -1
  34. data/webpack/JobWizard/steps/HostsAndInputs/hostgroups.gql +1 -0
  35. data/webpack/JobWizard/steps/HostsAndInputs/hosts.gql +1 -0
  36. data/webpack/JobWizard/steps/ReviewDetails/index.js +1 -1
  37. data/webpack/JobWizard/steps/Schedule/__tests__/Schedule.test.js +15 -15
  38. data/webpack/JobWizard/steps/form/SearchSelect.js +0 -1
  39. data/webpack/__mocks__/foremanReact/common/globalIdHelpers.js +1 -0
  40. data/webpack/global_index.js +2 -8
  41. data/webpack/react_app/components/HostKebab/KebabItems.js +6 -1
  42. data/webpack/react_app/components/RecentJobsCard/RecentJobsCard.js +4 -4
  43. data/webpack/react_app/components/TargetingHosts/TargetingHostsConsts.js +1 -0
  44. data/webpack/react_app/components/TargetingHosts/TargetingHostsPage.js +8 -3
  45. data/webpack/react_app/components/TargetingHosts/__tests__/__snapshots__/TargetingHostsPage.test.js.snap +9 -1
  46. data/webpack/react_app/components/TargetingHosts/__tests__/fixtures.js +1 -4
  47. data/webpack/react_app/components/TargetingHosts/index.js +1 -0
  48. data/webpack/react_app/extend/Fills.js +48 -0
  49. metadata +6 -7
  50. data/app/helpers/concerns/foreman_remote_execution/hosts_helper_extensions.rb +0 -62
  51. data/webpack/react_app/extend/fillKebabItems.js +0 -11
  52. data/webpack/react_app/extend/fillRecentJobsCard.js +0 -11
  53. data/webpack/react_app/extend/fillRexFeaturesDropdown.js +0 -11
  54. data/webpack/react_app/extend/fillregistrationAdvanced.js +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 71b09dd41d7ce39e709e4a45c2c78926d53151ed3625fcf2f4e0d739853cae8e
4
- data.tar.gz: d01463507ceb52b52f661fa9a55ce413e2f824d74dfe50958063359f5a6fa8e9
3
+ metadata.gz: e9183b3b81c3033d696f4aedf861cb5eed143fb9eacccb144a23d859e3ccae69
4
+ data.tar.gz: 4c7c6c09c84f3d4cbef2aaa8330b7bf048d42570e9319ad227c30abc5613770c
5
5
  SHA512:
6
- metadata.gz: 2840a0f11ef02ba63f3a981075eae66e50e5fa0f7738518c3bf3a74f0bf5b7cf6be3273c2ebb999d00174244fb73295b3d0f8c74b663ef9839a91a16ad9c9878
7
- data.tar.gz: 79a0dad8442b9135995a8bcbf62dfde4e112cd765950b61f45db0c490eac0d21e3cf843aea946c2450f69ab8f4d098fe26927b4eafe4cd0b7d6a1097ba04ceb9
6
+ metadata.gz: b35e41908b57f97f80272070d84b8d2ceeb7e061e22ad673d07c694a643d057399e207af9c8f36d14d535a7ddb3eddefa013e04b3d63689796e66e6d9aeae88b
7
+ data.tar.gz: 5c0b0d79edaab4c28721ad26df27ad8ac14878e09349929d28175c2cc1714ebb1f81ceb9f4824215d781dc1b4b0662962a9043f4f56963fea4d0aaa3e2483f8d
@@ -45,6 +45,7 @@ module Api
45
45
  :required => false,
46
46
  :desc => N_('Set password for effective user (using sudo-like mechanisms)')
47
47
  end
48
+ param :ssh_user, String, :required => false, :desc => N_('Set SSH user')
48
49
  param :password, String, :required => false, :desc => N_('Set SSH password')
49
50
  param :key_passphrase, String, :required => false, :desc => N_('Set SSH key passphrase')
50
51
 
@@ -0,0 +1,62 @@
1
+ module HostsExtensionsHelper
2
+ def rex_hosts_multiple_actions
3
+ return [] unless can_schedule_jobs?
4
+
5
+ [{ action: [_('Schedule Remote Job'), new_job_invocation_path, false], priority: 1000 }]
6
+ end
7
+
8
+ def rex_host_overview_buttons(host)
9
+ [
10
+ { button: link_to_if_authorized(_("Jobs"), hash_for_job_invocations_path(search: "host=#{host.name}"), title: _("Job invocations"), class: 'btn btn-default'), priority: 200 },
11
+ ]
12
+ end
13
+
14
+ def host_title_actions(*args)
15
+ title_actions(button_group(schedule_job_multi_button(*args)),
16
+ button_group(web_console_button(*args)))
17
+ super(*args)
18
+ end
19
+
20
+ private
21
+
22
+ def schedule_job_multi_button(*args)
23
+ host_features = rex_host_features(*args)
24
+
25
+ if host_features.present?
26
+ action_buttons(schedule_job_button(*args), *host_features)
27
+ else
28
+ schedule_job_button(*args)
29
+ end
30
+ end
31
+
32
+ def rex_host_features(host, *_rest)
33
+ return [] unless can_execute_on_host?(host)
34
+ RemoteExecutionFeature.with_host_action_button.order(:label).map do |feature|
35
+ link_to(_('%s') % feature.name, job_invocations_path(:host_ids => [host.id], :feature => feature.label), :method => :post)
36
+ end
37
+ end
38
+
39
+ def schedule_job_button(host, *_rest)
40
+ return unless can_execute_on_host?(host)
41
+ link_to(_('Schedule Remote Job'), new_job_invocation_path(:host_ids => [host.id]), :id => :run_button, :class => 'btn btn-default')
42
+ end
43
+
44
+ def web_console_button(host, *_args)
45
+ return if !authorized_for(permission: 'cockpit_hosts', auth_object: host) || !can_execute_on_infrastructure_host?(host)
46
+
47
+ url = SSHExecutionProvider.cockpit_url_for_host(host.name)
48
+ url ? link_to(_('Web Console'), url, :class => 'btn btn-default', :id => :'web-console-button', :target => '_new') : nil
49
+ end
50
+
51
+ def can_schedule_jobs?
52
+ authorized_for(controller: :job_invocations, action: :create)
53
+ end
54
+
55
+ def can_execute_on_host?(host)
56
+ can_schedule_jobs? && can_execute_on_infrastructure_host?(host)
57
+ end
58
+
59
+ def can_execute_on_infrastructure_host?(host)
60
+ !host.infrastructure_host? || User.current.can?(:execute_jobs_on_infrastructure_hosts)
61
+ end
62
+ end
@@ -172,6 +172,10 @@ module Actions
172
172
  @host ||= ::Host.authorized.find(host_id)
173
173
  end
174
174
 
175
+ def self.cleanup_after
176
+ '90d'
177
+ end
178
+
175
179
  private
176
180
 
177
181
  def update_host_status
@@ -153,6 +153,10 @@ module Actions
153
153
  input[:proxy_batch_size]
154
154
  end
155
155
 
156
+ def self.cleanup_after
157
+ '90d'
158
+ end
159
+
156
160
  private
157
161
 
158
162
  def mail_notification_preference
@@ -16,6 +16,7 @@ class JobInvocationComposer
16
16
  :host_ids => ui_params[:host_ids],
17
17
  :remote_execution_feature_id => job_invocation_base[:remote_execution_feature_id],
18
18
  :description_format => job_invocation_base[:description_format],
19
+ :ssh_user => blank_to_nil(job_invocation_base[:ssh_user]),
19
20
  :password => blank_to_nil(job_invocation_base[:password]),
20
21
  :key_passphrase => blank_to_nil(job_invocation_base[:key_passphrase]),
21
22
  :effective_user_password => blank_to_nil(job_invocation_base[:effective_user_password]),
@@ -121,6 +122,7 @@ class JobInvocationComposer
121
122
  :targeting => targeting_params,
122
123
  :triggering => triggering_params,
123
124
  :description_format => api_params[:description_format],
125
+ :ssh_user => api_params[:ssh_user],
124
126
  :password => api_params[:password],
125
127
  :remote_execution_feature_id => remote_execution_feature_id,
126
128
  :effective_user_password => api_params[:effective_user_password],
@@ -237,6 +239,7 @@ class JobInvocationComposer
237
239
  { :job_category => job_invocation.job_category,
238
240
  :targeting => targeting_params,
239
241
  :triggering => triggering_params,
242
+ :ssh_user => job_invocation.ssh_user,
240
243
  :description_format => job_invocation.description_format,
241
244
  :concurrency_control => concurrency_control_params,
242
245
  :execution_timeout_interval => job_invocation.execution_timeout_interval,
@@ -399,7 +402,7 @@ class JobInvocationComposer
399
402
 
400
403
  def compose
401
404
  job_invocation.job_category = validate_job_category(params[:job_category])
402
- job_invocation.job_category ||= resolve_job_category(available_job_categories.first) { |tempate| template.job_category } if @set_defaults
405
+ job_invocation.job_category ||= resolve_job_category(available_job_categories.first) { |template| template.job_category } if @set_defaults
403
406
  job_invocation.remote_execution_feature_id = params[:remote_execution_feature_id]
404
407
  job_invocation.targeting = build_targeting
405
408
  job_invocation.triggering = build_triggering
@@ -411,6 +414,7 @@ class JobInvocationComposer
411
414
  job_invocation.password = params[:password]
412
415
  job_invocation.key_passphrase = params[:key_passphrase]
413
416
  job_invocation.effective_user_password = params[:effective_user_password]
417
+ job_invocation.ssh_user = params[:ssh_user]
414
418
 
415
419
  if @reruns && job_invocation.targeting.static?
416
420
  job_invocation.targeting.assign_host_ids(JobInvocation.find(@reruns).targeting.host_ids)
@@ -544,7 +548,7 @@ class JobInvocationComposer
544
548
 
545
549
  def input_value_for(input)
546
550
  invocations = pattern_template_invocations
547
- default = TemplateInvocationInputValue.new(:template_input_id => input.id)
551
+ default = TemplateInvocationInputValue.new(:template_input_id => input.id, :value => input.default)
548
552
  invocations.map(&:input_values).flatten.detect { |iv| iv.template_input_id == input.id } || default
549
553
  end
550
554
 
@@ -196,7 +196,10 @@ class JobTemplate < ::Template
196
196
  def default_input_values(ignore_keys)
197
197
  result = self.template_inputs_with_foreign.select { |ti| !ti.required? && ti.input_type == 'user' }.map { |ti| ti.name.to_s }
198
198
  result -= ignore_keys.map(&:to_s)
199
- Hash[result.map { |k| [ k, nil ] }]
199
+ default_values = self.template_inputs_with_foreign.reduce({}) do |acc, input|
200
+ acc.merge(input.name.to_s => input.default)
201
+ end
202
+ Hash[result.map { |k| [ k, default_values[k]] }]
200
203
  end
201
204
 
202
205
  private
@@ -1,7 +1,7 @@
1
1
  class ScriptExecutionProvider < RemoteExecutionProvider
2
2
  class << self
3
3
  def proxy_command_options(template_invocation, host)
4
- super.merge(:ssh_user => ssh_user(host),
4
+ super.merge(:ssh_user => ssh_user(host, template_invocation.job_invocation),
5
5
  :effective_user => effective_user(template_invocation),
6
6
  :effective_user_method => effective_user_method(host),
7
7
  :cleanup_working_dirs => cleanup_working_dirs?(host),
@@ -58,8 +58,8 @@ class ScriptExecutionProvider < RemoteExecutionProvider
58
58
 
59
59
  private
60
60
 
61
- def ssh_user(host)
62
- host.host_param('remote_execution_ssh_user')
61
+ def ssh_user(host, job_invocation = nil)
62
+ job_invocation&.ssh_user || host.host_param('remote_execution_ssh_user')
63
63
  end
64
64
 
65
65
  def ssh_port(host)
@@ -1,6 +1,6 @@
1
1
  object @job_invocation
2
2
 
3
- attributes :id, :description, :job_category, :targeting_id, :status, :start_at, :status_label
3
+ attributes :id, :description, :job_category, :targeting_id, :status, :start_at, :status_label, :ssh_user
4
4
 
5
5
  node do |invocation|
6
6
  {
@@ -32,6 +32,14 @@
32
32
  <%= show_job_location(@job_location) %>
33
33
  </strong>
34
34
  </p>
35
+ <% if job_invocation[:ssh_user] %>
36
+ <p>
37
+ <%= _('SSH User') %>:
38
+ <strong>
39
+ <%= job_invocation[:ssh_user] %>
40
+ </strong>
41
+ </p>
42
+ <% end %>
35
43
  </div>
36
44
  <div class='card-pf-footer'>
37
45
  <p>
@@ -82,6 +82,8 @@
82
82
  <% end %>
83
83
  <% end %>
84
84
 
85
+ <%= text_f f, :ssh_user, :value => f.object.ssh_user, :label => _('SSH user'), :label_help => N_('A user to be used for SSH.') %>
86
+
85
87
  <% if job_template.effective_user.overridable? %>
86
88
  <%= text_f job_template_fields, :effective_user, :value => @composer.template_invocation(job_template).try(:effective_user), :label => _('Effective user'), :label_help => N_("A user to be used for executing the script. If it differs from the SSH user, su or sudo is used to switch the accounts.") %>
87
89
  <% end %>
@@ -0,0 +1,5 @@
1
+ class AddSshUserToJobInvocation < ActiveRecord::Migration[6.0]
2
+ def change
3
+ add_column :job_invocations, :ssh_user, :string
4
+ end
5
+ end
@@ -47,7 +47,7 @@ module ForemanRemoteExecution
47
47
 
48
48
  initializer 'foreman_remote_execution.register_plugin', before: :finisher_hook do |_app|
49
49
  Foreman::Plugin.register :foreman_remote_execution do
50
- requires_foreman '>= 3.2'
50
+ requires_foreman '>= 3.3'
51
51
  register_global_js_file 'global'
52
52
 
53
53
  apipie_documented_controllers ["#{ForemanRemoteExecution::Engine.root}/app/controllers/api/v2/*.rb"]
@@ -267,7 +267,11 @@ module ForemanRemoteExecution
267
267
  extend_rabl_template 'api/v2/subnets/show', 'api/v2/subnets/remote_execution_proxies'
268
268
  extend_rabl_template 'api/v2/hosts/main', 'api/v2/host/main'
269
269
  parameter_filter ::Subnet, :remote_execution_proxy_ids
270
- describe_host { overview_buttons_provider :host_overview_buttons }
270
+
271
+ describe_host do
272
+ multiple_actions_provider :rex_hosts_multiple_actions
273
+ overview_buttons_provider :rex_host_overview_buttons
274
+ end
271
275
 
272
276
  # Extend Registration module
273
277
  extend_allowed_registration_vars :remote_execution_interface
@@ -316,7 +320,6 @@ module ForemanRemoteExecution
316
320
  end
317
321
 
318
322
  Bookmark.include ForemanRemoteExecution::BookmarkExtensions
319
- HostsHelper.prepend ForemanRemoteExecution::HostsHelperExtensions
320
323
  ProvisioningTemplatesHelper.prepend ForemanRemoteExecution::JobTemplatesExtensions
321
324
  TemplateInput.include ForemanRemoteExecution::TemplateInputExtensions
322
325
 
@@ -1,3 +1,3 @@
1
1
  module ForemanRemoteExecution
2
- VERSION = '6.2.0'.freeze
2
+ VERSION = '7.0.0'.freeze
3
3
  end
@@ -1,5 +1,5 @@
1
1
  # Autogenerated!
2
2
  _("Remote action:")
3
- _("»Import facts«")
4
- _("»Import Puppet classes«")
5
- _("»Action with sub plans«")
3
+ _("Import Puppet classes")
4
+ _("Import facts")
5
+ _("Action with sub plans")
@@ -24,6 +24,9 @@ msgstr "%s"
24
24
  msgid "%s ago"
25
25
  msgstr "vor %s"
26
26
 
27
+ msgid "%s job has been invoked"
28
+ msgstr ""
29
+
27
30
  msgid "%{description} on %{host}"
28
31
  msgstr "%{description} auf %{host}"
29
32
 
@@ -68,15 +71,15 @@ msgstr "Ein Benutzer, der für die Ausführung des Skripts verwendet werden soll
68
71
  msgid "Abort Job"
69
72
  msgstr ""
70
73
 
74
+ msgid "Action with sub plans"
75
+ msgstr ""
76
+
71
77
  msgid "Actions"
72
78
  msgstr "Aktionen"
73
79
 
74
80
  msgid "Add Foreign Input Set"
75
81
  msgstr "Fremdeingabe-Satz hinzufügen"
76
82
 
77
- msgid "Advanced Fields"
78
- msgstr ""
79
-
80
83
  msgid "Advanced fields"
81
84
  msgstr ""
82
85
 
@@ -467,9 +470,15 @@ msgstr ""
467
470
  msgid "Import"
468
471
  msgstr "Import"
469
472
 
473
+ msgid "Import Puppet classes"
474
+ msgstr ""
475
+
470
476
  msgid "Import a job template from ERB"
471
477
  msgstr "Job-Vorlage aus ERB importieren"
472
478
 
479
+ msgid "Import facts"
480
+ msgstr ""
481
+
473
482
  msgid "Include all inputs from the foreign template"
474
483
  msgstr "Alle Eingaben aus Fremdvorlage einschließen"
475
484
 
@@ -503,9 +512,6 @@ msgstr "Jobtyp, einer von %s"
503
512
  msgid "Job"
504
513
  msgstr "Job"
505
514
 
506
- msgid "Job Category"
507
- msgstr ""
508
-
509
515
  msgid "Job Details"
510
516
  msgstr ""
511
517
 
@@ -829,7 +835,7 @@ msgstr "Wird aufgelöst zu"
829
835
  msgid "Results"
830
836
  msgstr ""
831
837
 
832
- msgid "Review Details"
838
+ msgid "Review details"
833
839
  msgstr ""
834
840
 
835
841
  msgid "Run"
@@ -853,9 +859,6 @@ msgstr ""
853
859
  msgid "Running"
854
860
  msgstr ""
855
861
 
856
- msgid "SSH"
857
- msgstr "SSH"
858
-
859
862
  msgid "SSH Port"
860
863
  msgstr ""
861
864
 
@@ -871,6 +874,9 @@ msgstr "Plan"
871
874
  msgid "Schedule Remote Job"
872
875
  msgstr ""
873
876
 
877
+ msgid "Schedule a job"
878
+ msgstr ""
879
+
874
880
  msgid "Schedule for future execution"
875
881
  msgstr ""
876
882
 
@@ -892,6 +898,9 @@ msgstr ""
892
898
  msgid "Scheduled to start before"
893
899
  msgstr ""
894
900
 
901
+ msgid "Script"
902
+ msgstr ""
903
+
895
904
  msgid "Scroll to bottom"
896
905
  msgstr "Zum Ende scrollen"
897
906
 
@@ -1212,16 +1221,16 @@ msgstr "Benutzereingabe"
1212
1221
  msgid "Value"
1213
1222
  msgstr "Wert"
1214
1223
 
1215
- msgid "View All Jobs"
1224
+ msgid "View all jobs"
1216
1225
  msgstr ""
1217
1226
 
1218
- msgid "View Finished Jobs"
1227
+ msgid "View finished jobs"
1219
1228
  msgstr ""
1220
1229
 
1221
- msgid "View Running Jobs"
1230
+ msgid "View running jobs"
1222
1231
  msgstr ""
1223
1232
 
1224
- msgid "View Scheduled Jobs"
1233
+ msgid "View scheduled jobs"
1225
1234
  msgstr ""
1226
1235
 
1227
1236
  msgid "Web Console"
@@ -1367,12 +1376,3 @@ msgstr ""
1367
1376
 
1368
1377
  msgid "using Smart Proxy"
1369
1378
  msgstr ""
1370
-
1371
- msgid "»Action with sub plans«"
1372
- msgstr ""
1373
-
1374
- msgid "»Import Puppet classes«"
1375
- msgstr ""
1376
-
1377
- msgid "»Import facts«"
1378
- msgstr ""
@@ -23,6 +23,9 @@ msgstr ""
23
23
  msgid "%s ago"
24
24
  msgstr ""
25
25
 
26
+ msgid "%s job has been invoked"
27
+ msgstr ""
28
+
26
29
  msgid "%{description} on %{host}"
27
30
  msgstr ""
28
31
 
@@ -67,13 +70,13 @@ msgstr ""
67
70
  msgid "Abort Job"
68
71
  msgstr ""
69
72
 
70
- msgid "Actions"
73
+ msgid "Action with sub plans"
71
74
  msgstr ""
72
75
 
73
- msgid "Add Foreign Input Set"
76
+ msgid "Actions"
74
77
  msgstr ""
75
78
 
76
- msgid "Advanced Fields"
79
+ msgid "Add Foreign Input Set"
77
80
  msgstr ""
78
81
 
79
82
  msgid "Advanced fields"
@@ -466,9 +469,15 @@ msgstr ""
466
469
  msgid "Import"
467
470
  msgstr ""
468
471
 
472
+ msgid "Import Puppet classes"
473
+ msgstr ""
474
+
469
475
  msgid "Import a job template from ERB"
470
476
  msgstr ""
471
477
 
478
+ msgid "Import facts"
479
+ msgstr ""
480
+
472
481
  msgid "Include all inputs from the foreign template"
473
482
  msgstr ""
474
483
 
@@ -502,9 +511,6 @@ msgstr ""
502
511
  msgid "Job"
503
512
  msgstr ""
504
513
 
505
- msgid "Job Category"
506
- msgstr ""
507
-
508
514
  msgid "Job Details"
509
515
  msgstr ""
510
516
 
@@ -826,7 +832,7 @@ msgstr ""
826
832
  msgid "Results"
827
833
  msgstr ""
828
834
 
829
- msgid "Review Details"
835
+ msgid "Review details"
830
836
  msgstr ""
831
837
 
832
838
  msgid "Run"
@@ -850,9 +856,6 @@ msgstr ""
850
856
  msgid "Running"
851
857
  msgstr ""
852
858
 
853
- msgid "SSH"
854
- msgstr ""
855
-
856
859
  msgid "SSH Port"
857
860
  msgstr ""
858
861
 
@@ -868,6 +871,9 @@ msgstr ""
868
871
  msgid "Schedule Remote Job"
869
872
  msgstr ""
870
873
 
874
+ msgid "Schedule a job"
875
+ msgstr ""
876
+
871
877
  msgid "Schedule for future execution"
872
878
  msgstr ""
873
879
 
@@ -889,6 +895,9 @@ msgstr ""
889
895
  msgid "Scheduled to start before"
890
896
  msgstr ""
891
897
 
898
+ msgid "Script"
899
+ msgstr ""
900
+
892
901
  msgid "Scroll to bottom"
893
902
  msgstr ""
894
903
 
@@ -1209,16 +1218,16 @@ msgstr ""
1209
1218
  msgid "Value"
1210
1219
  msgstr ""
1211
1220
 
1212
- msgid "View All Jobs"
1221
+ msgid "View all jobs"
1213
1222
  msgstr ""
1214
1223
 
1215
- msgid "View Finished Jobs"
1224
+ msgid "View finished jobs"
1216
1225
  msgstr ""
1217
1226
 
1218
- msgid "View Running Jobs"
1227
+ msgid "View running jobs"
1219
1228
  msgstr ""
1220
1229
 
1221
- msgid "View Scheduled Jobs"
1230
+ msgid "View scheduled jobs"
1222
1231
  msgstr ""
1223
1232
 
1224
1233
  msgid "Web Console"
@@ -1364,12 +1373,3 @@ msgstr ""
1364
1373
 
1365
1374
  msgid "using Smart Proxy"
1366
1375
  msgstr ""
1367
-
1368
- msgid "»Action with sub plans«"
1369
- msgstr ""
1370
-
1371
- msgid "»Import Puppet classes«"
1372
- msgstr ""
1373
-
1374
- msgid "»Import facts«"
1375
- msgstr ""
@@ -24,6 +24,9 @@ msgstr ""
24
24
  msgid "%s ago"
25
25
  msgstr "%s ago"
26
26
 
27
+ msgid "%s job has been invoked"
28
+ msgstr ""
29
+
27
30
  msgid "%{description} on %{host}"
28
31
  msgstr ""
29
32
 
@@ -68,13 +71,13 @@ msgstr ""
68
71
  msgid "Abort Job"
69
72
  msgstr ""
70
73
 
71
- msgid "Actions"
74
+ msgid "Action with sub plans"
72
75
  msgstr ""
73
76
 
74
- msgid "Add Foreign Input Set"
77
+ msgid "Actions"
75
78
  msgstr ""
76
79
 
77
- msgid "Advanced Fields"
80
+ msgid "Add Foreign Input Set"
78
81
  msgstr ""
79
82
 
80
83
  msgid "Advanced fields"
@@ -467,9 +470,15 @@ msgstr ""
467
470
  msgid "Import"
468
471
  msgstr ""
469
472
 
473
+ msgid "Import Puppet classes"
474
+ msgstr ""
475
+
470
476
  msgid "Import a job template from ERB"
471
477
  msgstr ""
472
478
 
479
+ msgid "Import facts"
480
+ msgstr ""
481
+
473
482
  msgid "Include all inputs from the foreign template"
474
483
  msgstr ""
475
484
 
@@ -503,9 +512,6 @@ msgstr ""
503
512
  msgid "Job"
504
513
  msgstr ""
505
514
 
506
- msgid "Job Category"
507
- msgstr ""
508
-
509
515
  msgid "Job Details"
510
516
  msgstr ""
511
517
 
@@ -827,7 +833,7 @@ msgstr ""
827
833
  msgid "Results"
828
834
  msgstr ""
829
835
 
830
- msgid "Review Details"
836
+ msgid "Review details"
831
837
  msgstr ""
832
838
 
833
839
  msgid "Run"
@@ -851,9 +857,6 @@ msgstr ""
851
857
  msgid "Running"
852
858
  msgstr ""
853
859
 
854
- msgid "SSH"
855
- msgstr ""
856
-
857
860
  msgid "SSH Port"
858
861
  msgstr ""
859
862
 
@@ -869,6 +872,9 @@ msgstr ""
869
872
  msgid "Schedule Remote Job"
870
873
  msgstr ""
871
874
 
875
+ msgid "Schedule a job"
876
+ msgstr ""
877
+
872
878
  msgid "Schedule for future execution"
873
879
  msgstr ""
874
880
 
@@ -890,6 +896,9 @@ msgstr ""
890
896
  msgid "Scheduled to start before"
891
897
  msgstr ""
892
898
 
899
+ msgid "Script"
900
+ msgstr ""
901
+
893
902
  msgid "Scroll to bottom"
894
903
  msgstr ""
895
904
 
@@ -1210,16 +1219,16 @@ msgstr ""
1210
1219
  msgid "Value"
1211
1220
  msgstr "Value"
1212
1221
 
1213
- msgid "View All Jobs"
1222
+ msgid "View all jobs"
1214
1223
  msgstr ""
1215
1224
 
1216
- msgid "View Finished Jobs"
1225
+ msgid "View finished jobs"
1217
1226
  msgstr ""
1218
1227
 
1219
- msgid "View Running Jobs"
1228
+ msgid "View running jobs"
1220
1229
  msgstr ""
1221
1230
 
1222
- msgid "View Scheduled Jobs"
1231
+ msgid "View scheduled jobs"
1223
1232
  msgstr ""
1224
1233
 
1225
1234
  msgid "Web Console"
@@ -1365,12 +1374,3 @@ msgstr ""
1365
1374
 
1366
1375
  msgid "using Smart Proxy"
1367
1376
  msgstr ""
1368
-
1369
- msgid "»Action with sub plans«"
1370
- msgstr ""
1371
-
1372
- msgid "»Import Puppet classes«"
1373
- msgstr ""
1374
-
1375
- msgid "»Import facts«"
1376
- msgstr ""