bosh-cloudfoundry 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog.md ADDED
@@ -0,0 +1,11 @@
1
+ # Change Log
2
+
3
+ ## v0.3
4
+
5
+ Additions:
6
+
7
+ * OpenStack support! [thx @frodenas; tested by @danhighman] many hugs & kisses to you both!
8
+
9
+ Fixes:
10
+
11
+ * changed `health_manager` to `health_manager_next` job (legacy hm was removed in [cf-release patch](https://github.com/cloudfoundry/cf-release/commit/cba60f2e2dee13b7e09eb178eec72aa084a15b1a))
data/README.md CHANGED
@@ -18,7 +18,16 @@ bosh-bootstrap deploy --latest-stemcell
18
18
  bosh-bootstrap ssh
19
19
 
20
20
  # now on the inception VM
21
- sudo gem install bosh-cloudfoundry
21
+
22
+ # TODO - restore gem installation when rubygem security issue resolved
23
+ # sudo gem install bosh-cloudfoundry
24
+
25
+ cd /var/vcap/store/repos
26
+ git clone git://github.com/StarkAndWayne/bosh-cloudfoundry.git
27
+ cd bosh-cloudfoundry
28
+ git checkout -b v0.3
29
+ git pull origin v0.3
30
+ rake install
22
31
 
23
32
  export TMPDIR=/var/vcap/store/tmp
24
33
  bosh cf upload release --dev
@@ -31,14 +40,14 @@ bosh cf prepare system production --release-name appcloud-dev
31
40
  bosh cf prepare system production
32
41
 
33
42
  bosh cf upload stemcell --latest
34
- bosh cf merge gerrit 37/13137/4 84/13084/4 83/13583/1
35
- bosh deploy
43
+ bosh cf merge gerrit 37/13137/4 84/13084/4 83/13583/1 09/13609/2
44
+ bosh cf deploy
36
45
 
37
46
  # now we can grow our single VM deployment
38
47
 
39
48
  bosh cf change deas 1
40
49
  bosh cf add service postgresql
41
- bosh deploy
50
+ bosh cf deploy
42
51
  ```
43
52
 
44
53
  Overtime, as you add more DEAs and other service nodes, your set of VMs might look like:
@@ -87,7 +96,7 @@ bosh cf prepare system production
87
96
  # prompts for a DNS host for your CloudFoundry, such as mycompany.com
88
97
  bosh cf change deas 1
89
98
  bosh cf add service postgresql 1
90
- bosh deploy
99
+ bosh cf deploy
91
100
  ```
92
101
 
93
102
  During `bosh cf prepare system production`, it will automatically upload the latest release of CloudFoundry (the latest final [BOSH release](http://github.com/cloudfoundry/cf-release)) and the latest stable stemcell (becomes the base AMI for AWS, for example).
@@ -1,5 +1,7 @@
1
1
  # Copyright (c) 2012-2013 Stark & Wayne, LLC
2
2
 
3
+ require "cli"
4
+
3
5
  module Bosh; module CloudFoundry; module Config; end; end; end
4
6
 
5
7
  module Bosh::CloudFoundry::Config
@@ -121,11 +121,14 @@ class Bosh::CloudFoundry::Config::DeaConfig
121
121
  }
122
122
  end
123
123
 
124
+ # The RAM for a dedicated DEA node
125
+ # else the RAM of the core/0 VM
126
+ # minus the +preallocated_ram+.
124
127
  def max_memory
125
128
  if dea_server_count > 0
126
129
  max_memory_for_dedicated_dea
127
130
  else
128
- 512
131
+ dea_ram_for_core_vm_flavor
129
132
  end
130
133
  end
131
134
 
@@ -139,6 +142,14 @@ class Bosh::CloudFoundry::Config::DeaConfig
139
142
  300
140
143
  end
141
144
 
145
+ def dea_ram_for_core_vm_flavor
146
+ ram_for_core_vm_flavor - preallocated_ram
147
+ end
148
+
149
+ def ram_for_core_vm_flavor
150
+ provider.ram_for_server_flavor(system_config.core_server_flavor)
151
+ end
152
+
142
153
  def ram_for_server_flavor
143
154
  provider.ram_for_server_flavor(dea_server_flavor)
144
155
  end
@@ -38,6 +38,15 @@ class Bosh::CloudFoundry::Config::MicroboshConfig
38
38
  aws_access_key_id: provider_credentials["access_key_id"],
39
39
  aws_secret_access_key: provider_credentials["secret_access_key"]
40
40
  }
41
+ elsif openstack?
42
+ {
43
+ provider: "openstack",
44
+ openstack_username: provider_credentials["username"],
45
+ openstack_api_key: provider_credentials["api_key"],
46
+ openstack_tenant: provider_credentials["tenant"],
47
+ openstack_auth_url: provider_credentials["auth_url"],
48
+ openstack_region: provider_credentials["region"]
49
+ }
41
50
  else
42
51
  raise "please implement #fog_credentials for #{bosh_provider}"
43
52
  end
@@ -55,6 +64,10 @@ class Bosh::CloudFoundry::Config::MicroboshConfig
55
64
  bosh_provider == "aws"
56
65
  end
57
66
 
67
+ def openstack?
68
+ bosh_provider == "openstack"
69
+ end
70
+
58
71
  # micro_bosh.yml looks like:
59
72
  #
60
73
  # cloud:
@@ -40,7 +40,8 @@ class Bosh::CloudFoundry::Config::SystemConfig < Bosh::Cli::Config
40
40
  :dea, # e.g. { "count" => 2, "flavor" => "m1.large" }
41
41
  :postgresql, # e.g. [{ "count" => 2, "flavor" => "m1.large", "plan" => "free" }]
42
42
  :redis, # e.g. [{ "count" => 2, "flavor" => "m1.large", "plan" => "free" }]
43
- :security_group # e.g. "cloudfoundry-production"
43
+ :security_group, # e.g. "cloudfoundry-production"
44
+ :system_initialized, # e.g. true / false
44
45
  ].each do |attr|
45
46
  define_method attr do
46
47
  read(attr, false)
@@ -46,7 +46,7 @@ module Bosh::CloudFoundry::ConfigOptions
46
46
  system_config = Bosh::CloudFoundry::Config::SystemConfig.new(system)
47
47
  system_config.bosh_target = options[:bosh_target] || config.target
48
48
  system_config.bosh_target_uuid = options[:bosh_target_uuid] || config.target_uuid
49
- system_config.bosh_provider = 'aws' # TODO support other BOSH providers
49
+ system_config.bosh_provider = options[:bosh_provider] || bosh_cpi
50
50
  system_config.release_name ||= DEFAULT_RELEASE_NAME
51
51
  system_config.release_version ||= DEFAULT_RELEASE_VERSION
52
52
  system_config.stemcell_name ||= DEFAULT_STEMCELL_NAME
@@ -196,6 +196,10 @@ module Bosh::CloudFoundry::ConfigOptions
196
196
  options[:bosh_git_repo] || common_config.bosh_git_repo
197
197
  end
198
198
 
199
+ def bosh_cpi
200
+ `bosh status | grep CPI | awk '{ print $2 }'`.strip
201
+ end
202
+
199
203
  def deployment_manifest(subsystem="core")
200
204
  YAML.load_file(deployment_manifest_path(subsystem))
201
205
  end
@@ -223,6 +227,15 @@ module Bosh::CloudFoundry::ConfigOptions
223
227
  end
224
228
  end
225
229
 
230
+ def system_initialized?
231
+ system_config.system_initialized
232
+ end
233
+
234
+ def system_initialized!
235
+ system_config.system_initialized = true
236
+ system_config.save
237
+ end
238
+
226
239
  def choose_releases_dir
227
240
  if non_interactive?
228
241
  err "Please set releases_dir configuration for non-interactive mode"
@@ -280,13 +293,13 @@ module Bosh::CloudFoundry::ConfigOptions
280
293
  err "Please set core_ip configuration for non-interactive mode"
281
294
  end
282
295
 
283
- if aws?
296
+ if aws? || openstack?
284
297
  system_config.core_ip = ask("Main public IP address (press Enter to provision new IP): ").to_s
285
298
  else
286
299
  system_config.core_ip = ask("Main public IP address: ").to_s
287
300
  end
288
301
  if system_config.core_ip.blank?
289
- say "Provisioning #{bosh_provider} public IP address..."
302
+ say "Provisioning #{system_config.bosh_provider} public IP address..."
290
303
  system_config.core_ip = provider.provision_public_ip_address
291
304
  if system_config.core_ip.blank?
292
305
  say "Hmmm, I wasn't able to get a public IP at the moment. Perhaps try again or provision it manually?".red
@@ -10,6 +10,8 @@ module Bosh::CloudFoundry::Providers
10
10
  case system_config.bosh_provider.to_sym
11
11
  when :aws
12
12
  Bosh::CloudFoundry::Providers::AWS.new(system_config.microbosh.fog_compute)
13
+ when :openstack
14
+ Bosh::CloudFoundry::Providers::OpenStack.new(system_config.microbosh.fog_compute)
13
15
  else
14
16
  raise "please support #{system_config.bosh_provider} provider"
15
17
  end
@@ -17,3 +19,4 @@ module Bosh::CloudFoundry::Providers
17
19
  end
18
20
 
19
21
  require "bosh-cloudfoundry/providers/aws"
22
+ require "bosh-cloudfoundry/providers/openstack"
@@ -0,0 +1,69 @@
1
+ # Copyright (c) 2012-2013 Stark & Wayne, LLC
2
+
3
+ module Bosh; module CloudFoundry; module Providers; end; end; end
4
+
5
+ class Bosh::CloudFoundry::Providers::OpenStack
6
+ attr_reader :fog_compute
7
+ def initialize(fog_compute=nil)
8
+ @fog_compute = fog_compute
9
+ end
10
+
11
+ # @return [String] provisions a new public IP address in target region
12
+ # TODO nil if none available
13
+ def provision_public_ip_address
14
+ address = fog_compute.addresses.create
15
+ address.ip
16
+ # TODO catch error and return nil
17
+ end
18
+
19
+ # @return [Integer] megabytes of RAM for requested flavor of server
20
+ def ram_for_server_flavor(server_flavor)
21
+ if flavor = fog_compute_flavor(server_flavor)
22
+ flavor.ram
23
+ else
24
+ raise "Unknown OpenStack flavor '#{server_flavor}'"
25
+ end
26
+ end
27
+
28
+ def fog_compute_flavor(server_flavor)
29
+ compute_flavors.find { |f| f.name == server_flavor }
30
+ end
31
+
32
+ def compute_flavors
33
+ fog_compute.flavors
34
+ end
35
+
36
+ # Creates or reuses an OpenStack security group and opens ports.
37
+ #
38
+ # +security_group_name+ is the name to be created or reused
39
+ # +ports+ is a hash of name/port for ports to open, for example:
40
+ # {
41
+ # ssh: 22,
42
+ # http: 80,
43
+ # https: 443
44
+ # }
45
+ def create_security_group(security_group_name, ports)
46
+ security_groups = fog_compute.security_groups
47
+ unless sg = security_groups.find { |s| s.name == security_group_name }
48
+ sg = fog_compute.security_groups.create(name: security_group_name, description: security_group_name)
49
+ puts "Created security group #{security_group_name}"
50
+ else
51
+ puts "Reusing security group #{security_group_name}"
52
+ end
53
+ ip_permissions = sg.rules
54
+ ports_opened = 0
55
+ ports.each do |name, port|
56
+ unless port_open?(ip_permissions, port)
57
+ sg.create_security_group_rule(port, port)
58
+ puts " -> opened #{name} port #{port}"
59
+ ports_opened += 1
60
+ end
61
+ end
62
+ puts " -> no additional ports opened" if ports_opened == 0
63
+ true
64
+ end
65
+
66
+ def port_open?(ip_permissions, port)
67
+ ip_permissions && ip_permissions.find {|ip| ip["from_port"] <= port && ip["to_port"] >= port }
68
+ end
69
+ end
@@ -111,6 +111,8 @@ class Bosh::CloudFoundry::SystemDeploymentManifestRenderer
111
111
  def cloud_properties_for_server_flavor(server_flavor)
112
112
  if aws?
113
113
  { "instance_type" => server_flavor }
114
+ elsif openstack?
115
+ { "instance_type" => server_flavor }
114
116
  else
115
117
  raise 'Please implement #{self.class}#cloud_properties_for_server_flavor'
116
118
  end
@@ -120,6 +122,10 @@ class Bosh::CloudFoundry::SystemDeploymentManifestRenderer
120
122
  system_config.bosh_provider == "aws"
121
123
  end
122
124
 
125
+ def openstack?
126
+ system_config.bosh_provider == "openstack"
127
+ end
128
+
123
129
  #
124
130
  def base_manifest(
125
131
  deployment_name,
@@ -179,7 +185,7 @@ class Bosh::CloudFoundry::SystemDeploymentManifestRenderer
179
185
  ["postgres",
180
186
  "nats",
181
187
  "router",
182
- "health_manager",
188
+ "health_manager_next",
183
189
  "cloud_controller",
184
190
  # "debian_nfs_server",
185
191
  # "serialization_data_server",
@@ -280,7 +286,7 @@ class Bosh::CloudFoundry::SystemDeploymentManifestRenderer
280
286
  "password"=>common_password,
281
287
  "maxmemory"=>500000000},
282
288
  "service_plans"=>{},
283
- "dea"=>{"max_memory"=>512}}}
289
+ "dea"=>{"max_memory"=>4096}}}
284
290
  end
