pupistry 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,7 @@
1
+ # rubocop:disable Style/Documentation, Style/GlobalVars
1
2
  require 'rubygems'
2
3
  require 'yaml'
4
+ require 'safe_yaml'
3
5
  require 'time'
4
6
  require 'digest'
5
7
  require 'fileutils'
@@ -12,13 +14,12 @@ module Pupistry
12
14
  # All the functions needed for manipulating the artifats
13
15
  attr_accessor :checksum
14
16
 
15
-
16
17
  def fetch_r10k
17
- $logger.info "Using r10k utility to fetch the latest Puppet code"
18
+ $logger.info 'Using r10k utility to fetch the latest Puppet code'
18
19
 
19
- unless defined? $config["build"]["puppetcode"]
20
- $logger.fatal "You must configure the build:puppetcode config option in settings.yaml"
21
- raise "Invalid Configuration"
20
+ unless defined? $config['build']['puppetcode']
21
+ $logger.fatal 'You must configure the build:puppetcode config option in settings.yaml'
22
+ fail 'Invalid Configuration'
22
23
  end
23
24
 
24
25
  # https://github.com/puppetlabs/r10k
@@ -33,53 +34,50 @@ module Pupistry
33
34
  # doable and much more polished approach. For now the MVP is to just run
34
35
  # it via system, pull requests/patches to fix very welcome!
35
36
 
36
-
37
37
  # Build the r10k config to instruct it to use our cache path for storing
38
38
  # it's data and exporting the finished result.
