cloudstrap 0.33.1.pre → 0.34.0.pre

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 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