Sha256: cd6e2a2a2c4ff087de32004c2d14385831e4748de147fab718d956f79715f3e3

Contents?: true

Size: 2 KB

Versions: 28

Compression:

Stored size: 2 KB

Contents

module Fog
  module Compute
    class AWS
      class Address < Fog::Model
        identity  :public_ip,                  :aliases => 'publicIp'

        attribute :allocation_id,              :aliases => 'allocationId'
        attribute :association_id,             :aliases => 'associationId'
        attribute :server_id,                  :aliases => 'instanceId'
        attribute :network_interface_id,       :aliases => 'networkInterfaceId'
        attribute :network_interface_owner_id, :aliases => 'networkInterfaceOwnerId'
        attribute :domain

        def initialize(attributes = {})
          # assign server first to prevent race condition with persisted?
          self.server = attributes.delete(:server)
          super
        end

        def destroy
          requires :public_ip

          service.release_address(allocation_id || public_ip)
          true
        end

        def server=(new_server)
          if new_server
            associate(new_server)
          else
            disassociate
          end
        end

        def server
          service.servers.get(server_id)
        end

        def save
          raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
          data = service.allocate_address(domain).body
          new_attributes = data.reject {|key,value| key == 'requestId'}
          merge_attributes(new_attributes)
          if @server
            self.server = @server
          end
          true
        end

        private

        def associate(new_server)
          unless persisted?
            @server = new_server
          else
            @server = nil
            self.server_id = new_server.id
            service.associate_address(server_id, public_ip, network_interface_id, allocation_id)
          end
        end

        def disassociate
          @server = nil
          self.server_id = nil
          if persisted?
            service.disassociate_address(public_ip)
          end
        end
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 2 rubygems

Version Path
fog-aws-1.2.0 lib/fog/aws/models/compute/address.rb
fog-aws-1.1.0 lib/fog/aws/models/compute/address.rb
fog-aws-1.0.0 lib/fog/aws/models/compute/address.rb
fog-aws-0.13.0 lib/fog/aws/models/compute/address.rb
fog-aws-0.12.0 lib/fog/aws/models/compute/address.rb
fog-aws-0.11.0 lib/fog/aws/models/compute/address.rb
fog-aws-0.10.0 lib/fog/aws/models/compute/address.rb
fog-aws-0.9.4 lib/fog/aws/models/compute/address.rb
fog-aws-0.9.3 lib/fog/aws/models/compute/address.rb
fog-aws-0.9.2 lib/fog/aws/models/compute/address.rb
fog-aws-0.9.1 lib/fog/aws/models/compute/address.rb
fog-aws-0.9.0 lib/fog/aws/models/compute/address.rb
fog-aws-0.8.1 lib/fog/aws/models/compute/address.rb
fog-aws-0.8.0 lib/fog/aws/models/compute/address.rb
vagrant-cloudstack-1.2.0 vendor/bundle/gems/fog-aws-0.7.5/lib/fog/aws/models/compute/address.rb
fog-aws-0.7.6 lib/fog/aws/models/compute/address.rb
fog-aws-0.7.5 lib/fog/aws/models/compute/address.rb
fog-aws-0.7.4 lib/fog/aws/models/compute/address.rb
fog-aws-0.7.3 lib/fog/aws/models/compute/address.rb
fog-aws-0.7.2 lib/fog/aws/models/compute/address.rb