foreman_remote_execution 6.2.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 ""