bosh-bootstrap 0.10.2 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (162) hide show
  1. data/.rspec +1 -0
  2. data/.travis.yml +0 -1
  3. data/ChangeLog.md +23 -4
  4. data/Gemfile +5 -2
  5. data/Guardfile +2 -0
  6. data/README.md +209 -197
  7. data/TODO.md +55 -0
  8. data/bosh-bootstrap.gemspec +5 -12
  9. data/lib/bosh/cli/commands/bootstrap.rb +42 -0
  10. data/lib/bosh-bootstrap/cli/commands/delete.rb +26 -0
  11. data/lib/bosh-bootstrap/cli/commands/deploy.rb +89 -0
  12. data/lib/bosh-bootstrap/cli/commands/ssh.rb +32 -0
  13. data/lib/bosh-bootstrap/cli/helpers/bundle.rb +12 -0
  14. data/lib/bosh-bootstrap/cli/helpers/interactions.rb +15 -0
  15. data/lib/bosh-bootstrap/cli/helpers/settings.rb +61 -0
  16. data/lib/bosh-bootstrap/cli/helpers.rb +11 -0
  17. data/lib/bosh-bootstrap/key_pair.rb +21 -0
  18. data/lib/bosh-bootstrap/microbosh.rb +74 -0
  19. data/lib/bosh-bootstrap/microbosh_providers/aws.rb +104 -0
  20. data/lib/bosh-bootstrap/microbosh_providers/base.rb +50 -0
  21. data/lib/bosh-bootstrap/microbosh_providers/openstack.rb +61 -0
  22. data/lib/bosh-bootstrap/microbosh_providers/vsphere.rb +78 -0
  23. data/lib/bosh-bootstrap/microbosh_providers.rb +11 -0
  24. data/lib/bosh-bootstrap/network.rb +33 -0
  25. data/lib/bosh-bootstrap/network_providers/aws.rb +28 -0
  26. data/lib/bosh-bootstrap/network_providers/dummy.rb +10 -0
  27. data/lib/bosh-bootstrap/network_providers/openstack.rb +28 -0
  28. data/lib/bosh-bootstrap/network_providers.rb +11 -0
  29. data/lib/bosh-bootstrap/version.rb +1 -1
  30. data/lib/bosh-bootstrap.rb +3 -4
  31. data/spec/assets/microbosh_yml/micro_bosh.aws_ec2.yml +37 -0
  32. data/spec/assets/microbosh_yml/micro_bosh.aws_vpc.yml +39 -0
  33. data/spec/assets/microbosh_yml/micro_bosh.openstack.yml +30 -0
  34. data/spec/assets/microbosh_yml/micro_bosh.vsphere.yml +34 -0
  35. data/spec/integration/aws/aws_ec2_basic_spec.rb +39 -0
  36. data/spec/integration/aws/aws_helpers.rb +8 -61
  37. data/spec/spec_helper.rb +8 -3
  38. data/spec/support/capture_stdout.rb +18 -0
  39. data/spec/unit/cli/bootstrap_spec.rb +41 -0
  40. data/spec/unit/commands/delete_spec.rb +20 -0
  41. data/spec/unit/commands/deploy_spec.rb +64 -0
  42. data/spec/unit/commands/ssh_spec.rb +19 -0
  43. data/spec/unit/key_pair_spec.rb +13 -0
  44. data/spec/unit/microbosh_providers/aws_spec.rb +68 -0
  45. data/spec/unit/microbosh_providers/openstack_spec.rb +27 -0
  46. data/spec/unit/microbosh_providers/vsphere_spec.rb +42 -0
  47. data/spec/unit/microbosh_spec.rb +27 -0
  48. data/spec/unit/network_providers/aws_spec.rb +29 -0
  49. data/spec/unit/network_providers/openstack_spec.rb +29 -0
  50. data/spec/unit/network_spec.rb +17 -0
  51. metadata +71 -235
  52. data/CleanupCi.md +0 -8
  53. data/bin/bosh-bootstrap +0 -8
  54. data/docs/README.md +0 -3
  55. data/docs/devstack-openstack-tutorial.md +0 -215
  56. data/lib/bosh/providers/README.md +0 -5
  57. data/lib/bosh/providers/aws.rb +0 -258
  58. data/lib/bosh/providers/base_provider.rb +0 -48
  59. data/lib/bosh/providers/openstack.rb +0 -79
  60. data/lib/bosh/providers.rb +0 -21
  61. data/lib/bosh-bootstrap/cli.rb +0 -1347
  62. data/lib/bosh-bootstrap/commander/README.md +0 -47
  63. data/lib/bosh-bootstrap/commander/command.rb +0 -25
  64. data/lib/bosh-bootstrap/commander/commands.rb +0 -80
  65. data/lib/bosh-bootstrap/commander/local_server.rb +0 -68
  66. data/lib/bosh-bootstrap/commander/remote_script_command.rb +0 -51
  67. data/lib/bosh-bootstrap/commander/remote_server.rb +0 -137
  68. data/lib/bosh-bootstrap/commander/upload_command.rb +0 -17
  69. data/lib/bosh-bootstrap/commander.rb +0 -9
  70. data/lib/bosh-bootstrap/helpers/fog_setup.rb +0 -50
  71. data/lib/bosh-bootstrap/helpers/settings.rb +0 -99
  72. data/lib/bosh-bootstrap/helpers/settings_setter.rb +0 -41
  73. data/lib/bosh-bootstrap/helpers.rb +0 -3
  74. data/lib/bosh-bootstrap/stages/stage_micro_bosh_delete/bosh_micro_delete +0 -19
  75. data/lib/bosh-bootstrap/stages/stage_micro_bosh_delete.rb +0 -90
  76. data/lib/bosh-bootstrap/stages/stage_micro_bosh_deploy/bosh_micro_deploy +0 -79
  77. data/lib/bosh-bootstrap/stages/stage_micro_bosh_deploy/install_key_pair_for_user +0 -23
  78. data/lib/bosh-bootstrap/stages/stage_micro_bosh_deploy.rb +0 -146
  79. data/lib/bosh-bootstrap/stages/stage_micro_bosh_download/download_micro_bosh_stemcell +0 -93
  80. data/lib/bosh-bootstrap/stages/stage_micro_bosh_download.rb +0 -139
  81. data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/configure_git +0 -25
  82. data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/create_vcap_user +0 -79
  83. data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_base_packages +0 -30
  84. data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_bosh +0 -11
  85. data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_bosh_plugins +0 -25
  86. data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_hub +0 -26
  87. data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_ruby +0 -30
  88. data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_useful_gems +0 -29
  89. data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/validate_bosh_deployer +0 -18
  90. data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm.rb +0 -69
  91. data/lib/bosh-bootstrap/stages/stage_salted_password/convert_salted_password +0 -11
  92. data/lib/bosh-bootstrap/stages/stage_salted_password.rb +0 -51
  93. data/lib/bosh-bootstrap/stages/stage_setup_new_bosh/setup_bosh_user +0 -29
  94. data/lib/bosh-bootstrap/stages/stage_setup_new_bosh.rb +0 -51
  95. data/lib/bosh-bootstrap/stages/stage_validate_inception_vm/validate_ubuntu +0 -6
  96. data/lib/bosh-bootstrap/stages/stage_validate_inception_vm.rb +0 -39
  97. data/lib/bosh-bootstrap/stages.rb +0 -10
  98. data/spec/assets/bosh/public_stemcells/aws_micro.out +0 -7
  99. data/spec/assets/micro_bosh_yml/micro_bosh.aws_ec2.yml +0 -35
  100. data/spec/assets/micro_bosh_yml/micro_bosh.aws_vpc.yml +0 -37
  101. data/spec/integration/aws/aws_basic_spec.rb +0 -39
  102. data/spec/integration/aws/aws_edge_prebuilt_ami_spec.rb +0 -46
  103. data/spec/integration/aws/aws_edge_prebuilt_spec.rb +0 -46
  104. data/spec/integration/aws/aws_edge_spec.rb +0 -45
  105. data/spec/unit/aws_spec.rb +0 -177
  106. data/spec/unit/bosh/providers/aws_spec.rb +0 -174
  107. data/spec/unit/cli_spec.rb +0 -134
  108. data/spec/unit/cli_ssh_spec.rb +0 -95
  109. data/spec/unit/cli_upgrade_inception_spec.rb +0 -29
  110. data/spec/unit/settings_setter_spec.rb +0 -29
  111. data/vendor/cache/POpen4-0.1.4.gem +0 -0
  112. data/vendor/cache/Platform-0.4.0.gem +0 -0
  113. data/vendor/cache/activesupport-3.2.8.gem +0 -0
  114. data/vendor/cache/awesome_print-1.1.0.gem +0 -0
  115. data/vendor/cache/aws-s3-0.6.3.gem +0 -0
  116. data/vendor/cache/blobstore_client-0.4.0.gem +0 -0
  117. data/vendor/cache/bosh_cli-1.0.3.gem +0 -0
  118. data/vendor/cache/bosh_common-0.5.4.gem +0 -0
  119. data/vendor/cache/builder-3.2.0.gem +0 -0
  120. data/vendor/cache/coderay-1.0.8.gem +0 -0
  121. data/vendor/cache/diff-lcs-1.1.3.gem +0 -0
  122. data/vendor/cache/escape-0.0.4.gem +0 -0
  123. data/vendor/cache/excon-0.20.1.gem +0 -0
  124. data/vendor/cache/fog-1.8.0.gem +0 -0
  125. data/vendor/cache/formatador-0.2.4.gem +0 -0
  126. data/vendor/cache/guard-1.6.2.gem +0 -0
  127. data/vendor/cache/guard-rspec-2.4.0.gem +0 -0
  128. data/vendor/cache/highline-1.6.18.gem +0 -0
  129. data/vendor/cache/httpclient-2.2.4.gem +0 -0
  130. data/vendor/cache/i18n-0.6.1.gem +0 -0
  131. data/vendor/cache/json_pure-1.6.8.gem +0 -0
  132. data/vendor/cache/listen-0.7.2.gem +0 -0
  133. data/vendor/cache/log4r-1.1.10.gem +0 -0
  134. data/vendor/cache/lumberjack-1.0.2.gem +0 -0
  135. data/vendor/cache/method_source-0.8.1.gem +0 -0
  136. data/vendor/cache/mime-types-1.22.gem +0 -0
  137. data/vendor/cache/multi_json-1.1.0.gem +0 -0
  138. data/vendor/cache/net-scp-1.0.4.gem +0 -0
  139. data/vendor/cache/net-ssh-2.2.2.gem +0 -0
  140. data/vendor/cache/net-ssh-gateway-1.1.0.gem +0 -0
  141. data/vendor/cache/netaddr-1.5.0.gem +0 -0
  142. data/vendor/cache/nokogiri-1.5.9.gem +0 -0
  143. data/vendor/cache/open4-1.3.0.gem +0 -0
  144. data/vendor/cache/progressbar-0.9.2.gem +0 -0
  145. data/vendor/cache/pry-0.9.11.4-java.gem +0 -0
  146. data/vendor/cache/pry-0.9.11.4.gem +0 -0
  147. data/vendor/cache/rake-10.0.3.gem +0 -0
  148. data/vendor/cache/rb-fsevent-0.9.3.gem +0 -0
  149. data/vendor/cache/redcard-1.0.0.gem +0 -0
  150. data/vendor/cache/rspec-2.12.0.gem +0 -0
  151. data/vendor/cache/rspec-core-2.12.2.gem +0 -0
  152. data/vendor/cache/rspec-expectations-2.12.1.gem +0 -0
  153. data/vendor/cache/rspec-mocks-2.12.2.gem +0 -0
  154. data/vendor/cache/ruby-atmos-pure-1.0.5.gem +0 -0
  155. data/vendor/cache/ruby-hmac-0.4.0.gem +0 -0
  156. data/vendor/cache/settingslogic-2.0.9.gem +0 -0
  157. data/vendor/cache/slop-3.4.3.gem +0 -0
  158. data/vendor/cache/spoon-0.0.1.gem +0 -0
  159. data/vendor/cache/terminal-table-1.4.5.gem +0 -0
  160. data/vendor/cache/thor-0.17.0.gem +0 -0
  161. data/vendor/cache/uuidtools-2.1.3.gem +0 -0
  162. data/vendor/cache/xml-simple-1.1.2.gem +0 -0
