Class: Bosh::Cloudfoundry::ReleaseVersion

Inherits:
Object
  • Object
show all
Defined in:
lib/bosh/cloudfoundry/release_version.rb

Overview

This project should support all known versions of Cloud Foundry back to v132. v132 was the first release of Cloud Foundry v2.

This class represents an available release version, for which there are a subset of CPIs supported. From this class you can navigate to ReleaseVersionCpi for the CPI specific aspect of a release version; and from ReleaseVersionCpi you can navigate to one or more ReleaseVersionCpiSizes (deployment sizes).

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(version_number) ⇒ ReleaseVersion

Returns a new instance of ReleaseVersion.



43
44
45
# File 'lib/bosh/cloudfoundry/release_version.rb', line 43

def initialize(version_number)
  @version_number = version_number
end

Instance Attribute Details

#version_numberObject (readonly)

Returns the value of attribute version_number.



9
10
11
# File 'lib/bosh/cloudfoundry/release_version.rb', line 9

def version_number
  @version_number
end

Class Method Details

.available_version(version_number) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/bosh/cloudfoundry/release_version.rb', line 26

def self.available_version(version_number)
  available_version, *versions = available_versions
  while versions && versions.size > 0
    version, *versions = versions
    if version <= version_number
      available_version = version
    else
      return available_version
    end
  end
  available_version
end

.available_versionsObject

converts templates/v132, templates/v140, etc into [132, 140]



17
18
19
20
21
22
23
24
# File 'lib/bosh/cloudfoundry/release_version.rb', line 17

def self.available_versions
  @available_versions ||= begin
    Dir[File.join(base_template_dir, "v*")].
      map {|dir| File.basename(dir)}.
      map {|version| version[1..-1].to_i}.
      sort
  end
end

.base_template_dirObject



76
77
78
# File 'lib/bosh/cloudfoundry/release_version.rb', line 76

def self.base_template_dir
  File.expand_path("../../../../templates", __FILE__)
end

.for_version(version_number) ⇒ Object



11
12
13
14
# File 'lib/bosh/cloudfoundry/release_version.rb', line 11

def self.for_version(version_number)
  raise "Minimum release version is 132; #{version_number} is too small" if version_number.to_i < 132
  ReleaseVersion.new(available_version(version_number))
end

.latest_version_numberObject



39
40
41
# File 'lib/bosh/cloudfoundry/release_version.rb', line 39

def self.latest_version_number
  available_versions.last
end

Instance Method Details

#available_cpi_namesObject



64
65
66
# File 'lib/bosh/cloudfoundry/release_version.rb', line 64

def available_cpi_names
  spec["available_cpi"]
end

#bosh_release_dirObject



72
73
74
# File 'lib/bosh/cloudfoundry/release_version.rb', line 72

def bosh_release_dir
  File.expand_path("../../../../bosh_release", __FILE__)
end

#immutable_attributesObject

Attributes & their values that are not to be changed over time



60
61
62
# File 'lib/bosh/cloudfoundry/release_version.rb', line 60

def immutable_attributes
  spec["immutable_attributes"]
end

#mutable_attributesObject

Attributes & their values that can be changed via setters & deployment re-deployed successfully



55
56
57
# File 'lib/bosh/cloudfoundry/release_version.rb', line 55

def mutable_attributes
  spec["mutable_attributes"]
end

#release_nameObject



47
48
49
50
51
52
# File 'lib/bosh/cloudfoundry/release_version.rb', line 47

def release_name
  @release_name ||= begin
    release_yml = Dir[File.join(bosh_release_dir, "releases", "*-#{release_version}.yml")].first
    YAML.load_file(release_yml)["name"]
  end
end

#specObject



88
89
90
# File 'lib/bosh/cloudfoundry/release_version.rb', line 88

def spec
  @spec ||= YAML.load_file(spec_path)
end

#spec_pathObject



84
85
86
# File 'lib/bosh/cloudfoundry/release_version.rb', line 84

def spec_path
  File.join(template_dir, "spec")
end

#template_dirObject



80
81
82
# File 'lib/bosh/cloudfoundry/release_version.rb', line 80

def template_dir
  File.join(self.class.base_template_dir, "v#{version_number}")
end

#valid_cpi?(cpi) ⇒ Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/bosh/cloudfoundry/release_version.rb', line 68

def valid_cpi?(cpi)
  available_cpi_names.include?(cpi)
end