285
291
 
286
292
  end
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Cloudfoundry
3
- VERSION = "0.2.1"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
@@ -164,6 +164,16 @@ module Bosh::Cli::Command
164
164
  set_deployment(deployment)
165
165
  bosh_cmd "deploy"
166
166
  end
167
+ email = system_config.admin_emails.first
168
+ password = system_config.common_password
169
+ sh "sudo gem install vmc --no-ri --no-rdoc" unless system_initialized?
170
+ sh "vmc target http://api.#{root_dns}"
171
+ if system_initialized?
172
+ sh "vmc login #{email} --password #{password}"
173
+ else
174
+ sh "vmc register #{email} --password #{password} --verify #{password}"
175
+ end
176
+ system_initialized!
167
177
  end
168
178
 
169
179
  usage "cf watch nats"
@@ -248,6 +258,8 @@ module Bosh::Cli::Command
248
258
  def bosh_provider
249
259
  if aws?
250
260
  "aws"
261
+ elsif openstack?
262
+ "openstack"
251
263
  else
252
264
  err("Please implement cf.rb's bosh_provider for this IaaS")
253
265
  end
@@ -255,9 +267,14 @@ module Bosh::Cli::Command
255
267
 
256
268
  # Deploying CloudFoundry to AWS?
257
269
  # Is the target BOSH's IaaS using the AWS CPI?
