foreman_salt 13.2.1 → 14.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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/app/controllers/foreman_salt/api/v2/salt_autosign_controller.rb +31 -1
  4. data/app/controllers/foreman_salt/api/v2/salt_variables_controller.rb +1 -2
  5. data/app/lib/proxy_api/salt.rb +16 -2
  6. data/app/models/foreman_salt/concerns/host_managed_extensions.rb +64 -15
  7. data/app/models/foreman_salt/salt_status.rb +12 -0
  8. data/app/services/foreman_salt/report_importer.rb +1 -1
  9. data/config/routes.rb +1 -0
  10. data/db/migrate/20210312150333_add_salt_autosign_to_host.rb +6 -0
  11. data/db/seeds.d/76-job_templates.rb +1 -1
  12. data/lib/foreman_salt/engine.rb +2 -4
  13. data/lib/foreman_salt/extensions.rb +0 -3
  14. data/lib/foreman_salt/version.rb +1 -1
  15. data/locale/ca/LC_MESSAGES/foreman_salt.mo +0 -0
  16. data/locale/ca/foreman_salt.po +541 -0
  17. data/locale/cs_CZ/LC_MESSAGES/foreman_salt.mo +0 -0
  18. data/locale/cs_CZ/foreman_salt.po +541 -0
  19. data/locale/de/LC_MESSAGES/foreman_salt.mo +0 -0
  20. data/locale/de/foreman_salt.po +0 -18
  21. data/locale/en/LC_MESSAGES/foreman_salt.mo +0 -0
  22. data/locale/en/foreman_salt.po +0 -18
  23. data/locale/en_GB/LC_MESSAGES/foreman_salt.mo +0 -0
  24. data/locale/en_GB/foreman_salt.po +541 -0
  25. data/locale/es/LC_MESSAGES/foreman_salt.mo +0 -0
  26. data/locale/es/foreman_salt.po +541 -0
  27. data/locale/foreman_salt.pot +22 -46
  28. data/locale/fr/LC_MESSAGES/foreman_salt.mo +0 -0
  29. data/locale/fr/foreman_salt.po +541 -0
  30. data/locale/gl/LC_MESSAGES/foreman_salt.mo +0 -0
  31. data/locale/gl/foreman_salt.po +541 -0
  32. data/locale/it/LC_MESSAGES/foreman_salt.mo +0 -0
  33. data/locale/it/foreman_salt.po +541 -0
  34. data/locale/ja/LC_MESSAGES/foreman_salt.mo +0 -0
  35. data/locale/ja/foreman_salt.po +541 -0
  36. data/locale/ko/LC_MESSAGES/foreman_salt.mo +0 -0
  37. data/locale/ko/foreman_salt.po +541 -0
  38. data/locale/nl_NL/LC_MESSAGES/foreman_salt.mo +0 -0
  39. data/locale/nl_NL/foreman_salt.po +541 -0
  40. data/locale/pl/LC_MESSAGES/foreman_salt.mo +0 -0
  41. data/locale/pl/foreman_salt.po +542 -0
  42. data/locale/pt_BR/LC_MESSAGES/foreman_salt.mo +0 -0
  43. data/locale/pt_BR/foreman_salt.po +541 -0
  44. data/locale/ru/LC_MESSAGES/foreman_salt.mo +0 -0
  45. data/locale/ru/foreman_salt.po +542 -0
  46. data/locale/sv_SE/LC_MESSAGES/foreman_salt.mo +0 -0
  47. data/locale/sv_SE/foreman_salt.po +541 -0
  48. data/locale/zh_CN/LC_MESSAGES/foreman_salt.mo +0 -0
  49. data/locale/zh_CN/foreman_salt.po +541 -0
  50. data/locale/zh_TW/LC_MESSAGES/foreman_salt.mo +0 -0
  51. data/locale/zh_TW/foreman_salt.po +541 -0
  52. data/test/functional/api/v2/salt_autosign_controller_test.rb +2 -0
  53. data/test/integration/salt_autosign_test.rb +2 -2
  54. data/test/integration/salt_keys_test.rb +2 -3
  55. data/test/unit/host_extensions_test.rb +55 -11
  56. metadata +40 -15
  57. data/app/models/foreman_salt/fact_name.rb +0 -14
  58. data/app/services/foreman_salt/fact_importer.rb +0 -15
  59. data/app/services/foreman_salt/fact_parser.rb +0 -114
  60. data/test/unit/grains_centos.json +0 -113
  61. data/test/unit/salt_fact_importer_test.rb +0 -24
  62. data/test/unit/salt_fact_parser_test.rb +0 -44
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 73d74127a44ff9d72274c35327e39136f900957306b6be6f61ed4d203a57048e
4
- data.tar.gz: edcf695b45ef11353f43715d7414c69c81cac19fcb59701c6ec609d2cba321fb
3
+ metadata.gz: 287507e11ca2f63bc8341eae5bc832e7d95ad5b848922b9eba44b85486fd9dc3
4
+ data.tar.gz: e1a70ace048abbcf30d57e0631f8b1ad1627bbad3c5261b2196d0a92663ef833
5
5
  SHA512:
