class Fog::Compute::Google::Address

Represents an Address resource

@see developers.google.com/compute/docs/reference/latest/addresses

Constants

IN_USE_STATE
RESERVED_STATE
RESERVING_STATE

Public Instance Methods

destroy(async = true) click to toggle source
# File lib/fog/compute/google/models/address.rb, line 47
def destroy(async = true)
  requires :identity, :region

  data = service.delete_address(identity, region.split("/")[-1])
  operation = Fog::Compute::Google::Operations
              .new(:service => service)
              .get(data.name, nil, data.region)

  operation.wait_for { ready? } unless async
  operation
end
in_use?() click to toggle source
# File lib/fog/compute/google/models/address.rb, line 67
def in_use?
  status == IN_USE_STATE
end
ready?() click to toggle source
# File lib/fog/compute/google/models/address.rb, line 71
def ready?
  status != RESERVING_STATE
end
reload() click to toggle source
# File lib/fog/compute/google/models/address.rb, line 59
def reload
  requires :identity, :region

  data = collection.get(identity, region.split("/")[-1])
  merge_attributes(data.attributes)
  self
end
save() click to toggle source
# File lib/fog/compute/google/models/address.rb, line 36
def save
  requires :identity, :region

  data = service.insert_address(identity, region, attributes)
  operation = Fog::Compute::Google::Operations
              .new(:service => service)
              .get(data.name, nil, data.region)
  operation.wait_for { ready? }
  reload
end
server() click to toggle source
# File lib/fog/compute/google/models/address.rb, line 25
def server
  return nil if !in_use? || users.nil? || users.empty?

  service.servers.get(users.first.split("/")[-1])
end
server=(server) click to toggle source
# File lib/fog/compute/google/models/address.rb, line 31
def server=(server)
  requires :identity, :region
  server ? associate(server) : disassociate
end

Private Instance Methods

associate(nic_name, async = true) click to toggle source
# File lib/fog/compute/google/models/address.rb, line 77
def associate(nic_name, async = true)
  requires :address

  data = service.add_server_access_config(
    server.name, server.zone, nic_name, :nat_ip => address
  )
  operation = Fog::Compute::Google::Operations
              .new(:service => service)
              .get(data.name, data.zone)
  operation.wait_for { ready? } unless async
end
disassociate() click to toggle source
# File lib/fog/compute/google/models/address.rb, line 89
def disassociate
  requires :address

  return nil if !in_use? || users.nil? || users.empty?

  server_name = users.first.split("/")[-1]

  # An address can only be associated with one server at a time
  server = service.servers.get(server_name)
  server.network_interfaces.each do |nic|
    # Skip if nic has no access_config
    next if nic[:access_configs].nil? || nic[:access_configs].empty?

    access_config = nic[:access_configs].first

    # Skip access_config with different address
    next if access_config[:nat_ip] != address

    data = service.delete_server_access_config(
      server.name, server.zone, nic[:name], access_config[:name]
    )
    operation = Fog::Compute::Google::Operations
                .new(:service => service)
                .get(data.name, data.zone)
    operation.wait_for { ready? } unless async
    return operation
  end
end