bosh-director 1.2579.0 → 1.2583.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -20,13 +20,26 @@ module Bosh::Director
20
20
  # @param [Models::Release] release Release model
21
21
  # @param [String] version Release version
22
22
  # @return [Models::ReleaseVersion] Release version model
23
- # @raise [ReleaseVersionNotFound]
23
+ # @raise [ReleaseVersionInvalid, ReleaseVersionNotFound]
24
24
  def find_version(release, version)
25
25
  dataset = release.versions_dataset
26
+
26
27
  release_version = dataset.filter(:version => version).first
27
28
  if release_version.nil?
28
- raise ReleaseVersionNotFound,
29
- "Release version `#{release.name}/#{version}' doesn't exist"
29
+ begin
30
+ # specified version not found, try formatted version
31
+ formatted_version = Bosh::Common::VersionNumber.parse(version).to_s
32
+ unless version == formatted_version
33
+ # only check db if the formatted version is different
34
+ release_version = dataset.filter(:version => formatted_version).first
35
+ end
36
+ if release_version.nil?
37
+ raise ReleaseVersionNotFound,
38
+ "Release version `#{release.name}/#{version}' doesn't exist"
39
+ end
40
+ rescue SemiSemantic::ParseError
41
+ raise ReleaseVersionInvalid, "Release version invalid: #{version}"
42
+ end
30
43
  end
31
44
 
32
45
  release_version
@@ -70,6 +70,7 @@ module Bosh::Director
70
70
  ReleaseInUse = err(30007)
71
71
  ReleaseVersionInUse = err(30008)
72
72
  ReleaseDeleteFailed = err(30009)
73
+ ReleaseVersionInvalid = err(30010)
73
74
 
74
75
  ValidationInvalidType = err(40000)
75
76
  ValidationMissingField = err(40001)
@@ -158,13 +158,13 @@ module Bosh::Director
158
158
  with_release_lock(@name, :timeout => 10) do
159
159
  logger.info("Looking up release: #{@name}")
160
160
  release = @release_manager.find_by_name(@name)
161
- desc = "#{@name}/#{@version}"
162
- logger.info("Found: #{release.name}")
161
+ logger.info("Found release: #{release.name}")
163
162
 
164
163
  if @version
165
- logger.info("Looking up release version `#{desc}'")
164
+ logger.info("Looking up release version `#{release.name}/#{@version}'")
166
165
  release_version = @release_manager.find_version(release, @version)
167
- logger.info("Found release version `#{desc}'")
166
+ # found version may be different than the requested version, due to version formatting
167
+ logger.info("Found release version: `#{release.name}/#{release_version.version}'")
168
168
  logger.info("Checking for any deployments still using " +
169
169
  "this particular release version")
170
170
 
@@ -173,7 +173,7 @@ module Bosh::Director
173
173
  unless deployments.empty?
174
174
  names = deployments.map{ |d| d.name }.join(", ")
175
175
  raise ReleaseVersionInUse,
176
- "ReleaseVersion `#{desc}' is still in use by: #{names}"
176
+ "ReleaseVersion `#{release.name}/#{release_version.version}' is still in use by: #{names}"
177
177
  end
178
178
 
179
179
  delete_release_version(release_version)
@@ -186,7 +186,7 @@ module Bosh::Director
186
186
  unless deployments.empty?
187
187
  names = deployments.map { |d| d.name }.join(", ")
188
188
  raise ReleaseInUse,
189
- "Release `#{@name}' is still in use by: #{names}"
189
+ "Release `#{release.name}' is still in use by: #{names}"
190
190
  end
191
191
 
192
192
  delete_release(release)
@@ -24,8 +24,11 @@ module Bosh::Director
24
24
  release_version_version = manifest.fetch('release_version')
25
25
 
26
26
  release = Bosh::Director::Models::Release[name: release_name]
27
+ if release.nil?
28
+ raise ReleaseNotFound, "Release version `#{release}/#{release_version_version}' doesn't exist"
29
+ end
27
30
 
