1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
module Fog
module AWS
class Compute
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'
attribute :is_default, :aliases => 'isDefault'
attribute :cidr_block_association_set, :aliases => 'cidrBlockAssociationSet'
attribute :ipv6_cidr_block_association_set, :aliases => 'ipv6CidrBlockAssociationSet'
attribute :amazon_provided_ipv6_cidr_block, :aliases => 'amazonProvidedIpv6CidrBlock'
# Backward compatibility. Please use ipv6_cidr_block_association_set
alias_method :ipv_6_cidr_block_association_set, :ipv6_cidr_block_association_set
alias_method :ipv_6_cidr_block_association_set=, :ipv6_cidr_block_association_set=
alias_method :amazon_provided_ipv_6_cidr_block, :amazon_provided_ipv6_cidr_block
alias_method :amazon_provided_ipv_6_cidr_block=, :amazon_provided_ipv6_cidr_block=
def subnets
service.subnets(:filters => {'vpcId' => self.identity}).all
end
def initialize(attributes={})
self.dhcp_options_id ||= "default"
self.tenancy ||= "default"
self.amazon_provided_ipv_6_cidr_block ||=false
super
end
def ready?
requires :state
state == 'available'
end
def is_default?
requires :is_default
is_default
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
def classic_link_enabled?
requires :identity
service.describe_vpc_classic_link(:vpc_ids => [self.identity]).body['vpcSet'].first['classicLinkEnabled']
rescue
nil
end
def enable_classic_link
requires :identity
service.enable_vpc_classic_link(self.identity).body['return']
end
def disable_classic_link
requires :identity
service.disable_vpc_classic_link(self.identity).body['return']
end
def classic_link_dns_enabled?
requires :identity
service.describe_vpc_classic_link_dns_support(:vpc_ids => [self.identity]).body['vpcs'].first['classicLinkDnsSupported']
rescue
nil
end
def enable_classic_link_dns
requires :identity
service.enable_vpc_classic_link_dns_support(self.identity).body['return']
end
def disable_classic_link_dns
requires :identity
service.disable_vpc_classic_link_dns_support(self.identity).body['return']
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
options = {
'AmazonProvidedIpv6CidrBlock' => amazon_provided_ipv_6_cidr_block,
'InstanceTenancy' => tenancy
}
data = service.create_vpc(cidr_block, options).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
|