6
- metadata.gz: caedc4692655b265bf46f63e4f589ab308c62e12557ad6da9a5d002a8f1814faa0adcf00791a4e945153ea94ae53d260a7a168961cf3ac3d8cbe2246d3f9f508
7
- data.tar.gz: 81f7202d404bf4da3757e867a6dee76cc307e1692da0f4c9a2f80501b4db90f36dd6c44fcd4697e4016d28069d29e5866afe26f0ba19652608570ee21b3cfd47
6
+ metadata.gz: '08395ab98cb79f8dfc725268cfcb9dc8b11c015562625ea56f90315edaa9bcf1c76601d123481d57eed865212cc7212cfa36be6ea1506d8e59d1ac15afaa5f2b'
7
+ data.tar.gz: f7a59b6f52e80340520a8ed4523e39727659612a737fb848c33731013684f09dcbe83e27c02c928a22614f18842120ce3d53908bc2ec4176a153bb69c2124527
data/README.md CHANGED
@@ -17,6 +17,7 @@ This plug-in adds support for Salt to Foreman.
17
17
  | >= 1.22 | 10.3.1 |
18
18
  | >= 1.23 | 11.0.1 |
19
19
  | >= 1.24 | 13.2.0 |
20
+ | >= 2.5 | 14.0.0 |
20
21
 
21
22
  ## Documentation
22
23
 
@@ -4,7 +4,15 @@ module ForemanSalt
4
4
  module Api
5
5
  module V2
6
6
  class SaltAutosignController < ::ForemanSalt::Api::V2::BaseController
7
- before_action :find_proxy, :setup_proxy
7
+ include ::Foreman::Controller::SmartProxyAuth
8
+ include ::Foreman::Controller::Parameters::Host
9
+
10
+ # The add_smart_proxy_filters must be executed first! Otherwise, resource_finder won't work properly
11
+ add_smart_proxy_filters :auth
12
+
13
+ before_action :find_proxy, except: [:auth]
14
+ before_action :find_host, :find_proxy_via_host, only: [:auth]
15
+ before_action :setup_proxy
8
16
 
9
17
  api :GET, '/salt_autosign/:smart_proxy_id', N_('List all autosign records')
10
18
  param :smart_proxy_id, :identifier_dottable, :required => true
@@ -28,6 +36,18 @@ module ForemanSalt
28
36
  render :json => { root_node_name => _('Record deleted.') }
29
37
  end
30
38
 
39
+ api :PUT, '/salt_autosign_auth', N_("Set the salt_status as \'successful authentication\' and remove the corresponding autosign key from the Smart Proxy")
40
+ param :name, String, :required => true
41
+ def auth
42
+ Rails.logger.info("Removing Salt autosign key and update status for host #{@host}")
43
+ @api.autosign_remove_key(@host.salt_autosign_key) unless @host.salt_autosign_key.nil?
44
+ @host.update(:salt_status => ForemanSalt::SaltStatus.minion_auth_success)
45
+ render :json => { :message => "Removed autosign key and updated status succesfully" }, :status => 204
46
+ rescue ::Foreman::Exception => e
47
+ Rails.logger.warn("Cannot delete autosign key of host (id => #{params[:name]}) state: #{e}")
48
+ render :json => { :message => e.to_s }, :status => :unprocessable_entity
49
+ end
50
+
31
51
  def metadata_total
32
52
  @total ||= all_autosign.count
33
53
  end
@@ -50,11 +70,21 @@ module ForemanSalt
50
70
  @_autosigns ||= @api.autosign_list.map { |record| OpenStruct.new(:record => record) }
51
71
  end
52
72
 
73
+ def find_host
74
+ @host = resource_finder(Host.authorized(:view_hosts), params[:name])
75
+ not_found unless @host
76
+ end
77
+
53
78
  def find_proxy