28
- release_version = Bosh::Director::Models::ReleaseVersion[version: release_version_version, release: release]
31
+ release_version = Bosh::Director::Api::ReleaseManager.new.find_version(release, release_version_version)
29
32
  inserter = Bosh::Director::CompiledPackage::CompiledPackageInserter.new(@blobstore_client)
30
33
 
31
34
  packages.each { |p| p.check_blob_sha }
@@ -34,9 +34,9 @@ module Bosh::Director
34
34
 
35
35
  @packages_unchanged = false
36
36
  @jobs_unchanged = false
37
-
37
+
38
38
  @remote_release = options['remote'] || false
39
- @remote_release_location = options['location'] if @remote_release
39
+ @remote_release_location = options['location'] if @remote_release
40
40
  end
41
41
 
42
42
  # Extracts release tarball, verifies release manifest and saves release
@@ -69,7 +69,7 @@ module Bosh::Director
69
69
  end
70
70
  end
71
71
 
72
- def download_remote_release
72
+ def download_remote_release
73
73
  release_file = File.join(@tmp_release_dir, Api::ReleaseManager::RELEASE_TGZ)
74
74
  download_remote_file('release', @remote_release_location, release_file)
75
75
  end
@@ -104,7 +104,16 @@ module Bosh::Director
104
104
  normalize_manifest
105
105
 
106
106
  @name = @manifest["name"]
107
- @version = @manifest["version"]
107
+
108
+ begin
109
+ @version = Bosh::Common::VersionNumber.parse(@manifest["version"])
110
+ unless @version == @manifest["version"]
111
+ logger.info("Formatted version '#{@manifest["version"]}' => '#{@version}'")
112
+ end
113
+ rescue SemiSemantic::ParseError
114
+ raise ReleaseVersionInvalid, "Release version invalid: #{@manifest["version"]}"
115
+ end
116
+
108
117
  @commit_hash = @manifest.fetch("commit_hash", nil)
109
118
  @uncommitted_changes = @manifest.fetch("uncommitted_changes", nil)
110
119
  end
@@ -113,13 +122,14 @@ module Bosh::Director
113
122
  # @return [void]
114
123
  def process_release
115
124
  @release_model = Models::Release.find_or_create(:name => @name)
125
+
116
126
  if @rebase
117
127
  @version = next_release_version
118
128
  end
119
129
 
120
130
  version_attrs = {
121
131
  :release => @release_model,
122
- :version => @version
132
+ :version => @version.to_s
123
133
  }
124
134
  version_attrs[:uncommitted_changes] = @uncommitted_changes if @uncommitted_changes
125
135
  version_attrs[:commit_hash] = @commit_hash if @commit_hash
@@ -223,27 +233,6 @@ module Bosh::Director
223
233
  next
224
234
  end
225
235
 
226
- # Rebase is an interesting use case: we don't really care about
227
- # preserving the original package/job versions, so if we have a
228
- # checksum/fingerprint match, we can just substitute the original
229
- # package/job version with an existing one.
230
- if @rebase
231
- substitutes = packages.select do |package|
232
- package.release_id == @release_model.id &&
233
- package.name == package_meta["name"] &&
234
- package.dependency_set == Set.new(package_meta["dependencies"])
235
- end
236
-
237
- substitute = pick_best(substitutes, package_meta["version"])
238
-
239
- if substitute
240
- package_meta["version"] = substitute.version
241
- package_meta["sha1"] = substitute.sha1
242
- existing_packages << [substitute, package_meta]
243
- next
244
- end
245
- end
246
-
247
236
  # We can reuse an existing package as long as it
248
237
  # belongs to the same release and has the same name and version.
249
238
  existing_package = packages.find do |package|
@@ -333,17 +322,6 @@ module Bosh::Director
333
322
  :version => version
334
323
  }
335
324
 
