Module: Puppetserver::Ca::Utils::Inventory
- Defined in:
- lib/puppetserver/ca/utils/inventory.rb
Class Method Summary collapse
-
.parse_inventory_file(path, logger) ⇒ Object
Note that the inventory file may have multiple entries for the same certname, so it should only provide the latest cert for the given certname.
Class Method Details
.parse_inventory_file(path, logger) ⇒ Object
Note that the inventory file may have multiple entries for the same certname, so it should only provide the latest cert for the given certname.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/puppetserver/ca/utils/inventory.rb', line 10 def self.parse_inventory_file(path, logger) unless File.exist?(path) logger.err("Could not find inventory at #{path}") return [{}, true] end inventory = {} errored = false File.readlines(path).each do |line| # Shouldn't be any blank lines, but skip them if there are next if line.strip.empty? items = line.strip.split if items.count != 4 logger.err("Invalid entry found in inventory.txt: #{line}") errored = true next end unless items[0].match(/^(?:0x)?[A-Fa-f0-9]+$/) logger.err("Invalid serial found in inventory.txt line: #{line}") errored = true next end serial = items[0].hex not_before = nil not_after = nil begin not_before = Time.parse(items[1]) rescue ArgumentError logger.err("Invalid not_before time found in inventory.txt line: #{line}") errored = true next end begin not_after = Time.parse(items[2]) rescue ArgumentError logger.err("Invalid not_after time found in inventory.txt line: #{line}") errored = true next end unless items[3].start_with?('/CN=') logger.err("Invalid certname found in inventory.txt line: #{line}") errored = true next end certname = items[3][4..-1] if !inventory.keys.include?(certname) inventory[certname] = { :serial => serial, :old_serials => [], :not_before => not_before, :not_after => not_after, } else if not_after >= inventory[certname][:not_after] # This is a newer cert than the one we currently have recorded, # so save the previous serial in :old_serials inventory[certname][:old_serials] << inventory[certname][:serial] inventory[certname][:serial] = serial inventory[certname][:not_before] = not_before inventory[certname][:not_after] = not_after else # This somehow is an older cert (shouldn't really be possible as we just append # to the file with each new cert and we are reading it order) inventory[certname][:old_serials] << serial end end end [inventory, errored] end |