Method: Onceover::Controlrepo#update_puppetfile

Defined in:
lib/onceover/controlrepo.rb

#update_puppetfileObject



305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
# File 'lib/onceover/controlrepo.rb', line 305

def update_puppetfile
  require 'r10k/puppetfile'

  # Read in the Puppetfile as a string and as an object
  puppetfile_string = File.read(@puppetfile).split("\n")
  puppetfile = R10K::Puppetfile.new(@root)
  puppetfile.load!

  # TODO: Make sure we can deal with :latest

  # Create threading resources
  threads = []
  queue   = Queue.new
  queue.push(puppetfile_string)

  puppetfile.modules.keep_if {|m| m.is_a?(R10K::Module::Forge)}
  puppetfile.modules.each do |mod|
    threads << Thread.new do
      logger.debug "Getting latest version of #{mod.full_name}"
      latest_version = mod.v3_module.current_release.version

      # Get the data off the queue, or wait if something else is using it
      puppetfile_string_temp = queue.pop
      line_index = puppetfile_string_temp.index {|l| l =~ /^\s*[^#]*#{mod.owner}[\/-]#{mod.name}/}
      puppetfile_string_temp[line_index].gsub!(mod.expected_version,latest_version)

      # Put the data back into the queue once we are done with it
      queue.push(puppetfile_string_temp)
    end
  end

  threads.map(&:join)
  puppetfile_string = queue.pop

  File.open(@puppetfile, 'w') {|f| f.puts(puppetfile_string.join("\n")) }
  puts "#{'changed'.yellow} #{@puppetfile}"
end