hammer_cli_foreman_remote_execution 0.0.6 → 0.2.1

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 (32) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +5 -4
  3. data/.tx/config +8 -0
  4. data/hammer_cli_foreman_remote_execution.gemspec +3 -3
  5. data/lib/hammer_cli_foreman_remote_execution.rb +2 -0
  6. data/lib/hammer_cli_foreman_remote_execution/interface_extensions.rb +30 -0
  7. data/lib/hammer_cli_foreman_remote_execution/job_invocation.rb +122 -25
  8. data/lib/hammer_cli_foreman_remote_execution/job_template.rb +1 -0
  9. data/lib/hammer_cli_foreman_remote_execution/subnet_extensions.rb +16 -0
  10. data/lib/hammer_cli_foreman_remote_execution/template_input.rb +10 -2
  11. data/lib/hammer_cli_foreman_remote_execution/version.rb +1 -1
  12. data/locale/README.md +2 -2
  13. data/locale/de/hammer-cli-foreman-remote-execution.po +262 -0
  14. data/locale/en/hammer-cli-foreman-remote-execution.po +49 -1
  15. data/locale/es/hammer-cli-foreman-remote-execution.po +262 -0
  16. data/locale/fr/hammer-cli-foreman-remote-execution.po +262 -0
  17. data/locale/hammer-cli-foreman-remote-execution.pot +105 -33
  18. data/locale/it/hammer-cli-foreman-remote-execution.po +261 -0
  19. data/locale/ja/hammer-cli-foreman-remote-execution.po +262 -0
  20. data/locale/ko/hammer-cli-foreman-remote-execution.po +262 -0
  21. data/locale/pt_BR/hammer-cli-foreman-remote-execution.po +263 -0
  22. data/locale/ru/hammer-cli-foreman-remote-execution.po +264 -0
  23. data/locale/zh_CN/hammer-cli-foreman-remote-execution.po +263 -0
  24. data/locale/zh_TW/hammer-cli-foreman-remote-execution.po +263 -0
  25. data/test/data/1.16/foreman_api.json +1 -0
  26. data/test/data/1.17/foreman_api.json +1 -0
  27. data/test/unit/foreign_input_set_test.rb +1 -1
  28. data/test/unit/job_invocation_test.rb +27 -5
  29. data/test/unit/job_template_test.rb +1 -1
  30. data/test/unit/remote_execution_feature_test.rb +1 -1
  31. data/test/unit/template_input_test.rb +9 -1
  32. metadata +27 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: f879c32ae742ceb90ab61bbc02322b2a44416df7
4
- data.tar.gz: a66b9ac45d9714ebc8350d7ec51074d6f2eb860f
2
+ SHA256:
3
+ metadata.gz: a8cd0e41c73966cfa7089868144153770421ab767e7c85e7e4a1ea904c95bd67
4
+ data.tar.gz: 6e9c15d1174bbf9037c6548c814c88bd56dbef7eb338f0729302e233b9cc9572
5
5
  SHA512:
6
- metadata.gz: 81171fd1db3da7eec1d8e25ebcf59df15dca78981a74f09decb181b8fdd500f844a07a84f8cfe2ec0b1ab7612643dadedabaebb9ec9dfd81224ae5bb007f8052
7
- data.tar.gz: c9153fc2750b9f9653e9655370f2547dc8880fb5c5746be9914ab9764091f3edd6f7f4172b302c9007ba384595827fa5605d7975ef71d21090ba41d518370b31
6
+ metadata.gz: f4bf60dc1d75ff17914e15257faafaefbb6aceb6b0d3e5d550bee2f915747553fc769d9deab994d38c31cb4639131efc2164a6a09686b9128459389a4d832dde
7
+ data.tar.gz: 523f21e8d58871c5dbf43b73841117e570332fbe665d7eec45d261076637692dc5bbbeb06a25855c6ff5e5aca957c16f352f983c59c4af70279c9d2fd9004c38
@@ -1,8 +1,9 @@
1
1
  ---
2
2
  language: ruby
3
3
  rvm:
4
- - 2.0.0
5
- - 2.1.0
6
- - 2.2.0
7
- - 2.3.0
4
+ - 2.4.0
5
+ - 2.5.0
6
+ - 2.6.0
8
7
  sudo: false
