foreman_remote_execution 1.2.2 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -0
  3. data/app/assets/javascripts/template_invocation.js +6 -11
  4. data/app/controllers/api/v2/job_templates_controller.rb +1 -0
  5. data/app/controllers/concerns/foreman/controller/parameters/remote_execution_feature.rb +1 -1
  6. data/app/controllers/job_invocations_controller.rb +6 -2
  7. data/app/controllers/job_templates_controller.rb +0 -5
  8. data/app/helpers/concerns/foreman_remote_execution/hosts_helper_extensions.rb +18 -2
  9. data/app/helpers/concerns/foreman_remote_execution/job_templates_extensions.rb +1 -2
  10. data/app/helpers/remote_execution_helper.rb +42 -41
  11. data/app/lib/actions/remote_execution/run_host_job.rb +2 -15
  12. data/app/lib/actions/remote_execution/run_hosts_job.rb +17 -3
  13. data/app/models/concerns/foreman_remote_execution/host_extensions.rb +7 -6
  14. data/app/models/input_template_renderer.rb +1 -1
  15. data/app/models/job_invocation.rb +23 -5
  16. data/app/models/remote_execution_feature.rb +16 -3
  17. data/app/models/setting/remote_execution.rb +4 -1
  18. data/app/models/ssh_execution_provider.rb +33 -2
  19. data/app/models/targeting.rb +7 -3
  20. data/app/views/api/v2/remote_execution_features/base.json.rabl +1 -1
  21. data/app/views/job_invocations/_form.html.erb +1 -4
  22. data/app/views/job_invocations/_host_name_td.html.erb +2 -1
  23. data/app/views/job_invocations/index.html.erb +1 -1
  24. data/app/views/job_invocations/show.html.erb +1 -1
  25. data/app/views/job_templates/_custom_tabs.html.erb +1 -4
  26. data/app/views/overrides/nics/_execution_interface.html.erb +2 -3
  27. data/app/views/remote_execution_features/index.html.erb +1 -1
  28. data/db/migrate/20170110145641_add_host_action_button_to_remote_execution_feature.rb +5 -0
  29. data/foreman_remote_execution.gemspec +1 -1
  30. data/lib/foreman_remote_execution/engine.rb +3 -1
  31. data/lib/foreman_remote_execution/version.rb +1 -1
  32. data/locale/action_names.rb +2 -5
  33. data/locale/de/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  34. data/locale/de/foreman_remote_execution.po +13 -23
  35. data/locale/en/foreman_remote_execution.po +12 -22
  36. data/locale/en_GB/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  37. data/locale/en_GB/foreman_remote_execution.po +12 -22
  38. data/locale/es/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  39. data/locale/es/foreman_remote_execution.po +13 -23
  40. data/locale/foreman_remote_execution.pot +71 -80
  41. data/locale/fr/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  42. data/locale/fr/foreman_remote_execution.po +13 -23
  43. data/locale/ja/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  44. data/locale/ja/foreman_remote_execution.po +13 -23
  45. data/locale/ko/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  46. data/locale/ko/foreman_remote_execution.po +13 -23
  47. data/locale/pt_BR/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  48. data/locale/pt_BR/foreman_remote_execution.po +13 -23
  49. data/locale/ru/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  50. data/locale/ru/foreman_remote_execution.po +13 -23
  51. data/locale/zh_CN/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  52. data/locale/zh_CN/foreman_remote_execution.po +13 -23
  53. data/locale/zh_TW/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  54. data/locale/zh_TW/foreman_remote_execution.po +13 -23
  55. data/test/benchmark/run_hosts_job_benchmark.rb +70 -0
  56. data/test/benchmark/targeting_benchmark.rb +31 -0
  57. data/test/factories/foreman_remote_execution_factories.rb +3 -0
  58. data/test/functional/api/v2/job_templates_controller_test.rb +1 -1
  59. data/test/unit/actions/run_hosts_job_test.rb +1 -0
  60. data/test/unit/concerns/host_extensions_test.rb +1 -4
  61. data/test/unit/job_invocation_test.rb +28 -1
  62. data/test/unit/remote_execution_feature_test.rb +40 -0
  63. data/test/unit/remote_execution_provider_test.rb +55 -1
  64. metadata +10 -7
  65. data/test/unit/actions/run_host_job_test.rb +0 -50
