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
|
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?
require :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
data = service.create_vpc(cidr_block, { 'AmazonProvidedIpv6CidrBlock' => amazon_provided_ipv_6_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
|