bosh-bootstrap 0.13.2 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/ChangeLog.md +6 -0
- data/bosh-bootstrap.gemspec +3 -1
- data/lib/bosh-bootstrap/cli/commands/deploy.rb +6 -6
- data/lib/bosh-bootstrap/cli/helpers/settings.rb +2 -2
- data/lib/bosh-bootstrap/microbosh.rb +2 -3
- data/lib/bosh-bootstrap/microbosh_providers/aws.rb +19 -25
- data/lib/bosh-bootstrap/microbosh_providers/base.rb +16 -2
- data/lib/bosh-bootstrap/microbosh_providers/openstack.rb +9 -7
- data/lib/bosh-bootstrap/microbosh_providers/vsphere.rb +9 -2
- data/lib/bosh-bootstrap/network.rb +4 -2
- data/lib/bosh-bootstrap/network_providers/aws.rb +6 -2
- data/lib/bosh-bootstrap/network_providers/dummy.rb +1 -1
- data/lib/bosh-bootstrap/network_providers/openstack.rb +1 -1
- data/lib/bosh-bootstrap/public_stemcell.rb +33 -0
- data/lib/bosh-bootstrap/public_stemcells.rb +66 -0
- data/lib/bosh-bootstrap/version.rb +1 -1
- data/spec/integration/aws/aws_ec2_basic_spec.rb +3 -1
- data/spec/spec_helper.rb +20 -1
- data/spec/unit/commands/delete_spec.rb +1 -3
- data/spec/unit/commands/deploy_spec.rb +5 -5
- data/spec/unit/commands/ssh_spec.rb +4 -4
- data/spec/unit/key_pair_spec.rb +3 -4
- data/spec/unit/microbosh_providers/aws_spec.rb +54 -22
- data/spec/unit/microbosh_spec.rb +6 -6
- data/spec/unit/network_providers/aws_spec.rb +18 -3
- data/spec/unit/network_providers/openstack_spec.rb +1 -1
- data/spec/unit/network_spec.rb +2 -2
- metadata +44 -28
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
NzljOTRmMTU5MzgzMGRlMmE3YWE2MTdiMGFjYWYwNzliYzk1YzU4NQ==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b5ea6f814d89322a4ce8eecc1e9e56d6a8c77578
|
4
|
+
data.tar.gz: a9808b7ddf7eed80eca2fdb9cdf5f973bd14916e
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
ZjY4NWMzZmM5MGQzM2NlMjAzODQxZjBkNDBmMTIxOGI3NzY4YTNiMjEzNWM3
|
11
|
-
Mzk3MWIxZDVhZmNjODZjYTMzM2Q4ZDQzNWU0NmQ0ZjIyZWRmYzY=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MDQ0NmYzMDU4MmM3Mzg5YzFhNTFkMzlmNzI4MmY5M2JiMGMwMjhmMWY1ODc4
|
14
|
-
NjhjMjJiNWZmMDViYzM0MGU5YmM3Y2Y5YTg2ZjZhNTFjMThmMGI0ZWYxNzg4
|
15
|
-
ZDExYzIyYTA0ODY2ZDkxYzZiZjYxNjAxNTlkMDNjY2UyZDY3YzA=
|
6
|
+
metadata.gz: 91325833e973b0ca5dbf52d9d5b7090bd7bc2c982169e0c15eab750b3da66b968898ab303cfbfc9a5c03c294c0303786a2aa66c0f8c7466444a0c21c508af53f
|
7
|
+
data.tar.gz: a3e81665b3fcaf6617520af632c2311a5dbcaec9eb27ed3de125964dcdaa33c5c61bfeb683338d31f3f39fbad3a6b33608136796dc57e0b0123eb4432693f88b
|
data/ChangeLog.md
CHANGED
@@ -8,6 +8,12 @@ gem install bosh-bootstrap
|
|
8
8
|
bosh-bootstrap deploy
|
9
9
|
```
|
10
10
|
|
11
|
+
v0.14
|
12
|
+
|
13
|
+
- default target directory is current director, rather than `~/.microbosh`
|
14
|
+
- [aws] VPC support - detects if VPCs available and allows selection, then select of subset, then creates security groups into the VPC
|
15
|
+
- [aws] Using m3.medium instead of m1.medium
|
16
|
+
|
11
17
|
v0.13
|
12
18
|
-----
|
13
19
|
|
data/bosh-bootstrap.gemspec
CHANGED
@@ -22,10 +22,12 @@ EOS
|
|
22
22
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
23
23
|
gem.require_paths = ["lib"]
|
24
24
|
|
25
|
-
gem.add_dependency "cyoi", "~> 0.
|
25
|
+
gem.add_dependency "cyoi", "~> 0.11"
|
26
26
|
gem.add_dependency "fog", "~> 1.11"
|
27
27
|
gem.add_dependency "readwritesettings", "~> 3.0"
|
28
28
|
gem.add_dependency "thor", "~> 0.18"
|
29
|
+
gem.add_dependency "httpclient", '=2.4.0'
|
30
|
+
|
29
31
|
gem.add_dependency "redcard"
|
30
32
|
gem.add_dependency "rbvmomi"
|
31
33
|
gem.add_development_dependency "rake"
|
@@ -42,7 +42,7 @@ class Bosh::Bootstrap::Cli::Commands::Deploy
|
|
42
42
|
reload_settings!
|
43
43
|
|
44
44
|
# TODO why passing provider_client rather than a Cyoi::Cli::Network object?
|
45
|
-
network = Bosh::Bootstrap::Network.new(settings.provider.name, cyoi_provider_client)
|
45
|
+
network = Bosh::Bootstrap::Network.new(settings.provider.name, cyoi_provider_client, settings)
|
46
46
|
network.deploy
|
47
47
|
end
|
48
48
|
|
@@ -59,14 +59,14 @@ class Bosh::Bootstrap::Cli::Commands::Deploy
|
|
59
59
|
# download if stemcell
|
60
60
|
def select_public_image_or_download_stemcell
|
61
61
|
print "Determining stemcell image/file to use... "
|
62
|
-
|
63
|
-
while (
|
62
|
+
stemcell_path = microbosh_provider.stemcell_path
|
63
|
+
while (stemcell_path || "").size == 0
|
64
64
|
puts "failed. Retrying..."
|
65
65
|
print "Determining stemcell image/file to use... "
|
66
|
-
|
66
|
+
stemcell_path = microbosh_provider.stemcell_path
|
67
67
|
end
|
68
|
-
settings.set("bosh.
|
69
|
-
puts settings.bosh.
|
68
|
+
settings.set("bosh.stemcell_path", stemcell_path)
|
69
|
+
puts settings.bosh.stemcell_path
|
70
70
|
end
|
71
71
|
|
72
72
|
def perform_microbosh_deploy
|
@@ -7,10 +7,10 @@ module Bosh::Bootstrap::Cli::Helpers::Settings
|
|
7
7
|
# The base directory for holding the manifest settings file
|
8
8
|
# and private keys
|
9
9
|
#
|
10
|
-
# Defaults to
|
10
|
+
# Defaults to current directory; and can be overridden:
|
11
11
|
# * $SETTINGS - to a folder (supported method)
|
12
12
|
def settings_dir
|
13
|
-
@settings_dir ||= File.expand_path(ENV["SETTINGS"] || "
|
13
|
+
@settings_dir ||= File.expand_path(ENV["SETTINGS"] || ".")
|
14
14
|
end
|
15
15
|
|
16
16
|
def settings_dir=(settings_dir)
|
@@ -40,7 +40,7 @@ class Bosh::Bootstrap::Microbosh
|
|
40
40
|
chdir(base_path) do
|
41
41
|
setup_gems
|
42
42
|
create_microbosh_yml(settings)
|
43
|
-
deploy_or_update(settings.bosh.name, settings.bosh.
|
43
|
+
deploy_or_update(settings.bosh.name, settings.bosh.stemcell_path)
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -52,7 +52,6 @@ class Bosh::Bootstrap::Microbosh
|
|
52
52
|
f << <<-RUBY
|
53
53
|
source 'https://rubygems.org'
|
54
54
|
|
55
|
-
gem "bosh-bootstrap", path: "#{gempath}"
|
56
55
|
gem "bosh_cli_plugin_micro"
|
57
56
|
RUBY
|
58
57
|
end
|
@@ -70,4 +69,4 @@ gem "bosh_cli_plugin_micro"
|
|
70
69
|
bundle "exec bosh -n micro deploy --update-if-exists", stemcell
|
71
70
|
end
|
72
71
|
end
|
73
|
-
end
|
72
|
+
end
|
@@ -2,18 +2,6 @@ require "bosh-bootstrap/microbosh_providers/base"
|
|
2
2
|
|
3
3
|
module Bosh::Bootstrap::MicroboshProviders
|
4
4
|
class AWS < Base
|
5
|
-
# if us-east-1 -> ami
|
6
|
-
# if not running in target aws region -> error "Must either use us-east-1 or run 'bosh bootstrap deploy' within target AWS region"
|
7
|
-
# else download stemcell & return path
|
8
|
-
def stemcell
|
9
|
-
unless settings.exists?("bosh.stemcell")
|
10
|
-
if ami_region?
|
11
|
-
fetch_ami
|
12
|
-
else
|
13
|
-
download_stemcell
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
5
|
|
18
6
|
def to_hash
|
19
7
|
data = super.merge({
|
@@ -41,7 +29,7 @@ module Bosh::Bootstrap::MicroboshProviders
|
|
41
29
|
end
|
42
30
|
|
43
31
|
def resources_cloud_properties
|
44
|
-
{"instance_type"=>"
|
32
|
+
{"instance_type"=>"m3.medium"}
|
45
33
|
end
|
46
34
|
|
47
35
|
def cloud_properties
|
@@ -64,22 +52,28 @@ module Bosh::Bootstrap::MicroboshProviders
|
|
64
52
|
settings.provider.region
|
65
53
|
end
|
66
54
|
|
67
|
-
#
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
55
|
+
# @return Bosh::Cli::PublicStemcell latest stemcell for aws/trusty
|
56
|
+
# If us-east-1 region, then return light stemcell
|
57
|
+
def latest_stemcell
|
58
|
+
@latest_stemcell ||= begin
|
59
|
+
trusty_stemcells = if light_stemcell?
|
60
|
+
recent_stemcells.select do |s|
|
61
|
+
s.name =~ /aws/ && s.name =~ /trusty/ && s.name =~ /^light/
|
62
|
+
end
|
63
|
+
else
|
64
|
+
recent_stemcells.select do |s|
|
65
|
+
s.name =~ /aws/ && s.name =~ /trusty/ && s.name =~ /^bosh/
|
66
|
+
end
|
67
|
+
end
|
68
|
+
trusty_stemcells.sort {|s1, s2| s2.version <=> s1.version}.first
|
69
|
+
end
|
74
70
|
end
|
75
71
|
|
76
|
-
|
77
|
-
|
72
|
+
# only us-east-1 has light stemcells published
|
73
|
+
def light_stemcell?
|
74
|
+
aws_region == "us-east-1"
|
78
75
|
end
|
79
76
|
|
80
|
-
def stemcell_uri
|
81
|
-
"http://bosh-jenkins-artifacts.s3.amazonaws.com/bosh-stemcell/aws/bosh-stemcell-latest-aws-xen-ubuntu.tgz"
|
82
|
-
end
|
83
77
|
end
|
84
78
|
end
|
85
79
|
Bosh::Bootstrap::MicroboshProviders.register_provider("aws", Bosh::Bootstrap::MicroboshProviders::AWS)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "bosh-bootstrap/microbosh_providers"
|
2
|
+
require "bosh-bootstrap/public_stemcells"
|
2
3
|
|
3
4
|
# for the #sh helper
|
4
5
|
require "rake"
|
@@ -56,13 +57,26 @@ class Bosh::Bootstrap::MicroboshProviders::Base
|
|
56
57
|
"bosh-jenkins-artifacts"
|
57
58
|
end
|
58
59
|
|
60
|
+
def stemcell_path
|
61
|
+
unless settings.exists?("bosh.stemcell_path")
|
62
|
+
download_stemcell
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def recent_stemcells
|
67
|
+
@recent_stemcells ||= begin
|
68
|
+
public_stemcells = Bosh::Bootstrap::PublicStemcells.new
|
69
|
+
public_stemcells.recent
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
59
73
|
# downloads latest stemcell & returns path
|
60
74
|
def download_stemcell
|
61
75
|
mkdir_p(stemcell_dir)
|
62
76
|
chdir(stemcell_dir) do
|
63
|
-
stemcell_path = File.expand_path(
|
77
|
+
stemcell_path = File.expand_path(latest_stemcell.name)
|
64
78
|
unless File.exists?(stemcell_path)
|
65
|
-
sh "curl -O '#{
|
79
|
+
sh "curl -O '#{latest_stemcell.url}'"
|
66
80
|
end
|
67
81
|
return stemcell_path
|
68
82
|
end
|
@@ -2,11 +2,6 @@ require "bosh-bootstrap/microbosh_providers/base"
|
|
2
2
|
|
3
3
|
module Bosh::Bootstrap::MicroboshProviders
|
4
4
|
class OpenStack < Base
|
5
|
-
def stemcell
|
6
|
-
unless settings.exists?("bosh.stemcell")
|
7
|
-
download_stemcell
|
8
|
-
end
|
9
|
-
end
|
10
5
|
|
11
6
|
def to_hash
|
12
7
|
super.merge({
|
@@ -126,9 +121,16 @@ module Bosh::Bootstrap::MicroboshProviders
|
|
126
121
|
!!(settings.provider["options"] && settings.provider.options.boot_from_volume)
|
127
122
|
end
|
128
123
|
|
129
|
-
|
130
|
-
|
124
|
+
# @return Bosh::Cli::PublicStemcell latest stemcell for openstack/trusty
|
125
|
+
def latest_stemcell
|
126
|
+
@latest_stemcell ||= begin
|
127
|
+
trusty_stemcells = recent_stemcells.select do |s|
|
128
|
+
s.name =~ /openstack/ && s.name =~ /trusty/
|
129
|
+
end
|
130
|
+
trusty_stemcells.sort {|s1, s2| s2.version <=> s1.version}.first
|
131
|
+
end
|
131
132
|
end
|
133
|
+
|
132
134
|
end
|
133
135
|
end
|
134
136
|
Bosh::Bootstrap::MicroboshProviders.register_provider("openstack", Bosh::Bootstrap::MicroboshProviders::OpenStack)
|
@@ -100,9 +100,16 @@ module Bosh::Bootstrap::MicroboshProviders
|
|
100
100
|
}
|
101
101
|
end
|
102
102
|
|
103
|
-
|
104
|
-
|
103
|
+
# @return Bosh::Cli::PublicStemcell latest stemcell for vsphere/trusty
|
104
|
+
def latest_stemcell
|
105
|
+
@latest_stemcell ||= begin
|
106
|
+
trusty_stemcells = recent_stemcells.select do |s|
|
107
|
+
s.name =~ /vsphere/ && s.name =~ /trusty/
|
108
|
+
end
|
109
|
+
trusty_stemcells.sort {|s1, s2| s2.version <=> s1.version}.first
|
110
|
+
end
|
105
111
|
end
|
112
|
+
|
106
113
|
end
|
107
114
|
end
|
108
115
|
Bosh::Bootstrap::MicroboshProviders.register_provider("vsphere", Bosh::Bootstrap::MicroboshProviders::VSphere)
|
@@ -5,14 +5,16 @@ class Bosh::Bootstrap::Network
|
|
5
5
|
|
6
6
|
attr_reader :provider_name
|
7
7
|
attr_reader :cyoi_provider_client
|
8
|
+
attr_reader :settings
|
8
9
|
|
9
|
-
def initialize(provider_name, cyoi_provider_client)
|
10
|
+
def initialize(provider_name, cyoi_provider_client, settings)
|
10
11
|
@provider_name = provider_name
|
11
12
|
@cyoi_provider_client = cyoi_provider_client
|
13
|
+
@settings = settings
|
12
14
|
end
|
13
15
|
|
14
16
|
def deploy
|
15
|
-
network_provider.perform
|
17
|
+
network_provider.perform(settings)
|
16
18
|
end
|
17
19
|
|
18
20
|
# Attempt to load and instantiate a NetworkProviders class
|
@@ -6,9 +6,13 @@ module Bosh::Bootstrap::NetworkProviders
|
|
6
6
|
@cyoi_provider_client = cyoi_provider_client
|
7
7
|
end
|
8
8
|
|
9
|
-
def perform
|
9
|
+
def perform(settings)
|
10
|
+
attributes = {}
|
11
|
+
if vpc_id = settings.exists?("address.vpc_id")
|
12
|
+
attributes[:vpc_id] = vpc_id
|
13
|
+
end
|
10
14
|
security_groups.each do |name, ports|
|
11
|
-
cyoi_provider_client.create_security_group(name.to_s, name.to_s, ports: ports)
|
15
|
+
cyoi_provider_client.create_security_group(name.to_s, name.to_s, {ports: ports}, attributes)
|
12
16
|
end
|
13
17
|
end
|
14
18
|
|
@@ -6,7 +6,7 @@ module Bosh::Bootstrap::NetworkProviders
|
|
6
6
|
@cyoi_provider_client = cyoi_provider_client
|
7
7
|
end
|
8
8
|
|
9
|
-
def perform
|
9
|
+
def perform(settings)
|
10
10
|
cyoi_provider_client.create_security_group("ssh", "ssh", 22)
|
11
11
|
cyoi_provider_client.create_security_group("dns_server", "dns_server", protocol: "udp", ports: (53..53) )
|
12
12
|
cyoi_provider_client.create_security_group("bosh", "bosh", [4222, 6868, 25250, 25555, 25777] )
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Bosh::Bootstrap
|
2
|
+
class PublicStemcell
|
3
|
+
attr_reader :size
|
4
|
+
|
5
|
+
def initialize(key, size)
|
6
|
+
@key = key
|
7
|
+
@size = size
|
8
|
+
|
9
|
+
@parsed_version = key.scan(/[\d]*_?[\d]+/).first
|
10
|
+
end
|
11
|
+
|
12
|
+
def name
|
13
|
+
File.basename(@key)
|
14
|
+
end
|
15
|
+
|
16
|
+
def version
|
17
|
+
@parsed_version.gsub('_', '.').to_f
|
18
|
+
end
|
19
|
+
|
20
|
+
def variety
|
21
|
+
name.gsub(/(.tgz)|(bosh-stemcell-)|(#{@parsed_version})/, '').split('-').reject { |c| c.empty? }.join('-')
|
22
|
+
end
|
23
|
+
|
24
|
+
def url
|
25
|
+
"#{PublicStemcells::PUBLIC_STEMCELLS_BASE_URL}/#{@key}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def legacy?
|
29
|
+
@key.include?('legacy')
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'httpclient'
|
2
|
+
require 'rexml/document'
|
3
|
+
|
4
|
+
require 'bosh-bootstrap/public_stemcell'
|
5
|
+
|
6
|
+
module Bosh::Bootstrap
|
7
|
+
class PublicStemcells
|
8
|
+
PUBLIC_STEMCELLS_BASE_URL = 'https://bosh-jenkins-artifacts.s3.amazonaws.com'
|
9
|
+
|
10
|
+
def has_stemcell?(stemcell_filename)
|
11
|
+
all.any? { |stemcell| stemcell.name == stemcell_filename }
|
12
|
+
end
|
13
|
+
|
14
|
+
def find(stemcell_filename)
|
15
|
+
all.detect { |stemcell| stemcell.name == stemcell_filename }
|
16
|
+
end
|
17
|
+
|
18
|
+
def all
|
19
|
+
response = self.class.http_client.get(PUBLIC_STEMCELLS_BASE_URL, {'prefix' => 'bosh-stemcell'})
|
20
|
+
doc = REXML::Document.new(response.body)
|
21
|
+
stemcells_tags = parse_document(doc)
|
22
|
+
stemcells = parse_stemcells(stemcells_tags)
|
23
|
+
|
24
|
+
while is_truncated(doc)
|
25
|
+
response = self.class.http_client.get(PUBLIC_STEMCELLS_BASE_URL, {
|
26
|
+
'prefix' => 'bosh-stemcell',
|
27
|
+
'marker' => stemcells_tags.last.get_text('Key').value
|
28
|
+
})
|
29
|
+
|
30
|
+
doc = REXML::Document.new(response.body)
|
31
|
+
stemcells_tags = parse_document(doc)
|
32
|
+
stemcells += parse_stemcells(stemcells_tags)
|
33
|
+
end
|
34
|
+
|
35
|
+
stemcells
|
36
|
+
end
|
37
|
+
|
38
|
+
def recent
|
39
|
+
stemcell_varietes = all.reject(&:legacy?).group_by(&:variety).values
|
40
|
+
stemcell_varietes.map { |stemcells| stemcells.sort_by(&:version).last }
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def parse_document(doc)
|
46
|
+
REXML::XPath.match(doc, "/ListBucketResult/Contents[Key[text()[not(contains(.,'latest'))]]]")
|
47
|
+
end
|
48
|
+
|
49
|
+
def parse_stemcells(stemcell_tags)
|
50
|
+
stemcell_tags.map do |stemcell_tag|
|
51
|
+
stemcell_key = stemcell_tag.get_text('Key').value
|
52
|
+
stemcell_size = Integer(stemcell_tag.get_text('Size').value)
|
53
|
+
|
54
|
+
PublicStemcell.new(stemcell_key, stemcell_size)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def is_truncated(doc)
|
59
|
+
REXML::XPath.match(doc, "/ListBucketResult/IsTruncated").first.get_text == 'true'
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.http_client
|
63
|
+
@http_client ||= HTTPClient.new
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -12,12 +12,14 @@ describe "AWS deployment using gems and publish stemcells" do
|
|
12
12
|
|
13
13
|
# after { destroy_test_constructs }
|
14
14
|
|
15
|
-
|
15
|
+
xit "creates an EC2 inception/microbosh with the associated resources" do
|
16
16
|
# TODO remove this when finished initial development
|
17
17
|
require "fog"
|
18
18
|
Fog.mock!
|
19
19
|
|
20
20
|
setup_home_dir
|
21
|
+
puts `pwd`
|
22
|
+
puts `tree`
|
21
23
|
create_manifest
|
22
24
|
cli.deploy
|
23
25
|
|
data/spec/spec_helper.rb
CHANGED
@@ -39,21 +39,40 @@ def yaml_files_match(filename, expected_filename)
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def setup_home_dir
|
42
|
-
home_dir = File.expand_path("../../tmp/home", __FILE__)
|
43
42
|
FileUtils.rm_rf(home_dir)
|
44
43
|
FileUtils.mkdir_p(home_dir)
|
45
44
|
ENV['HOME'] = home_dir
|
46
45
|
end
|
47
46
|
|
47
|
+
def setup_work_dir
|
48
|
+
FileUtils.mkdir_p(work_dir)
|
49
|
+
FileUtils.chdir(work_dir)
|
50
|
+
end
|
51
|
+
|
52
|
+
def work_dir
|
53
|
+
File.join(home_dir, "workspace/deployments/microbosh")
|
54
|
+
end
|
55
|
+
|
56
|
+
def home_dir
|
57
|
+
File.expand_path("../../tmp/home", __FILE__)
|
58
|
+
end
|
59
|
+
|
48
60
|
# returns the file path to a file
|
49
61
|
# in the fake $HOME folder
|
50
62
|
def home_file(*path)
|
51
63
|
File.join(ENV['HOME'], *path)
|
52
64
|
end
|
53
65
|
|
66
|
+
# returns the file path to a file
|
67
|
+
# in the fake ~/workspace/deployments/microbosh folder
|
68
|
+
def work_file(*path)
|
69
|
+
File.join(work_dir, *path)
|
70
|
+
end
|
71
|
+
|
54
72
|
RSpec.configure do |c|
|
55
73
|
c.before(:each) do
|
56
74
|
setup_home_dir
|
75
|
+
setup_work_dir
|
57
76
|
end
|
58
77
|
|
59
78
|
c.color = true
|
@@ -6,8 +6,6 @@ describe Bosh::Bootstrap::Cli::Commands::Delete do
|
|
6
6
|
include StdoutCapture
|
7
7
|
include Bosh::Bootstrap::Cli::Helpers
|
8
8
|
|
9
|
-
let(:settings_dir) { File.expand_path("~/.microbosh") }
|
10
|
-
|
11
9
|
subject { Bosh::Bootstrap::Cli::Commands::Delete.new }
|
12
10
|
|
13
11
|
it "deletes microbosh VM" do
|
@@ -17,4 +15,4 @@ describe Bosh::Bootstrap::Cli::Commands::Delete do
|
|
17
15
|
subject.should_receive(:sh).with("bundle exec bosh -n micro delete")
|
18
16
|
subject.perform
|
19
17
|
end
|
20
|
-
end
|
18
|
+
end
|
@@ -7,7 +7,7 @@ describe Bosh::Bootstrap::Cli::Commands::Deploy do
|
|
7
7
|
include StdoutCapture
|
8
8
|
include Bosh::Bootstrap::Cli::Helpers
|
9
9
|
|
10
|
-
let(:settings_dir) {
|
10
|
+
let(:settings_dir) { work_dir }
|
11
11
|
|
12
12
|
before do
|
13
13
|
FileUtils.mkdir_p(@stemcells_dir = File.join(Dir.mktmpdir, "stemcells"))
|
@@ -45,8 +45,8 @@ describe Bosh::Bootstrap::Cli::Commands::Deploy do
|
|
45
45
|
|
46
46
|
# microbosh_provider & select_public_image_or_download_stemcell
|
47
47
|
microbosh_provider = instance_double("Bosh::Bootstrap::MicroboshProviders::AWS")
|
48
|
-
expect(microbosh_provider).to receive(:
|
49
|
-
expect(microbosh_provider).to receive(:
|
48
|
+
expect(microbosh_provider).to receive(:stemcell_path).exactly(1).times.and_return("")
|
49
|
+
expect(microbosh_provider).to receive(:stemcell_path).exactly(1).times.and_return("ami-123456")
|
50
50
|
expect(cmd).to receive(:microbosh_provider).and_return(microbosh_provider).exactly(3).times
|
51
51
|
|
52
52
|
# setup_keypair
|
@@ -91,8 +91,8 @@ describe Bosh::Bootstrap::Cli::Commands::Deploy do
|
|
91
91
|
|
92
92
|
# microbosh_provider & select_public_image_or_download_stemcell
|
93
93
|
microbosh_provider = instance_double("Bosh::Bootstrap::MicroboshProviders::OpenStack")
|
94
|
-
expect(microbosh_provider).to receive(:
|
95
|
-
expect(microbosh_provider).to receive(:
|
94
|
+
expect(microbosh_provider).to receive(:stemcell_path).exactly(1).times.and_return("")
|
95
|
+
expect(microbosh_provider).to receive(:stemcell_path).exactly(1).times.and_return("openstack.tgz")
|
96
96
|
expect(cmd).to receive(:microbosh_provider).and_return(microbosh_provider).exactly(3).times
|
97
97
|
|
98
98
|
# setup_keypair
|
@@ -6,15 +6,15 @@ describe Bosh::Bootstrap::Cli::Commands::SSH do
|
|
6
6
|
include StdoutCapture
|
7
7
|
include Bosh::Bootstrap::Cli::Helpers
|
8
8
|
|
9
|
-
let(:settings_dir) {
|
9
|
+
let(:settings_dir) { work_dir }
|
10
10
|
|
11
11
|
subject { Bosh::Bootstrap::Cli::Commands::SSH.new }
|
12
12
|
|
13
13
|
it "runs ssh" do
|
14
14
|
setting "address.ip", "1.2.3.4"
|
15
15
|
setting "key_pair.path", "/path/to/private/key"
|
16
|
-
subject.
|
17
|
-
subject.
|
16
|
+
expect(subject).to receive(:setup_keypair)
|
17
|
+
expect(subject).to receive(:sh).with("ssh -i /path/to/private/key vcap@1.2.3.4")
|
18
18
|
subject.perform
|
19
19
|
end
|
20
|
-
end
|
20
|
+
end
|
data/spec/unit/key_pair_spec.rb
CHANGED
@@ -3,13 +3,12 @@ require "bosh-bootstrap/key_pair"
|
|
3
3
|
describe Bosh::Bootstrap::KeyPair do
|
4
4
|
include Bosh::Bootstrap::Cli::Helpers::Settings
|
5
5
|
|
6
|
-
subject { Bosh::Bootstrap::KeyPair.new(
|
6
|
+
subject { Bosh::Bootstrap::KeyPair.new(work_dir, "keyname", "PRIVATE") }
|
7
7
|
|
8
8
|
it "creates local private key file" do
|
9
|
-
|
10
|
-
expect(File.exists?(home_file(".microbosh", "ssh", "keyname"))).to eq false
|
9
|
+
expect(File.exists?(work_file("ssh", "keyname"))).to eq false
|
11
10
|
subject.execute!
|
12
|
-
keyfile =
|
11
|
+
keyfile = work_file("ssh", "keyname")
|
13
12
|
expect(File.read(keyfile)).to eq "PRIVATE"
|
14
13
|
end
|
15
14
|
end
|
@@ -5,10 +5,9 @@ require "bosh-bootstrap/microbosh_providers/aws"
|
|
5
5
|
describe Bosh::Bootstrap::MicroboshProviders::AWS do
|
6
6
|
include Bosh::Bootstrap::Cli::Helpers::Settings
|
7
7
|
|
8
|
-
let(:microbosh_yml) { File.expand_path("~/.microbosh/deployments/micro_bosh.yml")}
|
9
|
-
let(:
|
10
|
-
let(:
|
11
|
-
let(:latest_stemcell_uri) { "http://bosh-jenkins-artifacts.s3.amazonaws.com/bosh-stemcell/aws/bosh-stemcell-latest-aws-xen-ubuntu.tgz" }
|
8
|
+
let(:microbosh_yml) { File.expand_path("~/.microbosh/deployments/micro_bosh.yml") }
|
9
|
+
let(:artifacts_base) { "https://bosh-jenkins-artifacts.s3.amazonaws.com" }
|
10
|
+
let(:http_client) { instance_double("HTTPClient") }
|
12
11
|
|
13
12
|
it "creates micro_bosh.yml manifest" do
|
14
13
|
setting "provider.name", "aws"
|
@@ -24,7 +23,7 @@ describe Bosh::Bootstrap::MicroboshProviders::AWS do
|
|
24
23
|
subject = Bosh::Bootstrap::MicroboshProviders::AWS.new(microbosh_yml, settings)
|
25
24
|
|
26
25
|
subject.create_microbosh_yml(settings)
|
27
|
-
File.
|
26
|
+
expect(File).to be_exists(microbosh_yml)
|
28
27
|
yaml_files_match(microbosh_yml, spec_asset("microbosh_yml/micro_bosh.aws_ec2.yml"))
|
29
28
|
end
|
30
29
|
|
@@ -43,7 +42,7 @@ describe Bosh::Bootstrap::MicroboshProviders::AWS do
|
|
43
42
|
subject = Bosh::Bootstrap::MicroboshProviders::AWS.new(microbosh_yml, settings)
|
44
43
|
|
45
44
|
subject.create_microbosh_yml(settings)
|
46
|
-
File.
|
45
|
+
expect(File).to be_exists(microbosh_yml)
|
47
46
|
yaml_files_match(microbosh_yml, spec_asset("microbosh_yml/micro_bosh.aws_ec2.us-west-2a.yml"))
|
48
47
|
end
|
49
48
|
|
@@ -52,24 +51,52 @@ describe Bosh::Bootstrap::MicroboshProviders::AWS do
|
|
52
51
|
setting "provider.name", "aws"
|
53
52
|
end
|
54
53
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
54
|
+
before(:each) do
|
55
|
+
body = <<-XML
|
56
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
57
|
+
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
|
58
|
+
<Name>bosh-jenkins-artifacts</Name>
|
59
|
+
<Prefix>bosh-stemcell</Prefix>
|
60
|
+
<Marker/>
|
61
|
+
<MaxKeys>1000</MaxKeys>
|
62
|
+
<IsTruncated>false</IsTruncated>
|
63
|
+
<Contents>
|
64
|
+
<Key>bosh-stemcell/aws/bosh-stemcell-2719-aws-xen-centos-go_agent.tgz</Key>
|
65
|
+
<LastModified>2014-09-22T04:59:16.000Z</LastModified>
|
66
|
+
<ETag>"7621366406eeb0a9d88242a664206cc3"</ETag>
|
67
|
+
<Size>557556059</Size>
|
68
|
+
<StorageClass>STANDARD</StorageClass>
|
69
|
+
</Contents>
|
70
|
+
<Contents>
|
71
|
+
<Key>bosh-stemcell/aws/bosh-stemcell-2719-aws-xen-ubuntu-trusty-go_agent.tgz</Key>
|
72
|
+
<LastModified>2014-09-22T04:59:16.000Z</LastModified>
|
73
|
+
<ETag>"18cb27adc889e71c97e39b1c57f85027"</ETag>
|
74
|
+
<Size>467288141</Size>
|
75
|
+
<StorageClass>STANDARD</StorageClass>
|
76
|
+
</Contents>
|
77
|
+
<Contents>
|
78
|
+
<Key>bosh-stemcell/aws/light-bosh-stemcell-2719-aws-xen-ubuntu-trusty-go_agent.tgz</Key>
|
79
|
+
<LastModified>2014-09-22T04:59:16.000Z</LastModified>
|
80
|
+
<ETag>"18cb27adc889e71c97e39b1c57f85027"</ETag>
|
81
|
+
<Size>467288141</Size>
|
82
|
+
<StorageClass>STANDARD</StorageClass>
|
83
|
+
</Contents>
|
84
|
+
</ListBucketResult>
|
85
|
+
XML
|
86
|
+
expect(Bosh::Bootstrap::PublicStemcells).to receive(:http_client).and_return(http_client)
|
87
|
+
expect(http_client).to receive(:get).
|
88
|
+
with(artifacts_base, {'prefix' => 'bosh-stemcell'}).
|
89
|
+
and_return(OpenStruct.new(body: body))
|
61
90
|
end
|
62
91
|
|
63
|
-
it "
|
92
|
+
it "light stemcell if us-east-1 target region" do
|
64
93
|
setting "provider.region", "us-east-1"
|
65
|
-
FakeWeb.register_uri(:get, latest_ami_uri, [
|
66
|
-
{ status: 404 },
|
67
|
-
{ body: "ami-234567"}
|
68
|
-
])
|
69
94
|
|
70
95
|
subject = Bosh::Bootstrap::MicroboshProviders::AWS.new(microbosh_yml, settings)
|
71
|
-
|
72
|
-
|
96
|
+
|
97
|
+
latest_stemcell_uri = "#{artifacts_base}/bosh-stemcell/aws/light-bosh-stemcell-2719-aws-xen-ubuntu-trusty-go_agent.tgz"
|
98
|
+
expect(subject).to receive(:sh).with("curl -O '#{latest_stemcell_uri}'")
|
99
|
+
expect(subject.stemcell_path).to match /light-bosh-stemcell-2719-aws-xen-ubuntu-trusty-go_agent.tgz$/
|
73
100
|
end
|
74
101
|
|
75
102
|
xit "errors if AMI not available and not running within target region" do
|
@@ -78,10 +105,15 @@ describe Bosh::Bootstrap::MicroboshProviders::AWS do
|
|
78
105
|
|
79
106
|
it "downloads latest stemcell and returns path if running in target AWS region" do
|
80
107
|
setting "provider.region", "us-west-2"
|
81
|
-
|
108
|
+
|
82
109
|
subject = Bosh::Bootstrap::MicroboshProviders::AWS.new(microbosh_yml, settings)
|
83
|
-
|
84
|
-
|
110
|
+
|
111
|
+
latest_stemcell_uri = "#{artifacts_base}/bosh-stemcell/aws/bosh-stemcell-2719-aws-xen-ubuntu-trusty-go_agent.tgz"
|
112
|
+
|
113
|
+
expect(subject).to receive(:sh).with("curl -O '#{latest_stemcell_uri}'")
|
114
|
+
stemcell_path = subject.stemcell_path
|
115
|
+
expect(stemcell_path).to match /bosh-stemcell-2719-aws-xen-ubuntu-trusty-go_agent.tgz$/
|
116
|
+
expect(stemcell_path).to_not match /light-bosh-stemcell-2719-aws-xen-ubuntu-trusty-go_agent.tgz$/
|
85
117
|
end
|
86
118
|
end
|
87
119
|
end
|
data/spec/unit/microbosh_spec.rb
CHANGED
@@ -3,18 +3,18 @@ require "readwritesettings"
|
|
3
3
|
describe Bosh::Bootstrap::Microbosh do
|
4
4
|
include Bosh::Bootstrap::Cli::Helpers::Settings
|
5
5
|
|
6
|
-
let(:
|
7
|
-
let(:base_path) { File.expand_path("
|
6
|
+
let(:stemcell_path) { "/path/to/stemcell.tgz" }
|
7
|
+
let(:base_path) { File.expand_path("/tmp/bootstrap") }
|
8
8
|
let(:settings_dir) { base_path }
|
9
9
|
let(:microbosh_provider) { instance_double("Bosh::Bootstrap::MicroboshProviders::AWS", create_microbosh_yml: {}) }
|
10
10
|
subject { Bosh::Bootstrap::Microbosh.new(base_path, microbosh_provider) }
|
11
11
|
|
12
12
|
it "deploys new microbosh" do
|
13
13
|
setting "bosh.name", "test-bosh"
|
14
|
-
setting "bosh.
|
15
|
-
subject.
|
16
|
-
subject.
|
17
|
-
subject.
|
14
|
+
setting "bosh.stemcell_path", stemcell_path
|
15
|
+
expect(subject).to receive(:sh).with("bundle install")
|
16
|
+
expect(subject).to receive(:sh).with("bundle exec bosh micro deployment test-bosh")
|
17
|
+
expect(subject).to receive(:sh).with("bundle exec bosh -n micro deploy --update-if-exists #{stemcell_path}")
|
18
18
|
subject.deploy(settings)
|
19
19
|
end
|
20
20
|
|
@@ -13,15 +13,30 @@ describe Bosh::Bootstrap::NetworkProviders::AWS do
|
|
13
13
|
expect(Bosh::Bootstrap::NetworkProviders.provider_class("aws")).to eq(subject.class)
|
14
14
|
end
|
15
15
|
|
16
|
-
it "creates security groups it needs" do
|
16
|
+
it "creates EC2 security groups it needs" do
|
17
17
|
expected_groups = [
|
18
18
|
["ssh", "ssh", ports: 22],
|
19
19
|
["dns_server", "dns_server", ports: { protocol: "udp", ports: (53..53) }],
|
20
20
|
["bosh", "bosh", ports: [4222, 6868, 25250, 25555, 25777]]
|
21
21
|
]
|
22
22
|
expected_groups.each do |security_group_name, description, ports|
|
23
|
-
expect(cyoi_provider_client).to receive(:create_security_group).with(security_group_name, description, ports)
|
23
|
+
expect(cyoi_provider_client).to receive(:create_security_group).with(security_group_name, description, ports, {})
|
24
24
|
end
|
25
|
-
subject.perform
|
25
|
+
subject.perform(settings)
|
26
26
|
end
|
27
|
+
|
28
|
+
it "creates VPC security groups it needs" do
|
29
|
+
setting "address.vpc_id", "vpc-id-1234"
|
30
|
+
expected_groups = [
|
31
|
+
["ssh", "ssh", ports: 22],
|
32
|
+
["dns_server", "dns_server", ports: { protocol: "udp", ports: (53..53) }],
|
33
|
+
["bosh", "bosh", ports: [4222, 6868, 25250, 25555, 25777]]
|
34
|
+
]
|
35
|
+
expected_groups.each do |security_group_name, description, ports|
|
36
|
+
expect(cyoi_provider_client).to receive(:create_security_group).
|
37
|
+
with(security_group_name, description, ports, {vpc_id: "vpc-id-1234"})
|
38
|
+
end
|
39
|
+
subject.perform(settings)
|
40
|
+
end
|
41
|
+
|
27
42
|
end
|
@@ -21,6 +21,6 @@ describe Bosh::Bootstrap::NetworkProviders::OpenStack do
|
|
21
21
|
expected_groups.each do |security_group_name, description, ports|
|
22
22
|
expect(provider_client).to receive(:create_security_group).with(security_group_name, description, ports)
|
23
23
|
end
|
24
|
-
subject.perform
|
24
|
+
subject.perform(settings)
|
25
25
|
end
|
26
26
|
end
|
data/spec/unit/network_spec.rb
CHANGED
@@ -6,13 +6,13 @@ describe Bosh::Bootstrap::Network do
|
|
6
6
|
let(:aws_cyoi_provider_client) { instance_double("Cyoi::Providers::Clients::AwsProviderClient") }
|
7
7
|
|
8
8
|
it "uses NetworkProvider if available" do
|
9
|
-
network = Bosh::Bootstrap::Network.new("aws", aws_cyoi_provider_client)
|
9
|
+
network = Bosh::Bootstrap::Network.new("aws", aws_cyoi_provider_client, settings)
|
10
10
|
expect(aws_cyoi_provider_client).to receive(:create_security_group).exactly(3).times
|
11
11
|
network.deploy
|
12
12
|
end
|
13
13
|
|
14
14
|
it "does nothing if no NetworkProvider for the infrastructure" do
|
15
|
-
network = Bosh::Bootstrap::Network.new("vsphere", nil)
|
15
|
+
network = Bosh::Bootstrap::Network.new("vsphere", nil, settings)
|
16
16
|
network.deploy
|
17
17
|
end
|
18
18
|
end
|
metadata
CHANGED
@@ -1,139 +1,153 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bosh-bootstrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dr Nic Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cyoi
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.11'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.11'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: fog
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.11'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.11'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: readwritesettings
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '3.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: thor
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0.18'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0.18'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: httpclient
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 2.4.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.4.0
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: redcard
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- -
|
87
|
+
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
89
|
version: '0'
|
76
90
|
type: :runtime
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- -
|
94
|
+
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rbvmomi
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- -
|
101
|
+
- - ">="
|
88
102
|
- !ruby/object:Gem::Version
|
89
103
|
version: '0'
|
90
104
|
type: :runtime
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- -
|
108
|
+
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: rake
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
|
-
- -
|
115
|
+
- - ">="
|
102
116
|
- !ruby/object:Gem::Version
|
103
117
|
version: '0'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
|
-
- -
|
122
|
+
- - ">="
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: rspec-fire
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
|
-
- -
|
129
|
+
- - ">="
|
116
130
|
- !ruby/object:Gem::Version
|
117
131
|
version: '0'
|
118
132
|
type: :development
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
|
-
- -
|
136
|
+
- - ">="
|
123
137
|
- !ruby/object:Gem::Version
|
124
138
|
version: '0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: fakeweb
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
|
-
- -
|
143
|
+
- - ">="
|
130
144
|
- !ruby/object:Gem::Version
|
131
145
|
version: '0'
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
|
-
- -
|
150
|
+
- - ">="
|
137
151
|
- !ruby/object:Gem::Version
|
138
152
|
version: '0'
|
139
153
|
description: Bootstrap a micro bosh universe from one CLI
|
@@ -144,9 +158,9 @@ executables:
|
|
144
158
|
extensions: []
|
145
159
|
extra_rdoc_files: []
|
146
160
|
files:
|
147
|
-
- .gitignore
|
148
|
-
- .rspec
|
149
|
-
- .travis.yml
|
161
|
+
- ".gitignore"
|
162
|
+
- ".rspec"
|
163
|
+
- ".travis.yml"
|
150
164
|
- ChangeLog.md
|
151
165
|
- Gemfile
|
152
166
|
- Guardfile
|
@@ -177,6 +191,8 @@ files:
|
|
177
191
|
- lib/bosh-bootstrap/network_providers/aws.rb
|
178
192
|
- lib/bosh-bootstrap/network_providers/dummy.rb
|
179
193
|
- lib/bosh-bootstrap/network_providers/openstack.rb
|
194
|
+
- lib/bosh-bootstrap/public_stemcell.rb
|
195
|
+
- lib/bosh-bootstrap/public_stemcells.rb
|
180
196
|
- lib/bosh-bootstrap/thor_cli.rb
|
181
197
|
- lib/bosh-bootstrap/version.rb
|
182
198
|
- lib/bosh/cli/commands/bootstrap.rb
|
@@ -217,17 +233,17 @@ require_paths:
|
|
217
233
|
- lib
|
218
234
|
required_ruby_version: !ruby/object:Gem::Requirement
|
219
235
|
requirements:
|
220
|
-
- -
|
236
|
+
- - ">="
|
221
237
|
- !ruby/object:Gem::Version
|
222
238
|
version: '1.9'
|
223
239
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
224
240
|
requirements:
|
225
|
-
- -
|
241
|
+
- - ">="
|
226
242
|
- !ruby/object:Gem::Version
|
227
243
|
version: '0'
|
228
244
|
requirements: []
|
229
245
|
rubyforge_project:
|
230
|
-
rubygems_version: 2.2.
|
246
|
+
rubygems_version: 2.2.1
|
231
247
|
signing_key:
|
232
248
|
specification_version: 4
|
233
249
|
summary: bosh-bootstrap configures and deploys a microbosh deployed on either AWS
|