8
+ before_install:
9
+ - gem update bundler
@@ -0,0 +1,8 @@
1
+ [main]
2
+ host = https://www.transifex.com
3
+
4
+ [foreman.hammer-cli-foreman-remote-execution]
5
+ file_filter = locale/<lang>/hammer-cli-foreman-remote-execution.edit.po
6
+ source_file = locale/hammer-cli-foreman-remote-exectution.pot
7
+ source_lang = en
8
+ type = PO
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
6
6
  s.platform = Gem::Platform::RUBY
7
7
  s.authors = ['Foreman Remote Execution team']
8
8
  s.email = ['foreman-dev@googlegroups.com']
9
- s.homepage = 'http://github.com/theforeman/hammer_cli_foreman_remote_execution'
10
- s.license = 'GPL v3+'
9
+ s.homepage = 'https://github.com/theforeman/hammer_cli_foreman_remote_execution'
10
+ s.license = 'GPL-3.0-or-later'
11
11
 
12
12
  s.summary = 'CLI for the Foreman remote execution plugin'
13
13
  s.description = 'CLI for the Foreman remote execution plugin'
@@ -16,6 +16,6 @@ Gem::Specification.new do |s|
16
16
  s.test_files = `git ls-files test`.split("\n")
17
17
  s.extra_rdoc_files = `git ls-files doc`.split("\n") + Dir['README*', 'LICENSE']
18
18
 
19
- s.add_dependency 'hammer_cli_foreman', '>= 0.1.3', '< 1.0.0'
19
+ s.add_dependency 'hammer_cli_foreman', '>= 0.1.3', '< 3.0.0'
20
20
  s.add_dependency 'hammer_cli_foreman_tasks', '~> 0.0.3'
21
21
  end
@@ -9,6 +9,8 @@ module HammerCLIForemanRemoteExecution
9
9
  require 'hammer_cli_foreman_remote_execution/template_input'
10
10
  require 'hammer_cli_foreman_remote_execution/foreign_input_set'
11
11
  require 'hammer_cli_foreman_remote_execution/remote_execution_feature'
12
+ require 'hammer_cli_foreman_remote_execution/interface_extensions'
13
+ require 'hammer_cli_foreman_remote_execution/subnet_extensions'
12
14
 
13
15
  def self.exception_handler_class
14
16
  HammerCLIForeman::ExceptionHandler
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'hammer_cli_foreman/interface'
4
+
5
+ module HammerCLIForemanRemoteExecution
6
+ class InterfaceExtensionsInfo < ::HammerCLI::CommandExtensions
7
+ output do |definition|
8
+ definition.append do
9
+ field :execution, _('Execution'), Fields::Boolean
10
+ end
11
+ end
12
+ end
13
+
14
+ module InterfaceExtensionsList
15
+ def format_type(nic)
16
+ type = super(nic)
17
+ if nic['execution']
18
+ if nic['primary'] || nic['provision']
19
+ type[-1] = ', '+_('execution') +')'
20
+ else
21
+ type += ' ('+_('execution') +')'
22
+ end
23
+ end
24
+ type
25
+ end
26
+ end
27
+
28
+ ::HammerCLIForeman::Interface.singleton_class.prepend InterfaceExtensionsList
29
+ ::HammerCLIForeman::Interface::InfoCommand.extend_with(InterfaceExtensionsInfo.new)
30
+ end
@@ -2,17 +2,31 @@ module HammerCLIForemanRemoteExecution
2
2
  class JobInvocation < HammerCLIForeman::Command
3
3
  resource :job_invocations
4
4
 
5
- class ListCommand < HammerCLIForeman::ListCommand
6
- output do
7
- field :id, _('ID')
8
- field :description, _('Description')
9
- field :status_label, _('Status')
10
- field :succeeded, _('Success')
11
- field :failed, _('Failed')
12
- field :pending, _('Pending')
13
- field :total, _('Total')
14
- field :start_at, _('Start')
5
+ module WithoutNameOption
6
+ def create_option_builder
7
+ HammerCLI::Apipie::OptionBuilder.new(resource, resource.action(action), :require_options => false)
15
8
  end
