class DigitalOceanInventory::Host

Attributes

config[R]
droplet[R]
name[R]

Public Class Methods

build(opts = {}) click to toggle source
# File lib/digital_ocean_inventory/host.rb, line 7
def self.build(opts = {})
  config  = opts[:config]
  droplet = opts[:droplet]

  new droplet.name, droplet, config
end
new(name, droplet, config) click to toggle source
# File lib/digital_ocean_inventory/host.rb, line 14
def initialize(name, droplet, config)
  @name    = name
  @droplet = droplet
  @config  = config
end

Public Instance Methods

vars() click to toggle source
# File lib/digital_ocean_inventory/host.rb, line 20
def vars
  return @_vars if defined? @_vars

  @_vars = host_vars.to_h
  @_vars
end

Private Instance Methods

droplet_ip(type = :public) click to toggle source
# File lib/digital_ocean_inventory/host.rb, line 29
def droplet_ip(type = :public)
  droplet.networks.v4.find { |n| n.type == type.to_s }&.ip_address
end
droplet_volume_names() click to toggle source
# File lib/digital_ocean_inventory/host.rb, line 38
def droplet_volume_names
  ids = droplet.volume_ids || []
  ids.map { |id| config.client.volumes.find id: id }.map &:name
end
droplet_vpc() click to toggle source
# File lib/digital_ocean_inventory/host.rb, line 33
def droplet_vpc
  id = droplet.vpc_uuid
  config.client.vpcs.find id: id
end
host_vars() click to toggle source
# File lib/digital_ocean_inventory/host.rb, line 43
def host_vars
  vpc = droplet_vpc

  OpenStruct.new.tap do |v|
    v.public_ip     = droplet.public_ip
    v.private_ip    = droplet.private_ip
    v.droplet_id    = droplet.id
    v.vpc_id        = vpc.id
    v.vpc_name      = vpc.name
    v.vpc_subnet    = vpc.ip_range
    v.droplet_tags  = droplet.tags || []
    v.volumes_ids   = droplet.volume_ids || []
    v.volumes_names = droplet_volume_names
    v.image_name    = droplet.image.name
    v.image_dist    = droplet.image.distribution
  end
end