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 +4 -4
- data/bin/cloudstrap-dns +99 -0
- data/cloudstrap.gemspec +2 -0
- data/lib/cloudstrap/amazon/ec2.rb +1 -1
- metadata +45 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f661345932fa1e10e0b960df15abb9436eac692
|
4
|
+
data.tar.gz: 4459f9f78a20fcf66e770f0b016edc0f8d134e77
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3beb250e809def2963c12ac3d7381658a324291b3c4a6324dee52deb62c75433d92281ddef1d170ef74a2782d98f590e61cf1d3d42deda5afa05c2535fc49ca5
|
7
|
+
data.tar.gz: 71b07b0815931745b28646829cf9d4e18656fe007e17e7110a0938e83482c450a83179a47a15cf04c85586cc3d8b0cb518941153544be4dac02cea7d75a97f02
|
data/bin/cloudstrap-dns
ADDED
@@ -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:
|
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.
|
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-
|
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.
|
283
|
+
rubygems_version: 2.6.7
|
242
284
|
signing_key:
|
243
285
|
specification_version: 4
|
244
286
|
summary: Strapping Boots to Clouds
|