cloudstrap 0.30.12.pre → 0.31.1.pre

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: abbe10d27d4f4e5bd183ba7556953ec02e5c3216
4
- data.tar.gz: f9a76d71308b176b42115c3c4a06ac307ecad09a
3
+ metadata.gz: 74614e07862ccafa1e8a578fa6096f83193a82a1
4
+ data.tar.gz: 077627f919d13452fe56ec2a46721b1a081f261c
5
5
  SHA512:
6
- metadata.gz: 3e35b8063403b05ce0e667b4cd740bad6e842910c9965c0d4fa08d231230ad39f4f7c7649a67b9389264cb97325fe39391a3d24662c14872d066d55afd646b0a
7
- data.tar.gz: 7f7f2ba508fad6b7a43996fd92c104e703bb2dba7767d3ae8f71c3f80b3c2114e6c64c3b001396f7c919f94aa17b820ad5c176318eb56178d47398e6d208205d
6
+ metadata.gz: 141f91160f912706e61b4cda52a6abba92449120d94e65ade11cb876a9c4b474451053c514d49c794b757eb770442797b3d079133f53ab720dd57c23a2e4b019
7
+ data.tar.gz: 2ed68498c3fb49ab93feb1912cade807fdb36f822d74e9c253653aa383e41d48f31014a8c05f1f4ad63e1925a1209f962f0543868bd64e6ad4361e6115fc1ae5
data/bin/cloudstrap CHANGED
@@ -65,6 +65,7 @@ BOOTSTRAP_WITHOUT_HUMAN_OVERSIGHT=#{!agent.requires_human_oversight?}
65
65
  # These do not need configuration, and are presented as a debugging checklist
66
66
 
67
67
  # DNS Support Enabled for VPC? #{agent.enable_dns_support}
68
+ # DNS Hostnames Enabled for VPC? #{agent.enable_dns_hostnames}
68
69
  # Public IPs Enabled in Public Subnet? #{agent.enable_public_ips}
69
70
  # Gateway Attached to VPC? #{agent.attach_gateway}
70
71
  # Route to Internet via Gateway? #{agent.default_route}
@@ -1,2 +1,4 @@
1
1
  require_relative 'amazon/ec2'
2
+ require_relative 'amazon/elb'
2
3
  require_relative 'amazon/iam'
4
+ require_relative 'amazon/route53'
@@ -25,6 +25,16 @@ module Cloudstrap
25
25
  call_api(:modify_vpc_attribute, vpc_id: vpc_id, enable_dns_support: { value: true }).successful?
26
26
  end
27
27
 
28
+ Contract String => Bool
29
+ def vpc_supports_dns_hostnames?(vpc_id)
30
+ call_api(:describe_vpc_attribute, vpc_id: vpc_id, attribute: "enableDnsHostnames").enable_dns_hostnames.value
31
+ end
32
+
33
+ Contract String => Bool
34
+ def enable_dns_hostnames(vpc_id)
35
+ call_api(:modify_vpc_attribute, vpc_id: vpc_id, enable_dns_hostnames: { value: true }).successful?
36
+ end
37
+
28
38
  Contract None => ArrayOf[::Aws::EC2::Types::Subnet]
29
39
  def subnets
30
40
  @subnets ||= subnets!
