cumulus-aws 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/.gitignore +3 -0
- data/.travis.yml +12 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +29 -0
- data/LICENSE +202 -0
- data/README.md +41 -0
- data/autocomplete +137 -0
- data/bin/cumulus +658 -0
- data/cumulus +2 -0
- data/cumulus-aws.gemspec +20 -0
- data/lib/autoscaling/AutoScaling.rb +40 -0
- data/lib/autoscaling/loader/Loader.rb +56 -0
- data/lib/autoscaling/manager/Manager.rb +360 -0
- data/lib/autoscaling/models/AlarmConfig.rb +165 -0
- data/lib/autoscaling/models/AlarmDiff.rb +172 -0
- data/lib/autoscaling/models/AutoScalingDiff.rb +178 -0
- data/lib/autoscaling/models/GroupConfig.rb +330 -0
- data/lib/autoscaling/models/PolicyConfig.rb +135 -0
- data/lib/autoscaling/models/PolicyDiff.rb +73 -0
- data/lib/autoscaling/models/ScheduledActionDiff.rb +53 -0
- data/lib/autoscaling/models/ScheduledConfig.rb +96 -0
- data/lib/aws_extensions/ec2/DhcpOptions.rb +41 -0
- data/lib/aws_extensions/ec2/Instance.rb +29 -0
- data/lib/aws_extensions/ec2/NetworkAcl.rb +25 -0
- data/lib/aws_extensions/ec2/NetworkInterface.rb +14 -0
- data/lib/aws_extensions/ec2/RouteTable.rb +26 -0
- data/lib/aws_extensions/ec2/SecurityGroup.rb +16 -0
- data/lib/aws_extensions/ec2/Subnet.rb +28 -0
- data/lib/aws_extensions/ec2/Volume.rb +24 -0
- data/lib/aws_extensions/ec2/Vpc.rb +14 -0
- data/lib/aws_extensions/ec2/VpcEndpoint.rb +11 -0
- data/lib/aws_extensions/elb/BackendServerDescription.rb +12 -0
- data/lib/aws_extensions/elb/PolicyDescription.rb +14 -0
- data/lib/aws_extensions/kinesis/StreamDescription.rb +12 -0
- data/lib/aws_extensions/route53/AliasTarget.rb +21 -0
- data/lib/aws_extensions/s3/Bucket.rb +33 -0
- data/lib/aws_extensions/s3/BucketAcl.rb +28 -0
- data/lib/aws_extensions/s3/BucketCors.rb +17 -0
- data/lib/aws_extensions/s3/BucketLifecycle.rb +21 -0
- data/lib/aws_extensions/s3/BucketLogging.rb +18 -0
- data/lib/aws_extensions/s3/BucketNotification.rb +23 -0
- data/lib/aws_extensions/s3/BucketPolicy.rb +18 -0
- data/lib/aws_extensions/s3/BucketTagging.rb +15 -0
- data/lib/aws_extensions/s3/BucketVersioning.rb +14 -0
- data/lib/aws_extensions/s3/BucketWebsite.rb +49 -0
- data/lib/aws_extensions/s3/CORSRule.rb +27 -0
- data/lib/aws_extensions/s3/ReplicationConfiguration.rb +22 -0
- data/lib/cloudfront/CloudFront.rb +83 -0
- data/lib/cloudfront/loader/Loader.rb +31 -0
- data/lib/cloudfront/manager/Manager.rb +183 -0
- data/lib/cloudfront/models/CacheBehaviorConfig.rb +237 -0
- data/lib/cloudfront/models/CacheBehaviorDiff.rb +211 -0
- data/lib/cloudfront/models/CustomOriginConfig.rb +51 -0
- data/lib/cloudfront/models/CustomOriginDiff.rb +74 -0
- data/lib/cloudfront/models/DistributionConfig.rb +183 -0
- data/lib/cloudfront/models/DistributionDiff.rb +131 -0
- data/lib/cloudfront/models/InvalidationConfig.rb +37 -0
- data/lib/cloudfront/models/OriginConfig.rb +144 -0
- data/lib/cloudfront/models/OriginDiff.rb +86 -0
- data/lib/cloudfront/models/OriginSslProtocols.rb +28 -0
- data/lib/cloudfront/models/OriginSslProtocolsDiff.rb +39 -0
- data/lib/common/BaseLoader.rb +80 -0
- data/lib/common/manager/Manager.rb +148 -0
- data/lib/common/models/Diff.rb +114 -0
- data/lib/common/models/ListChange.rb +21 -0
- data/lib/common/models/TagsDiff.rb +55 -0
- data/lib/common/models/UTCTimeSource.rb +17 -0
- data/lib/conf/Configuration.rb +365 -0
- data/lib/ec2/EC2.rb +503 -0
- data/lib/ec2/IPProtocolMapping.rb +165 -0
- data/lib/ec2/loaders/EbsLoader.rb +19 -0
- data/lib/ec2/loaders/InstanceLoader.rb +32 -0
- data/lib/ec2/managers/EbsManager.rb +176 -0
- data/lib/ec2/managers/InstanceManager.rb +509 -0
- data/lib/ec2/models/EbsGroupConfig.rb +133 -0
- data/lib/ec2/models/EbsGroupDiff.rb +48 -0
- data/lib/ec2/models/InstanceConfig.rb +202 -0
- data/lib/ec2/models/InstanceDiff.rb +95 -0
- data/lib/elb/ELB.rb +148 -0
- data/lib/elb/loader/Loader.rb +65 -0
- data/lib/elb/manager/Manager.rb +581 -0
- data/lib/elb/models/AccessLogConfig.rb +82 -0
- data/lib/elb/models/AccessLogDiff.rb +47 -0
- data/lib/elb/models/HealthCheckConfig.rb +91 -0
- data/lib/elb/models/HealthCheckDiff.rb +50 -0
- data/lib/elb/models/ListenerConfig.rb +99 -0
- data/lib/elb/models/ListenerDiff.rb +91 -0
- data/lib/elb/models/LoadBalancerConfig.rb +239 -0
- data/lib/elb/models/LoadBalancerDiff.rb +265 -0
- data/lib/iam/IAM.rb +36 -0
- data/lib/iam/loader/Loader.rb +117 -0
- data/lib/iam/manager/IamGroups.rb +98 -0
- data/lib/iam/manager/IamResource.rb +288 -0
- data/lib/iam/manager/IamRoles.rb +112 -0
- data/lib/iam/manager/IamUsers.rb +54 -0
- data/lib/iam/manager/Manager.rb +29 -0
- data/lib/iam/migration/AssumeRoleUnifier.rb +34 -0
- data/lib/iam/migration/PolicyUnifier.rb +90 -0
- data/lib/iam/models/GroupConfig.rb +40 -0
- data/lib/iam/models/IamDiff.rb +132 -0
- data/lib/iam/models/PolicyConfig.rb +67 -0
- data/lib/iam/models/ResourceWithPolicy.rb +208 -0
- data/lib/iam/models/RoleConfig.rb +53 -0
- data/lib/iam/models/StatementConfig.rb +35 -0
- data/lib/iam/models/UserConfig.rb +21 -0
- data/lib/kinesis/Kinesis.rb +94 -0
- data/lib/kinesis/loader/Loader.rb +19 -0
- data/lib/kinesis/manager/Manager.rb +206 -0
- data/lib/kinesis/models/StreamConfig.rb +75 -0
- data/lib/kinesis/models/StreamDiff.rb +58 -0
- data/lib/lambda/Lambda.rb +41 -0
- data/lib/route53/loader/Loader.rb +32 -0
- data/lib/route53/manager/Manager.rb +241 -0
- data/lib/route53/models/AliasTarget.rb +86 -0
- data/lib/route53/models/RecordConfig.rb +178 -0
- data/lib/route53/models/RecordDiff.rb +140 -0
- data/lib/route53/models/Vpc.rb +24 -0
- data/lib/route53/models/ZoneConfig.rb +156 -0
- data/lib/route53/models/ZoneDiff.rb +118 -0
- data/lib/s3/S3.rb +89 -0
- data/lib/s3/loader/Loader.rb +66 -0
- data/lib/s3/manager/Manager.rb +296 -0
- data/lib/s3/models/BucketConfig.rb +321 -0
- data/lib/s3/models/BucketDiff.rb +167 -0
- data/lib/s3/models/GrantConfig.rb +189 -0
- data/lib/s3/models/GrantDiff.rb +50 -0
- data/lib/s3/models/LifecycleConfig.rb +142 -0
- data/lib/s3/models/LifecycleDiff.rb +46 -0
- data/lib/s3/models/LoggingConfig.rb +81 -0
- data/lib/s3/models/NotificationConfig.rb +157 -0
- data/lib/s3/models/NotificationDiff.rb +62 -0
- data/lib/s3/models/ReplicationConfig.rb +133 -0
- data/lib/s3/models/ReplicationDiff.rb +60 -0
- data/lib/s3/models/WebsiteConfig.rb +107 -0
- data/lib/security/SecurityGroups.rb +39 -0
- data/lib/security/loader/Loader.rb +94 -0
- data/lib/security/manager/Manager.rb +246 -0
- data/lib/security/models/RuleConfig.rb +161 -0
- data/lib/security/models/RuleDiff.rb +72 -0
- data/lib/security/models/RuleMigration.rb +127 -0
- data/lib/security/models/SecurityGroupConfig.rb +172 -0
- data/lib/security/models/SecurityGroupDiff.rb +112 -0
- data/lib/sns/SNS.rb +40 -0
- data/lib/sqs/SQS.rb +62 -0
- data/lib/sqs/loader/Loader.rb +34 -0
- data/lib/sqs/manager/Manager.rb +128 -0
- data/lib/sqs/models/DeadLetterConfig.rb +70 -0
- data/lib/sqs/models/DeadLetterDiff.rb +35 -0
- data/lib/sqs/models/QueueConfig.rb +115 -0
- data/lib/sqs/models/QueueDiff.rb +89 -0
- data/lib/util/Colors.rb +111 -0
- data/lib/util/StatusCodes.rb +51 -0
- data/lib/vpc/loader/Loader.rb +73 -0
- data/lib/vpc/manager/Manager.rb +954 -0
- data/lib/vpc/models/AclEntryConfig.rb +150 -0
- data/lib/vpc/models/AclEntryDiff.rb +54 -0
- data/lib/vpc/models/DhcpConfig.rb +100 -0
- data/lib/vpc/models/DhcpDiff.rb +90 -0
- data/lib/vpc/models/EndpointConfig.rb +76 -0
- data/lib/vpc/models/EndpointDiff.rb +69 -0
- data/lib/vpc/models/NetworkAclConfig.rb +87 -0
- data/lib/vpc/models/NetworkAclDiff.rb +116 -0
- data/lib/vpc/models/RouteConfig.rb +82 -0
- data/lib/vpc/models/RouteDiff.rb +50 -0
- data/lib/vpc/models/RouteTableConfig.rb +92 -0
- data/lib/vpc/models/RouteTableDiff.rb +101 -0
- data/lib/vpc/models/SubnetConfig.rb +113 -0
- data/lib/vpc/models/SubnetDiff.rb +78 -0
- data/lib/vpc/models/VpcConfig.rb +173 -0
- data/lib/vpc/models/VpcDiff.rb +315 -0
- data/rakefile.rb +8 -0
- metadata +245 -0
data/lib/ec2/EC2.rb
ADDED
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
require "conf/Configuration"
|
|
2
|
+
require "ec2/models/EbsGroupConfig"
|
|
3
|
+
|
|
4
|
+
require "aws-sdk"
|
|
5
|
+
|
|
6
|
+
module Cumulus
|
|
7
|
+
module EC2
|
|
8
|
+
class << self
|
|
9
|
+
@@client = Aws::EC2::Client.new(Configuration.instance.client)
|
|
10
|
+
|
|
11
|
+
require "aws_extensions/ec2/Subnet"
|
|
12
|
+
Aws::EC2::Types::Subnet.send(:include, AwsExtensions::EC2::Subnet)
|
|
13
|
+
|
|
14
|
+
require "aws_extensions/ec2/Vpc"
|
|
15
|
+
Aws::EC2::Types::Vpc.send(:include, AwsExtensions::EC2::Vpc)
|
|
16
|
+
|
|
17
|
+
require "aws_extensions/ec2/RouteTable"
|
|
18
|
+
Aws::EC2::Types::RouteTable.send(:include, AwsExtensions::EC2::RouteTable)
|
|
19
|
+
|
|
20
|
+
require "aws_extensions/ec2/NetworkAcl"
|
|
21
|
+
Aws::EC2::Types::NetworkAcl.send(:include, AwsExtensions::EC2::NetworkAcl)
|
|
22
|
+
|
|
23
|
+
require "aws_extensions/ec2/NetworkInterface"
|
|
24
|
+
Aws::EC2::Types::NetworkInterface.send(:include, AwsExtensions::EC2::NetworkInterface)
|
|
25
|
+
|
|
26
|
+
require "aws_extensions/ec2/VpcEndpoint"
|
|
27
|
+
Aws::EC2::Types::VpcEndpoint.send(:include, AwsExtensions::EC2::VpcEndpoint)
|
|
28
|
+
|
|
29
|
+
require "aws_extensions/ec2/Volume"
|
|
30
|
+
Aws::EC2::Types::Volume.send(:include, AwsExtensions::EC2::Volume)
|
|
31
|
+
|
|
32
|
+
require "aws_extensions/ec2/Instance"
|
|
33
|
+
Aws::EC2::Types::Instance.send(:include, AwsExtensions::EC2::Instance)
|
|
34
|
+
|
|
35
|
+
# Easily load instance attribute data individually and lazy
|
|
36
|
+
InstanceAttributes = Struct.new(:instance_id) do
|
|
37
|
+
|
|
38
|
+
def user_data
|
|
39
|
+
@user_data ||= EC2::init_instance_attribute(self.instance_id, "userData").user_data.value
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def tags
|
|
43
|
+
@tags ||= EC2::init_tags(self.instance_id)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Public
|
|
49
|
+
#
|
|
50
|
+
# Returns a Hash of subnet id to Aws::EC2::Types::Subnet
|
|
51
|
+
def id_subnets
|
|
52
|
+
@id_subnets ||= Hash[subnets.map { |subnet| [subnet.subnet_id, subnet] }]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Public
|
|
56
|
+
#
|
|
57
|
+
# Returns a Hash of subnet name or id to Aws::EC2::Types::Subnet
|
|
58
|
+
def named_subnets
|
|
59
|
+
@named_subnets ||= Hash[subnets.map { |subnet| [subnet.name || subnet.subnet_id, subnet] }]
|
|
60
|
+
.reject { |k, v| !k or !v }
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Public
|
|
64
|
+
#
|
|
65
|
+
# Returns a Hash of VPC id to array of Aws::EC2::Types::Subnet for the VPC
|
|
66
|
+
def vpc_subnets
|
|
67
|
+
@vpc_subnets ||= Hash[id_vpcs.map do |vpc_id, _|
|
|
68
|
+
[vpc_id, subnets.select { |subnet| subnet.vpc_id == vpc_id }]
|
|
69
|
+
end]
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Public: Lazily load the subnets
|
|
73
|
+
def subnets
|
|
74
|
+
@subnets ||= init_subnets
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Public
|
|
78
|
+
#
|
|
79
|
+
# Returns a Hash of VPC name or id to Aws::EC2::Types::Vpc
|
|
80
|
+
def named_vpcs
|
|
81
|
+
@named_vpcs ||= Hash[vpcs.map { |vpc| [vpc.name || vpc.vpc_id, vpc] }]
|
|
82
|
+
.reject { |k, v| !k or !v }
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Public
|
|
86
|
+
#
|
|
87
|
+
# Returns a Hash of VPC id to Aws::EC2::Types::Vpc
|
|
88
|
+
def id_vpcs
|
|
89
|
+
@vpc_ids ||= Hash[vpcs.map { |vpc| [vpc.vpc_id, vpc] }]
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Public refreshes the list of vpcs
|
|
93
|
+
def refresh_vpcs!
|
|
94
|
+
@vpcs = init_vpcs
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Public: Lazily load the vpcs
|
|
98
|
+
def vpcs
|
|
99
|
+
@vpcs ||= init_vpcs
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Public
|
|
103
|
+
#
|
|
104
|
+
# Returns a Hash of route tables name or id to Aws::EC2::Types::RouteTable
|
|
105
|
+
def named_route_tables
|
|
106
|
+
@named_route_tables ||= Hash[route_tables.map { |rt| [rt.name || rt.route_table_id, rt] }]
|
|
107
|
+
.reject { |k, v| !k or !v }
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Public
|
|
111
|
+
#
|
|
112
|
+
# Returns a Hash of subnet id to Aws::EC2::Types::RouteTable
|
|
113
|
+
def subnet_route_tables
|
|
114
|
+
@subnet_route_tables ||= Hash[route_tables.flat_map do |rt|
|
|
115
|
+
rt.subnet_ids.map { |subnet_id| [subnet_id, rt] }
|
|
116
|
+
end]
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Public
|
|
120
|
+
#
|
|
121
|
+
# Returns a Hash of vpc id to array of Aws::EC2::Types::RouteTable
|
|
122
|
+
def vpc_route_tables
|
|
123
|
+
@vpc_route_tables ||= Hash[id_vpcs.map do |vpc_id, _|
|
|
124
|
+
[vpc_id, route_tables.select { |rt| rt.vpc_id == vpc_id }]
|
|
125
|
+
end]
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Public
|
|
129
|
+
#
|
|
130
|
+
# Returns a Hash of route table id Aws::EC2::Types::RouteTable
|
|
131
|
+
def id_route_tables
|
|
132
|
+
@id_route_tables ||= Hash[@route_tables.map { |rt| [rt.route_table_id, rt] }]
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Public: Lazily load route tables
|
|
136
|
+
def route_tables
|
|
137
|
+
@route_tables ||= init_route_tables
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# Public refreshes the list of route tables
|
|
141
|
+
def refresh_route_tables!
|
|
142
|
+
@route_tables = init_route_tables
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# Public
|
|
146
|
+
#
|
|
147
|
+
# Returns a Hash of subnet id to Aws::EC2::Types::NetworkAcl associated with the subnet
|
|
148
|
+
def subnet_network_acls
|
|
149
|
+
@subnet_network_acls =
|
|
150
|
+
Hash[network_acls.flat_map do |acl|
|
|
151
|
+
acl.subnet_ids.map { |subnet_id| [subnet_id, acl] }
|
|
152
|
+
end]
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Public
|
|
156
|
+
#
|
|
157
|
+
# Returns a Hash of vpc id to array of Aws::EC2::Types::NetworkAcl
|
|
158
|
+
def vpc_network_acls
|
|
159
|
+
@vpc_network_acls = Hash[id_vpcs.map do |vpc_id, _|
|
|
160
|
+
[vpc_id, network_acls.select { |acl| acl.vpc_id == vpc_id }]
|
|
161
|
+
end]
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# Public
|
|
165
|
+
#
|
|
166
|
+
# Returns a Hash of network acl name or id to Aws::EC2::Types::NetworkAcl
|
|
167
|
+
def named_network_acls
|
|
168
|
+
@named_network_acls = Hash[network_acls.map do |acl|
|
|
169
|
+
[acl.name || acl.network_acl_id, acl]
|
|
170
|
+
end]
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# Public: Lazily load the network acls
|
|
174
|
+
def network_acls
|
|
175
|
+
@network_acls ||= init_network_acls
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Public: Refresh the list of Network ACLs
|
|
179
|
+
def refresh_network_acls!
|
|
180
|
+
@network_acls = init_network_acls
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# Public
|
|
184
|
+
#
|
|
185
|
+
# Returns a Hash of dhcp options id to Aws::EC2::Types::DhcpOptions
|
|
186
|
+
def id_dhcp_options
|
|
187
|
+
@id_dhcp_options ||= Hash[dhcp_options.map { |dhcp| [dhcp.dhcp_options_id, dhcp] }]
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# Public: Lazily load the dhcp options
|
|
191
|
+
def dhcp_options
|
|
192
|
+
@dhcp_options ||= init_dhcp_options
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# Public: Lazily load the vpc endpoints
|
|
196
|
+
#
|
|
197
|
+
# Returns a Hash of vpc id to array of Aws::EC2::Types::VpcEndpoint
|
|
198
|
+
def vpc_endpoints
|
|
199
|
+
@vpc_endpoints ||= Hash[id_vpcs.map do |vpc_id, _|
|
|
200
|
+
[vpc_id, endpoints.select { |e| e.vpc_id == vpc_id } ]
|
|
201
|
+
end]
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# Public: Lazily load the endpoints
|
|
205
|
+
def endpoints
|
|
206
|
+
@endpoints ||= init_endpoints
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
# Public
|
|
210
|
+
#
|
|
211
|
+
# Returns a Hash of public ip to Aws::EC2::Types::Address
|
|
212
|
+
def public_addresses
|
|
213
|
+
@public_addresses ||= Hash[addresses.map { |addr| [addr.public_ip, addr] }]
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# Public
|
|
217
|
+
#
|
|
218
|
+
# Returns a Hash of vpc id to array of Aws::EC2::Types::Address that has a network interface in the vpc
|
|
219
|
+
def vpc_addresses
|
|
220
|
+
@vpc_addresses ||= Hash[id_vpcs.map do |vpc_id, _|
|
|
221
|
+
interface_ids = vpc_network_interfaces[vpc_id].map { |interface| interface.network_interface_id }
|
|
222
|
+
[vpc_id, addresses.select { |addr| interface_ids.include? addr.network_interface_id }]
|
|
223
|
+
end]
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# Public: Lazily load the addresses
|
|
227
|
+
def addresses
|
|
228
|
+
@addresses ||= init_addresses
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# Public
|
|
232
|
+
#
|
|
233
|
+
# Returns a Hash of interface name to Aws::EC2::Types::NetworkInterface
|
|
234
|
+
def named_network_interfaces
|
|
235
|
+
@named_network_interfaces ||= Hash[network_interfaces.map { |net| [net.name || net.network_interface_id, net] }]
|
|
236
|
+
.reject { |k, v| !k or !v }
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
# Public
|
|
240
|
+
#
|
|
241
|
+
# Returns a Hash of interface id to Aws::EC2::Types::NetworkInterface
|
|
242
|
+
def id_network_interfaces
|
|
243
|
+
@id_network_interfaces ||= Hash[network_interfaces.map { |net| [net.network_interface_id, net] }]
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
# Public
|
|
247
|
+
#
|
|
248
|
+
# Returns a Hash of vpc id to array of Aws::EC2::Types::NetworkInterface
|
|
249
|
+
def vpc_network_interfaces
|
|
250
|
+
@vpc_network_interfaces ||= Hash[id_vpcs.map do |vpc_id, _|
|
|
251
|
+
[vpc_id, network_interfaces.select { |net| net.vpc_id == vpc_id}]
|
|
252
|
+
end]
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
# Public: Lazily load network interfaces
|
|
256
|
+
def network_interfaces
|
|
257
|
+
@network_interfaces ||= init_network_interfaces
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
# Public
|
|
261
|
+
#
|
|
262
|
+
# Returns a Hash of ebs volume group name to EbsGroupConfig
|
|
263
|
+
def group_ebs_volumes
|
|
264
|
+
@group_ebs_volumes ||= Hash[ebs_groups.map do |group_name|
|
|
265
|
+
vols = ebs_volumes.select { |vol| vol.group == group_name}
|
|
266
|
+
[group_name, EbsGroupConfig.new(group_name).populate!(vols)]
|
|
267
|
+
end]
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
# Public
|
|
271
|
+
#
|
|
272
|
+
# Returns a Hash of ebs volume group name to Aws::EC2::Types::Volume
|
|
273
|
+
def group_ebs_volumes_aws
|
|
274
|
+
@group_ebs_volumes_aws ||= Hash[ebs_groups.map do |group_name|
|
|
275
|
+
vols = ebs_volumes.select { |vol| vol.group == group_name}
|
|
276
|
+
[group_name, vols]
|
|
277
|
+
end]
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
# Public
|
|
281
|
+
#
|
|
282
|
+
# Returns an array of the group names used by all ebs volumes
|
|
283
|
+
def ebs_groups
|
|
284
|
+
@ebs_groups ||= ebs_volumes.map(&:group).reject(&:nil?).uniq
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
# Public
|
|
288
|
+
#
|
|
289
|
+
# Returns a Hash of ebs volume id to volume
|
|
290
|
+
def id_ebs_volumes
|
|
291
|
+
@id_ebs_volumes ||= Hash[ebs_volumes.map { |vol| [vol.volume_id, vol] }]
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
# Public: Lazily loads EBS volumes, rejecting all root-mounted volumes
|
|
295
|
+
def ebs_volumes
|
|
296
|
+
@ebs_volumes ||= init_ebs_volumes.reject do |vol|
|
|
297
|
+
vol.attachments.any? do |att|
|
|
298
|
+
attached_instance = id_instances[att.instance_id]
|
|
299
|
+
attached_instance.root_device_name == att.device
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
# Public
|
|
305
|
+
#
|
|
306
|
+
# Returns a Hash of instance id to Aws::EC2::Types::Instance
|
|
307
|
+
def id_instances
|
|
308
|
+
@id_instances ||= Hash[instances.map { |i| [i.instance_id, i] }]
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
# Public
|
|
312
|
+
#
|
|
313
|
+
# Returns a Hash of instance name or id to Aws::EC2::Types::Instance
|
|
314
|
+
def named_instances
|
|
315
|
+
@named_instances ||= Hash[instances.map { |i| [i.name || i.instance_id, i] }]
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
# Public
|
|
319
|
+
#
|
|
320
|
+
# Returns a Hash of instance id to attributes, lazily loading each attribute
|
|
321
|
+
def id_instance_attributes(instance_id)
|
|
322
|
+
@id_instance_attributes ||= {}
|
|
323
|
+
@id_instance_attributes[instance_id] ||= InstanceAttributes.new(instance_id)
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
# Public: Load instance attributes
|
|
327
|
+
#
|
|
328
|
+
# Returns the instance attribute as whatever type that attribute is
|
|
329
|
+
def init_instance_attribute(instance_id, attribute)
|
|
330
|
+
@@client.describe_instance_attribute({
|
|
331
|
+
instance_id: instance_id,
|
|
332
|
+
attribute: attribute
|
|
333
|
+
})
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
# Public: Lazily loads instances
|
|
337
|
+
def instances
|
|
338
|
+
@instances ||= init_instances.reject(&:terminated?)
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
# Public
|
|
342
|
+
#
|
|
343
|
+
# Returns a Hash of placement group name to Aws::EC2::Types::PlacementGroup
|
|
344
|
+
def named_placement_groups
|
|
345
|
+
@named_placement_groups ||= Hash[placement_groups.map { |pg| [pg.group_name, pg] }]
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
# Public: Lazily load placement groups
|
|
349
|
+
def placement_groups
|
|
350
|
+
@placement_groups ||= init_placement_groups
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
# Public: Load tags for an ec2 object
|
|
354
|
+
#
|
|
355
|
+
# Returns the tags as Hash
|
|
356
|
+
def init_tags(object_id)
|
|
357
|
+
next_token = nil
|
|
358
|
+
tags_loaded = false
|
|
359
|
+
|
|
360
|
+
tags = []
|
|
361
|
+
|
|
362
|
+
while !tags_loaded do
|
|
363
|
+
resp = @@client.describe_tags({
|
|
364
|
+
filters: [
|
|
365
|
+
{
|
|
366
|
+
name: "resource-id",
|
|
367
|
+
values: [object_id]
|
|
368
|
+
}
|
|
369
|
+
]
|
|
370
|
+
})
|
|
371
|
+
|
|
372
|
+
tags.concat(resp.tags)
|
|
373
|
+
tags_loaded = resp.next_token.nil? || resp.next_token.empty?
|
|
374
|
+
next_token = resp.next_token
|
|
375
|
+
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
Hash[tags.map { |tag| [tag.key, tag.value] }]
|
|
379
|
+
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
def supports_vpc
|
|
383
|
+
@supports_vpc ||= supported_platforms.include?("VPC")
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
def supports_ec2_classic
|
|
387
|
+
@supports_ec2_classic ||= supported_platforms.include?("EC2")
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
def supported_platforms
|
|
391
|
+
@supported_platforms ||= @@client.describe_account_attributes({
|
|
392
|
+
attribute_names: ["supported-platforms"]
|
|
393
|
+
}).account_attributes.first.attribute_values.map(&:attribute_value)
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
private
|
|
397
|
+
|
|
398
|
+
# Internal: Load all subnets
|
|
399
|
+
#
|
|
400
|
+
# Returns an array of Aws::EC2::Types::Subnet
|
|
401
|
+
def init_subnets
|
|
402
|
+
@@client.describe_subnets.subnets
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
# Internal: Load VPCs
|
|
406
|
+
#
|
|
407
|
+
# Returns the VPCs as Aws::EC2::Types::Vpc
|
|
408
|
+
def init_vpcs
|
|
409
|
+
@@client.describe_vpcs.vpcs
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
# Internal: Load route tables
|
|
413
|
+
#
|
|
414
|
+
# Returns the route tables as Aws::EC2::Types::RouteTable
|
|
415
|
+
def init_route_tables
|
|
416
|
+
@@client.describe_route_tables.route_tables
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
# Internal: Load network acls
|
|
420
|
+
#
|
|
421
|
+
# Returns the network acls as Aws::EC2::Types::NetworkAcl
|
|
422
|
+
def init_network_acls
|
|
423
|
+
@@client.describe_network_acls.network_acls
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
# Internal: Load DHCP Options
|
|
427
|
+
#
|
|
428
|
+
# Returns the dhcp options as Aws::EC2::Types::DhcpOptions
|
|
429
|
+
def init_dhcp_options
|
|
430
|
+
@@client.describe_dhcp_options.dhcp_options
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
# Internal: Load VPC Endpoints
|
|
434
|
+
#
|
|
435
|
+
# Returns the vpc endpoints as Aws::EC2::Types::VpcEndpoint
|
|
436
|
+
def init_endpoints
|
|
437
|
+
endpoints = []
|
|
438
|
+
next_token = nil
|
|
439
|
+
all_records_retrieved = false
|
|
440
|
+
|
|
441
|
+
until all_records_retrieved
|
|
442
|
+
response = @@client.describe_vpc_endpoints({
|
|
443
|
+
next_token: next_token
|
|
444
|
+
})
|
|
445
|
+
next_token = response.next_token
|
|
446
|
+
all_records_retrieved = next_token.nil? || next_token.empty?
|
|
447
|
+
endpoints << response.vpc_endpoints
|
|
448
|
+
end
|
|
449
|
+
|
|
450
|
+
endpoints.flatten
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
# Internal: Load allocated addresses
|
|
454
|
+
#
|
|
455
|
+
# Returns the address as Aws::EC2::Types::Address
|
|
456
|
+
def init_addresses
|
|
457
|
+
@@client.describe_addresses.addresses
|
|
458
|
+
end
|
|
459
|
+
|
|
460
|
+
# Internal: Load network interfaces
|
|
461
|
+
#
|
|
462
|
+
# Returns the network interface as Aws::EC2::Types::NetworkInterface
|
|
463
|
+
def init_network_interfaces
|
|
464
|
+
@@client.describe_network_interfaces.network_interfaces
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
# Internal: Load EBS Volumes
|
|
468
|
+
#
|
|
469
|
+
# Returns the volumes as Aws::EC2::Types::Volume
|
|
470
|
+
def init_ebs_volumes
|
|
471
|
+
@@client.describe_volumes.volumes
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
# Internal: Load instances
|
|
475
|
+
#
|
|
476
|
+
# Returns the instances as Aws::EC2::Types::Instance
|
|
477
|
+
def init_instances
|
|
478
|
+
instances = []
|
|
479
|
+
next_token = nil
|
|
480
|
+
all_records_retrieved = false
|
|
481
|
+
|
|
482
|
+
until all_records_retrieved
|
|
483
|
+
response = @@client.describe_instances({
|
|
484
|
+
next_token: next_token
|
|
485
|
+
})
|
|
486
|
+
next_token = response.next_token
|
|
487
|
+
all_records_retrieved = next_token.nil? || next_token.empty?
|
|
488
|
+
instances << response.reservations.map { |r| r.instances }
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
instances.flatten
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
# Internal: Load placement groups
|
|
495
|
+
#
|
|
496
|
+
# Returns the placement groups as Aws::EC2::Types::PlacementGroup
|
|
497
|
+
def init_placement_groups
|
|
498
|
+
@@client.describe_placement_groups.placement_groups
|
|
499
|
+
end
|
|
500
|
+
|
|
501
|
+
end
|
|
502
|
+
end
|
|
503
|
+
end
|