258
- # FIXME Currently only AWS is supported so its always AWS
259
270
  def aws?
260
- true
271
+ system_config.bosh_provider == "aws"
272
+ end
273
+
274
+ # Deploying CloudFoundry to OpenStack?
275
+ # Is the target BOSH's IaaS using the OpenStack CPI?
276
+ def openstack?
277
+ system_config.bosh_provider == "openstack"
261
278
  end
262
279
 
263
280
  # User is prompted for common values at the
@@ -437,7 +454,7 @@ module Bosh::Cli::Command
437
454
  # | bosh-stemcell-aws-0.6.7.tgz | aws |
438
455
  def bosh_stemcell_name(stemcell_type)
439
456
  tags = [bosh_provider]
440
- tags << "stable" if stemcell_type == "stable"
457
+ tags << "stable" if stemcell_type == "stable" unless openstack?
441
458
  bosh_stemcells_cmd = "bosh public stemcells --tags #{tags.join(',')}"
442
459
  say "Locating bosh stemcell, running '#{bosh_stemcells_cmd}'..."
443
460
  `#{bosh_stemcells_cmd} | grep ' bosh-stemcell-' | awk '{ print $2 }' | sort -r | head -n 1`.strip
@@ -528,6 +545,10 @@ module Bosh::Cli::Command
528
545
  unless aws_compute_flavors.select { |flavor| flavor[:id] == flavor }