54
79
  @proxy = ::SmartProxy.friendly.find(params[:smart_proxy_id])
55
80
  not_found unless @proxy
56
81
  end
57
82
 
83
+ def find_proxy_via_host
84
+ @proxy = ::SmartProxy.friendly.find(@host.salt_proxy.id)
85
+ not_found unless @proxy
86
+ end
87
+
58
88
  def setup_proxy
59
89
  @api = ProxyAPI::Salt.new(:url => @proxy.url)
60
90
  end
@@ -6,7 +6,6 @@ module ForemanSalt
6
6
  # API controller for Salt Variables
7
7
  class SaltVariablesController < ::ForemanSalt::Api::V2::BaseController
8
8
  include ::ForemanSalt::Concerns::SaltVariableParameters
9
- include Foreman::Controller::Parameters::VariableLookupKey
10
9
 
11
10
  wrap_parameters :salt_variable, :include => salt_variable_params_filter.accessible_attributes(parameter_filter_context) + ['salt_state_id']
12
11
  before_action :find_resource, :only => [:show, :destroy, :update]
@@ -58,7 +57,7 @@ module ForemanSalt
58
57
  param_group :salt_variable, :as => :update
59
58
 
60
59
  def update
61
- @salt_variable.update!(variable_lookup_key_params)
60
+ @salt_variable.update!(salt_variable_params)
62
61
  render 'foreman_salt/api/v2/salt_variables/show'
63
62
  end
64
63
 
@@ -14,7 +14,7 @@ module ::ProxyAPI
14
14
  def autosign_create(name)
15
15
  parse(post('', "autosign/#{URI.escape(name)}"))
16
16
  rescue => e
17
- raise ProxyException.new(url, e, N_('Unable to set Salt autosign for %s'), name)
17
+ raise ProxyException.new(url, e, N_('Unable to set Salt autosign hostname for %s'), name)
18
18
  end
19
19
 
20
20
  def autosign_remove(name)
@@ -22,7 +22,21 @@ module ::ProxyAPI
22
22
  rescue RestClient::ResourceNotFound
23
23
  true # entry doesn't exists anyway
24
24
  rescue => e
25
- raise ProxyException.new(url, e, N_('Unable to delete Salt autosign for %s'), name)
25
+ raise ProxyException.new(url, e, N_('Unable to delete Salt autosign hostname for %s'), name)
26
+ end
27
+
28
+ def autosign_create_key(key)
29
+ parse(post('', "autosign_key/#{URI.escape(key)}"))
30
+ rescue => e
31
+ raise ProxyException.new(url, e, N_('Unable to create Salt autosign key %s'), key)
32
+ end
33
+
34
+ def autosign_remove_key(key)
35
+ parse(delete("autosign_key/#{URI.escape(key)}"))
36
+ rescue RestClient::ResourceNotFound
37
+ true # entry doesn't exists anyway
38
+ rescue => e
39
+ raise ProxyException.new(url, e, N_('Unable to delete Salt autosign key %s'), key)
26
40
  end
27
41
 
28
42
  def environments_list
@@ -42,9 +42,8 @@ module ForemanSalt
42
42
 
43
43
  validate :salt_modules_in_host_environment
44
44
 
45
- after_build :delete_salt_key, :if => ->(host) { host.salt_proxy }
46
- before_provision :accept_salt_key, :if => ->(host) { host.salt_proxy }
47
- before_destroy :delete_salt_key, :if => ->(host) { host.salt_proxy }
45
+ after_build :ensure_salt_autosign, :if => ->(host) { host.salt_proxy }
46
+ before_destroy :remove_salt_minion, :if => ->(host) { host.salt_proxy }
48
47
  end
49
48
 
50
49
  def salt_params
@@ -58,6 +57,14 @@ module ForemanSalt
58
57
  end
59
58
  end
60
59
 
60
+ def host_params_grains_name
61
+ "salt_grains"
62
+ end
63
+
64
+ def autosign_grain_name
65
+ "autosign_key"
66
+ end
67
+
61
68
  def salt_modules_for_enc
62
69
  all_salt_modules.collect(&:name).uniq
63
70
  end
@@ -95,24 +102,66 @@ module ForemanSalt
95
102
  end
96
103
  end
97
104
 
98
- private
99
-
100
- def accept_salt_key
105
+ def derive_salt_grains(use_autosign: False)
106
+ grains = {}
101
107
  begin