@@ -1,4 +1,5 @@
1
1
  class RemoteExecutionFeature < ActiveRecord::Base
2
+ VALID_OPTIONS = [:provided_inputs, :description, :host_action_button]
2
3
  validates :label, :name, :presence => true, :uniqueness => true
3
4
 
4
5
  belongs_to :job_template
@@ -6,6 +7,8 @@ class RemoteExecutionFeature < ActiveRecord::Base
6
7
  extend FriendlyId
7
8
  friendly_id :label
8
9
 
10
+ scope :with_host_action_button, lambda { where(:host_action_button => true) }
11
+
9
12
  def provided_input_names
10
13
  self.provided_inputs.to_s.split(',').map(&:strip)
11
14
  end
@@ -20,12 +23,22 @@ class RemoteExecutionFeature < ActiveRecord::Base
20
23
 
21
24
  def self.register(label, name, options = {})
22
25
  return false unless RemoteExecutionFeature.table_exists?
23
- options.assert_valid_keys(:provided_inputs, :description)
26
+ options.assert_valid_keys(*VALID_OPTIONS)
27
+ options[:host_action_button] = false unless options.key?(:host_action_button)
28
+
24
29
  feature = self.find_by_label(label)
30
+
31
+ attributes = { :name => name, :provided_input_names => options[:provided_inputs], :description => options[:description], :host_action_button => options[:host_action_button] }
32
+ # in case DB does not have the attribute created yet but plugin initializer registers the feature, we need to skip this attribute
33
+ unless self.attribute_names.include?('host_action_button')
34
+ attributes.delete(:host_action_button)
35
+ end
36
+
25
37
  if feature.nil?
26
- feature = self.create!(:label => label, :name => name, :provided_input_names => options[:provided_inputs], :description => options[:description])
38
+ feature = self.create!({ :label => label }.merge(attributes))
27
39
  else
28
- feature.update_attributes!(:name => name, :provided_input_names => options[:provided_inputs], :description => options[:description])
40
+ feature.attributes = attributes
41
+ feature.save if feature.changed?
29
42
  end
30
43
  return feature
31
44
  end
@@ -35,7 +35,10 @@ class Setting::RemoteExecution < Setting
35
35
  true),
36
36
  self.set('remote_execution_ssh_port',
37
37
  N_('Port to use for SSH communication. Default port 22. You may override per host by setting a parameter called remote_execution_ssh_port.'),
38
- '22')
38
+ '22'),
39
+ self.set('remote_execution_connect_by_ip',
40
+ N_('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.'),
41
+ false),
39
42
  ].each { |s| self.create! s.update(:category => 'Setting::RemoteExecution') }
40
43
  end
41
44
 
@@ -18,6 +18,23 @@ class SSHExecutionProvider < RemoteExecutionProvider
18
18
  true
19
19
  end
20
20
 
21
+ def find_ip_or_hostname(host)
22
+ interfaces = effective_interfaces(host)
23
+ if host_setting(host, :remote_execution_connect_by_ip)
24
+ ip_interface = interfaces.find { |i| i.ip.present? }
25
+ end
26
+ if ip_interface
27
+ ip_interface.ip
28
+ else
29
+ fqdn_interface = interfaces.find { |i| i.fqdn.present? }
30
+ if fqdn_interface
31
+ fqdn_interface.fqdn
32
+ else
33
+ raise _('Could not find any suitable interface for execution')
34
+ end
35
+ end
36
+ end
37
+
21
38
  private
22
39
 
23
40
  def ssh_user(host)
@@ -25,7 +42,7 @@ class SSHExecutionProvider < RemoteExecutionProvider
25
42
  end
26
43
 