529
546
  err("Server flavor '#{flavor}' is not a valid AWS compute flavor")
530
547
  end
548
+ elsif openstack?
549
+ unless provider.fog_compute_flavor(flavor)
550
+ err("Server flavor '#{flavor}' is not a valid OpenStack compute flavor")
551
+ end
531
552
  else
532
553
  err("Please implemenet cf.rb's validate_compute_flavor for this IaaS")
533
554
  end
@@ -537,9 +558,7 @@ module Bosh::Cli::Command
537
558
  # then ensure that a generated value is stored
538
559
  def generate_generatable_options
539
560
  common_password
540
- if aws?
541
- security_group
542
- end
561
+ security_group
543
562
  end
544
563
 
545
564
  # Renders the +SystemConfig+ model (+system_config+) into the system's
@@ -626,6 +645,8 @@ module Bosh::Cli::Command
626
645
  def default_core_server_flavor
627
646
  if aws?
628
647
  "m1.large"
648
+ elsif openstack?
649
+ "m1.large"
629
650
  else
630
651
  err("Please implement cf.rb's default_core_server_flavor for this IaaS")
631
652
  end
@@ -634,6 +655,8 @@ module Bosh::Cli::Command
634
655
  def default_dea_server_flavor
635
656
  if aws?
636
657
  "m1.large"
