bosh-cloudfoundry 0.7.0.alpha.3 → 0.7.0.alpha.4

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.
Files changed (31) hide show
  1. data/ChangeLog.md +1 -0
  2. data/bosh-cloudfoundry.gemspec +2 -1
  3. data/lib/bosh/cli/commands/cf.rb +35 -130
  4. data/lib/bosh/cloudfoundry.rb +5 -2
  5. data/lib/bosh/cloudfoundry/deployment_attributes.rb +35 -30
  6. data/lib/bosh/cloudfoundry/deployment_file.rb +192 -0
  7. data/lib/bosh/cloudfoundry/release_version.rb +67 -0
  8. data/lib/bosh/cloudfoundry/release_version_cpi.rb +55 -0
  9. data/lib/bosh/cloudfoundry/release_version_cpi_size.rb +49 -0
  10. data/spec/assets/v132/aws/large.yml +393 -0
  11. data/spec/assets/v132/aws/medium.yml +350 -0
  12. data/spec/deployment_file_spec.rb +92 -0
  13. data/spec/plugin_spec.rb +32 -47
  14. data/spec/release_version_cpi_size_spec.rb +13 -0
  15. data/spec/release_version_cpi_spec.rb +17 -0
  16. data/spec/release_version_spec.rb +38 -0
  17. data/spec/spec_helper.rb +2 -0
  18. data/templates/v132/aws/large/deployment_file.yml.erb +431 -0
  19. data/templates/v132/aws/{dev → large}/spec +0 -0
  20. data/templates/v132/{openstack/dev → aws/medium}/deployment_file.yml.erb +35 -23
  21. data/templates/v132/{openstack/dev → aws/medium}/spec +0 -0
  22. data/templates/v132/aws/small/README.md +5 -0
  23. data/templates/v132/aws/spec +6 -0
  24. data/templates/v132/openstack/large/deployment_file.yml.erb +431 -0
  25. data/templates/v132/openstack/large/spec +6 -0
  26. data/templates/v132/{aws/dev → openstack/medium}/deployment_file.yml.erb +35 -23
  27. data/templates/v132/openstack/medium/spec +6 -0
  28. data/templates/v132/openstack/spec +6 -0
  29. metadata +46 -10
  30. data/lib/bosh/cloudfoundry/release_versioned_template.rb +0 -48
  31. data/spec/release_versioned_template_spec.rb +0 -12