27
44
  def ssh_port(host)
28
- Integer(host.params['remote_execution_ssh_port'] || Setting[:remote_execution_ssh_port])
45
+ Integer(host_setting(host, :remote_execution_ssh_port))
29
46
  end
30
47
 
31
48
  def effective_user(template_invocation)
@@ -33,12 +50,26 @@ class SSHExecutionProvider < RemoteExecutionProvider
33
50
  end
34
51
 
35
52
  def effective_user_method(host)
36
- method = host.params['remote_execution_effective_user_method'] || Setting[:remote_execution_effective_user_method]
53
+ method = host_setting(host, :remote_execution_effective_user_method)
37
54
  unless EFFECTIVE_USER_METHODS.include?(method)
38
55
  raise _('Effective user method "%{current_value}" is not one of %{valid_methods}') %
39
56
  { :current_value => method, :valid_methods => EFFECTIVE_USER_METHODS}
40
57
  end
41
58
  method
42
59
  end
60
+
61
+ private
62
+
63
+ def effective_interfaces(host)
64
+ interfaces = []
65
+ %w(execution primary provision).map do |flag|
66
+ interfaces << host.send(flag + '_interface')
67
+ end
68
+ interfaces.compact.uniq
69
+ end
70
+
71
+ def host_setting(host, setting)
72
+ host.params[setting.to_s] || Setting[setting]
73
+ end
43
74
  end
44
75
  end
@@ -36,9 +36,13 @@ class Targeting < ActiveRecord::Base
36
36
  raise ::Foreman::Exception, _('Cannot resolve hosts without a bookmark or search query') if bookmark.nil? && search_query.blank?
37
37
 
38
38
  self.search_query = bookmark.query if dynamic? && bookmark.present?
39
- self.save!
40
- self.touch(:resolved_at)
41
- self.hosts = User.as(user.login) { Host.authorized(RESOLVE_PERMISSION, Host).search_for(search_query) }
39
+ self.resolved_at = Time.zone.now
40
+ self.validate!
41
+ # avoid validation of hosts objects - tey will be loaded for no reason.
42
+ host_ids = User.as(user.login) { Host.authorized(RESOLVE_PERMISSION, Host).search_for(search_query).pluck(:id) }
43
+ # this can be optimized even more, by introducing bulk insert
44
+ self.targeting_hosts.build(host_ids.map { |id| { :host_id => id } })
45
+ self.save(:validate => false)
42
46
  end
43
47
 
44
48
  def dynamic?
@@ -1,3 +1,3 @@
1
1
  object @remote_execution_feature
2
2
 
3
- attributes :id, :label, :name, :description, :job_template_id, :job_template_name
3
+ attributes :id, :label, :name, :description, :job_template_id, :job_template_name, :host_action_button
@@ -91,16 +91,13 @@
91
91
  </div>
92
92
 
93
93
  <div class="form-group advanced hidden">
94
- <label class="col-md-2 control-label"><%= _('Type of query') %></label>
94
+ <%= add_label({ :label => _('Type of query'), :label_help => _("Type has impact on when is the query evaulated to hosts.<br><ul><li><b>Static</b> - evaluates just after you submit this form</li><li><b>Dynamic</b> - evaluates just before the execution is started, so if it's planed in future, targeted hosts set may change before it</li></ul>") }, f, :targetting_type) %>
95
95
 
96
96
  <div class="col-md-4">
97
97
  <%= radio_button_f targeting_fields, :targeting_type, :value => Targeting::STATIC_TYPE, :text => _(Targeting::TYPES[Targeting::STATIC_TYPE]) %>
98
98
  <%= radio_button_f targeting_fields, :targeting_type, :value => Targeting::DYNAMIC_TYPE, :text => _(Targeting::TYPES[Targeting::DYNAMIC_TYPE]) %>
99
99
  </div>
100
100
 
