puppet-runner 0.0.18 → 0.0.19

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5bbb45769852b12c6bf2b83d523e33df37ae11e9
4
- data.tar.gz: 047aad5ff68eb41b049047c1650f8777acfacc3c
2
+ SHA256:
3
+ metadata.gz: 4f086089d8c2affa036b2a13590f65ddb9e6c2f8e4fd8bed75e889db6ad2dba1
4
+ data.tar.gz: 6407eb197c0bb1378a06fbc2c488c095a37cb9e172cc862a74dc8502883ad5be
5
5
  SHA512:
6
- metadata.gz: bcceeb628caf19858c9c8486edad72001f9695d9b8ddafc3da10c9b407e54ce5a4c52812c88af876dee24d416aff200971d6f2851c4fe3b18ce46f0081ecd9ee
7
- data.tar.gz: d03770227658b51eebe1e89ab9d8225185e07bb19448b25d1f102f50f3e9c650b83ed1f4ad777b7d7dcd4b0465a256ffd01d48f71e7764db4d228f6ac109654f
6
+ metadata.gz: 60c425bb861d0de9d71cd706be3494eacce00197c2a5dddc2b9446fc03479f835ca1b3cb374df78729dec855a8c020979760ecf38d8b9cc3c1da8a02fb9a53de
7
+ data.tar.gz: 732de9de032ab030d56871cb02c04b4c9eeaa72560696dcb7e70d5d62a206cb1adc99dabd5ac63738900c6655aa126ec77b5615831baf989337b1218b93c7afb
data/bin/puppet-runner CHANGED
@@ -21,6 +21,7 @@ require 'deep_merge'
21
21
  require 'docopt'
22
22
  require 'colorize'
23
23
  require 'facter'
24
+ require 'avst/string_ext'
24
25
 
25
26
  doc = <<DOCOPT
26
27
  Adaptavist puppet runner
@@ -95,6 +96,22 @@ def extract_comment_from_hash(input)
95
96
  res
96
97
  end
97
98
 
99
+ def extract_type_from_hash(input)
100
+ res = {}
101
+ if input
102
+ res = input.map{|key, val|
103
+ if val != nil
104
+ type = 'string'
105
+ if val.is_a?(Hash) and val["type"] != nil
106
+ type = val["type"]
107
+ end
108
+ end
109
+ {key => type }
110
+ }
111
+ end
112
+ res
113
+ end
114
+
98
115
  begin
99
116
  options = Docopt::docopt(doc)
100
117
  rescue Docopt::Exit => e
@@ -150,6 +167,7 @@ if options['all'] || options['prepare']
150
167
  prefixed_facts_comments = {}
151
168
  puppetfile_config = YAML.load_file(puppetfile_config_path) || {}
152
169
  puppetfile_dependencies = []
170
+ global_transform_data = []
153
171
  # functionalities:
154
172
  # # In honor of Henry...
155
173
  # 1_app:
@@ -189,6 +207,19 @@ if options['all'] || options['prepare']
189
207
 
190
208
  fact_comments_as_string = extract_comment_from_hash(default_facts).to_s
191
209
 
210
+ # get a list of each fields type if set (if not they will report as strings)
211
+ data_type = extract_type_from_hash(default_facts)
212
+
213
+ # Check to see if any of the fields are booleans, if so add an entry to the transform_data array
214
+ transform_data = []
215
+ data_type.each do | field|
216
+ field.each do | field_name, field_type |
217
+ if field_type == 'boolean'
218
+ transform_data << field_name
219
+ end
220
+ end
221
+ end
222
+
192
223
  if to_add.is_a?(Hash)
193
224
  # if prefixes are not defined skip replacing
194
225
  if prefixes