336
- if @rebase
337
- new_version = next_package_version(name, version)
338
- if new_version != version
339
- transition = "#{version} -> #{new_version}"
340
- logger.info("Package `#{name}' rebased: #{transition}")
341
- package_attrs[:version] = new_version
342
- version = new_version
343
- @package_rebase_mapping[name] = transition
344
- end
345
- end
346
-
347
325
  package = Models::Package.new(package_attrs)
348
326
  package.dependency_set = package_meta["dependencies"]
349
327
 
@@ -400,25 +378,6 @@ module Bosh::Director
400
378
  # Checking whether we might have the same bits somewhere
401
379
  jobs = Models::Template.where(filter).all
402
380
 
403
- if @rebase
404
- substitutes = jobs.select do |job|
405
- job.release_id == @release_model.id &&
406
- job.name == job_meta["name"]
407
- end
408
-
409
- substitute = pick_best(substitutes, job_meta["version"])
410
-
411
- if substitute
412
- job_meta["version"] = substitute.version
413
- job_meta["sha1"] = substitute.sha1
414
- existing_jobs << [substitute, job_meta]
415
- else
416
- new_jobs << job_meta
417
- end
418
-
419
- next
420
- end
421
-
422
381
  template = jobs.find do |job|
423
382
  job.release_id == @release_model.id &&
424
383
  job.name == job_meta["name"] &&
@@ -464,17 +423,6 @@ module Bosh::Director
464
423
  :version => version
465
424
  }
466
425
 
467
- if @rebase
468
- new_version = next_template_version(name, version)
469
- if new_version != version
470
- transition = "#{version} -> #{new_version}"
471
- logger.info("Job `#{name}' rebased: #{transition}")
472
- template_attrs[:version] = new_version
473
- version = new_version
474
- @job_rebase_mapping[name] = transition
475
- end
476
- end
477
-
478
426
  logger.info("Creating job template `#{name}/#{version}' " +
479
427
  "from provided bits")
480
428
  template = Models::Template.new(template_attrs)
@@ -600,42 +548,10 @@ module Bosh::Director
600
548
  attrs = {
601
549
  :release_id => @release_model.id
602
550
  }
603
- next_version(Models::ReleaseVersion.filter(attrs).all, @version)
604
- end
605
-
606
- # Returns the next package version (to be used for rebased package)
607
- # @param [String] name Package name
608
- # @param [String] version Package version
609
- # @return [String]
610
- def next_package_version(name, version)
611
- attrs = {
612
- :release_id => @release_model.id,
613
- :name => name
614
- }
615
-
616
- next_version(Models::Package.filter(attrs).all, version)
617
- end
618
-
619
- # Returns the next job template version (to be used for rebased template)
620
- # @param [String] name Template name
621
- # @param [Fixnum] version Template version
622
- # @return [String]
623
- def next_template_version(name, version)
624
- attrs = {
625
- :release_id => @release_model.id,
626
- :name => name
627
- }
628
-
629
- next_version(Models::Template.filter(attrs).all, version)
630
- end
631
-
632
- # Takes collection of versioned items and returns the version
633
- # that new item should be promoted to if auto-versioning is used
634
- # @param [Array<#version>] Collection of items
635
- # @param [String] version Current version of item
636
- # @return [String] Next version to be used
637
- def next_version(collection, version)
638
- Bosh::Director::NextRebaseVersion.new(collection).calculate(version)
551
+ models = Models::ReleaseVersion.filter(attrs).all
552
+ strings = models.map(&:version)
553
+ versions = Bosh::Common::VersionNumber.parse_list(strings)
554
+ Bosh::Director::NextRebaseVersion.new(versions).calculate(@version)
639
555
  end
640
556
 
641
557
  # Removes release version model, along with all packages and templates.
@@ -647,26 +563,6 @@ module Bosh::Director
647
563
  @release_version_model.remove_all_templates
648
564
  @release_version_model.destroy
649
565
  end