101
- <span class="help-inline"><%= popover(_('Explanation'),
102
- _("Type has impact on when is the query evaulated to hosts.<br><ul><li><b>Static</b> - evaluates just after you submit this form</li><li><b>Dynamic</b> - evaluates just before the execution is started, so if it's planed in future, targeted hosts set may change before it</li></ul>")) %>
103
- </span>
104
101
  </div>
105
102
  <% end %>
106
103
 
@@ -1,6 +1,7 @@
1
1
  <td class="host_name" id="<%= dom_id(host) %>-name" data-refresh_required="<%= task.nil? ? 'true' : '' %>" data-id="<%= host.id %>">
2
2
  <% if task %>
3
- <%= link_to_if_authorized host.name, hash_for_template_invocation_path(:id => template_invocation).merge(:auth_object => host, :permission => :view_hosts) %>
3
+ <%= link_to_if_authorized host.name, hash_for_template_invocation_path(:id => template_invocation).merge(:auth_object => host, :permission => :view_hosts, :authorizer => job_hosts_authorizer) %>
4
+
4
5
  <% else %>
5
6
  <%= host.name %>
6
7
  <% end %>
@@ -18,7 +18,7 @@
18
18
  <tbody>
19
19
  <% @job_invocations.each do |invocation| %>
20
20
  <tr>
21
- <td><%= link_to_if_authorized invocation_description(invocation), hash_for_job_invocation_path(invocation).merge(:auth_object => invocation, :permission => :view_job_invocations) %></td>
21
+ <td><%= link_to_if_authorized invocation_description(invocation), hash_for_job_invocation_path(invocation).merge(:auth_object => invocation, :permission => :view_job_invocations, :authorizer => authorizer) %></td>
22
22
  <td><%= link_to_invocation_task_if_authorized(invocation) %></td>
23
23
  <td><%= invocation_result(invocation, :success_count) %></td>
24
24
  <td><%= invocation_result(invocation, :failed_count) %></td>
@@ -1,6 +1,6 @@
1
1
  <% title @job_invocation.description, trunc_with_tooltip(@job_invocation.description, 120) %>
2
2
  <% stylesheet 'job_invocations' %>
3
- <% javascript 'template_invocation' %>
3
+ <% javascript 'charts', 'template_invocation' %>
4
4
 
5
5
  <% if @job_invocation.task %>
6
6
  <% title_actions(button_group(job_invocation_task_buttons(@job_invocation.task))) %>
@@ -11,10 +11,7 @@
11
11
 
12
12
  <%= text_f f, :description_format,
13
13
  :disabled => @template.locked?,
14
- :help_inline => popover(_('Explanation'), _('This template is used to generate the description. ' +
15
- 'Input values can be used using the syntax %{package}. ' +
16
- 'You may also include the job category and template ' +
17
- 'name using %{job_category} and %{template_name}.')) %>
14
+ :label_help => description_format_help %>
18
15
 
19
16
  <%= select_f f, :provider_type, providers_options, :first, :last, :disabled => @template.locked? %>
20
17
 
@@ -1,9 +1,8 @@
1
1
  <%= checkbox_f(
2
2
  f,
3
3
  :execution,
4
- :help_inline => popover(
5
- '', _("The execution interface is used for remote execution"),
6
- :rel => 'popover-modal'),
4
+ :label_help => _("The execution interface is used for remote execution"),
5
+ :label_help_options => { :rel => 'popover-modal' },
7
6
  :label_size => 'col-md-3',
8
7
  :label => _('Remote execution'),
9
8
  :class => :interface_execution) %>
@@ -12,7 +12,7 @@
12
12
  <tbody>
13
13
  <% @remote_execution_features.each do |feature| %>
14
14
  <tr>
15
- <td><%= link_to_if_authorized feature.label, hash_for_remote_execution_feature_path(feature).merge(:auth_object => feature, :permission => :edit_remote_execution_features) %></td>
15
+ <td><%= link_to_if_authorized feature.label, hash_for_remote_execution_feature_path(feature).merge(:auth_object => feature, :permission => :edit_remote_execution_features, :authorizer => authorizer) %></td>
16
16
  <td><%= feature.name %></td>