39
- $logger.debug "Generating an r10k configuration file..."
39
+ $logger.debug 'Generating an r10k configuration file...'
40
40
  r10k_config = {
41
- "cachedir" => "#{$config["general"]["app_cache"]}/r10kcache",
42
- "sources" => {
43
- "puppet" => {
44
- "remote" => $config["build"]["puppetcode"],
45
- "basedir" => $config["general"]["app_cache"] + "/puppetcode",
41
+ 'cachedir' => "#{$config['general']['app_cache']}/r10kcache",
42
+ 'sources' => {
43
+ 'puppet' => {
44
+ 'remote' => $config['build']['puppetcode'],
45
+ 'basedir' => $config['general']['app_cache'] + '/puppetcode'
46
46
  }
47
47
  }
48
48
  }
49
49
 
50
50
  begin
51
- File.open("#{$config["general"]["app_cache"]}/r10kconfig.yaml",'w') do |fh|
52
- fh.write YAML::dump(r10k_config)
51
+ File.open("#{$config['general']['app_cache']}/r10kconfig.yaml", 'w') do |fh|
52
+ fh.write YAML.dump(r10k_config)
53
53
  end
54
- rescue Exception => e
55
- $logger.fatal "Unexpected error when trying to write the r10k configuration file"
54
+ rescue StandardError => e
55
+ $logger.fatal 'Unexpected error when trying to write the r10k configuration file'
56
56
  raise e
57
57
  end
58
58
 
59
-
60
59
  # Execute R10k with the provided configuration
61
- $logger.debug "Executing r10k"
60
+ $logger.debug 'Executing r10k'
62
61
 
63
- if system "r10k deploy environment -c #{$config["general"]["app_cache"]}/r10kconfig.yaml -pv debug"
64
- $logger.info "r10k run completed"
62
+ if system "r10k deploy environment -c #{$config['general']['app_cache']}/r10kconfig.yaml -pv debug"
63
+ $logger.info 'r10k run completed'
65
64
  else
66
- $logger.error "r10k run failed, unable to generate artifact"
67
- raise "r10k run did not complete, unable to generate artifact"
65
+ $logger.error 'r10k run failed, unable to generate artifact'
66
+ fail 'r10k run did not complete, unable to generate artifact'
68
67
  end
69
-
70
68
  end
71
69
 
72
70
  def fetch_latest
73
71
  # Fetch the latest S3 YAML file and check the version metadata without writing
74
72
  # it to disk. Returns the version. Useful for quickly checking for updates :-)
75
73
 
76
- $logger.debug "Checking latest artifact version..."
74
+ $logger.debug 'Checking latest artifact version...'
77
75
 
78
- s3 = Pupistry::Storage_AWS.new 'agent'
76
+ s3 = Pupistry::StorageAWS.new 'agent'
79
77
  contents = s3.download 'manifest.latest.yaml'
80
78
 
81
79
  if contents
82
- manifest = YAML::load(contents)
80
+ manifest = YAML.load(contents, safe: true, raise_on_unknown_tag: true)
83
81
 
84
82
  if defined? manifest['version']
85
83
  # We have a manifest version supplied, however since the manifest
@@ -93,8 +91,8 @@ module Pupistry
93
91
  if /^[A-Za-z0-9]{32}$/.match(manifest['version'])
94
92
  return manifest['version']
95
93
  else
96
- $logger.error "Manifest version returned from S3 manifest.latest.yaml did not match expected regex of MD5."
97
- $logger.error "Possible bug or security incident, investigate with care!"
94
+ $logger.error 'Manifest version returned from S3 manifest.latest.yaml did not match expected regex of MD5.'
95
+ $logger.error 'Possible bug or security incident, investigate with care!'
98
96
  $logger.error "Returned version string was: \"#{manifest['version']}\""
99
97
  exit 0
100
98
  end
@@ -106,50 +104,44 @@ module Pupistry
106
104
  # download did not work
107
105
  return false
108
106
  end
109
-
110
-
111
107
  end
112
108
 
113
-
114
109
  def fetch_current
115
110
  # Fetch the latest on-disk YAML file and check the version metadata, used
116
111
  # to determine the latest artifact that has not yet been pushed to S3.
117
112
  # Returns the version.
118
113
 
119
114
  # Read the symlink information to get the latest version
120
- if File.exists?($config["general"]["app_cache"] + "/artifacts/manifest.latest.yaml")
121
- manifest = YAML::load(File.open($config["general"]["app_cache"] + "/artifacts/manifest.latest.yaml"))
122
- @checksum = manifest['version']
123
- else
124
- $logger.error "No artifact has been built yet. You need to run pupistry build first?"
125
- return false
126
- end
115
+ if File.exist?($config['general']['app_cache'] + '/artifacts/manifest.latest.yaml')
116
+ manifest = YAML.load(File.open($config['general']['app_cache'] + '/artifacts/manifest.latest.yaml'), safe: true, raise_on_unknown_tag: true)
117
+ @checksum = manifest['version']
118
+ else
119
+ $logger.error 'No artifact has been built yet. You need to run pupistry build first?'
120
+ return false
121
+ end
127
122
  end
128
123
 
129
-
130
124
  def fetch_installed
131
125
  # Fetch the current version that is installed.
132
-
126
+
133
127
  # Make sure the Puppetcode install directory exists
134
- unless Dir.exists?($config["agent"]["puppetcode"])
135
- $logger.warn "The destination path of #{$config["agent"]["puppetcode"]} does not appear to exist or is not readable"
128
+ unless Dir.exist?($config['agent']['puppetcode'])
129
+ $logger.warn "The destination path of #{$config['agent']['puppetcode']} does not appear to exist or is not readable"
136
130
  return false
137
131
  end
138
132
 
139
133
  # Look for a manifest file in the directory and read the version from it.
140
- if File.exists?($config["agent"]["puppetcode"] + "/manifest.pupistry.yaml")
141
- manifest = YAML::load(File.open($config["agent"]["puppetcode"] + "/manifest.pupistry.yaml"))
134
+ if File.exist?($config['agent']['puppetcode'] + '/manifest.pupistry.yaml')
135
+ manifest = YAML.load(File.open($config['agent']['puppetcode'] + '/manifest.pupistry.yaml'), safe: true, raise_on_unknown_tag: true)
142
136
 
143
137
  return manifest['version']
144
138
  else
145
- $logger.warn "No current version installed"
139
+ $logger.warn 'No current version installed'
146
140
  return false
147
141
  end
148
142
  end
149
143
 
150
-
151
144
  def fetch_artifact
152
-
153
145
  # Figure out which version to fetch (if not explicitly defined)
154
146
  if defined? @checksum
155
147
  $logger.debug "Downloading artifact version #{@checksum}"
@@ -159,37 +151,32 @@ module Pupistry
159
151
  if defined? @checksum
160
152
  $logger.debug "Downloading latest artifact (#{@checksum})"
161
153
  else
162
- $logger.error "There is not current artifact that can be fetched"
154
+ $logger.error 'There is not current artifact that can be fetched'
163
155
  return false
164
156
  end
165
157
 
166
158
  end
167
159
 
168
160
  # Make sure the download dir/cache exists
169
- unless Dir.exists?($config["general"]["app_cache"] + "/artifacts/")
170
- FileUtils.mkdir_p $config["general"]["app_cache"] + "/artifacts/"
171
- end
161
+ FileUtils.mkdir_p $config['general']['app_cache'] + '/artifacts/' unless Dir.exist?($config['general']['app_cache'] + '/artifacts/')
172
162
 
173
163
  # Download files if they don't already exist
174
- if File.exists?($config["general"]["app_cache"] + "/artifacts/manifest.#{@checksum}.yaml") and File.exists?($config["general"]["app_cache"] + "/artifacts/artifact.#{@checksum}.tar.gz")
175
- $logger.debug "This artifact is already present, no download required."
164
+ if File.exist?($config['general']['app_cache'] + "/artifacts/manifest.#{@checksum}.yaml") &&
165
+ File.exist?($config['general']['app_cache'] + "/artifacts/artifact.#{@checksum}.tar.gz")
166
+ $logger.debug 'This artifact is already present, no download required.'
176
167
  else
177
- s3 = Pupistry::Storage_AWS.new 'agent'
178
- s3.download "manifest.#{@checksum}.yaml", $config["general"]["app_cache"] + "/artifacts/manifest.#{@checksum}.yaml"
179
- s3.download "artifact.#{@checksum}.tar.gz", $config["general"]["app_cache"] + "/artifacts/artifact.#{@checksum}.tar.gz"
168
+ s3 = Pupistry::StorageAWS.new 'agent'
169
+ s3.download "manifest.#{@checksum}.yaml", $config['general']['app_cache'] + "/artifacts/manifest.#{@checksum}.yaml"
170
+ s3.download "artifact.#{@checksum}.tar.gz", $config['general']['app_cache'] + "/artifacts/artifact.#{@checksum}.tar.gz"
180
171
  end
181
-
182
172
  end
183
173
 
184
-
185
-
186
174
  def push_artifact
187
175
  # The push step involves 2 steps:
188
176
  # 1. GPG sign the artifact and write it into the manifest file
189
177
  # 2. Upload the manifest and archive files to S3.
190
178
  # 3. Upload a copy as the "latest" manifest file which will be hit by clients.
191
179
 
192
-
193
180
  # Determine which version we are uploading. Either one specifically
194
181
  # selected, otherwise find the latest one to push
195
182
 
@@ -206,65 +193,60 @@ module Pupistry
206
193
  end
207
194
  end
208
195
 
209
-
210
196
  # Do we even need to upload? If nothing has changed....
211
197
  if @checksum == fetch_latest
212
198
  $logger.error "You've already pushed this artifact version, nothing to do."
213
199
  exit 0
214
200
  end
215
201
 
216
-
217
202
  # Make sure the files actually exist...
218
- unless File.exists?($config["general"]["app_cache"] + "/artifacts/manifest.#{@checksum}.yaml")
203
+ unless File.exist?($config['general']['app_cache'] + "/artifacts/manifest.#{@checksum}.yaml")
219
204
  $logger.error "The files expected for #{@checksum} do not appear to exist or are not readable"
220
- raise "Fatal unexpected error"
205
+ fail 'Fatal unexpected error'
221
206
  end
222
207
 
223
- unless File.exists?($config["general"]["app_cache"] + "/artifacts/artifact.#{@checksum}.tar.gz")
208
+ unless File.exist?($config['general']['app_cache'] + "/artifacts/artifact.#{@checksum}.tar.gz")
224
209
  $logger.error "The files expected for #{@checksum} do not appear to exist or are not readable"
225
- raise "Fatal unexpected error"
210
+ fail 'Fatal unexpected error'
226
211
  end
227
212
 
228
-
229
213
  # GPG sign the files
230
- if $config["general"]["gpg_disable"] == true
231
- $logger.warn "You have GPG signing *disabled*, whilst not critical it does weaken your security."
232
- $logger.warn "Skipping signing step..."
214
+ if $config['general']['gpg_disable'] == true
215
+ $logger.warn 'You have GPG signing *disabled*, whilst not critical it does weaken your security.'
216
+ $logger.warn 'Skipping signing step...'
233
217
  else
234
218
 
235
219
  gpgsig = Pupistry::GPG.new @checksum
236
220
 
237
221
  # Sign the artifact
238
222
  unless gpgsig.artifact_sign
239
- $logger.fatal "Unable to proceed with an unsigned artifact"
223
+ $logger.fatal 'Unable to proceed with an unsigned artifact'
240
224
  exit 0
241
225
  end
242
226
 
243
227
  # Verify the signature - we want to make sure what we've just signed
244
228
  # can actually be validated properly :-)
245
229
  unless gpgsig.artifact_verify
246
- $logger.fatal "Whilst a signature was generated, it was unable to be validated. This would suggest a bug of some kind."
230
+ $logger.fatal 'Whilst a signature was generated, it was unable to be validated. This would suggest a bug of some kind.'
247
231
  exit 0
248
232
  end
249
233
 
250
234
  # Save the signature to the manifest
251
235
  unless gpgsig.signature_save
252
- $logger.fatal "Unable to write the signature into the manifest file for the artifact."
236
+ $logger.fatal 'Unable to write the signature into the manifest file for the artifact.'
253
237
  exit 0
254
238
  end
255
239
 
256
240
  end
257
241
 
258
-
259
- # Upload the artifact & manifests to S3. We also make an additional copy
242
+ # Upload the artifact & manifests to S3. We also make an additional copy
260
243
  # as the "latest" file which will be downloaded by all the agents checking
261
244
  # for new updates.
262
245
 
263
- s3 = Pupistry::Storage_AWS.new 'build'
264
- s3.upload $config["general"]["app_cache"] + "/artifacts/artifact.#{@checksum}.tar.gz", "artifact.#{@checksum}.tar.gz"
265
- s3.upload $config["general"]["app_cache"] + "/artifacts/manifest.#{@checksum}.yaml", "manifest.#{@checksum}.yaml"
266
- s3.upload $config["general"]["app_cache"] + "/artifacts/manifest.#{@checksum}.yaml", "manifest.latest.yaml"
267
-
246
+ s3 = Pupistry::StorageAWS.new 'build'
247
+ s3.upload $config['general']['app_cache'] + "/artifacts/artifact.#{@checksum}.tar.gz", "artifact.#{@checksum}.tar.gz"
248
+ s3.upload $config['general']['app_cache'] + "/artifacts/manifest.#{@checksum}.yaml", "manifest.#{@checksum}.yaml"
249
+ s3.upload $config['general']['app_cache'] + "/artifacts/manifest.#{@checksum}.yaml", 'manifest.latest.yaml'
268
250
 
269
251
  # Test a read of the manifest, we do this to make sure the S3 ACLs setup
270
252
  # allow downloading of the uploaded files - helps avoid user headaches if
@@ -273,7 +255,7 @@ module Pupistry
273
255
  # Only worth doing this step if they've explicitly set their AWS IAM credentials
274
256
  # for the agent, which should be everyone except for IAM role users.
275
257
 
276
- if $config["agent"]["access_key_id"]
258
+ if $config['agent']['access_key_id']
277
259
  fetch_artifact
278
260
  else
279
261
  $logger.warn "The agent's AWS credentials are unset on this machine, unable to do download test to check permissions for you."
@@ -282,7 +264,6 @@ module Pupistry
282
264
 
283
265
  $logger.info "Upload of artifact version #{@checksum} completed and is now latest"
284
266
  end
285
-
286
267
 
287
268
  def build_artifact
288
269
  # r10k has done all the heavy lifting for us, we just need to generate a
@@ -292,10 +273,9 @@ module Pupistry
292
273
  # the file. Like r10k, if you want to convert to a nicely polished native
293
274
  # Ruby solution, patches welcome.
294
275
 
295
- $logger.info "Creating artifact..."
296
-
297
- Dir.chdir($config["general"]["app_cache"]) do
276
+ $logger.info 'Creating artifact...'
298
277
 
278
+ Dir.chdir($config['general']['app_cache']) do
299
279
  # Make sure there is a directory to write artifacts into
300
280
  FileUtils.mkdir_p('artifacts')
301
281
 
@@ -303,94 +283,93 @@ module Pupistry
303
283
  # so that we can grab the checksum, since checksum will always differ
304
284
  # post-compression.
305
285
  unless system "tar -c --exclude '.git' -f artifacts/artifact.temp.tar puppetcode/*"
306
- $logger.error "Unable to create tarball"
307
- raise "An unexpected error occured when executing tar"
286
+ $logger.error 'Unable to create tarball'
287
+ fail 'An unexpected error occured when executing tar'
308
288
  end
309
289
 
310
290
  # The checksum is important, we use it as our version for each artifact
311
291
  # so we can tell them apart in a unique way.
312
- @checksum = Digest::MD5.file($config["general"]["app_cache"] + "/artifacts/artifact.temp.tar").hexdigest
292
+ @checksum = Digest::MD5.file($config['general']['app_cache'] + '/artifacts/artifact.temp.tar').hexdigest
313
293
 
314
294
  # Now we have the checksum, check if it's the same as any existing
315
295
  # artifacts. If so, drop out here, good to give feedback to the user
316
296
  # if nothing has changed since it's easy to forget to git push a single
317
297
  # module/change.
318
298
 
319
- if File.exists?($config["general"]["app_cache"] + "/artifacts/manifest.#{@checksum}.yaml")
299
+ if File.exist?($config['general']['app_cache'] + "/artifacts/manifest.#{@checksum}.yaml")
320
300
  $logger.error "This artifact version (#{@checksum}) has already been built, nothing todo."
321
301
  $logger.error "Did you remember to \"git push\" your module changes?"
322
302
 
323
303
  # Cleanup temp file
324
- FileUtils.rm($config["general"]["app_cache"] + "/artifacts/artifact.temp.tar")
304
+ FileUtils.rm($config['general']['app_cache'] + '/artifacts/artifact.temp.tar')
325
305
  exit 0
326
306
  end
327
307
 
328
308
  # Compress the artifact now that we have taken it's checksum
329
- $logger.info "Compressing artifact..."
309
+ $logger.info 'Compressing artifact...'
330
310
 
331
- if system "gzip artifacts/artifact.temp.tar"
311
+ if system 'gzip artifacts/artifact.temp.tar'
332
312
  else
333
- $logger.error "An unexpected error occured during compression of the artifact"
334
- raise "An unexpected error occured during compression of the artifact"
313
+ $logger.error 'An unexpected error occured during compression of the artifact'
314
+ fail 'An unexpected error occured during compression of the artifact'
335
315
  end
336
316
  end
337
317
 
338
-
339
318
  # We have the checksum, so we can now rename the artifact file
340
- FileUtils.mv($config["general"]["app_cache"] + "/artifacts/artifact.temp.tar.gz", $config["general"]["app_cache"] + "/artifacts/artifact.#{@checksum}.tar.gz")
319
+ FileUtils.mv($config['general']['app_cache'] + '/artifacts/artifact.temp.tar.gz',
320
+ $config['general']['app_cache'] + "/artifacts/artifact.#{@checksum}.tar.gz")
341
321
 
342
-
343
- $logger.info "Building manifest information for artifact..."
322
+ $logger.info 'Building manifest information for artifact...'
344
323
 
345
324
  # Create the manifest file, this is used by clients for pulling details about
346
325
  # the latest artifacts. We don't GPG sign here, but we do put in a placeholder.
347
326
  manifest = {
348
- "version" => @checksum,
349
- "date" => Time.new.inspect,
350
- "builduser" => ENV['USER'] || 'unlabled',
351
- "gpgsig" => 'unsigned',
327
+ 'version' => @checksum,
328
+ 'date' => Time.new.inspect,
329
+ 'builduser' => ENV['USER'] || 'unlabled',
330
+ 'gpgsig' => 'unsigned'
352
331
  }
353
332
 
354
333
  begin
355
- File.open("#{$config["general"]["app_cache"]}/artifacts/manifest.#{@checksum}.yaml",'w') do |fh|
356
- fh.write YAML::dump(manifest)
334
+ File.open("#{$config['general']['app_cache']}/artifacts/manifest.#{@checksum}.yaml", 'w') do |fh|
335
+ fh.write YAML.dump(manifest)
357
336
  end
358
- rescue Exception => e
359
- $logger.fatal "Unexpected error when trying to write the manifest file"
337
+ rescue StandardError => e
338
+ $logger.fatal 'Unexpected error when trying to write the manifest file'
360
339
  raise e
361
340
  end
362
341
 
363
342
  # This is the latest artifact, create some symlinks pointing the latest to it
364
343
  begin
365
- FileUtils.ln_s("manifest.#{@checksum}.yaml", "#{$config["general"]["app_cache"]}/artifacts/manifest.latest.yaml", :force => true)
366
- FileUtils.ln_s("artifact.#{@checksum}.tar.gz", "#{$config["general"]["app_cache"]}/artifacts/artifact.latest.tar.gz", :force => true)
367
- rescue Exception => e
368
- $logger.fatal "Something weird went really wrong trying to symlink the latest artifacts"
344
+ FileUtils.ln_s("manifest.#{@checksum}.yaml",
345
+ "#{$config['general']['app_cache']}/artifacts/manifest.latest.yaml",
346
+ force: true)
347
+ FileUtils.ln_s("artifact.#{@checksum}.tar.gz",
348
+ "#{$config['general']['app_cache']}/artifacts/artifact.latest.tar.gz",
349
+ force: true)
350
+ rescue StandardError => e
351
+ $logger.fatal 'Something weird went really wrong trying to symlink the latest artifacts'
369
352
  raise e
370
353
  end
371
354
 
372
-
373
355
  $logger.info "New artifact version #{@checksum} ready for pushing"
374
356
  end
375
357
 
376
-
377
358
  def unpack
378
359
  # Unpack the currently selected artifact to the archives directory.
379
-
360
+
380
361
  # An application version must be specified
381
- unless defined? @checksum
382
- raise "Application bug, trying to unpack no artifact"
383
- end
362
+ fail 'Application bug, trying to unpack no artifact' unless defined? @checksum
384
363
 
385
364
  # Make sure the files actually exist...
386
- unless File.exists?($config["general"]["app_cache"] + "/artifacts/manifest.#{@checksum}.yaml")
365
+ unless File.exist?($config['general']['app_cache'] + "/artifacts/manifest.#{@checksum}.yaml")
387
366
  $logger.error "The files expected for #{@checksum} do not appear to exist or are not readable"
388
- raise "Fatal unexpected error"
367
+ fail 'Fatal unexpected error'
389
368
  end
390
369
 
391
- unless File.exists?($config["general"]["app_cache"] + "/artifacts/artifact.#{@checksum}.tar.gz")
370
+ unless File.exist?($config['general']['app_cache'] + "/artifacts/artifact.#{@checksum}.tar.gz")
392
371
  $logger.error "The files expected for #{@checksum} do not appear to exist or are not readable"
393
- raise "Fatal unexpected error"
372
+ fail 'Fatal unexpected error'
394
373
  end
395
374
 
396
375
  # Clean up an existing unpacked copy - in *theory* it should be same, but
@@ -399,73 +378,64 @@ module Pupistry
399
378
  clean_unpack
400
379
 
401
380
  # Unpack the archive file
402
- FileUtils.mkdir_p($config["general"]["app_cache"] + "/artifacts/unpacked.#{@checksum}")
403
- Dir.chdir($config["general"]["app_cache"] + "/artifacts/unpacked.#{@checksum}") do
404
-
405
- unless system "tar -xf ../artifact.#{@checksum}.tar.gz"
406
- $logger.error "Unable to unpack artifact files to #{Dir.pwd}"
407
- raise "An unexpected error occured when executing tar"
408
- else
381
+ FileUtils.mkdir_p($config['general']['app_cache'] + "/artifacts/unpacked.#{@checksum}")
382
+ Dir.chdir($config['general']['app_cache'] + "/artifacts/unpacked.#{@checksum}") do
383
+ if system "tar -xf ../artifact.#{@checksum}.tar.gz"
409
384
  $logger.debug "Successfully unpacked artifact #{@checksum}"
385
+ else
386
+ $logger.error "Unable to unpack artifact files to #{Dir.pwd}"
387
+ fail 'An unexpected error occured when executing tar'
410
388
  end
411
389
  end
412
-
413
390
  end
414
391
 
415
-
416
392
  def install
417
393
  # Copy the unpacked artifact into the agent's configured location. Generally all the
418
394
  # heavy lifting is done by fetch_latest and unpack methods.
419
395
 
420
396
  # An application version must be specified
421
- unless defined? @checksum
422
- raise "Application bug, trying to install no artifact"
423
- end
397
+ fail 'Application bug, trying to install no artifact' unless defined? @checksum
424
398
 
425
399
  # Validate the artifact if GPG is enabled.
426
- if $config["general"]["gpg_disable"] == true
427
- $logger.warn "You have GPG validation *disabled*, whilst not critical it does weaken your security."
428
- $logger.warn "Skipping validation step..."
400
+ if $config['general']['gpg_disable'] == true
401
+ $logger.warn 'You have GPG validation *disabled*, whilst not critical it does weaken your security.'
402
+ $logger.warn 'Skipping validation step...'
429
403
  else
430
404
 
431
405
  gpgsig = Pupistry::GPG.new @checksum
432
406
 
433
407
  unless gpgsig.artifact_verify
434
- $logger.fatal "The GPG signature could not be validated for the artifact. This could be a bug, a file corruption or a POSSIBLE SECURITY ISSUE such as maliciously modified content."
435
- raise "Fatal unexpected error"
408
+ $logger.fatal 'The GPG signature could not be validated for the artifact. This could be a bug, a file corruption or a POSSIBLE SECURITY ISSUE such as maliciously modified content.'
409
+ fail 'Fatal unexpected error'
436
410
  end
437
411
 
438
412
  end
439
413
 
440
-
441
414
  # Make sure the artifact has been unpacked
442
- unless Dir.exists?($config["general"]["app_cache"] + "/artifacts/unpacked.#{@checksum}")
415
+ unless Dir.exist?($config['general']['app_cache'] + "/artifacts/unpacked.#{@checksum}")
443
416
  $logger.error "The unpacked directory expected for #{@checksum} does not appear to exist or is not readable"
444
- raise "Fatal unexpected error"
417
+ fail 'Fatal unexpected error'
445
418
  end
446
419
 
447
420
  # Purge any currently installed files in the directory. See clean_install
448
- # TODO notes for how this could be improved.
449
- unless clean_install
450
- $logger.error "Installation not proceeduing due to issues cleaning/prepping destination dir"
451
- end
421
+ # TODO: notes for how this could be improved.
422
+ $logger.error 'Installation not proceeding due to issues cleaning/prepping destination dir' unless clean_install
452
423
 
453
424
  # Make sure the destination directory exists
454
- unless Dir.exists?($config["agent"]["puppetcode"])
455
- $logger.error "The destination path of #{$config["agent"]["puppetcode"]} does not appear to exist or is not readable"
456
- raise "Fatal unexpected error"
425
+ unless Dir.exist?($config['agent']['puppetcode'])
426
+ $logger.error "The destination path of #{$config['agent']['puppetcode']} does not appear to exist or is not readable"
427
+ fail 'Fatal unexpected error'
457
428
  end
458
-
429
+
459
430
  # Clone unpacked contents to the installation directory
460
431
  begin
461
- FileUtils.cp_r $config["general"]["app_cache"] + "/artifacts/unpacked.#{@checksum}/puppetcode/.", $config["agent"]["puppetcode"]
462
- FileUtils.cp $config["general"]["app_cache"] + "/artifacts/manifest.#{@checksum}.yaml", $config["agent"]["puppetcode"] + "/manifest.pupistry.yaml"
432
+ FileUtils.cp_r $config['general']['app_cache'] + "/artifacts/unpacked.#{@checksum}/puppetcode/.", $config['agent']['puppetcode']
433
+ FileUtils.cp $config['general']['app_cache'] + "/artifacts/manifest.#{@checksum}.yaml", $config['agent']['puppetcode'] + '/manifest.pupistry.yaml'
463
434
  return true
464
435
  rescue
465
- $logger.fatal "An unexpected error occured when copying the unpacked artifact to #{$config["agent"]["puppetcode"]}"
436
+ $logger.fatal "An unexpected error occured when copying the unpacked artifact to #{$config['agent']['puppetcode']}"
466
437
  raise e
467
438
  end
468
-
469
439
  end
470
440
 
471
441
  def clean_install
@@ -476,49 +446,43 @@ module Pupistry
476
446
  # TODO: Do this smarter, we should track what files we drop in, and then remove
477
447
  # any that weren't touched. Need to avoid rsync and stick with native to make
478
448
  # support easier for weird/minimilistic distributions.
479
-
480
- if defined? $config["agent"]["puppetcode"]
481
- if $config["agent"]["puppetcode"].empty?
449
+
450
+ if defined? $config['agent']['puppetcode'] # rubocop:disable Style/GuardClause
451
+ if $config['agent']['puppetcode'].empty?
482
452
  $logger.error "You must configure a location for the agent's Puppet code to be deployed to"
483
453
  return false
484
454
  else
485
- $logger.debug "Cleaning up #{$config["agent"]["puppetcode"]} directory"
455
+ $logger.debug "Cleaning up #{$config['agent']['puppetcode']} directory"
486
456
 
487
- if Dir.exists?($config["agent"]["puppetcode"])
488
- FileUtils.rm_r Dir.glob($config["agent"]["puppetcode"] + "/*"), :secure => true
457
+ if Dir.exist?($config['agent']['puppetcode'])
458
+ FileUtils.rm_r Dir.glob($config['agent']['puppetcode'] + '/*'), secure: true
489
459
  else
490
- FileUtils.mkdir_p $config["agent"]["puppetcode"]
491
- FileUtils.chmod(0700, $config["agent"]["puppetcode"])
460
+ FileUtils.mkdir_p $config['agent']['puppetcode']
461
+ FileUtils.chmod(0700, $config['agent']['puppetcode'])
492
462
  end
493
463
 
494
464
  return true
495
465
  end
496
466
  end
497
-
498
467
  end
499
468
 
500
-
501
469
  def clean_unpack
502
470
  # Cleanup/remove any unpacked archive directories. Requires that the
503
471
  # checksum be set to the version to be purged.
504
472
 
505
- unless defined? @checksum
506
- raise "Application bug, trying to unpack no artifact"
507
- end
473
+ fail 'Application bug, trying to unpack no artifact' unless defined? @checksum
508
474
 
509
- if Dir.exists?($config["general"]["app_cache"] + "/artifacts/unpacked.#{@checksum}/")
510
- $logger.debug "Cleaning up #{$config["general"]["app_cache"]}/artifacts/unpacked.#{@checksum}..."
511
- FileUtils.rm_r $config["general"]["app_cache"] + "/artifacts/unpacked.#{@checksum}", :secure => true
475
+ if Dir.exist?($config['general']['app_cache'] + "/artifacts/unpacked.#{@checksum}/")
476
+ $logger.debug "Cleaning up #{$config['general']['app_cache']}/artifacts/unpacked.#{@checksum}..."
477
+ FileUtils.rm_r $config['general']['app_cache'] + "/artifacts/unpacked.#{@checksum}", secure: true
512
478
  return true
513
479
  else
514
- $logger.debug "Nothing to cleanup (selected artifact is not currently unpacked)"
480
+ $logger.debug 'Nothing to cleanup (selected artifact is not currently unpacked)'
515
481
  return true
516
482
  end
517
483
 
518
- return false
519
-
484
+ false
520
485
  end
521
-
522
486
  end
523
487
  end
524
488