class DigitalOceanInventory::Serializer

Attributes

config[R]

Public Class Methods

build(config) click to toggle source
# File lib/digital_ocean_inventory/serializer.rb, line 7
def self.build(config)
  new config
end
new(config) click to toggle source
# File lib/digital_ocean_inventory/serializer.rb, line 11
def initialize(config)
  @config = config
end

Public Instance Methods

call(inventory) click to toggle source
# File lib/digital_ocean_inventory/serializer.rb, line 15
def call(inventory)
  meta = { _meta: { hostvars: hostvars(inventory) } }
  data = groups(inventory).merge meta

  JSON.dump data
end

Private Instance Methods

groups(inventory) click to toggle source
# File lib/digital_ocean_inventory/serializer.rb, line 24
def groups(inventory)
  hash = {}
  inventory.groups.to_h.each do |name, group|
    hash[name] = {
      vars: groupvars(group),
      hosts: group.hosts.map { |h| h.droplet.name }.uniq,
      children: []
    }
  end

  hash
end
groupvars(group) click to toggle source
# File lib/digital_ocean_inventory/serializer.rb, line 37
def groupvars(group)
  return {} unless group.name == "all"

  hosts = group.hosts.map { |h| h.vars }

  {
    public_ips: hosts.map { |v| v[:public_ip] }.uniq,
    private_ips: hosts.map { |v| v[:private_ip] }.uniq,
    vpc_subnets: hosts.map { |v| v[:vpc_subnet] }.uniq
  }
end
hostvars(inventory) click to toggle source
# File lib/digital_ocean_inventory/serializer.rb, line 49
def hostvars(inventory)
  inventory.hosts.to_h.values.map { |h| [h.droplet.name, h.vars] }.to_h
end