class Bosh::Director::DeploymentPlan::CompilationConfig

Represents the deployment compilation worker configuration.

Attributes

availability_zone[R]
cloud_properties[R]

@return [Hash] cloud properties to use when creating VMs. (optional)

env[RW]

@return [Hash] environment to use when creating VMs. (optional)

network_name[R]
reuse_compilation_vms[RW]

@return [Bool] if VMs should be reused for compilation tasks. (optional)

vm_extensions[R]
vm_type[R]
workers[RW]

@return [Integer] number of worker VMs to use

Public Class Methods

new(compilation_config, azs_list, vm_types = [], vm_extensions = []) click to toggle source
# File lib/bosh/director/deployment_plan/compilation_config.rb, line 28
def initialize(compilation_config, azs_list, vm_types = [], vm_extensions = [])
  @workers = safe_property(compilation_config, 'workers', class: Integer, min: 1)

  @network_name = safe_property(compilation_config, 'network', class: String)

  @reuse_compilation_vms = safe_property(compilation_config,
    'reuse_compilation_vms',
    class: :boolean,
    optional: true)

  @cloud_properties = safe_property(
    compilation_config, 'cloud_properties', class: Hash, default: {})
  @env = safe_property(compilation_config, 'env', class: Hash, optional: true, default: {})

  parse_availability_zone(azs_list, compilation_config)

  parse_vm_type(compilation_config, vm_types)

  parse_vm_extensions(compilation_config, vm_extensions)

end

Public Instance Methods

availability_zone_name() click to toggle source
# File lib/bosh/director/deployment_plan/compilation_config.rb, line 50
def availability_zone_name
  @availability_zone.nil? ? nil : @availability_zone.name
end

Private Instance Methods

parse_availability_zone(azs_list, compilation_config) click to toggle source
# File lib/bosh/director/deployment_plan/compilation_config.rb, line 56
def parse_availability_zone(azs_list, compilation_config)
  az_name = safe_property(compilation_config, 'az', class: String, optional: true)
  @availability_zone = azs_list[az_name]
  if az_name && !az_name.empty? && @availability_zone.nil?
    raise Bosh::Director::CompilationConfigInvalidAvailabilityZone,
          "Compilation config references unknown az '#{az_name}'. Known azs are: [#{azs_list.keys.join(', ')}]"
  end
end
parse_vm_extensions(compilation_config, vm_extensions) click to toggle source
# File lib/bosh/director/deployment_plan/compilation_config.rb, line 83
def parse_vm_extensions(compilation_config, vm_extensions)
  @vm_extensions = []

  vm_extension_names = safe_property(compilation_config, 'vm_extensions', class: Array, optional: true)
  Array(vm_extension_names).each { |vm_extension_name|
    vm_extension = vm_extensions.find { |vm_extension| vm_extension.name == vm_extension_name }

    if vm_extension.nil?
      vm_extensions_names = vm_extensions.map { |vm_extension| vm_extension.name }
      raise Bosh::Director::CompilationConfigInvalidVmExtension,
            "Compilation config references unknown vm extension '#{vm_extension_name}'. Known vm extensions are: #{vm_extensions_names.join(', ')}"
    end

    if @vm_type.nil?
      raise Bosh::Director::CompilationConfigVmTypeRequired,
            "Compilation config is using vm extension '#{vm_extension.name}' and must configure a vm type."
    end

    @vm_extensions.push(vm_extension)
  }
end
parse_vm_type(compilation_config, vm_types) click to toggle source
# File lib/bosh/director/deployment_plan/compilation_config.rb, line 65
def parse_vm_type(compilation_config, vm_types)
  vm_type_name = safe_property(compilation_config, 'vm_type', class: String, optional: true)
  if vm_type_name
    @vm_type = vm_types.find { |vm_type| vm_type.name == vm_type_name }

    if @vm_type.nil?
      vm_types_names = vm_types.map { |vm_type| vm_type.name }
      raise Bosh::Director::CompilationConfigInvalidVmType,
            "Compilation config references unknown vm type '#{vm_type_name}'. Known vm types are: #{vm_types_names.join(', ')}"
    end

    unless @cloud_properties.empty?
      raise Bosh::Director::CompilationConfigCloudPropertiesNotAllowed,
            "Compilation config is using vm type '#{@vm_type.name}' and should not be configuring cloud_properties."
    end
  end
end