102
- Rails.logger.info("Host #{fqdn} is built, accepting Salt key")
103
- key = ForemanSalt::SmartProxies::SaltKeys.find(salt_proxy, fqdn)
104
- key&.accept
108
+ Rails.logger.info("Derive Salt Grains from host_params and autosign_key")
109
+ grains[autosign_grain_name] = salt_autosign_key if use_autosign && !salt_autosign_key.nil?
110
+ unless host_params[host_params_grains_name].nil? ||
111
+ host_params[host_params_grains_name].class != Hash
112
+ grains.merge!(host_params[host_params_grains_name])
113
+ end
105
114
  rescue Foreman::Exception => e
106
- Rails.logger.warn("Unable to accept key for #{fqdn}: #{e}")
115
+ Rails.logger.warn("Unable to derive Salt Grains: #{e}")
107
116
  end
117
+ grains
118
+ end
119
+
120
+ private
121
+
122
+ def ensure_salt_autosign
123
+ remove_salt_autosign
124
+ create_salt_autosign
125
+ end
126
+
127
+ def remove_salt_minion
128
+ remove_salt_autosign
129
+ remove_salt_key
130
+ end
131
+
132
+ def remove_salt_key
133
+ Rails.logger.info("Remove salt key for host #{fqdn}")
134
+ api = ProxyAPI::Salt.new(:url => salt_proxy.url)
135
+ api.key_delete(name)
136
+ end
137
+
138
+ def remove_salt_autosign
139
+ key = self.salt_autosign_key
140
+ unless key.nil?
141
+ Rails.logger.info("Remove salt autosign key for host #{fqdn}")
142
+ begin
143
+ api = ProxyAPI::Salt.new(:url => salt_proxy.url)
144
+ api.autosign_remove_key(key)
145
+ rescue Foreman::Exception => e
146
+ Rails.logger.warn("Unable to remove salt autosign for #{fqdn}: #{e}")
147
+ end
148
+ end
149
+ end
150
+
151
+ def generate_provisioning_key
152
+ SecureRandom.hex(10)
108
153
  end
109
154
 
110
- def delete_salt_key
155
+ def create_salt_autosign
111
156
  begin
112
- key = ForemanSalt::SmartProxies::SaltKeys.find(salt_proxy, fqdn)
113
- key&.delete
157
+ Rails.logger.info("Create salt autosign key for host #{fqdn}")
158
+ api = ProxyAPI::Salt.new(:url => salt_proxy.url)
159
+ key = generate_provisioning_key
160
+ api.autosign_create_key(key)
161
+ update(:salt_autosign_key => key)
162
+ update(:salt_status => ForemanSalt::SaltStatus.minion_auth_waiting)
114
163
  rescue Foreman::Exception => e
115
- Rails.logger.warn("Unable to delete key for #{fqdn}: #{e}")
164
+ Rails.logger.warn("Unable to create salt autosign for #{fqdn}: #{e}")
116
165
  end
117
166
  end
118
167
  end
@@ -120,5 +169,5 @@ module ForemanSalt
120
169
  end
121
170
 
122
171
  class ::Host::Managed::Jail < Safemode::Jail
123
- allow :salt_environment
172
+ allow :salt_environment, :salt_master, :derive_salt_grains
124
173
  end
@@ -0,0 +1,12 @@
1
+ module ForemanSalt
2
+ # Define the class that holds different states a Salt host become
3
+ class SaltStatus
4
+ def self.minion_auth_waiting
5
+ 'Waiting for Salt Minion to authenticate'
6
+ end
7
+
8
+ def self.minion_auth_success
9
+ 'Salt Minion was authenticated successfully to Salt Master'
10
+ end
11
+ end
12
+ end
@@ -43,7 +43,7 @@ module ForemanSalt
43
43
 
44
44
  @host.save(:validate => false)
45
45
  @host.reload
46
- @host.refresh_statuses
46
+ @host.refresh_statuses([HostStatus.find_status_by_humanized_name("configuration")])
47
47
 
48
48
  logger.info("Imported report for #{@host} in #{(Time.zone.now - start_time).round(2)} seconds")
49
49
  end
data/config/routes.rb CHANGED
@@ -38,6 +38,7 @@ Rails.application.routes.draw do
38
38
  scope '(:apiv)', :defaults => { :apiv => 'v2' },
39
39
  :apiv => /v1|v2/, :constraints => ApiConstraints.new(:version => 2) do
40
40
  match '/jobs/upload' => 'foreman_salt/api/v2/jobs#upload', :via => :post
41
+ match '/salt_autosign_auth' => 'foreman_salt/api/v2/salt_autosign#auth', :via => :put
41
42
 