650
-
651
- # Picks the best matching package/job from collection based on a simple
652
- # heuristics: items with same version are preferred, then items
653
- # with non-dev versions, then items with most compiled packages,
654
- # then everything else.
655
- # @param [Array<#name,#version>] collection
656
- # @param [String] original_version
657
- def pick_best(collection, original_version)
658
- collection.sort_by { |item|
659
- if item.version == original_version
660
- 1
661
- elsif Bosh::Common::VersionNumber.new(item.version).final?
662
- 2
663
- elsif item.is_a?(Bosh::Director::Models::Package)
664
- 3000 - [item.compiled_packages.size, 900].min
665
- else
666
- 3000
667
- end
668
- }.first
669
- end
670
566
  end
671
567
  end
672
- end
568
+ end
@@ -22,7 +22,7 @@ require 'bosh/director/models/rendered_templates_archive'
22
22
 
23
23
  module Bosh::Director
24
24
  module Models
25
- VALID_ID = /^[-a-z0-9_.]+$/i
25
+ VALID_ID = /^[-0-9A-Za-z_+.]+$/i
26
26
 
27
27
  autoload :Dns, 'bosh/director/models/dns'
28
28
  end
@@ -1,20 +1,34 @@
1
+ require 'semi_semantic/version'
2
+
1
3
  module Bosh::Director
2
4
  class NextRebaseVersion
5
+
6
+ # See Bosh::Common::VersionNumber.parse_list to parse a list of strings
3
7
  def initialize(existing_versions)
8
+ existing_versions.each { |v| raise TypeError, "Invalid Version Type: #{v.class}" unless v.is_a?(SemiSemantic::Version) }
4
9
  @existing_versions = existing_versions
5
10
  end
6
11
 
7
- def calculate(current_version)
8
- current_version = Bosh::Common::VersionNumber.new(current_version)
9
- versions = @existing_versions.map { |item| Bosh::Common::VersionNumber.new(item.version) }
12
+ def calculate(version)
13
+ raise TypeError, "Invalid Version Type: #{version.class}" unless version.is_a?(SemiSemantic::Version)
10
14
 
11
- return current_version.to_s if current_version.final?
15
+ # Only rebase post-release versions
16
+ return version if version.post_release.nil?
12
17
 