9
+ end
10
+
11
+ module BaseOutput
12
+ def self.included(base)
13
+ base.output do
14
+ field :id, _('ID')
15
+ field :description, _('Description')
16
+ field :status_label, _('Status')
17
+ field :succeeded, _('Success')
18
+ field :failed, _('Failed')
19
+ field :pending, _('Pending')
20
+ field :total, _('Total')
21
+ field :start_at, _('Start')
22
+ field :randomized_ordering, _('Randomized ordering')
23
+ field :inputs, _('Inputs'), nil, :hide_blank => true
24
+ end
25
+ end
26
+ end
27
+
28
+ class ListCommand < HammerCLIForeman::ListCommand
29
+ include BaseOutput
16
30
 
17
31
  def extend_data(invocation)
18
32
  JobInvocation.extend_data(invocation)
@@ -22,24 +36,57 @@ module HammerCLIForemanRemoteExecution
22
36
  end
23
37
 
24
38
  class InfoCommand < HammerCLIForeman::InfoCommand
25
- output ListCommand.output_definition do
26
- field :job_category, _('Job Category')
27
- field :mode, _('Mode')
28
- field :cron_line, _('Cron line')
29
- field :recurring_logic_id, _('Recurring logic ID')
30
- field :hosts, _('Hosts')
39
+ extend WithoutNameOption
40
+ include BaseOutput
41
+ option '--show-inputs', :flag, _('Show the complete input of the job')
42
+ option '--show-host-status', :flag, _('Show job status for the hosts')
43
+
44
+ extend_output_definition do |definition|
45
+ definition.insert(:before, :total) do
46
+ field :missing, _('Missing')
47
+ end
48
+ definition.append do
49
+ field :job_category, _('Job Category')
50
+ field :mode, _('Mode')
51
+ field :cron_line, _('Cron line')
52
+ field :recurring_logic_id, _('Recurring logic ID')
53
+ field :hosts, _('Hosts')
54
+ end
31
55
  end
32
56
 
33
- def extend_data(invocation)
34
- JobInvocation.extend_data(invocation)
57
+ def adapter
58
+ if option_id
59
+ :yaml
60
+ else
61
+ :base
62
+ end
35
63
  end
36
64
 
37
- def self.create_option_builder
38
- HammerCLI::Apipie::OptionBuilder.new(resource, resource.action(action), :require_options => false)
65
+ def extend_data(invocation)
66
+ if option_show_inputs?
67
+ invocation['template_invocations']&.each do |template|
68
+ input_values = template['template_invocation_input_values']
69
+ values_for_host = {}
70
+ input_values&.each do |input_value|
71
+ values_for_host[input_value['template_input_name']] = input_value['value']
72
+ end
73
+ hosts = invocation.dig('targeting', 'hosts')
74
+ host_index = hosts&.index { |h| h['id'] == template['host_id'] }
75
+ invocation['targeting']['hosts'][host_index][:inputs] = values_for_host if host_index
76
+ end
77
+ end
78
+ JobInvocation.extend_data(invocation)
39
79
  end
40
80
 
41
81
  build_options do |o|
42
82
  o.expand(:none)
83
+ o.without(:host_status)
84
+ end
85
+
86
+ def request_params
87
+ params = super
88
+ params[:host_status] = true if option_show_host_status?
89
+ params
43
90
  end
44
91
  end
45
92
 
@@ -58,17 +105,39 @@ module HammerCLIForemanRemoteExecution
58
105
  puts line['output']
59
106
  since = line['timestamp']
60
107
  end
108
+ since
109
+ end
61
110
 
62
- if output['refresh'] && !option_async?
63
- sleep 1
64
- print_data(resource.call(action, request_params.merge(:since => since), request_headers, request_options))
111
+ def execute
112
+ data = get_output
113
+ if data['delayed']
114
+ puts _('The job is scheduled to start at %{timestamp}') % { :timestamp => data['start_at'] }
115
+ return HammerCLI::EX_OK if option_async?
65
116
  end
117
+ since = print_data(data)
118
+
119
+ output_loop(data, since)
120
+ return HammerCLI::EX_OK
66
121
  end
67
122
 
68
123
  build_options do |o|
69
124
  o.expand(:all).except(:job_invocations)
70
125
  o.without(:since)
71
126
  end