42
43
  constraints(:smart_proxy_id => /[\w\.-]+/, :name => /[\w\.-]+/, :record => /[^\/]+/) do
43
44
  match '/salt_keys/:smart_proxy_id' => 'foreman_salt/api/v2/salt_keys#index', :via => :get
@@ -0,0 +1,6 @@
1
+ class AddSaltAutosignToHost < ActiveRecord::Migration[4.2]
2
+ def change
3
+ add_column :hosts, :salt_autosign_key, :string, limit: 255, null: true
4
+ add_column :hosts, :salt_status, :string, limit: 255, null: true
5
+ end
6
+ end
@@ -20,7 +20,7 @@ if ForemanSalt.with_remote_execution?
20
20
  sync = !Rails.env.test? && Setting[:remote_execution_sync_templates]
21
21
  template = JobTemplate.import_raw!(File.read(template),
22
22
  :default => true,
23
- :locked => true,
23
+ :lock => true,
24
24
  :update => sync)
25
25
  template.organizations = organizations if template.present?
26
26
  template.locations = locations if template.present?
@@ -38,16 +38,14 @@ module ForemanSalt
38
38
 
39
39
  initializer 'foreman_salt.assets.precompile' do |app|
40
40
  app.config.assets.precompile += %w(foreman_salt/states.js)
41
- end
42
-
43
- initializer 'foreman_salt.assets.precompile' do |app|
44
41
  app.config.assets.precompile += %w[foreman_salt/Salt.png]
45
42
  end
46
43
 
47
44
  initializer 'foreman_salt.configure_assets', :group => :assets do
48
45
  SETTINGS[:foreman_salt] = {
49
46
  :assets => {
50
- :precompile => ['foreman_salt/states.js']
47
+ :precompile => ['foreman_salt/Salt.png',
48
+ 'foreman_salt/states.js']
51
49
  }
52
50
  }
53
51
  end
@@ -1,7 +1,4 @@
1
1
  begin
2
- ::FactImporter.register_fact_importer(:foreman_salt, ForemanSalt::FactImporter)
3
- ::FactParser.register_fact_parser(:foreman_salt, ForemanSalt::FactParser)
4
-
5
2
  # Helper Extensions
6
3
  ::HostsHelper.send :include, ForemanSalt::HostsHelperExtensions
7
4
  ::SmartProxiesHelper.send :include, ForemanSalt::SmartProxiesHelperExtensions
@@ -1,3 +1,3 @@
1
1
  module ForemanSalt
2
- VERSION = '13.2.1'
2
+ VERSION = '14.0.0'
3
3
  end
