cloudstrap 0.33.1.pre → 0.34.0.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: d72d0293d09e10bde208081a74e5cfd399743afe
4
- data.tar.gz: c71065fe71ec2da74fde77d6b2bf7fb73c9102d7
3
+ metadata.gz: 1f661345932fa1e10e0b960df15abb9436eac692
4
+ data.tar.gz: 4459f9f78a20fcf66e770f0b016edc0f8d134e77
5
5
  SHA512:
6
- metadata.gz: 2d4bf913ffe4a1bd146c0e6872ab47b1f1a87c2918a51cf6fb30690d7d3c36034b315ab0117aa1a861f37438a9e45bc7da0814eaed786d0693ddd2b99b175614
7
- data.tar.gz: 6842eb7b2dc55da08b2e2d4cfa10dc2bd0d274eda1b3eb8c4e2fdb365b72d4a653faf68dbf1768dd8aa31e60e9ff495e53b584b978624b1400efb6aa6357cbf0
6
+ metadata.gz: 3beb250e809def2963c12ac3d7381658a324291b3c4a6324dee52deb62c75433d92281ddef1d170ef74a2782d98f590e61cf1d3d42deda5afa05c2535fc49ca5
7
+ data.tar.gz: 71b07b0815931745b28646829cf9d4e18656fe007e17e7110a0938e83482c450a83179a47a15cf04c85586cc3d8b0cb518941153544be4dac02cea7d75a97f02
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'burdened-acrobat'
4
+ require 'path53'
5
+ require 'pastel'
6
+
7
+ if ENV['HACKING']
8
+ require_relative '../lib/cloudstrap'
9
+ else
10
+ require 'cloudstrap'
11
+ end
12
+
13
+ gem = Gem::Specification
14
+ .find_all_by_name('cloudstrap')
15
+ .sort_by { |spec| spec.version }
16
+ .last
17
+
18
+ puts <<-EOS
19
+ # #{gem.name} v#{gem.version}
20
+ # #{gem.summary}
21
+ EOS
22
+
23
+ route53 = Cloudstrap::Amazon::Route53.new
24
+ config = Cloudstrap::Config.new
25
+
26
+ DOMAIN = ENV.fetch('CLOUDSTRAP_DOMAIN') { ARGV.first }
27
+ VPC = ENV.fetch('CLOUDSTRAP_VPC_ID') { ARGV.last }
28
+
29
+ abort "usage: #{$PROGRAM_NAME} <domain> <vpc>" if [DOMAIN, VPC].any?(&:nil?)
30
+
31
+ ZONE = route53.zone(DOMAIN)
32
+
33
+ ZONE_ID = route53.zone_id(DOMAIN)
34
+ abort "Invalid Zone: #{DOMAIN}" unless ZONE_ID
35
+
36
+ load_balancers = BurdenedAcrobat::LoadBalancers.new
37
+
38
+ elbs = load_balancers.search { tagged('KubernetesCluster') & with(VPC) }
39
+ abort "No clusters found in #{vpc_id}. Unable to proceed." if elbs.empty?
40
+
41
+ clusters = load_balancers.tags(elbs).flat_map do |lb|
42
+ lb.tags.select { |tag| tag.key == 'KubernetesCluster' }.map(&:value)
43
+ end.uniq
44
+
45
+ begin
46
+ CLUSTER = (clusters.size == 1) ? clusters.first : ENV.fetch('CLOUDSTRAP_KUBERNETES_CLUSTER')
47
+ rescue KeyError
48
+ pastel = Pastel.new
49
+ STDERR.puts <<-EOS
50
+
51
+ #{$PROGRAM_NAME} is confused and needs your help!
52
+
53
+ #{pastel.red "Multiple clusters found in #{pastel.bold VPC}:"}
54
+
55
+ #{clusters.map { |cluster| " * #{cluster}\n" }.join.chomp}
56
+
57
+ Set the environment variable #{pastel.bold("CLOUDSTRAP_KUBERNETES_CLUSTER")}
58
+ to the correct cluster, and invoke #{$PROGRAM_NAME} again.
59
+
60
+ EOS
61
+ abort
62
+ end
63
+
64
+ services = load_balancers
65
+ .search { tags(with(VPC) & tagged('KubernetesCluster', CLUSTER)) }
66
+ .map do |lb|
67
+ [
68
+ lb.tags.find { |tag| tag.key == 'kubernetes.io/service-name' }.value,
69
+ load_balancers.named([lb.load_balancer_name])
70
+ ]
71
+ end.to_h
72
+
73
+ hcp = services.fetch('hcp/ipmgr').first
74
+ identity = services.fetch('hcp/ident-api').first
75
+ hsm = services.fetch('hcp/hsm-server').first
76
+
77
+ puts <<-EOS
78
+ # Configuring the following DNS records...
79
+
80
+ hcp.aws.#{DOMAIN} IN A #{hcp.canonical_hosted_zone_name} # #{hcp.canonical_hosted_zone_name_id}
81
+ hsm.aws.#{DOMAIN} IN A #{hsm.canonical_hosted_zone_name}
82
+ identity.aws.#{DOMAIN} IN A #{identity.canonical_hosted_zone_name}
83
+ *.identity.aws.#{DOMAIN} IN CNAME identity.aws.#{DOMAIN}
84
+
85
+ EOS
86
+
87
+ change = Path53.change(ZONE).batch do
88
+ add a 'hcp.aws.@', hcp
89
+ add a 'hsm.aws.@', hsm
90
+ add a 'identity.aws.@', identity
91
+ add cname '*.identity.aws.@', 'identity.aws.@'
92
+ end.apply!
93
+
94
+ loop do
95
+ info = route53.api.get_change(id: change).change_info
96
+ STDERR.puts "#{change} is #{info.status}"
97
+
98
+ (info.status == 'PENDING') ? sleep(4) : break
99
+ end
data/cloudstrap.gemspec CHANGED
@@ -21,4 +21,6 @@ Gem::Specification.new do |gem|
21
21
  gem.add_runtime_dependency 'java-properties', '~> 0.1', '>= 0.1.1'