@@ -0,0 +1,67 @@
1
+ module Bosh::Cloudfoundry
2
+ # This project should support all known versions of Cloud Foundry back to v132.
3
+ # v132 was the first release of Cloud Foundry v2.
4
+ #
5
+ # This class represents an available release version, for which there are a subset of CPIs supported.
6
+ # From this class you can navigate to ReleaseVersionCpi for the CPI specific aspect of a release version;
7
+ # and from ReleaseVersionCpi you can navigate to one or more ReleaseVersionCpiSizes (deployment sizes).
8
+ class ReleaseVersion
9
+ attr_reader :release_name
10
+ attr_reader :version_number
11
+
12
+ def self.for_version(version_number)
13
+ raise "Minimum release version is 132; #{version_number} is too small" if version_number.to_i < 132
14
+ ReleaseVersion.new(available_version(version_number))
15
+ end
16
+
17
+ # converts templates/v132, templates/v140, etc into [132, 140]
18
+ def self.available_versions
19
+ @available_versions ||= begin
20
+ Dir[File.join(base_template_dir, "v*")].
21
+ map {|dir| File.basename(dir)}.
22
+ map {|version| version[1..-1].to_i}.
23
+ sort
24
+ end
25
+ end
26
+
27
+ def self.available_version(version_number)
28
+ available_version, *versions = available_versions
29
+ while versions && versions.size > 0
30
+ version, *versions = versions
31
+ if version < version_number
32
+ available_version = version
33
+ else
34
+ return available_version
35
+ end
36
+ end
37
+ available_version
38
+ end
39
+
40
+ def self.latest_version_number
41
+ available_versions.last
42
+ end
43
+
44
+ def initialize(version_number)
45
+ @version_number = version_number
46
+ @release_name = "cf-release" # TODO determine from release file
47
+ end
48
+
49
+ def self.base_template_dir
50
+ File.expand_path("../../../../templates", __FILE__)
51
+ end
52
+
53
+ def template_dir
54
+ File.join(self.class.base_template_dir, "v#{version_number}")
55
+ end
56
+
57
+ def available_cpi_names
58
+ @available_cpi_names ||= begin
59
+ Dir[File.join(template_dir, "*")].map {|dir| File.basename(dir)}
60
+ end
61
+ end
62
+
63
+ def valid_cpi?(cpi)
64
+ available_cpi_names.include?(cpi)
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,55 @@
1
+ module Bosh::Cloudfoundry
2
+ # This project should support all known versions of Cloud Foundry back to v132.
3
+ # v132 was the first release of Cloud Foundry v2.
4
+ # The project also supports the different CPIs that are supported by bosh.
5
+ #
6
+ # This class represents an available release version for a specific CPI.
7
+ # From this class you can navigate to one or more ReleaseVersionCpiSizes (deployment sizes).
8
+ class ReleaseVersionCpi
9
+ attr_reader :release_version
10
+ attr_reader :cpi
11
+
12
+ def self.for_cpi(release_version, cpi)
13
+ ReleaseVersionCpi.new(release_version, cpi)
14
+ end
15
+
16
+ def self.latest_for_cpi(cpi)
17
+ release_version = ReleaseVersion.latest_version_number
18
+ ReleaseVersionCpi.new(release_version, cpi)
19
+ end
20
+
21
+ def initialize(release_version, cpi)
22
+ release_version = ReleaseVersion.for_version(release_version) unless release_version.is_a?(ReleaseVersion)
23
+ raise "CPI #{cpi} not available for version #{release_version.version_number}" unless release_version.valid_cpi?(cpi)
24
+ @release_version, @cpi = release_version, cpi
25
+ end
26
+
27
+ def template_dir
28
+ File.join(release_version.template_dir, cpi)
29
+ end
30
+
31
+ def spec_path
32
+ File.join(template_dir, "spec")
33
+ end
34
+
35
+ def spec
36
+ YAML.load_file(spec_path)
37
+ end
38
+
39
+ def available_deployment_sizes
40
+ spec["deployment_sizes"]
41
+ end
42
+
43
+ def default_deployment_size
44
+ spec["default_deployment_size"]
45
+ end
46
+
47
+ def release_name
48
+ release_version.release_name
49
+ end
50
+
51
+ def release_version_number
52
+ release_version.version_number
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,49 @@
1
+ module Bosh::Cloudfoundry
2
+ # This project should support all known versions of Cloud Foundry back to v132.
3
+ # v132 was the first release of Cloud Foundry v2.
4
+ # The project also supports the different CPIs that are supported by bosh.
5
+ # The project also supports different basic sizings/compositions (small dev deployments
6
+ # or large, high-availability production deployments). Each sizing might scale out differently.
7
+ #
8
+ # To achieve these goals it includes templates for each combination of CPI & sizing & release version.
9
+ #
10
+ # This class calculates which deployment template to use for the current deployment.
11
+ class ReleaseVersionCpiSize
12
+ attr_reader :release_version_cpi
13
+ attr_reader :deployment_size
14
+
15
+ def initialize(release_version_cpi, deployment_size)
16
+ @release_version_cpi = release_version_cpi
17
+ @deployment_size = deployment_size
18
+ end
19
+
20
+ def deployment_attributes_class
21
+ Bosh::Cloudfoundry::DeploymentAttributes
22
+ end
23
+
24
+ def template_dir
25
+ File.join(release_version_cpi.template_dir, deployment_size)
26
+ end
27
+
28
+ def template_file_path
29
+ File.join(template_dir, "deployment_file.yml.erb")
30
+ end
31
+
32
+ def spec_file_path
33
+ File.join(template_dir, "spec")
34
+ end
35
+
36
+ def spec
37
+ YAML.load_file(spec_file_path)
38
+ end
39
+
40
+ def release_name
41
+ release_version_cpi.release_name
42
+ end
43
+
44
+ def release_version_number
45
+ release_version_cpi.release_version_number
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,393 @@
1
+ ---
2
+ name: demo
3
+ director_uuid: UUID
4
+
5
+ releases:
6
+ - name: cf-release
7
+ version: 132
8
+
9
+ networks:
10
+ - name: floating
11
+ type: vip
12
+ cloud_properties: {}
13
+ - name: default
14
+ type: dynamic
15
+ cloud_properties:
16
+ security_groups:
17
+ - cf
18
+
19
+ compilation:
20
+ workers: 6
21
+ network: default
22
+ reuse_compilation_vms: true
23
+ cloud_properties:
24
+ instance_type: m1.medium
25
+
26
+ update:
27
+ canaries: 1
28
+ canary_watch_time: 30000-600000
29
+ update_watch_time: 30000-600000
30
+ max_in_flight: 4
31
+ max_errors: 1
32
+
33
+ resource_pools:
34
+ - name: small
35
+ network: default
36
+ size: 9
37
+ stemcell:
38
+ name: bosh-stemcell
39
+ version: latest
40
+ cloud_properties:
41
+ instance_type: m1.small
42
+
43
+ - name: large
44
+ network: default
45
+ size: 1
46
+ stemcell:
47
+ name: bosh-stemcell
48
+ version: latest
49
+ cloud_properties:
50
+ instance_type: m1.large
51
+
52
+ jobs:
53
+ - name: syslog_aggregator
54
+ release: cf-release
55
+ template:
56
+ - syslog_aggregator
57
+ instances: 1
58
+ resource_pool: small
59
+ persistent_disk: 65536
60
+ networks:
61
+ - name: default
62
+ default: [dns, gateway]
63
+
64
+ - name: postgres
65
+ release: cf-release
66
+ template:
67
+ - postgres
68
+ instances: 1
69
+ resource_pool: small
70
+ persistent_disk: 65536
71
+ networks:
72
+ - name: default
73
+ default: [dns, gateway]
74
+ properties:
75
+ db: databases
76
+
77
+ - name: nfs_server
78
+ release: cf-release
79
+ template:
80
+ - debian_nfs_server
81
+ instances: 1
82
+ resource_pool: small
83
+ persistent_disk: 65536
84
+ networks:
85
+ - name: default
86
+ default: [dns, gateway]
87
+
88
+ - name: nats
89
+ release: cf-release
90
+ template:
91
+ - nats
92
+ instances: 1
93
+ resource_pool: small
94
+ networks:
95
+ - name: default
96
+ default: [dns, gateway]
97
+
98
+ - name: uaa
99
+ release: cf-release
100
+ template:
101
+ - uaa
102
+ instances: 1
103
+ resource_pool: small
104
+ networks:
105
+ - name: default
106
+ default: [dns, gateway]
107
+
108
+ - name: login
109
+ release: cf-release
110
+ template:
111
+ - login
112
+ instances: 1
113
+ resource_pool: small
114
+ networks:
115
+ - name: default
116
+ default: [dns, gateway]
117
+
118
+ - name: cloud_controller
119
+ release: cf-release
120
+ template:
121
+ - cloud_controller_ng
122
+ instances: 1
123
+ resource_pool: small
124
+ networks:
125
+ - name: default
126
+ default: [dns, gateway]
127
+ properties:
128
+ ccdb: ccdb
129
+
130
+ - name: router
131
+ release: cf-release
132
+ template:
133
+ - gorouter
134
+ instances: 1
135
+ resource_pool: small
136
+ networks:
137
+ - name: default
138
+ default: [dns, gateway]
139
+ - name: floating
140
+ static_ips:
141
+ - 1.2.3.4
142
+
143
+ - name: health_manager
144
+ release: cf-release
145
+ template:
146
+ - health_manager_next
147
+ instances: 1
148
+ resource_pool: small
149
+ networks:
150
+ - name: default
151
+ default: [dns, gateway]
152
+
153
+ - name: dea
154
+ release: cf-release
155
+ template: dea_next
156
+ instances: 1
157
+ resource_pool: large
158
+ networks:
159
+ - name: default
160
+ default: [dns, gateway]
161
+
162
+ properties:
163
+ cf:
164
+ name: demo
165
+ dns: mycloud.com
166
+ ip_addresses: ["1.2.3.4"]
167
+ deployment_size: medium
168
+ security_group: cf
169
+ persistent_disk: 4096
170
+ common_password: qwertyasdfgh
171
+
172
+ domain: mycloud.com
173
+ system_domain: mycloud.com
174
+ system_domain_organization: mycloud.com
175
+ app_domains:
176
+ - mycloud.com
177
+
178
+ networks:
179
+ apps: default
180
+ management: default
181
+
182
+ nats:
183
+ address: 0.nats.default.demo.microbosh
184
+ port: 4222
185
+ user: nats
186
+ password: qwertyasdfgh
187
+ authorization_timeout: 5
188
+
189
+ router:
190
+ port: 8081
191
+ status:
192
+ port: 8080
193
+ user: gorouter
194
+ password: qwertyasdfgh
195
+
196
+ dea: &dea
197
+ max_memory: 4096
198
+ memory_mb: 4096
199
+ memory_overcommit_factor: 4
200
+ disk_mb: 16384
201
+ disk_overcommit_factor: 4
202
+
203
+ dea_next: *dea
204
+
205
+ service_lifecycle:
206
+ serialization_data_server:
207
+ - 169.254.1.1
208
+
209
+ syslog_aggregator:
210
+ address: 0.syslog-aggregator.default.demo.microbosh
211
+ port: 54321
212
+
213
+ serialization_data_server:
214
+ port: 8080
215
+ logging_level: debug
216
+ upload_token: qwertyasdfgh
217
+ upload_timeout: 10
218
+
219
+ nfs_server:
220
+ address: 0.nfs-server.default.demo.microbosh
221
+ # network: "*.demo.microbosh"
222
+ # idmapd_domain: mycloud.com
223
+
224
+ debian_nfs_server:
225
+ no_root_squash: true
226
+
227
+ databases: &databases
228
+ db_scheme: postgres
229
+ address: 0.postgres.default.demo.microbosh
230
+ port: 5524
231
+ roles:
232
+ - tag: admin
233
+ name: ccadmin
234
+ password: qwertyasdfgh
235
+ - tag: admin
236
+ name: uaaadmin
237
+ password: qwertyasdfgh
238
+ databases:
239
+ - tag: cc
240
+ name: ccdb
241
+ citext: true
242
+ - tag: uaa
243
+ name: uaadb
244
+ citext: true
245
+
246
+ ccdb: &ccdb
247
+ db_scheme: postgres
248
+ address: 0.postgres.default.demo.microbosh
249
+ port: 5524
250
+ roles:
251
+ - tag: admin
252
+ name: ccadmin
253
+ password: qwertyasdfgh
254
+ databases:
255
+ - tag: cc
256
+ name: ccdb
257
+ citext: true
258
+
259
+ ccdb_ng: *ccdb
260
+
261
+ uaadb:
262
+ db_scheme: postgresql
263
+ address: 0.postgres.default.demo.microbosh
264
+ port: 5524
265
+ roles:
266
+ - tag: admin
267
+ name: uaaadmin
268
+ password: qwertyasdfgh
269
+ databases:
270
+ - tag: uaa
271
+ name: uaadb
272
+ citext: true
273
+
274
+ cc_api_version: v2
275
+
276
+ cc: &cc
277
+ logging_level: debug
278
+ external_host: ccng
279
+ srv_api_uri: http://api.mycloud.com
280
+ cc_partition: default
281
+ db_encryption_key: qwertyasdfgh
282
+ bootstrap_admin_email: admin@mycloud.com
283
+ bulk_api_password: qwertyasdfgh
284
+ uaa_resource_id: cloud_controller
285
+ staging_upload_user: uploaduser
286
+ staging_upload_password: qwertyasdfgh
287
+ resource_pool:
288
+ resource_directory_key: cc-resources
289
+ # Local provider when using NFS
290
+ fog_connection:
291
+ provider: Local
292
+ local_root: /var/vcap/shared
293
+ packages:
294
+ app_package_directory_key: cc-packages
295
+ droplets:
296
+ droplet_directory_key: cc-droplets
297
+
298
+ ccng: *cc
299
+
300
+ login:
301
+ protocol: http
302
+ links:
303
+ home: http://console.mycloud.com
304
+ passwd: http://console.mycloud.com/password_resets/new
305
+ signup: http://console.mycloud.com/register
306
+
307
+ uaa:
308
+ url: http://uaa.mycloud.com
309
+ spring_profiles: postgresql
310
+ no_ssl: true
311
+ catalina_opts: -Xmx768m -XX:MaxPermSize=256m
312
+ resource_id: account_manager
313
+ jwt:
314
+ signing_key: |
315
+ -----BEGIN RSA PRIVATE KEY-----
316
+ MIICXAIBAAKBgQDHFr+KICms+tuT1OXJwhCUmR2dKVy7psa8xzElSyzqx7oJyfJ1
317
+ JZyOzToj9T5SfTIq396agbHJWVfYphNahvZ/7uMXqHxf+ZH9BL1gk9Y6kCnbM5R6
318
+ 0gfwjyW1/dQPjOzn9N394zd2FJoFHwdq9Qs0wBugspULZVNRxq7veq/fzwIDAQAB
319
+ AoGBAJ8dRTQFhIllbHx4GLbpTQsWXJ6w4hZvskJKCLM/o8R4n+0W45pQ1xEiYKdA
320
+ Z/DRcnjltylRImBD8XuLL8iYOQSZXNMb1h3g5/UGbUXLmCgQLOUUlnYt34QOQm+0
321
+ KvUqfMSFBbKMsYBAoQmNdTHBaz3dZa8ON9hh/f5TT8u0OWNRAkEA5opzsIXv+52J
322
+ duc1VGyX3SwlxiE2dStW8wZqGiuLH142n6MKnkLU4ctNLiclw6BZePXFZYIK+AkE
323
+ xQ+k16je5QJBAN0TIKMPWIbbHVr5rkdUqOyezlFFWYOwnMmw/BKa1d3zp54VP/P8
324
+ +5aQ2d4sMoKEOfdWH7UqMe3FszfYFvSu5KMCQFMYeFaaEEP7Jn8rGzfQ5HQd44ek
325
+ lQJqmq6CE2BXbY/i34FuvPcKU70HEEygY6Y9d8J3o6zQ0K9SYNu+pcXt4lkCQA3h
326
+ jJQQe5uEGJTExqed7jllQ0khFJzLMx0K6tj0NeeIzAaGCQz13oo2sCdeGRHO4aDh
327
+ HH6Qlq/6UOV5wP8+GAcCQFgRCcB+hrje8hfEEefHcFpyKH+5g1Eu1k0mLrxK2zd+
328
+ 4SlotYRHgPCEubokb2S1zfZDWIXW3HmggnGgM949TlY=
329
+ -----END RSA PRIVATE KEY-----
330
+ verification_key: |
331
+ -----BEGIN PUBLIC KEY-----
332
+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHFr+KICms+tuT1OXJwhCUmR2d
333
+ KVy7psa8xzElSyzqx7oJyfJ1JZyOzToj9T5SfTIq396agbHJWVfYphNahvZ/7uMX
334
+ qHxf+ZH9BL1gk9Y6kCnbM5R60gfwjyW1/dQPjOzn9N394zd2FJoFHwdq9Qs0wBug
335
+ spULZVNRxq7veq/fzwIDAQAB
336
+ -----END PUBLIC KEY-----
337
+ cc:
338
+ client_secret: qwertyasdfgh
339
+ admin:
340
+ client_secret: qwertyasdfgh
341
+ batch:
342
+ username: batchuser
343
+ password: qwertyasdfgh
344
+ client:
345
+ autoapprove:
346
+ - cf
347
+ - my
348
+ - micro
349
+ - support-signon
350
+ - login
351
+ clients:
352
+ login:
353
+ override: true
354
+ scope: openid
355
+ authorities: oauth.login
356
+ secret: qwertyasdfgh
357
+ authorized-grant-types: authorization_code,client_credentials,refresh_token
358
+ redirect-uri: http://login.mycloud.com
359
+ support-services:
360
+ scope: scim.write,scim.read,openid,cloud_controller.read,cloud_controller.write
361
+ secret: qwertyasdfgh
362
+ authorized-grant-types: authorization_code,client_credentials
363
+ redirect-uri: http://support-signon.mycloud.com
364
+ authorities: portal.users.read
365
+ access-token-validity: 1209600
366
+ refresh-token-validity: 1209600
367
+ oauth2service:
368
+ secret: qwertyasdfgh
369
+ scope: openid,cloud_controller.read,cloud_controller.write
370
+ authorities: uaa.resource,oauth.service,clients.read,clients.write,clients.secret
371
+ authorized-grant-types: client_credentials,implicit
372
+ redirect-uri: http://rewritten-later.cloudfoundry.com/whatever
373
+ override: true
374
+ autoapprove: true
375
+ cf:
376
+ override: true
377
+ authorized-grant-types: password,implicit,refresh_token
378
+ authorities: uaa.none
379
+ scope: cloud_controller.read,cloud_controller.write,openid,password.write,cloud_controller.admin,scim.read,scim.write
380
+ access-token-validity: 7200
381
+ refresh-token-validity: 1209600
382
+ servicesmgmt:
383
+ override: true
384
+ secret: qwertyasdfgh
385
+ scope: openid,cloud_controller.read,cloud_controller.write
386
+ authorities: uaa.resource,oauth.service,clients.read,clients.write,clients.secret
387
+ authorized-grant-types: authorization_code,client_credentials,password,implicit
388
+ redirect-uri: http://servicesmgmt.mycloud.com/auth/cloudfoundry/callback
389
+ autoapprove: true
390
+ scim:
391
+ users:
392
+ - admin|qwertyasdfgh|scim.write,scim.read,openid,cloud_controller.admin
393
+ - services|qwertyasdfgh|scim.write,scim.read,openid,cloud_controller.admin