127
+
128
+ private
129
+
130
+ def output_loop(data, since = nil)
131
+ while data['refresh'] && !option_async? do
132
+ sleep 1
133
+ data = get_output(since)
134
+ since = print_data(data)
135
+ end
136
+ end
137
+
138
+ def get_output(since = nil)
139
+ resource.call(action, request_params.merge(:since => since), request_headers, request_options)
140
+ end
72
141
  end
73
142
 
74
143
  class CreateCommand < HammerCLIForeman::CreateCommand
@@ -135,9 +204,37 @@ module HammerCLIForemanRemoteExecution
135
204
  end
136
205
  end
137
206
 
207
+ class CancelCommand < HammerCLIForeman::Command
208
+ extend WithoutNameOption
209
+
210
+ action :cancel
211
+ command_name 'cancel'
212
+ desc _('Cancel the job')
213
+ success_message _('Job invocation %{id} cancelled')
214
+ failure_message _('Could not cancel the job invocation')
215
+
216
+ build_options { |o| o.expand(:none) }
217
+ end
218
+
219
+ class RerunCommand < HammerCLIForeman::CreateCommand
220
+ extend WithoutNameOption
221
+
222
+ action :rerun
223
+ command_name 'rerun'
224
+ desc _('Rerun the job')
225
+ success_message _('Job invocation was rerun as %{id}')
226
+
227
+ build_options { |o| o.expand(:none) }
228
+ end
229
+
138
230
  def self.extend_data(invocation)
139
- if invocation['targeting'] && invocation['targeting']['hosts']
140
- invocation['hosts'] = "\n" + invocation['targeting']['hosts'].map { |host| " - #{host['name']}" }.join("\n")
231
+ if (targeting = invocation['targeting']) && invocation['targeting']['hosts']
232
+ invocation['randomized_ordering'] = targeting['randomized_ordering']
233
+
234
+ hosts = targeting['hosts'].map do |host|
235
+ { 'Name' => host['name'], 'Job status' => host['job_status'], 'Inputs' => host[:inputs] }.compact
236
+ end
237
+ invocation['hosts'] = hosts
141
238
  end
142
239
 
143
240
  if invocation['recurrence']
@@ -20,6 +20,7 @@ module HammerCLIForemanRemoteExecution
20
20
 
21
21
  class InfoCommand < HammerCLIForeman::InfoCommand
22
22
  output ListCommand.output_definition do
23
+ field :description, _('Description'), Fields::Text
23
24
  field :template_inputs, _('Inputs')
24
25
  HammerCLIForeman::References.taxonomies(self)
25
26
  end
@@ -0,0 +1,16 @@
1
+ require 'hammer_cli_foreman/subnet'
2
+
3
+ module HammerCLIForemanRemoteExecution
4
+ class SubnetExtensions < ::HammerCLI::CommandExtensions
5
+ output do |definition|
6
+ definition.insert(:after, _("Smart Proxies"))do
7
+ collection :remote_execution_proxies, _('Remote execution proxies'), :numbered => false do
8
+ field :id, _('Id')
9
+ field :name, _('Name')
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ ::HammerCLIForeman::Subnet::InfoCommand.extend_with(SubnetExtensions.new)
16
+ end
@@ -23,20 +23,28 @@ module HammerCLIForemanRemoteExecution
23
23
  field :variable_name, _('Variable name')
24
24
  field :puppet_parameter_name, _('Puppet parameter name')
25
25
  field :options, _('Options'), Fields::List, :width => 25, :hide_blank => true
26
+ field :default, _('Default value')
26
27
  end
27
28
 
28
29
  build_options
29
30
  end
30
31
 
31
32
  class CreateCommand < HammerCLIForeman::CreateCommand
32
- success_message _('Template input created')
33
+ success_message _('Template input created.')
33
34
  failure_message _('Could not create the template input')
34
35
 
35
36
  build_options
36
37
  end
37
38
 
39
+ class UpdateCommand < HammerCLIForeman::UpdateCommand
40
+ success_message _('Template input updated.')
41
+ failure_message _('Could not update the template input')
42
+
43
+ build_options
44
+ end
45
+
38
46
  class DeleteCommand < HammerCLIForeman::DeleteCommand
39
- success_message _('Template input deleted')
47
+ success_message _('Template input deleted.')
40
48
  failure_message _('Could not delete the template input')
41
49
 
42
50
  build_options
@@ -1,5 +1,5 @@
1
1
  module HammerCLIForemanRemoteExecution