@@ -205,6 +236,7 @@ if options['all'] || options['prepare']
205
236
  facts_as_string = facts_as_string.gsub(/#{prefix}/, "#{replace_prefixes_with}")
206
237
  fact_comments_as_string = fact_comments_as_string.gsub(/#{prefix}/, "#{replace_prefixes_with}")
207
238
  prefixed_required_facts = prefixed_required_facts.merge(required_facts.map! { |item| item.gsub(/#{prefix}/, "#{replace_prefixes_with}") })
239
+ transform_data = transform_data.map {|s| s.gsub(/#{prefix}/, "#{replace_prefixes_with}")} if !transform_data.empty?
208
240
  end
209
241
  end
210
242
  end
@@ -217,6 +249,7 @@ if options['all'] || options['prepare']
217
249
  facts_as_string = facts_as_string.gsub(/#{prefix}/, "#{replace_prefixes_with}")
218
250
  fact_comments_as_string = fact_comments_as_string.gsub(/#{prefix}/, "#{replace_prefixes_with}")
219
251
  prefixed_required_facts = prefixed_required_facts.merge(required_facts.map! { |item| item.gsub(/#{prefix}/, "#{replace_prefixes_with}") })
252
+ transform_data = transform_data.map {|s| s.gsub(/#{prefix}/, "#{replace_prefixes_with}")} if !transform_data.empty?
220
253
  end
221
254
  end
222
255
  end
@@ -231,6 +264,9 @@ if options['all'] || options['prepare']
231
264
  default_fact_comments = extract_comment_from_hash(plain_facts)
232
265
  prefixed_required_facts = prefixed_required_facts.merge(required_facts)
233
266
  end
267
+ # add the "local" transformation list to the global one
268
+ global_transform_data.push(*transform_data)
269
+
234
270
  result_template.deep_merge!(template)
235
271
  # default_facts_prefixed is Array of hashes as the result of map, this will create hash from it
236
272
  result_default_facts.merge!(default_facts_prefixed.reduce Hash.new, :merge)
@@ -240,10 +276,6 @@ if options['all'] || options['prepare']
240
276
  end
241
277
  end
242
278
  end
243
- # Write results
244
- File.open(output_file_path, 'w+') do |output_file|
245
- YAML.dump(result_template, output_file)
246
- end
247
279
  custom_facts_path = path_join_glob(input_dir, "#{hostname}_facts.yaml")
248
280
  custom_facts = YAML.load_file(custom_facts_path) || {}
249
281
  File.open(output_encrypted_facts_file_path, 'w+') do |output_file|
@@ -254,6 +286,29 @@ if options['all'] || options['prepare']
254
286
  end
255
287
  end
256
288
  output_file.write(output_result_default_facts)
289
+
290
+ # now that the merged final facts are present look for any global transformations to apply
291
+ # global transformations are currently just booleans that need to be expressed directly in output file
292
+ if !global_transform_data.empty?
293
+ result_template = result_template.to_s
294
+ all_facts = YAML.load(output_result_default_facts)
295
+ global_transform_data.each do | transform_value |
296
+ debug "Attempting to replace boolean value for fact #{transform_value}"
297
+ begin
298
+ # convert the final template to a string, replace any facts that are booleans with their actual value and then convert the result bacl to YAML
299
+ # convert the fact to boolean and then back to string during the replace, this allows validation that the fact is actually a boolean
300
+ result_template = result_template.gsub(/\"\%{::#{transform_value}}\"/, all_facts[transform_value].to_bool.to_s)
301
+ rescue
302
+ warning "Unable to convert fact #{transform_value} with value #{all_facts[transform_value]} into boolean, conversion will be skipped"
303
+ end
304
+ end
305
+ result_template = eval(result_template)
306
+ end
307
+ end
308
+
309
+ # Write results
310
+ File.open(output_file_path, 'w+') do |output_file|
311
+ YAML.dump(result_template, output_file)
257
312
  end
258
313
 
259
314
  # decrypt facts file because Puppet doesn't appear to be able to read encrypted facts
@@ -298,7 +353,14 @@ if options['all'] || options['prepare']
298
353
  end
299
354
  output_file.write(decrypted.join)
300
355
  end
356
+
357
+ begin
358
+ FileUtils.rm output_encrypted_facts_file_path
359
+ rescue
360
+ warning "Unable to remove tmp encrypted facts file #{output_encrypted_facts_file_path}"
361
+ end
301
362
 
363
+ # create puppetfile from the dictionary
302
364
  File.open(puppetfile_output_path, 'w+') do |output_file|
303
365
  header = "#!/usr/bin/env ruby\n\n"
304
366
  output_file.write(header)
@@ -348,3 +410,4 @@ if (options['start'] || options['all']) && !stop_apply
348
410
  end
349
411
  end
350
412
 
413
+
@@ -0,0 +1,7 @@
1
+ class String
2
+ def to_bool
3
+ return true if self == true || self =~ (/(true|t|yes|y|1)$/i)
4
+ return false if self == false || self.empty? || self.nil? || self =~ (/(false|f|no|n|0)$/i)
5
+ raise ArgumentError.new("invalid value for Boolean: \"#{self}\"")
6
+ end
7
+ end
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "puppet-runner"
7
- spec.version = "0.0.18"
7
+ spec.version = "0.0.19"
8
8
  spec.authors = ["Martin Brehovsky", "Matthew Hope"]
9
9
  spec.email = ["mbrehovsky@adaptavist.com"]
10
10
  spec.summary = %q{Preprocessor for hiera config}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-runner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.18
4
+ version: 0.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Brehovsky
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-05-15 00:00:00.000000000 Z
12
+ date: 2018-03-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -140,6 +140,7 @@ files:
140
140
  - README.md
141
141
  - Rakefile
142
142
  - bin/puppet-runner
143
+ - lib/avst/string_ext.rb
143
144
  - puppet-runner.gemspec
144
145
  - test/configs/defaults/confluence.yaml
145
146
  - test/configs/defaults/connector_proxy.yaml
@@ -172,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
173
  version: '0'
173
174
  requirements: []
174
175
  rubyforge_project:
175
- rubygems_version: 2.4.5
176
+ rubygems_version: 2.7.6
176
177
  signing_key:
177
178
  specification_version: 4
178
179
  summary: Preprocessor for hiera config