658
+ elsif openstack?
659
+ "m1.large"
637
660
  else
638
661
  err("Please implement cf.rb's default_server_flavor for this IaaS")
639
662
  end
@@ -642,6 +665,8 @@ module Bosh::Cli::Command
642
665
  def default_service_server_flavor(service_name)
643
666
  if aws?
644
667
  "m1.xlarge"
668
+ elsif openstack?
669
+ "m1.xlarge"
645
670
  else
646
671
  err("Please implement cf.rb's default_service_server_flavor for this IaaS")
647
672
  end
@@ -3,7 +3,7 @@ name: production-core
3
3
  director_uuid: DIRECTOR_UUID
4
4
  release:
5
5
  name: appcloud
6
- version: 124
6
+ version: latest
7
7
  compilation:
8
8
  workers: 10
9
9
  network: default
@@ -52,7 +52,7 @@ jobs:
52
52
  - postgres
53
53
  - nats
54
54
  - router
55
- - health_manager
55
+ - health_manager_next
56
56
  - cloud_controller
57
57
  - stager
58
58
  - uaa
@@ -207,7 +207,7 @@ properties:
207
207
  backup:
208
208
  enable: true
209
209
  dea:
210
- max_memory: 512
210
+ max_memory: 1440.8
211
211
  redis_gateway:
212
212
  token: TOKEN
213
213
  supported_versions:
@@ -3,7 +3,7 @@ name: production-core
3
3
  director_uuid: DIRECTOR_UUID
4
4
  release:
5
5
  name: appcloud
6
- version: 124
6
+ version: latest
7
7
  compilation:
8
8
  workers: 10
9
9
  network: default
@@ -61,7 +61,7 @@ jobs:
61
61
  - postgres