@@ -0,0 +1,64 @@
1
+ # Copyright (c) 2012-2013 Stark & Wayne, LLC
2
+
3
+ require "bosh-bootstrap/cli/commands/deploy"
4
+ require "cyoi/providers/clients/aws_provider_client"
5
+ describe Bosh::Bootstrap::Cli::Commands::Deploy do
6
+ include StdoutCapture
7
+ include Bosh::Bootstrap::Cli::Helpers
8
+
9
+ let(:settings_dir) { File.expand_path("~/.microbosh") }
10
+
11
+ before do
12
+ FileUtils.mkdir_p(@stemcells_dir = File.join(Dir.mktmpdir, "stemcells"))
13
+ FileUtils.mkdir_p(@cache_dir = File.join(Dir.mktmpdir, "cache"))
14
+ end
15
+
16
+ let(:cmd) { Bosh::Bootstrap::Cli::Commands::Deploy.new }
17
+
18
+ # * select_provider
19
+ # * select_or_provision_public_networking # public_ip or ip/network/gateway
20
+ # * select_public_image_or_download_stemcell # download if stemcell
21
+ # * create_microbosh_manifest
22
+ # * microbosh_deploy
23
+ describe "aws" do
24
+ it "deploy creates provisions IP address micro_bosh.yml, discovers/downloads stemcell/AMI, runs 'bosh micro deploy'" do
25
+ setting "provider.name", "aws"
26
+ setting "key_pair.name", "test-bosh"
27
+ setting "key_pair.private_key", "PRIVATE"
28
+
29
+ provider = double(Cyoi::Cli::Provider)
30
+ provider.stub(:execute!)
31
+ Cyoi::Cli::Provider.should_receive(:new).with([settings_dir]).and_return(provider)
32
+
33
+ provider_client = double(Cyoi::Providers::Clients::AwsProviderClient)
34
+ provider_client.stub(:create_security_group)
35
+ cmd.stub(:provider_client).and_return(provider_client)
36
+
37
+ address = double(Cyoi::Cli::Address)
38
+ address.stub(:execute!)
39
+ Cyoi::Cli::Address.should_receive(:new).with([settings_dir]).and_return(address)
40
+
41
+ microbosh_provider = stub()
42
+ microbosh_provider.should_receive(:stemcell).exactly(1).times.and_return("")
43
+ microbosh_provider.should_receive(:stemcell).exactly(1).times.and_return("ami-123456")
44
+ cmd.stub(:microbosh_provider).and_return(microbosh_provider)
45
+
46
+ key_pair = double(Cyoi::Cli::KeyPair)
47
+ key_pair.stub(:execute!)
48
+ Cyoi::Cli::KeyPair.should_receive(:new).with(["test-bosh", settings_dir]).and_return(key_pair)
49
+
50
+ keypair = double(Bosh::Bootstrap::KeyPair)
51
+ keypair.should_receive(:execute!)
52
+ keypair.should_receive(:path).and_return(home_file(".microbosh/ssh/test-bosh"))
53
+ Bosh::Bootstrap::KeyPair.stub(:new).with(settings_dir, "test-bosh", "PRIVATE").and_return(keypair)
54
+
55
+ microbosh = double(Bosh::Bootstrap::Microbosh)
56
+ microbosh.stub(:deploy)
57
+ Bosh::Bootstrap::Microbosh.stub(:new).with(settings_dir, microbosh_provider).and_return(microbosh)
58
+
59
+ capture_stdout { cmd.perform }
60
+ end
61
+ it "delete does nothing if not targetting a deployment"
62
+ it "delete runs 'bosh micro delete' & releases IP address; updates settings"
63
+ end
64
+ end
@@ -0,0 +1,19 @@
1
+ # Copyright (c) 2012-2013 Stark & Wayne, LLC
2
+
3
+ require "bosh-bootstrap/cli/commands/ssh"
4
+
5
+ describe Bosh::Bootstrap::Cli::Commands::SSH do
6
+ include StdoutCapture
7
+ include Bosh::Bootstrap::Cli::Helpers
8
+
9
+ let(:settings_dir) { File.expand_path("~/.microbosh") }
10
+
11
+ subject { Bosh::Bootstrap::Cli::Commands::SSH.new }
12
+
13
+ it "runs ssh" do
14
+ setting "address.ip", "1.2.3.4"
15
+ setting "key_pair.path", "/path/to/private/key"
16
+ subject.should_receive(:sh).with("ssh -i /path/to/private/key vcap@1.2.3.4")
17
+ subject.perform
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ describe Bosh::Bootstrap::KeyPair do
2
+ include Bosh::Bootstrap::Cli::Helpers::Settings
3
+
4
+ subject { Bosh::Bootstrap::KeyPair.new(settings_dir, "keyname", "PRIVATE") }
5
+
6
+ it "creates local private key file" do
7
+ setup_home_dir
8
+ File.should_not be_exists(home_file(".microbosh", "ssh", "keyname"))
9
+ subject.execute!
10
+ keyfile = home_file(".microbosh", "ssh", "keyname")
11
+ File.read(keyfile).should == "PRIVATE"
12
+ end
13
+ end
@@ -0,0 +1,68 @@
1
+ require "readwritesettings"
2
+ require "fakeweb"
3
+ require "bosh-bootstrap/microbosh_providers/aws"
4
+
5
+ describe Bosh::Bootstrap::MicroboshProviders::AWS do
6
+ include Bosh::Bootstrap::Cli::Helpers::Settings
7
+
8
+ let(:microbosh_yml) { File.expand_path("~/.microbosh/deployments/micro_bosh.yml")}
9
+ let(:aws_jenkins_bucket) { "bosh-jenkins-artifacts" }
10
+ let(:latest_ami_uri) { "http://#{aws_jenkins_bucket}.s3.amazonaws.com/last_successful_micro-bosh-stemcell-aws_ami_us-east-1" }
11
+ let(:latest_stemcell_uri) { "http://#{aws_jenkins_bucket}.s3.amazonaws.com/last_successful_micro-bosh-stemcell-aws.tgz" }
12
+
13
+ it "creates micro_bosh.yml manifest" do
14
+ setting "provider.name", "aws"
15
+ setting "provider.region", "us-west-2"
16
+ setting "provider.credentials.aws_access_key_id", "ACCESS"
17
+ setting "provider.credentials.aws_secret_access_key", "SECRET"
18
+ setting "address.ip", "1.2.3.4"
19
+ setting "key_pair.path", "~/.microbosh/ssh/test-bosh"
20
+ setting "bosh.name", "test-bosh"
21
+ setting "bosh.salted_password", "salted_password"
22
+ setting "bosh.persistent_disk", 16384
23
+
24
+ subject = Bosh::Bootstrap::MicroboshProviders::AWS.new(microbosh_yml, settings)
25
+
26
+ subject.create_microbosh_yml(settings)
27
+ File.should be_exists(microbosh_yml)
28
+ files_match(microbosh_yml, spec_asset("microbosh_yml/micro_bosh.aws_ec2.yml"))
29
+ end
30
+
31
+ describe "stemcell" do
32
+ before do
33
+ setting "provider.name", "aws"
34
+ end
35
+
36
+ it "is an AMI if us-east-1 target region" do
37
+ setting "provider.region", "us-east-1"
38
+ FakeWeb.register_uri(:get, latest_ami_uri, body: "ami-234567")
39
+
40
+ subject = Bosh::Bootstrap::MicroboshProviders::AWS.new(microbosh_yml, settings)
41
+ subject.stemcell.should == "ami-234567"
42
+ end
43
+
44
+ it "retries to get AMI if initially fails" do
45
+ setting "provider.region", "us-east-1"
46
+ FakeWeb.register_uri(:get, latest_ami_uri, [
47
+ { status: 404 },
48
+ { body: "ami-234567"}
49
+ ])
50
+
51
+ subject = Bosh::Bootstrap::MicroboshProviders::AWS.new(microbosh_yml, settings)
52
+ subject.stemcell.should == ""
53
+ subject.stemcell.should == "ami-234567"
54
+ end
55
+
56
+ xit "errors if AMI not available and not running within target region" do
57
+ setting "provider.region", "us-west-2"
58
+ end
59
+
60
+ it "downloads latest stemcell and returns path if running in target AWS region" do
61
+ setting "provider.region", "us-west-2"
62
+
63
+ subject = Bosh::Bootstrap::MicroboshProviders::AWS.new(microbosh_yml, settings)
64
+ subject.stub(:sh).with("curl -O '#{latest_stemcell_uri}'")
65
+ subject.stemcell.should =~ %r{deployments/last_successful_micro-bosh-stemcell-aws.tgz$}
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,27 @@
1
+ require "readwritesettings"
2
+ require "bosh-bootstrap/microbosh_providers/openstack"
3
+
4
+ describe Bosh::Bootstrap::MicroboshProviders::OpenStack do
5
+ include Bosh::Bootstrap::Cli::Helpers::Settings
6
+
7
+ let(:microbosh_yml) { File.expand_path("~/.microbosh/deployments/micro_bosh.yml")}
8
+
9
+ it "creates micro_bosh.yml manifest" do
10
+ setting "provider.name", "openstack"
11
+ setting "provider.credentials.openstack_auth_url", "http://10.0.0.2:5000/v2.0/tokens"
12
+ setting "provider.credentials.openstack_username", "USER"
13
+ setting "provider.credentials.openstack_api_key", "PASSWORD"
14
+ setting "provider.credentials.openstack_tenant", "TENANT"
15
+ setting "address.ip", "1.2.3.4"
16
+ setting "key_pair.path", "~/.microbosh/ssh/test-bosh"
17
+ setting "bosh.name", "test-bosh"
18
+ setting "bosh.salted_password", "salted_password"
19
+ setting "bosh.persistent_disk", 4096
20
+
21
+ subject = Bosh::Bootstrap::MicroboshProviders::OpenStack.new(microbosh_yml, settings)
22
+
23
+ subject.create_microbosh_yml(settings)
24
+ File.should be_exists(microbosh_yml)
25
+ files_match(microbosh_yml, spec_asset("microbosh_yml/micro_bosh.openstack.yml"))
26
+ end
27
+ end
@@ -0,0 +1,42 @@
1
+ require "readwritesettings"
2
+ require "bosh-bootstrap/microbosh_providers/vsphere"
3
+
4
+ describe Bosh::Bootstrap::MicroboshProviders::VSphere do
5
+ include Bosh::Bootstrap::Cli::Helpers::Settings
6
+
7
+ let(:microbosh_yml) { File.expand_path("~/.microbosh/deployments/micro_bosh.yml")}
8
+
9
+ it "creates micro_bosh.yml manifest" do
10
+ setting "provider.name", "vsphere"
11
+ setting "provider.credentials.host", "HOST"
12
+ setting "provider.credentials.user", "user"
13
+ setting "provider.credentials.password", "TempP@ss"
14
+
15
+ # TODO - perhaps network.ip_address is better?
16
+ setting "address.ip", "172.23.194.100"
17
+ setting "provider.network.name", "VLAN2194"
18
+ setting "provider.network.netmask", "255.255.254.0"
19
+ setting "provider.network.gateway", "172.23.194.1"
20
+ setting "provider.network.dns", %w[172.22.22.153 172.22.22.154]
21
+
22
+ setting "provider.npt", %w[ntp01.las01.emcatmos.com ntp02.las01.emcatmos.com]
23
+ setting "provider.datacenter.name", "LAS01"
24
+ setting "provider.datacenter.vm_folder", "BOSH_VMs"
25
+ setting "provider.datacenter.template_folder", "BOSH_Templates"
26
+ setting "provider.datacenter.disk_path", "BOSH_Deployer"
27
+ setting "provider.datacenter.datastore_pattern", "las01-.*"
28
+ setting "provider.datacenter.persistent_datastore_pattern", "las01-.*"
29
+ setting "provider.datacenter.allow_mixed_datastores", true
30
+ setting "provider.datacenter.clusters", ["CLUSTER01"]
31
+
32
+ setting "bosh.name", "test-bosh"
33
+ setting "bosh.password", "password"
34
+ setting "bosh.salted_password", "salted_password"
35
+
36
+ subject = Bosh::Bootstrap::MicroboshProviders::VSphere.new(microbosh_yml, settings)
37
+
38
+ subject.create_microbosh_yml(settings)
39
+ File.should be_exists(microbosh_yml)
40
+ files_match(microbosh_yml, spec_asset("microbosh_yml/micro_bosh.vsphere.yml"))
41
+ end
42
+ end
@@ -0,0 +1,27 @@
1
+ require "readwritesettings"
2
+
3
+ describe Bosh::Bootstrap::Microbosh do
4
+ include Bosh::Bootstrap::Cli::Helpers::Settings
5
+
6
+ let(:path_or_ami) { "/path/to/stemcell.tgz" }
7
+ let(:base_path) { File.expand_path("~/.microbosh") }
8
+ let(:settings_dir) { base_path }
9
+ let(:microbosh_provider) { stub(create_microbosh_yml: {}) }
10
+ subject { Bosh::Bootstrap::Microbosh.new(base_path, microbosh_provider) }
11
+
12
+ it "deploys new microbosh" do
13
+ setting "bosh.name", "test-bosh"
14
+ setting "bosh.stemcell", path_or_ami
15
+ subject.should_receive(:sh).with("bundle install")
16
+ subject.should_receive(:sh).with("bundle exec bosh micro deployment test-bosh")
17
+ subject.should_receive(:sh).with("bundle exec bosh -n micro deploy #{path_or_ami}")
18
+ subject.deploy(settings)
19
+ end
20
+
21
+ xit "updates existing microbosh" do
22
+ subject.deploy
23
+ end
24
+ xit "re-deploys failed microbosh deployment" do
25
+ subject.deploy
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ require "readwritesettings"
2
+ require "fakeweb"
3
+ require "bosh-bootstrap/network_providers/aws"
4
+
5
+ describe Bosh::Bootstrap::NetworkProviders::AWS do
6
+ include Bosh::Bootstrap::Cli::Helpers::Settings
7
+
8
+ let(:provider_client) { stub() }
9
+ subject { Bosh::Bootstrap::NetworkProviders::AWS.new(provider_client) }
10
+
11
+ it "is registered" do
12
+ Bosh::Bootstrap::NetworkProviders.provider_class("aws").should == subject.class
13
+ end
14
+
15
+ it "creates security groups it needs" do
16
+ expected_groups = [
17
+ ["ssh", "ssh", ports: 22],
18
+ ["bosh_nats_server", "bosh_nats_server", ports: 4222],
19
+ ["bosh_agent_http", "bosh_agent_http", ports: 6868],
20
+ ["bosh_blobstore", "bosh_blobstore", ports: 25250],
21
+ ["bosh_director", "bosh_director", ports: 25555],
22
+ ["bosh_registry", "bosh_registry", ports: 25777],
23
+ ]
24
+ expected_groups.each do |security_group_name, description, ports|
25
+ provider_client.stub(:create_security_group).with(security_group_name, description, ports)
26
+ end
27
+ subject.perform
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require "readwritesettings"
2
+ require "fakeweb"
3
+ require "bosh-bootstrap/network_providers/openstack"
4
+
5
+ describe Bosh::Bootstrap::NetworkProviders::OpenStack do
6
+ include Bosh::Bootstrap::Cli::Helpers::Settings
7
+
8
+ let(:provider_client) { stub() }
9
+ subject { Bosh::Bootstrap::NetworkProviders::OpenStack.new(provider_client) }
10
+
11
+ it "is registered" do
12
+ Bosh::Bootstrap::NetworkProviders.provider_class("openstack").should == subject.class
13
+ end
14
+
15
+ it "creates security groups it needs" do
16
+ expected_groups = [
17
+ ["ssh", "ssh", 22],
18
+ ["bosh_nats_server", "bosh_nats_server", 4222],
19
+ ["bosh_agent_http", "bosh_agent_http", 6868],
20
+ ["bosh_blobstore", "bosh_blobstore", 25250],
21
+ ["bosh_director", "bosh_director", 25555],
22
+ ["bosh_registry", "bosh_registry", 25777],
23
+ ]
24
+ expected_groups.each do |security_group_name, description, ports|
25
+ provider_client.stub(:create_security_group).with(security_group_name, description, ports)
26
+ end
27
+ subject.perform
28
+ end
29
+ end
@@ -0,0 +1,17 @@
1
+ describe Bosh::Bootstrap::Network do
2
+ include Bosh::Bootstrap::Cli::Helpers::Settings
3
+
4
+ let(:aws_provider_client) { stub() }
5
+ let(:vsphere_provider_client) { stub() }
6
+
7
+ it "uses NetworkProvider if available" do
8
+ network = Bosh::Bootstrap::Network.new("aws", aws_provider_client)
9
+ aws_provider_client.should_receive(:create_security_group).exactly(6).times
10
+ network.deploy
11
+ end
12
+
13
+ it "does nothing if no NetworkProvider for the infrastructure" do
14
+ network = Bosh::Bootstrap::Network.new("vsphere", vsphere_provider_client)
15
+ network.deploy
16
+ end
17
+ end