17
17
  <td><%= feature.description %></td>
18
18
  </tr>
@@ -0,0 +1,5 @@
1
+ class AddHostActionButtonToRemoteExecutionFeature < ActiveRecord::Migration
2
+ def change
3
+ add_column :remote_execution_features, :host_action_button, :boolean, :null => false, :default => false
4
+ end
5
+ end
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
26
26
  s.add_dependency 'deface'
27
27
  s.add_dependency 'dynflow', '~> 0.8.10'
28
28
  s.add_dependency 'foreman_remote_execution_core'
29
- s.add_dependency 'foreman-tasks', '~> 0.8.1'
29
+ s.add_dependency 'foreman-tasks', '~> 0.9.0'
30
30
 
31
31
  s.add_development_dependency 'rubocop'
32
32
  s.add_development_dependency 'rdoc'
@@ -31,7 +31,7 @@ module ForemanRemoteExecution
31
31
 
32
32
  initializer 'foreman_remote_execution.register_plugin', before: :finisher_hook do |_app|
33
33
  Foreman::Plugin.register :foreman_remote_execution do
34
- requires_foreman '>= 1.13'
34
+ requires_foreman '>= 1.15'
35
35
 
36
36
  apipie_documented_controllers ["#{ForemanRemoteExecution::Engine.root}/app/controllers/api/v2/*.rb"]
37
37
 
@@ -84,6 +84,8 @@ module ForemanRemoteExecution
84
84
  role 'Remote Execution User', USER_PERMISSIONS
85
85
  role 'Remote Execution Manager', MANAGER_PERMISSIONS
86
86
 
87
+ add_all_permissions_to_default_roles
88
+
87
89
  # add menu entry
88
90
  menu :top_menu, :job_templates,
89
91
  url_hash: { controller: :job_templates, action: :index },
@@ -1,3 +1,3 @@
1
1
  module ForemanRemoteExecution
2
- VERSION = '1.2.2'
2
+ VERSION = '1.3.0'
3
3
  end
@@ -1,8 +1,5 @@
1
1
  # Autogenerated!
2
- _("Action with sub plans")
3
- _("Create architecture")
4
- _("Delete architecture")
5
- _("Update architecture")
6
- _("Import facts")
7
2
  _("Import Puppet classes")
3
+ _("Import facts")
4
+ _("Action with sub plans")
8
5
  _("Remote action:")
@@ -97,8 +97,8 @@ msgstr "Parallelitätsebene"
97
97
  msgid "Control concurrency level and distribution over time"
98
98
  msgstr "Parallelitätsebene und zeitliche Verteilung steuern"
99
99
 
100
- msgid "Could not use any proxy. Consider configuring %{global_proxy} or %{fallback_proxy} in settings"
101
- msgstr "Es konnte kein Proxy verwendet werden. Erwägen Sie %{global_proxy} oder %{fallback_proxy} in den Einstellungen zu konfigurieren"
100
+ msgid "Could not use any proxy. Consider configuring %{global_proxy}, %{fallback_proxy} or %{no_proxy} in settings"
101
+ msgstr ""
102
102
 
103
103
  msgid "Could not use any template used in the job invocation"
104
104
  msgstr "Es konnte keine Vorlage aus dem Jobaufruf verwendet werden"
@@ -118,9 +118,6 @@ msgstr "Wiederholten Job erstellen"
118
118
  msgid "Create a template input"
119
119
  msgstr "Vorlageneingabe erstellen"
120
120
 
121
- msgid "Create architecture"
122
- msgstr "Architektur erstellen"
123
-
124
121
  msgid "Default user to use for SSH. You may override per host by setting a parameter called remote_execution_ssh_user."
125
122
  msgstr "Standardbenutzer für SSH. Kann für jeden Host einzeln überschrieben werden, indem Sie ein Parameter namens remote_execution_ssh_user bestimmen."
126
123
 
@@ -136,9 +133,6 @@ msgstr "Job-Vorlage löschen"
136
133
  msgid "Delete a template input"