13
- latest = versions.select { |version|
14
- version.major == current_version.major
18
+ # Find the latest existing version with the same release and pre-release segments as the provided version
19
+ latest = @existing_versions.select { |v|
20
+ v.release == version.release && v.pre_release == version.pre_release
15
21
  }.max
16
22
 
17
- latest ? latest.next_minor.dev.to_s : "#{current_version.major}.1-dev"
23
+ if latest
24
+ if latest.post_release.nil?
25
+ SemiSemantic::Version.new(latest.release, latest.pre_release, Bosh::Common::VersionNumber::DEFAULT_DEV_RELEASE_SEGMENT)
26
+ else
27
+ SemiSemantic::Version.new(latest.release, latest.pre_release, latest.post_release.increment)
28
+ end
29
+ else
30
+ SemiSemantic::Version.new(version.release, version.pre_release, Bosh::Common::VersionNumber::DEFAULT_DEV_RELEASE_SEGMENT)
31
+ end
18
32
  end
19
33
  end
20
- end
34
+ end
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Director
3
- VERSION = '1.2579.0'
3
+ VERSION = '1.2583.0'
4
4
  end
5
5
  end
data/lib/cloud/dummy.rb CHANGED
@@ -127,10 +127,6 @@ module Bosh
127
127
  FileUtils.rm(snapshot_file(snapshot_id))
128
128
  end
129
129
 
130
- def validate_deployment(old_manifest, new_manifest)
131
- raise NotImplemented, 'Dummy CPI does not implement validate_deployment'
132
- end
133
-
134
130
  # Additional Dummy test helpers
135
131
 
136
132
  def vm_cids
@@ -0,0 +1,31 @@
1
+ module Bosh::Clouds
2
+ class Provider
3
+ def self.create(cloud_config, director_uuid)
4
+ if cloud_config.fetch('external_cpi', {}).fetch('enabled', false)
5
+ ExternalCpiProvider.create(cloud_config['external_cpi'], director_uuid)
6
+ else
7
+ PluginCloudProvider.create(cloud_config['plugin'], cloud_config['properties'])
8
+ end
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ class PluginCloudProvider
15
+ def self.create(plugin, options)
16
+ begin
17
+ require "cloud/#{plugin}"
18
+ rescue LoadError => error
19
+ raise CloudError, "Could not load Cloud Provider Plugin: #{plugin}, with error #{error.inspect}"
20
+ end
21
+
22
+ Bosh::Clouds.const_get(plugin.capitalize).new(options)
23
+ end
24
+ end
25
+
26
+ class ExternalCpiProvider
27
+ def self.create(external_cpi_config, director_uuid)
28
+ ExternalCpi.new(external_cpi_config['cpi_path'], director_uuid)
29
+ end
30
+ end
31
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-director
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2579.0
4
+ version: 1.2583.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: 2014-05-24 00:00:00.000000000 Z
12
+ date: 2014-05-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bcrypt-ruby
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 1.2579.0
37
+ version: 1.2583.0
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 1.2579.0
45
+ version: 1.2583.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: bosh-core
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: 1.2579.0
53
+ version: 1.2583.0
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -58,7 +58,7 @@ dependencies:
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 1.2579.0
61
+ version: 1.2583.0
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: bosh-director-core
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +66,7 @@ dependencies:
66
66
  requirements:
67
67
  - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 1.2579.0
69
+ version: 1.2583.0
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,7 +74,7 @@ dependencies:
74
74
  requirements:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: 1.2579.0
77
+ version: 1.2583.0
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: bosh_common
80
80
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +82,7 @@ dependencies:
82
82
  requirements:
83
83
  - - ~>
84
84
  - !ruby/object:Gem::Version
85
- version: 1.2579.0
85
+ version: 1.2583.0
86
86
  type: :runtime
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +90,7 @@ dependencies:
90
90
  requirements:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
- version: 1.2579.0
93
+ version: 1.2583.0
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: bosh_cpi
96
96
  requirement: !ruby/object:Gem::Requirement
@@ -98,7 +98,7 @@ dependencies:
98
98
  requirements:
99
99
  - - ~>
100
100
  - !ruby/object:Gem::Version
101
- version: 1.2579.0
101
+ version: 1.2583.0
102
102
  type: :runtime
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
@@ -106,7 +106,7 @@ dependencies:
106
106
  requirements:
107
107
  - - ~>
108
108
  - !ruby/object:Gem::Version
109
- version: 1.2579.0
109
+ version: 1.2583.0
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: bosh_openstack_cpi
112
112
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +114,7 @@ dependencies:
114
114
  requirements:
115
115
  - - ~>
116
116
  - !ruby/object:Gem::Version
117
- version: 1.2579.0
117
+ version: 1.2583.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
@@ -122,7 +122,7 @@ dependencies:
122
122
  requirements:
123
123
  - - ~>
124
124
  - !ruby/object:Gem::Version
125
- version: 1.2579.0
125
+ version: 1.2583.0
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: bosh_aws_cpi
128
128
  requirement: !ruby/object:Gem::Requirement
@@ -130,7 +130,7 @@ dependencies:
130
130
  requirements:
131
131
  - - ~>
132
132
  - !ruby/object:Gem::Version
133
- version: 1.2579.0
133
+ version: 1.2583.0
134
134
  type: :runtime
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
@@ -138,7 +138,7 @@ dependencies:
138
138
  requirements:
139
139
  - - ~>
140
140
  - !ruby/object:Gem::Version
141
- version: 1.2579.0
141
+ version: 1.2583.0
142
142
  - !ruby/object:Gem::Dependency
143
143
  name: bosh_vsphere_cpi
144
144
  requirement: !ruby/object:Gem::Requirement
@@ -146,7 +146,7 @@ dependencies:
146
146
  requirements:
147
147
  - - ~>
148
148
  - !ruby/object:Gem::Version
149
- version: 1.2579.0
149
+ version: 1.2583.0
150
150
  type: :runtime
151
151
  prerelease: false
152
152
  version_requirements: !ruby/object:Gem::Requirement
@@ -154,7 +154,7 @@ dependencies:
154
154
  requirements:
155
155
  - - ~>
156
156
  - !ruby/object:Gem::Version
157
- version: 1.2579.0
157
+ version: 1.2583.0
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: bosh_warden_cpi
160
160
  requirement: !ruby/object:Gem::Requirement
@@ -162,7 +162,7 @@ dependencies:
162
162
  requirements:
163
163
  - - ~>
164
164
  - !ruby/object:Gem::Version
165
- version: 1.2579.0
165
+ version: 1.2583.0
166
166
  type: :runtime
167
167
  prerelease: false
168
168
  version_requirements: !ruby/object:Gem::Requirement
@@ -170,7 +170,7 @@ dependencies:
170
170
  requirements:
171
171
  - - ~>
172
172
  - !ruby/object:Gem::Version
173
- version: 1.2579.0
173
+ version: 1.2583.0
174
174
  - !ruby/object:Gem::Dependency
175
175
  name: bosh_vcloud_cpi
176
176
  requirement: !ruby/object:Gem::Requirement
@@ -288,17 +288,17 @@ dependencies:
288
288
  requirement: !ruby/object:Gem::Requirement
289
289
  none: false
290
290
  requirements:
291
- - - ~>
291
+ - - ! '>='
292
292
  - !ruby/object:Gem::Version
293
- version: 10.0.3
293
+ version: '0'
294
294
  type: :runtime
295
295
  prerelease: false
296
296
  version_requirements: !ruby/object:Gem::Requirement
297
297
  none: false
298
298
  requirements:
299
- - - ~>
299
+ - - ! '>='
300
300
  - !ruby/object:Gem::Version
301
- version: 10.0.3
301
+ version: '0'
302
302
  - !ruby/object:Gem::Dependency
303
303
  name: redis
304
304
  requirement: !ruby/object:Gem::Requirement
@@ -459,9 +459,25 @@ dependencies:
459
459
  - - ~>
460
460
  - !ruby/object:Gem::Version
461
461
  version: 0.0.2
462
+ - !ruby/object:Gem::Dependency
463
+ name: semi_semantic
464
+ requirement: !ruby/object:Gem::Requirement
465
+ none: false
466
+ requirements:
467
+ - - ~>
468
+ - !ruby/object:Gem::Version
469
+ version: 1.1.0
470
+ type: :runtime
471
+ prerelease: false
472
+ version_requirements: !ruby/object:Gem::Requirement
473
+ none: false
474
+ requirements:
475
+ - - ~>
476
+ - !ruby/object:Gem::Version
477
+ version: 1.1.0
462
478
  description: ! 'BOSH Director
463
479
 
464
- 4fef83'
480
+ b96a92'
465
481
  email: support@cloudfoundry.com
466
482
  executables:
467
483
  - bosh-director
@@ -693,6 +709,7 @@ files:
693
709
  - lib/bosh/director/vm_metadata_updater.rb
694
710
  - lib/bosh/director/vm_reuser.rb
695
711
  - lib/cloud/dummy.rb
712
+ - lib/cloud/provider.rb
696
713
  - CHANGELOG
697
714
  - bin/bosh-director
698
715
  - bin/bosh-director-console
@@ -721,10 +738,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
721
738
  version: '0'
722
739
  segments:
723
740
  - 0
724
- hash: 3881888844669519304
741
+ hash: 3045382623018678181
725
742
  requirements: []
726
743
  rubyforge_project:
727
- rubygems_version: 1.8.23
744
+ rubygems_version: 1.8.23.2
728
745
  signing_key:
729
746
  specification_version: 3
730
747
  summary: BOSH Director