Sha256: 56c7cb6caf38309f7f2e886fdd961c14a4236ca86c4208b32cdd2613de7373aa

Contents?: true

Size: 1.97 KB

Versions: 1

Compression:

Stored size: 1.97 KB

Contents

# -*- encoding: utf-8 -*-

require 'forwardable'
require 'vagrant'

require 'jamie'

module Jamie

  module Vagrant

    # A Vagrant confiuration class which wraps a Jamie::Config instance.
    class Config < ::Vagrant::Config::Base
      extend Forwardable

      def_delegators :@config, :suites, :suites=, :platforms, :platforms=,
        :instances, :yaml_file, :yaml_file=, :log_level, :log_level=,
        :data_bags_base_path, :data_bags_base_path=, :yaml_data

      def initialize
        @config = Jamie::Config.new
      end
    end

    # Defines all Vagrant virtual machines, one for each instance.
    #
    # @param config [Vagrant::Config::Top] Vagrant top level config object
    def self.define_vms(config)
      config.jamie.instances.each do |instance|
        define_vagrant_vm(config, instance)
      end
    end

    private

    def self.define_vagrant_vm(config, instance)
      driver = instance.platform.driver

      config.vm.define instance.name do |c|
        c.vm.box = driver['box']
        c.vm.box_url = driver['box_url'] if driver['box_url']
        c.vm.host_name = "#{instance.name}.vagrantup.com"
        c.vm.customize ["modifyvm", :id, "--memory", driver['memory']]

        c.vm.provision :chef_solo do |chef|
          chef.log_level = config.jamie.log_level
          chef.run_list = instance.run_list
          chef.json = instance.json
          chef.data_bags_path = calculate_data_bags_path(config, instance)
        end
      end
    end

    def self.calculate_data_bags_path(config, instance)
      base_path = config.jamie.data_bags_base_path
      instance_data_bags_path = File.join(base_path, instance.name, "data_bags")
      common_data_bags_path = File.join(base_path, "data_bags")

      if File.directory?(instance_data_bags_path)
        instance_data_bags_path
      elsif File.directory?(common_data_bags_path)
        common_data_bags_path
      else
        nil
      end
    end
  end
end

Vagrant.config_keys.register(:jamie) { Jamie::Vagrant::Config }

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jamie-0.1.0.alpha2 lib/jamie/vagrant.rb