@@ -0,0 +1,45 @@
1
+ require 'aws-sdk'
2
+ require 'contracts'
3
+ require_relative 'service'
4
+
5
+ module Cloudstrap
6
+ module Amazon
7
+ class ELB < Service
8
+ include ::Contracts::Core
9
+ include ::Contracts::Builtin
10
+
11
+ Contract None => ArrayOf[::Aws::ElasticLoadBalancing::Types::LoadBalancerDescription]
12
+ def list
13
+ @list ||= list!
14
+ end
15
+
16
+ Contract None => ArrayOf[::Aws::ElasticLoadBalancing::Types::LoadBalancerDescription]
17
+ def list!
18
+ @list = call_api(:describe_load_balancers).load_balancer_descriptions
19
+ end
20
+
21
+ Tags = HashOf[String, String]
22
+
23
+ Contract Args[String] => HashOf[String, Tags]
24
+ def tags(*elb_names)
25
+ describe_tags(*elb_names).each_with_object({}) do |description, hash|
26
+ hash[description.load_balancer_name] = description
27
+ .tags
28
+ .map(&:to_a)
29
+ .to_h
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ Contract Args[String] => ArrayOf[::Aws::ElasticLoadBalancing::Types::TagDescription]
36
+ def describe_tags(*elb_names)
37
+ call_api(:describe_tags, load_balancer_names: elb_names).tag_descriptions
38
+ end
39
+
40
+ def client
41
+ ::Aws::ElasticLoadBalancing::Client
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,42 @@
1
+ require 'aws-sdk'
2
+ require 'contracts'
3
+ require_relative 'service'
4
+
5
+ module Cloudstrap
6
+ module Amazon
7
+ class Route53 < Service
8
+ include ::Contracts::Core
9
+ include ::Contracts::Builtin
10
+
11
+ Contract None => ArrayOf[::Aws::Route53::Types::HostedZone]
12
+ def zones
13
+ @zones ||= zones!
14
+ end
15
+
16
+ Contract None => ArrayOf[::Aws::Route53::Types::HostedZone]
17
+ def zones!
18
+ @zones = call_api(:list_hosted_zones).hosted_zones
19
+ end
20
+
21
+ Contract String => Maybe[::Aws::Route53::Types::HostedZone]
22
+ def zone(name)
23
+ name.tap { |string| string.concat('.') unless string.end_with?('.') }
24
+
25
+ zones.find { |zone| zone.name == name }
26
+ end
27
+
28
+ Contract String => Maybe[String]
29
+ def zone_id(name)
30
+ return unless zone = zone(name)
31
+
32
+ zone(name).id.split('/').last
33
+ end
34
+
35
+ private
36
+
37
+ def client
38
+ ::Aws::Route53::Client
39
+ end
40
+ end
41
+ end
42
+ end
@@ -19,7 +19,10 @@ module Cloudstrap
19
19
  Contract Symbol, Args[Any] => Any
20
20
  def call_api(method, *args)
21
21
  with_retries(
22
- rescue: Aws::EC2::Errors::RequestLimitExceeded,
22
+ rescue: [
23
+ Aws::EC2::Errors::RequestLimitExceeded,
24
+ Aws::Route53::Errors::ThrottlingException
25
+ ],
23
26
  handler: request_limit_exceeded_handler,
24
27
  base_sleep_seconds: 1.0,
25
28
  max_sleep_seconds: 8.0
@@ -255,6 +255,11 @@ module Cloudstrap
255
255
  ec2.vpc_supports_dns?(vpc) || ec2.enable_dns_support(vpc)
256
256
  end
257
257
 
258
+ Contract None => Bool
259
+ def enable_dns_hostnames
260
+ ec2.vpc_supports_dns_hostnames?(vpc) || ec2.enable_dns_hostnames(vpc)
261
+ end
262
+
258
263
  Contract None => String
259
264
  def create_jumpbox
260
265
  upload_ssh_key
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudstrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.12.pre
4
+ version: 0.31.1.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Olstrom
@@ -205,7 +205,9 @@ files:
205
205
  - lib/cloudstrap.rb
206
206
  - lib/cloudstrap/amazon.rb
207
207
  - lib/cloudstrap/amazon/ec2.rb
208
+ - lib/cloudstrap/amazon/elb.rb
208
209
  - lib/cloudstrap/amazon/iam.rb
210
+ - lib/cloudstrap/amazon/route53.rb
209
211
  - lib/cloudstrap/amazon/service.rb
210
212
  - lib/cloudstrap/amazon/support/rate_limit_handler.rb
211
213
  - lib/cloudstrap/bootstrap_agent.rb