2
2
  def self.version
3
- @version ||= Gem::Version.new '0.0.6'
3
+ @version ||= Gem::Version.new '0.2.1'
4
4
  end
5
5
  end
@@ -1,11 +1,11 @@
1
1
  Updating the translations
2
2
  -------------------------
3
3
 
4
- 1. Check if there are any new languages with progress more than 50% on [transifex](https://www.transifex.com/projects/p/foreman/resource/hammer-cli-foreman/). If so, do the following for each of the new languages:
4
+ 1. Check if there are any new languages with progress more than 50% on [transifex](https://www.transifex.com/projects/p/foreman/resource/hammer-cli-foreman-remote-execution/). If so, do the following for each of the new languages:
5
5
 
6
6
  ```
7
7
  mkdir locale/<lang>
8
- cp locale/hammer-cli-foreman.pot locale/<lang>/hammer-cli-foreman.po
8
+ cp locale/hammer-cli-foreman-remote-execution.pot locale/<lang>/hammer-cli-foreman-remote-execution.po
9
9
  ```
10
10
  2. Make sure you have `transifex-client` installed
11
11
 
@@ -0,0 +1,262 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the hammer_cli_foreman_tasks package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: hammer-cli-foreman-remote-execution 0.2.0\n"
9
+ "Report-Msgid-Bugs-To: \n"
10
+ "PO-Revision-Date: 2016-02-18 10:36-0500\n"
11
+ "Last-Translator: Wiederoder <stefanwiederoder@googlemail.com>, 2017\n"
12
+ "Language-Team: German (https://www.transifex.com/foreman/teams/114/de/)\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=UTF-8\n"
15
+ "Content-Transfer-Encoding: 8bit\n"
16
+ "Language: de\n"
17
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+
19
+ msgid "Manage foreign input sets"
20
+ msgstr ""
21
+
22
+ msgid "ID"
23
+ msgstr "ID"
24
+
25
+ #, fuzzy
26
+ msgid "Target template ID"
27
+ msgstr "ID"
28
+
29
+ msgid "Target template name"
30
+ msgstr ""
31
+
32
+ msgid "Name"
33
+ msgstr "Name"
34
+
35
+ msgid "Include all"
36
+ msgstr ""
37
+
38
+ msgid "Include"
39
+ msgstr ""
40
+
41
+ msgid "Exclude"
42
+ msgstr ""
43
+
44
+ msgid "Foreign input set updated"
45
+ msgstr ""
46
+
47
+ msgid "Could not update the input set"
48
+ msgstr ""
49
+
50
+ msgid "Foreign input set created"
51
+ msgstr ""
52
+
53
+ msgid "Could not create the input set"
54
+ msgstr ""
55
+
56
+ msgid "Foreign input set deleted"
57
+ msgstr ""
58
+
59
+ msgid "Could not delete the input set"
60
+ msgstr ""
61
+
62
+ msgid "Description"
63
+ msgstr ""
64
+
65
+ #, fuzzy
66
+ msgid "Status"
67
+ msgstr "Status"
68
+
69
+ msgid "Success"
70
+ msgstr ""
71
+
72
+ msgid "Failed"
73
+ msgstr ""
74
+
75
+ msgid "Pending"
76
+ msgstr ""
77
+
78
+ msgid "Total"
79
+ msgstr ""
80
+
81
+ #, fuzzy
82
+ msgid "Start"
83
+ msgstr "Status"
84
+
85
+ msgid "Job Category"
86
+ msgstr ""
87
+
88
+ msgid "Mode"
89
+ msgstr ""
90
+
91
+ msgid "Cron line"
92
+ msgstr "Cron-Zeile"
93
+
94
+ #, fuzzy
95
+ msgid "Recurring logic ID"
96
+ msgstr "ID"
97
+
98
+ msgid "Hosts"
99
+ msgstr ""
100
+
101
+ msgid "View the output for a host"
102
+ msgstr ""
103
+
104
+ msgid "Do not wait for job to complete, shows current output only"
105
+ msgstr ""
106
+
107
+ msgid "The job is scheduled to start at %{timestamp}"
108
+ msgstr ""
109
+
110
+ msgid "Job invocation %{id} created"
111
+ msgstr ""
112
+
113
+ msgid "Schedule the execution for a later time"
114
+ msgstr ""
115
+
116
+ msgid "Execution should be cancelled if it cannot be started before --start-at"
117
+ msgstr ""
118
+
119
+ msgid "Create a recurring execution"
120
+ msgstr ""
121
+
122
+ msgid "Perform no more executions after this time, used with --cron-line"
123
+ msgstr ""
124
+
125
+ msgid "Specify inputs from command line"
126
+ msgstr ""
127
+
128
+ msgid "Read input values from files"
129
+ msgstr ""
130
+
131
+ msgid "Dynamic search queries are evaluated at run time"
132
+ msgstr ""
133
+
134
+ msgid "Cancel the job"
135
+ msgstr ""
136
+
137
+ msgid "Job invocation %{id} cancelled"
138
+ msgstr ""
139
+
140
+ msgid "Could not cancel the job invocation"
141
+ msgstr ""
142
+
143
+ msgid "Rerun the job"
144
+ msgstr ""
145
+
146
+ msgid "Job invocation was rerun as %{id}"
147
+ msgstr ""
148
+
149
+ msgid "Manage job invocations"
150
+ msgstr ""
151
+
152
+ msgid "Provider"
153
+ msgstr ""
154
+
155
+ msgid "Type"
156
+ msgstr ""
157
+
158
+ msgid "Inputs"
159
+ msgstr ""
160
+
161
+ msgid "View job template content"
162
+ msgstr ""
163
+
164
+ msgid "Path to a file that contains the template"
165
+ msgstr ""
166
+
167
+ msgid "Job template created"
168
+ msgstr ""
169
+
170
+ msgid "Could not create the job template"
171
+ msgstr ""
172
+
173
+ msgid "Path to a file that contains the template - must include ERB metadata"
174
+ msgstr ""
175
+
176
+ msgid "Job template imported"
177
+ msgstr ""
178
+
179
+ msgid "Could not import the job template"
180
+ msgstr ""
181
+
182
+ msgid "Export a template including all metadata"
183
+ msgstr ""
184
+
185
+ msgid "Job template updated"
186
+ msgstr ""
187
+
188
+ msgid "Could not update the job template"
189
+ msgstr ""
190
+
191
+ msgid "Job template deleted"
192
+ msgstr ""
193
+
194
+ msgid "Could not delete the job template"
195
+ msgstr ""
196
+
197
+ msgid "Manage job templates"
198
+ msgstr ""
199
+
200
+ msgid ""
201
+ "Comma-separated list of key=file, where file is a path to a text file to be re"
202
+ "ad"
203
+ msgstr ""
204
+
205
+ #, fuzzy
206
+ msgid ""
207
+ "Cron line format 'a b c d e', where:\n"
208
+ " a. is minute (range: 0-59)\n"
209
+ " b. is hour (range: 0-23)\n"
210
+ " c. is day of month (range: 1-31)\n"
211
+ " d. is month (range: 1-12)\n"
212
+ " e. is day of week (range: 0-6)"
213
+ msgstr "Cron-Zeile"
214
+
215
+ msgid "Manage remote execution features"
216
+ msgstr ""
217
+
218
+ msgid "Job template name"
219
+ msgstr ""
220
+
221
+ msgid "Label"
222
+ msgstr ""
223
+
224
+ #, fuzzy
225
+ msgid "Job template ID"
226
+ msgstr "ID"
227
+
228
+ msgid "Remote execution feature updated"
229
+ msgstr ""
230
+
231
+ msgid "Could not update the remote execution feature"
232
+ msgstr ""
233
+
234
+ msgid "Manage template inputs"
235
+ msgstr ""
236
+
237
+ msgid "Input type"
238
+ msgstr ""
239
+
240
+ msgid "Fact name"
241
+ msgstr ""
242
+
243
+ msgid "Variable name"
244
+ msgstr ""
245
+
246
+ msgid "Puppet parameter name"
247
+ msgstr ""
248
+
249
+ msgid "Options"
250
+ msgstr ""
251
+
252
+ msgid "Template input created"
253
+ msgstr ""
254
+
255
+ msgid "Could not create the template input"
256
+ msgstr ""
257
+
258
+ msgid "Template input deleted"
259
+ msgstr ""
260
+
261
+ msgid "Could not delete the template input"
262
+ msgstr ""