mirror of
https://github.com/fog/fog-aws.git
synced 2022-11-09 13:50:52 -05:00
73 lines
1.9 KiB
Ruby
73 lines
1.9 KiB
Ruby
module Fog
|
|
module Compute
|
|
class AWS
|
|
class VPC < Fog::Model
|
|
identity :id, :aliases => 'vpcId'
|
|
|
|
attribute :state
|
|
attribute :cidr_block, :aliases => 'cidrBlock'
|
|
attribute :dhcp_options_id, :aliases => 'dhcpOptionsId'
|
|
attribute :tags, :aliases => 'tagSet'
|
|
attribute :tenancy, :aliases => 'instanceTenancy'
|
|
|
|
def initialize(attributes={})
|
|
self.dhcp_options_id ||= "default"
|
|
self.tenancy ||= "default"
|
|
super
|
|
end
|
|
|
|
def ready?
|
|
requires :state
|
|
state == 'available'
|
|
end
|
|
|
|
# Removes an existing vpc
|
|
#
|
|
# vpc.destroy
|
|
#
|
|
# ==== Returns
|
|
#
|
|
# True or false depending on the result
|
|
#
|
|
|
|
def destroy
|
|
requires :id
|
|
|
|
service.delete_vpc(id)
|
|
true
|
|
end
|
|
|
|
# Create a vpc
|
|
#
|
|
# >> g = AWS.vpcs.new(:cidr_block => "10.1.2.0/24")
|
|
# >> g.save
|
|
#
|
|
# == Returns:
|
|
#
|
|
# True or an exception depending on the result. Keep in mind that this *creates* a new vpc.
|
|
# As such, it yields an InvalidGroup.Duplicate exception if you attempt to save an existing vpc.
|
|
#
|
|
|
|
def save
|
|
requires :cidr_block
|
|
|
|
data = service.create_vpc(cidr_block).body['vpcSet'].first
|
|
new_attributes = data.reject {|key,value| key == 'requestId'}
|
|
new_attributes = data.reject {|key,value| key == 'requestId' || key == 'tagSet' }
|
|
merge_attributes(new_attributes)
|
|
|
|
if tags = self.tags
|
|
# expect eventual consistency
|
|
Fog.wait_for { self.reload rescue nil }
|
|
service.create_tags(
|
|
self.identity,
|
|
tags
|
|
)
|
|
end
|
|
|
|
true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|