62
62
  - nats
63
63
  - router
64
- - health_manager
64
+ - health_manager_next
65
65
  - cloud_controller
66
66
  - stager
67
67
  - uaa
@@ -228,7 +228,7 @@ properties:
228
228
  backup:
229
229
  enable: true
230
230
  dea:
231
- max_memory: 512
231
+ max_memory: 1440.8
232
232
  postgresql_gateway:
233
233
  admin_user: psql_admin
234
234
  admin_passwd_hash:
@@ -3,7 +3,7 @@ name: production-core
3
3
  director_uuid: DIRECTOR_UUID
4
4
  release:
5
5
  name: appcloud
6
- version: 124
6
+ version: latest
7
7
  compilation:
8
8
  workers: 10
9
9
  network: default
@@ -51,7 +51,7 @@ jobs:
51
51
  - postgres
52
52
  - nats
53
53
  - router
54
- - health_manager
54
+ - health_manager_next
55
55
  - cloud_controller
56
56
  - stager
57
57
  - uaa
@@ -3,7 +3,7 @@ name: production-core
3
3
  director_uuid: DIRECTOR_UUID
4
4
  release:
5
5
  name: appcloud
6
- version: 124
6
+ version: latest
7
7
  compilation:
8
8
  workers: 10
9
9
  network: default
@@ -43,7 +43,7 @@ jobs:
43
43
  - postgres
44
44
  - nats
45
45
  - router
46
- - health_manager
46
+ - health_manager_next
47
47
  - cloud_controller
48
48
  - stager
49
49
  - uaa
@@ -175,4 +175,4 @@ properties:
175
175
  service_plans: {}
176
176
 
177
177
  dea:
178
- max_memory: 512
178
+ max_memory: 1440.8
@@ -43,7 +43,7 @@ jobs:
43
43
  - postgres
44
44
  - nats
45
45
  - router
46
- - health_manager
46
+ - health_manager_next
47
47
  - cloud_controller
48
48
  - debian_nfs_server
49
49
  - serialization_data_server
@@ -247,6 +247,10 @@ describe Bosh::Cli::Command::Base do
247
247
  end
248
248
  @cmd.should_receive(:set_deployment).exactly(2).times
249
249
  @cmd.should_receive(:sh).with("bosh -n --color deploy").exactly(2).times
250
+ @cmd.should_receive(:sh).with("sudo gem install vmc --no-ri --no-rdoc")
251
+ @cmd.should_receive(:sh).with("vmc target http://api.mycompany.com")
252
+ @cmd.should_receive(:sh).with(
253
+ "vmc register drnic@starkandwayne.com --password c1oudc0wc1oudc0w --verify c1oudc0wc1oudc0w")
250
254
  @cmd.deploy
251
255
  end
252
256
 
@@ -12,7 +12,10 @@ describe Bosh::CloudFoundry::Config::DeaConfig do
12
12
  @system_dir = File.join(@systems_dir, "production")
13
13
  mkdir_p(@system_dir)
14
14
  @system_config = Bosh::CloudFoundry::Config::SystemConfig.new(@system_dir)
15
+ @system_config.bosh_target = "http://6.7.8.9:25555"
16
+ @system_config.bosh_target_uuid = "DIRECTOR_UUID"
15
17
  @system_config.bosh_provider = "aws"
18
+ @system_config.core_server_flavor = "m1.large"
16
19
  @manifest = YAML.load_file(spec_asset("deployments/aws-core-only.yml"))
17
20
  end
18
21
 
@@ -48,7 +51,7 @@ describe Bosh::CloudFoundry::Config::DeaConfig do
48
51
  subject.merge_manifest_properties(@manifest)
49
52
  @manifest["properties"]["dea"].should_not be_nil
50
53
  @manifest["properties"]["dea"]["max_memory"].should_not be_nil