@@ -0,0 +1,541 @@
1
+ # Catalan translations for foreman_salt package.
2
+ # Copyright (C) 2020 THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the foreman_salt package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: foreman_salt 1.0.0\n"
9
+ "Report-Msgid-Bugs-To: \n"
10
+ "PO-Revision-Date: 2020-05-11 18:53+0530\n"
11
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
+ "Language-Team: Catalan\n"
13
+ "Language: ca\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
18
+ "\n"
19
+
20
+ msgid "*Clear environment*"
21
+ msgstr ""
22
+
23
+ msgid "Accept"
24
+ msgstr ""
25
+
26
+ msgid "Accepted"
27
+ msgstr ""
28
+
29
+ msgid "Action with sub plans"
30
+ msgstr ""
31
+
32
+ msgid "Actions"
33
+ msgstr ""
34
+
35
+ msgid "Added"
36
+ msgstr ""
37
+
38
+ msgid "Array of State ids"
39
+ msgstr ""
40
+
41
+ msgid "Autosign"
42
+ msgstr ""
43
+
44
+ msgid "Autosign entries for %s"
45
+ msgstr ""
46
+
47
+ msgid "Autosign record"
48
+ msgstr ""
49
+
50
+ msgid "Avoid duplicate values when merging them (only array type)?"
51
+ msgstr ""
52
+
53
+ msgid "Before including these variables as Salt pillar, Foreman will validate that your variables comply with the validation."
54
+ msgstr ""
55
+
56
+ msgid "Cancel"
57
+ msgstr ""
58
+
59
+ msgid "Change Salt Environment"
60
+ msgstr ""
61
+
62
+ msgid "Change Salt Master"
63
+ msgstr ""
64
+
65
+ msgid "Check/Uncheck Added"
66
+ msgstr ""
67
+
68
+ msgid "Check/Uncheck All"
69
+ msgstr ""
70
+
71
+ msgid "Check/Uncheck Removed"
72
+ msgstr ""
73
+
74
+ msgid "Continue to look for matches after first find (only array/hash type)? Note: merging overrides ignores all matchers that are omitted."
75
+ msgstr ""
76
+
77
+ msgid "Could not find salt environment with id %s"
78
+ msgstr ""
79
+
80
+ msgid "Create Salt Variable"
81
+ msgstr ""
82
+
83
+ msgid "Create Salt variable"
84
+ msgstr ""
85
+
86
+ msgid "Create a Salt environment"
87
+ msgstr ""
88
+
89
+ msgid "Create a state"
90
+ msgstr ""
91
+
92
+ msgid "Create an autosign record"
93
+ msgstr ""
94
+
95
+ msgid "Default Behavior"
96
+ msgstr ""
97
+
98
+ msgid "Default value of variable"
99
+ msgstr ""
100
+
101
+ msgid "Delete %s?"
102
+ msgstr ""
103
+
104
+ msgid "Delete a Salt Key"
105
+ msgstr ""
106
+
107
+ msgid "Delete an autosign record"
108
+ msgstr ""
109
+
110
+ msgid "Deletes Salt variable"
111
+ msgstr ""
112
+
113
+ msgid "Description of variable"
114
+ msgstr ""
115
+
116
+ msgid "Destroy a Salt environment"
117
+ msgstr ""
118
+
119
+ msgid "Destroy a state"
120
+ msgstr ""
121
+
122
+ msgid "Dryrun only"
123
+ msgstr ""
124
+
125
+ msgid "Edit"
126
+ msgstr ""
127
+
128
+ msgid "Edit %s"
129
+ msgstr ""
130
+
131
+ msgid "Edit Salt Environment %s"
132
+ msgstr ""
133
+
134
+ msgid "Edit Salt State %s"
135
+ msgstr ""
136
+
137
+ msgid "Edit Salt Variable"
138
+ msgstr ""
139
+
140
+ msgid "Environment"
141
+ msgstr ""
142
+
143
+ msgid "Environments"
144
+ msgstr ""
145
+
146
+ msgid "FQDN of host that key belongs to"
147
+ msgstr ""
148
+
149
+ msgid "Failed to execute state.highstate: %s"
150
+ msgstr ""
151
+
152
+ msgid "Filter %s"
153
+ msgstr ""
154
+
155
+ msgid "Fingerprint"
156
+ msgstr ""
157
+
158
+ msgid "Function"
159
+ msgstr ""
160
+
161
+ msgid "Hidden Value"
162
+ msgstr ""
163
+
164
+ msgid "Hide all values for this parameter."
165
+ msgstr ""
166
+
167
+ msgid "Hide the Run Salt state.highstate button on the host details page"
168
+ msgstr ""
169
+
170
+ msgid "Host groups"
171
+ msgstr ""
172
+
173
+ msgid "Host must have an environment in order to set salt states"
174
+ msgstr ""
175
+
176
+ msgid "Hosts"
177
+ msgstr ""
178
+
179
+ msgid "ID of Salt Proxy"
180
+ msgstr ""
181
+
182
+ msgid "If checked, will raise an error if there is no default value and no matcher provide a value."
183
+ msgstr ""
184
+
185
+ msgid "Import"
186
+ msgstr ""
187
+
188
+ msgid "Import Puppet classes"
189
+ msgstr ""
190
+
191
+ msgid "Import facts"
192
+ msgstr ""
193
+
194
+ msgid "Import from %s"
195
+ msgstr ""
196
+
197
+ msgid "Import states from a salt master"
198
+ msgstr ""
199
+
200
+ msgid "Include default value when merging all matching values"
201
+ msgstr ""
202
+
203
+ msgid "Include default value when merging all matching values."
204
+ msgstr ""
205
+
206
+ msgid "Invalid report"
207
+ msgstr ""
208
+
209
+ msgid "JID"
210
+ msgstr ""
211
+
212
+ msgid "Key Name"
213
+ msgstr ""
214
+
215
+ msgid "Keys"
216
+ msgstr ""
217
+
218
+ msgid "Limit to a specific environment"
219
+ msgstr ""
220
+
221
+ msgid "Limit to a specific environments"
222
+ msgstr ""
223
+
224
+ msgid "Limit to specific actions: i.e. add, remove"
225
+ msgstr ""
226
+
227
+ msgid "List Salt variables"
228
+ msgstr ""
229
+
230
+ msgid "List all Salt Minions"
231
+ msgstr ""
232
+
233
+ msgid "List all Salt environments"
234
+ msgstr ""
235
+
236
+ msgid "List all Salt keys"
237
+ msgstr ""
238
+
239
+ msgid "List all Salt states"
240
+ msgstr ""
241
+
242
+ msgid "List all autosign records"
243
+ msgstr ""
244
+
245
+ msgid "Mark the variable to be managed by Foreman. When the Salt State of this variable is assigned to a host, the default value will be added as a Salt pillar for this host. Specify matchers to set a different value for such variable."
246
+ msgstr ""
247
+
248
+ msgid "Merge all matching values (only array/hash type)"
249
+ msgstr ""
250
+
251
+ msgid "Must specify a Smart Proxy to use"
252
+ msgstr ""
253
+
254
+ msgid "Name"
255
+ msgstr ""
256
+
257
+ msgid "Name of the Salt state"
258
+ msgstr ""
259
+
260
+ msgid "Name of variable"
261
+ msgstr ""
262
+
263
+ msgid "Namespace Foreman pillars under 'foreman' key"
264
+ msgstr ""
265
+
266
+ msgid "New"
267
+ msgstr ""
268
+
269
+ msgid "New Autosign Entry"
270
+ msgstr ""
271
+
272
+ msgid "New Salt Environment"
273
+ msgstr ""
274
+
275
+ msgid "New Salt State"
276
+ msgstr ""
277
+
278
+ msgid "New Salt Variable"
279
+ msgstr ""
280
+
281
+ msgid "No Salt master defined - can't continue"
282
+ msgstr ""
283
+
284
+ msgid "No changes found"
285
+ msgstr ""
286
+
287
+ msgid "No salt environment selected!"
288
+ msgstr ""
289
+
290
+ msgid "Operation"
291
+ msgstr ""
292
+
293
+ msgid "Optional Input Validator"
294
+ msgstr ""
295
+
296
+ msgid "Order"
297
+ msgstr ""
298
+
299
+ msgid "Override the default value of the Salt variable."
300
+ msgstr ""
301
+
302
+ msgid "Overriden"
303
+ msgstr ""
304
+
305
+ msgid "Please select a Salt environment first"
306
+ msgstr ""
307
+
308
+ msgid "Prioritize Attribute Order"
309
+ msgstr ""
310
+
311
+ msgid "Record deleted."
312
+ msgstr ""
313
+
314
+ msgid "Reject"
315
+ msgstr ""
316
+
317
+ msgid "Rejected"
318
+ msgstr ""
319
+
320
+ msgid "Remote action:"
321
+ msgstr ""
322
+
323
+ msgid "Remove duplicate values (only array type)"
324
+ msgstr ""
325
+
326
+ msgid "Removed"
327
+ msgstr ""
328
+
329
+ msgid "Result"
330
+ msgstr ""
331
+
332
+ msgid "Run Salt"
333
+ msgstr ""
334
+
335
+ msgid "Run Salt state.highstate"
336
+ msgstr ""
337
+
338
+ msgid "Salt Autosign"
339
+ msgstr ""
340
+
341
+ msgid "Salt ENC"
342
+ msgstr ""
343
+
344
+ msgid "Salt Environment"
345
+ msgstr ""
346
+
347
+ msgid "Salt Environments"
348
+ msgstr ""
349
+
350
+ msgid "Salt Keys"
351
+ msgstr ""
352
+
353
+ msgid "Salt Keys on %s"
354
+ msgstr ""
355
+
356
+ msgid "Salt Master"
357
+ msgstr ""
358
+
359
+ msgid "Salt Smart Proxy ID"
360
+ msgstr ""
361
+
362
+ msgid "Salt State"
363
+ msgstr ""
364
+
365
+ msgid "Salt States"
366
+ msgstr ""
367
+
368
+ msgid "Salt Variable Details"
369
+ msgstr ""
370
+
371
+ msgid "Salt Variables"
372
+ msgstr ""
373
+
374
+ msgid "Salt environment"
375
+ msgstr ""
376
+
377
+ msgid "Salt environment ID"
378
+ msgstr ""
379
+
380
+ msgid "Salt external nodes YAML dump"
381
+ msgstr ""
382
+
383
+ msgid "Salt state"
384
+ msgstr ""
385
+
386
+ msgid "Salt states must be in the environment of the host"
387
+ msgstr ""
388
+
389
+ msgid "SaltEnvironment|Name"
390
+ msgstr ""
391
+
392
+ msgid "SaltModule|Name"
393
+ msgstr ""
394
+
395
+ msgid "Save"
396
+ msgstr ""
397
+
398
+ msgid "Select salt environment"
399
+ msgstr ""
400
+
401
+ msgid "Select the changes you want to realize in Foreman"
402
+ msgstr ""
403
+
404
+ msgid "Set the order in which values are resolved."
405
+ msgstr ""
406
+
407
+ msgid "Show a Salt environment"
408
+ msgstr ""
409
+
410
+ msgid "Show a minion"
411
+ msgstr ""
412
+
413
+ msgid "Show a state"
414
+ msgstr ""
415
+
416
+ msgid "Show variable"
417
+ msgstr ""
418
+
419
+ msgid "Specify Matchers"
420
+ msgstr ""
421
+
422
+ msgid "State"
423
+ msgstr ""
424
+
425
+ msgid "State ID"
426
+ msgstr ""
427
+
428
+ msgid "State can be \"accepted\" or \"rejected\""
429
+ msgstr ""
430
+
431
+ msgid "States"
432
+ msgstr ""
433
+
434
+ msgid "Successfully executed, check log files for more details"
435
+ msgstr ""
436
+
437
+ msgid "Successfully imported"
438
+ msgstr ""
439
+
440
+ msgid "Successfully updated %s."
441
+ msgstr ""
442
+
443
+ msgid "The order in which matchers keys are processed, first match wins.<br> You may use multiple attributes as a matcher key, for example, an order of <code>host group, environment</code> would expect a matcher such as <code>hostgroup = \"web servers\", environment = production</code>"
444
+ msgstr ""
445
+
446
+ msgid "The order in which values are resolved"
447
+ msgstr ""
448
+
449
+ msgid "Toggle"
450
+ msgstr ""
451
+
452
+ msgid "Trigger a state.highstate run on a node"
453
+ msgstr ""
454
+
455
+ msgid "Type"
456
+ msgstr ""
457
+
458
+ msgid "Types of validation values"
459
+ msgstr ""
460
+
461
+ msgid "Types of variable values"
462
+ msgstr ""
463
+
464
+ msgid "Unable to accept Salt key for %s"
465
+ msgstr ""
466
+
467
+ msgid "Unable to delete Salt autosign for %s"
468
+ msgstr ""
469
+
470
+ msgid "Unable to delete Salt key for %s"
471
+ msgstr ""
472
+
473
+ msgid "Unable to fetch Salt environments list"
474
+ msgstr ""
475
+
476
+ msgid "Unable to fetch Salt key list"
477
+ msgstr ""
478
+
479
+ msgid "Unable to fetch Salt states list"
480
+ msgstr ""
481
+
482
+ msgid "Unable to fetch autosign list"
483
+ msgstr ""
484
+
485
+ msgid ""
486
+ "Unable to generate output, Check log files\n"
487
+ msgstr ""
488
+
489
+ msgid "Unable to reject Salt key for %s"
490
+ msgstr ""
491
+
492
+ msgid "Unable to run Salt state.highstate for %s"
493
+ msgstr ""
494
+
495
+ msgid "Unable to set Salt autosign for %s"
496
+ msgstr ""
497
+
498
+ msgid "Unaccepted"
499
+ msgstr ""
500
+
501
+ msgid "Update"
502
+ msgstr ""
503
+
504
+ msgid "Update a Salt Key"
505
+ msgstr ""
506
+
507
+ msgid "Update a minion"
508
+ msgstr ""
509
+
510
+ msgid "Updated hosts: changed salt environment"
511
+ msgstr ""
512
+
513
+ msgid "Updates Salt variable"
514
+ msgstr ""
515
+
516
+ msgid "Upload a Job"
517
+ msgstr ""
518
+
519
+ msgid "Used to enforce certain values for the parameter values"
520
+ msgstr ""
521
+
522
+ msgid "Value to use when there is no match."
523
+ msgstr ""
524
+
525
+ msgid "Variables"
526
+ msgstr ""
527
+
528
+ msgid "Variable|Name"
529
+ msgstr ""
530
+
531
+ msgid "Variable|State"
532
+ msgstr ""
533
+
534
+ msgid "When enabled the parameter is hidden in the UI"
535
+ msgstr ""
536
+
537
+ msgid "is alphanumeric and cannot contain spaces"
538
+ msgstr ""
539
+
540
+ msgid "must be alphanumeric, can contain periods, dashes, underscores and must not contain spaces"
541
+ msgstr ""