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