class Bosh::Compose::Renderer

Public Instance Methods

add_nested_property(map, key, value) click to toggle source

car.make set_value(“car.make”)

map[car] = [make]

set_value(“car.model”) map = [make, model]

set_value(“car.features.power_windows”)

map[car] = set_value("features.power_windows")
map[car] = map[features] = [power_windows]
# File lib/bosh-compose.rb, line 61
def add_nested_property(map, key, value)
  if !key.include? '.'
    if map[key].nil?
      map[key] = value
    end

    return
  end

  keys = key.split '.'
  if map[keys.first].nil?
    map[keys.first] = {}
  end

  add_nested_property map[keys.first], keys.drop(1).join('.'), value
end
look_for_spec_relative_to(template_file) click to toggle source

Attempts to find a relevant spec file based on template file location

# File lib/bosh-compose.rb, line 29
def look_for_spec_relative_to(template_file)
  job_root = File.expand_path('..', File.dirname(template_file))
  spec_path = File.join(job_root, 'spec')
  if !File.exists? spec_path
    STDERR.puts "no spec file found relative to template file"
    return
  end

  STDERR.puts "found spec file at #{spec_path}, importing."
  spec = File.read(spec_path)
  return YAML.load(spec)
end
render(template_file, deployment_manifest_file) click to toggle source
# File lib/bosh-compose.rb, line 8
def render(template_file, deployment_manifest_file)
  spec = look_for_spec_relative_to(template_file)

  manifest_yaml = File.read(deployment_manifest_file)
  manifest = YAML.load(manifest_yaml)
  manifest = set_defaults_from_spec(manifest, spec) if spec != nil

  context = {
    "index": 0,
    "job": {
      "name": "some-job-name"
    },
    "properties": manifest["properties"]
  }
  context_json = JSON.generate(context)

  renderer = Bosh::Template::Renderer.new(context: context_json)
  renderer.render(template_file)
end
set_defaults_from_spec(manifest, spec) click to toggle source
# File lib/bosh-compose.rb, line 42
def set_defaults_from_spec(manifest, spec)
  spec["properties"].map do |key, value|
    if !manifest["properties"].key? key
      add_nested_property(manifest["properties"], key, value["default"])
    end
  end
  return manifest
end