137
134
  msgstr "Vorlageneingabe löschen"
138
135
 
139
- msgid "Delete architecture"
140
- msgstr "Architektur löschen"
141
-
142
136
  msgid "Description"
143
137
  msgstr "Beschreibung"
144
138
 
@@ -211,9 +205,6 @@ msgstr "Fehlgeschlagen"
211
205
  msgid "Failed rendering template: %s"
212
206
  msgstr "Rendern der Vorlage fehlgeschlagen: %s"
213
207
 
214
- msgid "Failed to initialize command"
215
- msgstr "Initialisieren des Befehls fehlgeschlagen"
216
-
217
208
  msgid "Feature input %{input_name} not defined in template %{template_name}"
218
209
  msgstr "Funktionseingabe %{input_name} nicht definiert in Vorlage %{template_name}"
219
210
 
@@ -262,9 +253,6 @@ msgstr ""
262
253
  msgid "Indicates that the action should be cancelled if it cannot be started before this time."
263
254
  msgstr "Gibt an, dass die Aktion abgebrochen werden soll, wenn sie nicht vor diesem Zeitpunkt gestartet werden kann."
264
255
 
265
- msgid "Initialization error: %s"
266
- msgstr "Initialisierungsfehler: %s"
267
-
268
256
  msgid "Input"
269
257
  msgstr "Eingabe"
270
258
 
@@ -391,9 +379,6 @@ msgstr "Noch keine Ausführung abgeschlossen"
391
379
  msgid "No hosts found."
392
380
  msgstr "Keine Hosts gefunden"
393
381
 
394
- msgid "No output"
395
- msgstr "Keine Ausgabe"
396
-
397
382
  msgid "No template mapped to feature %{feature_name}"
398
383
  msgstr "Der Funktion %{feature_name} wurde keine Vorlage zugewiesen"
399
384
 
@@ -418,6 +403,12 @@ msgstr "Ausstehend"
418
403
  msgid "Perform no more executions after this time"
419
404
  msgstr "Danach nicht mehr ausführen"
420
405
 
406
+ msgid "Playbook execution failed"
407
+ msgstr ""
408
+
409
+ msgid "Port to use for SSH communication. Default port 22. You may override per host by setting a parameter called remote_execution_ssh_port."
410
+ msgstr ""
411
+
421
412
  msgid "Preview"
422
413
  msgstr "Vorschau"
423
414
 
@@ -511,9 +502,6 @@ msgstr "Job zu einem zukünftigen Zeitpunkt starten lassen"
511
502
  msgid "Schedule the job to start at a later time"
512
503
  msgstr "Job zu einer späteren Zeit starten lassen"
513
504
 
514
- msgid "Script execution failed"
515
- msgstr "Ausführung des Skripts fehlgeschlagen"
516
-
517
505
  msgid "Scroll to bottom"
518
506
  msgstr "Zum Ende scrollen"
519
507
 
@@ -699,9 +687,6 @@ msgstr "Job-Vorlage aktualisieren"
699
687
  msgid "Update a template input"
700
688
  msgstr "Vorlageneingabe aktualisieren"
701
689
 
702
- msgid "Update architecture"
703
- msgstr "Architektur aktualisieren"
704
-
705
690
  msgid "Use default description template"
706
691
  msgstr "Standardbeschreibungsvorlage verwenden"
707
692
 
@@ -735,6 +720,11 @@ msgstr "Welcher Benutzer zur Ausführung des Skripts verwendet werden soll (mitt
735
720
  msgid "What user should be used to run the script (using sudo-like mechanisms). Defaults to a template parameter or global setting."
736
721
  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."
737
722
 
723
+ msgid ""
724
+ "When enabled, the remote execution will try to run the commands directly, when no\n"
725
+ " proxy with remote execution feature is configured for the host."
726
+ msgstr ""
727
+
738
728
  msgid "Whether it should be allowed to override the effective user from the invocation form."