22
22
  gem.add_runtime_dependency 'pastel', '~> 0.6', '>= 0.6.0'
23
23
  gem.add_runtime_dependency 'faraday', '~> 0.9', '>= 0.9.0'
24
+ gem.add_runtime_dependency 'burdened-acrobat', '~> 0.3', '>= 0.3.4'
25
+ gem.add_runtime_dependency 'path53', '~> 0.4', '>= 0.4.8'
24
26
  end
@@ -210,7 +210,7 @@ module Cloudstrap
210
210
  network_interfaces: Optional[ArrayOf[Hash]]
211
211
  ] => ::Aws::EC2::Types::Instance
212
212
  def create_instance(**properties)
213
- call_api(:run_instances, properties.merge(min_count: 1, max_count: 2)).instances.first
213
+ call_api(:run_instances, properties.merge(min_count: 1, max_count: 1)).instances.first
214
214
  .tap { instances! }
215
215
  end
216
216
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudstrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.33.1.pre
4
+ version: 0.34.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Olstrom
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-28 00:00:00.000000000 Z
11
+ date: 2016-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -190,10 +190,51 @@ dependencies:
190
190
  - - ">="
191
191
  - !ruby/object:Gem::Version
192
192
  version: 0.9.0
193
+ - !ruby/object:Gem::Dependency
194
+ name: burdened-acrobat
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - "~>"
198
+ - !ruby/object:Gem::Version
199
+ version: '0.3'
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: 0.3.4
203
+ type: :runtime
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: '0.3'
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: 0.3.4
213
+ - !ruby/object:Gem::Dependency
214
+ name: path53
215
+ requirement: !ruby/object:Gem::Requirement
216
+ requirements:
217
+ - - "~>"
218
+ - !ruby/object:Gem::Version
219
+ version: '0.4'
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: 0.4.8
223
+ type: :runtime
224
+ prerelease: false
225
+ version_requirements: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: '0.4'
230
+ - - ">="
231
+ - !ruby/object:Gem::Version
232
+ version: 0.4.8
193
233
  description:
194
234
  email: chris@olstrom.com
195
235
  executables:
196
236
  - cloudstrap
237
+ - cloudstrap-dns
197
238
  extensions: []
198
239
  extra_rdoc_files: []
199
240
  files:
@@ -201,6 +242,7 @@ files:
201
242
  - LICENSE.txt
202
243
  - README.org
203
244
  - bin/cloudstrap
245
+ - bin/cloudstrap-dns
204
246
  - cloudstrap.gemspec
205
247
  - lib/cloudstrap.rb
206
248
  - lib/cloudstrap/amazon.rb
@@ -238,7 +280,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
238
280
  version: 1.3.1
239
281
  requirements: []
240
282
  rubyforge_project:
241
- rubygems_version: 2.5.1
283
+ rubygems_version: 2.6.7
242
284
  signing_key:
243
285
  specification_version: 4
244
286
  summary: Strapping Boots to Clouds