51
- @manifest["properties"]["dea"]["max_memory"].should == 512
54
+ @manifest["properties"]["dea"]["max_memory"].should == 7380
52
55
  end
53
56
  end
54
57
  describe "5 x m1.xlarge deas on AWS" do
@@ -19,9 +19,11 @@ describe Bosh::CloudFoundry::SystemDeploymentManifestRenderer do
19
19
  @system_dir = File.join(@systems_dir, "production")
20
20
  mkdir_p(@system_dir)
21
21
  @system_config = Bosh::CloudFoundry::Config::SystemConfig.new(@system_dir)
22
+ @system_config.bosh_target = "http://6.7.8.9:25555"
23
+ @system_config.bosh_target_uuid = "DIRECTOR_UUID"
22
24
  @system_config.bosh_provider = 'aws'
23
25
  @system_config.release_name = 'appcloud'
24
- @system_config.release_version = 124 # TODO restore to 'latest' when #49 fixed
26
+ @system_config.release_version = 'latest'
25
27
  @system_config.stemcell_name = 'bosh-stemcell'
26
28
  @system_config.stemcell_version = '0.6.4'
27
29
  @system_config.core_server_flavor = 'm1.small'
@@ -34,6 +36,12 @@ describe Bosh::CloudFoundry::SystemDeploymentManifestRenderer do
34
36
 
35
37
  @renderer = Bosh::CloudFoundry::SystemDeploymentManifestRenderer.new(
36
38
  @system_config, @common_config, @bosh_config)
39
+
40
+ Bosh::CloudFoundry::Providers.should_receive(:for_bosh_provider_name).
41
+ and_return(Bosh::CloudFoundry::Providers::AWS.new)
42
+ #
43
+ # @dea_config = @renderer.dea_config
44
+ # @dea_config.should_receive(:ram_for_server_flavor).and_return(1700)
37
45
  end
38
46
 
39
47
  after(:each) do
@@ -51,8 +59,6 @@ describe Bosh::CloudFoundry::SystemDeploymentManifestRenderer do
51
59
  end
52
60
  end
53
61
  it "renders a simple system + DEAs into a deployment manifest" do
54
- Bosh::CloudFoundry::Providers.should_receive(:for_bosh_provider_name).
55
- and_return(Bosh::CloudFoundry::Providers::AWS.new)
56
62
  @system_config.dea = { "count" => 2, "flavor" => "m1.xlarge" }
57
63
  @renderer.perform
58
64
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-cloudfoundry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-27 00:00:00.000000000 Z
12
+ date: 2013-02-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bosh_cli
@@ -149,6 +149,7 @@ files:
149
149
  - .gitignore
150
150
  - .rspec
151
151
  - .travis.yml
152
+ - ChangeLog.md
152
153
  - Gemfile
153
154
  - Guardfile
154
155
  - LICENSE.txt
@@ -169,6 +170,7 @@ files:
169
170
  - lib/bosh-cloudfoundry/gerrit_patches_helper.rb
170
171
  - lib/bosh-cloudfoundry/providers.rb
171
172
  - lib/bosh-cloudfoundry/providers/aws.rb
173
+ - lib/bosh-cloudfoundry/providers/openstack.rb
172
174
  - lib/bosh-cloudfoundry/system_deployment_manifest_renderer.rb
173
175
  - lib/bosh-cloudfoundry/version.rb
174
176
  - lib/bosh/cli/commands/cf.rb
@@ -207,7 +209,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
207
209
  version: '0'
208
210
  segments:
209
211
  - 0
210
- hash: 4073595004324325457
212
+ hash: -743491069374654137
211
213
  required_rubygems_version: !ruby/object:Gem::Requirement
212
214
  none: false
213
215
  requirements:
@@ -216,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
218
  version: '0'
217
219
  segments:
218
220
  - 0
219
- hash: 4073595004324325457
221
+ hash: -743491069374654137
220
222
  requirements: []
221
223
  rubyforge_project:
222
224
  rubygems_version: 1.8.24