739
729
  msgstr "Ob es möglich sein soll, den effektiven Benutzer des Aufruf-Formulars außer Kraft zu setzen."
740
730
 
@@ -98,7 +98,7 @@ msgstr ""
98
98
  msgid "Control concurrency level and distribution over time"
99
99
  msgstr ""
100
100
 
101
- msgid "Could not use any proxy. Consider configuring %{global_proxy} or %{fallback_proxy} in settings"
101
+ msgid "Could not use any proxy. Consider configuring %{global_proxy}, %{fallback_proxy} or %{no_proxy} in settings"
102
102
  msgstr ""
103
103
 
104
104
  msgid "Could not use any template used in the job invocation"
@@ -119,9 +119,6 @@ msgstr ""
119
119
  msgid "Create a template input"
120
120
  msgstr ""
121
121
 
122
- msgid "Create architecture"
123
- msgstr ""
124
-
125
122
  msgid "Default user to use for SSH. You may override per host by setting a parameter called remote_execution_ssh_user."
126
123
  msgstr ""
127
124
 
@@ -137,9 +134,6 @@ msgstr ""
137
134
  msgid "Delete a template input"
138
135
  msgstr ""
139
136
 
140
- msgid "Delete architecture"
141
- msgstr ""
142
-
143
137
  msgid "Description"
144
138
  msgstr ""
145
139
 
@@ -212,9 +206,6 @@ msgstr ""
212
206
  msgid "Failed rendering template: %s"
213
207
  msgstr ""
214
208
 
215
- msgid "Failed to initialize command"
216
- msgstr ""
217
-
218
209
  msgid "Feature input %{input_name} not defined in template %{template_name}"
219
210
  msgstr ""
220
211
 
@@ -263,9 +254,6 @@ msgstr ""
263
254
  msgid "Indicates that the action should be cancelled if it cannot be started before this time."
264
255
  msgstr ""
265
256
 
266
- msgid "Initialization error: %s"
267
- msgstr ""
268
-
269
257
  msgid "Input"
270
258
  msgstr ""
271
259
 
@@ -392,9 +380,6 @@ msgstr ""
392
380
  msgid "No hosts found."
393
381
  msgstr ""
394
382
 
395
- msgid "No output"
396
- msgstr ""
397
-
398
383
  msgid "No template mapped to feature %{feature_name}"
399
384
  msgstr ""
400
385
 
@@ -419,6 +404,12 @@ msgstr ""
419
404
  msgid "Perform no more executions after this time"
420
405
  msgstr ""
421
406
 
407
+ msgid "Playbook execution failed"
408
+ msgstr ""
409
+
410
+ msgid "Port to use for SSH communication. Default port 22. You may override per host by setting a parameter called remote_execution_ssh_port."
411
+ msgstr ""
412
+
422
413
  msgid "Preview"
423
414
  msgstr ""
424
415
 
@@ -512,9 +503,6 @@ msgstr ""
512
503
  msgid "Schedule the job to start at a later time"
513
504
  msgstr ""
514
505
 
515
- msgid "Script execution failed"
516
- msgstr ""
517
-
518
506
  msgid "Scroll to bottom"
519
507
  msgstr ""
520
508
 
@@ -700,9 +688,6 @@ msgstr ""
700
688
  msgid "Update a template input"
701
689
  msgstr ""
702
690
 
703
- msgid "Update architecture"
704
- msgstr ""
705
-
706
691
  msgid "Use default description template"
707
692
  msgstr ""
708
693
 
@@ -736,6 +721,11 @@ msgstr ""
736
721
  msgid "What user should be used to run the script (using sudo-like mechanisms). Defaults to a template parameter or global setting."
737
722
  msgstr ""
738
723
 
724
+ msgid ""
725
+ "When enabled, the remote execution will try to run the commands directly, when no\n"
726
+ " proxy with remote execution feature is configured for the host."
727
+ msgstr ""
728
+
739
729
  msgid "Whether it should be allowed to override the effective user from the invocation form."
740
730
  msgstr ""
741
731