Class: Vagrant::RsVagrantShim::Provisioners::RsVagrantShim::Config

Inherits:
Provisioners::ChefSolo::Config
  • Object
show all
Defined in:
lib/rs_vagrant_shim/vagrant/rs_vagrant_shim/provisioners/rs_vagrant_shim.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#one_time_runlist_fileObject (readonly)

Returns the value of attribute one_time_runlist_file.



30
31
32
# File 'lib/rs_vagrant_shim/vagrant/rs_vagrant_shim/provisioners/rs_vagrant_shim.rb', line 30

def one_time_runlist_file
  @one_time_runlist_file
end

#run_list_dirObject

Returns the value of attribute run_list_dir.



29
30
31
# File 'lib/rs_vagrant_shim/vagrant/rs_vagrant_shim/provisioners/rs_vagrant_shim.rb', line 29

def run_list_dir
  @run_list_dir
end

#shim_dirObject

Returns the value of attribute shim_dir.



28
29
30
# File 'lib/rs_vagrant_shim/vagrant/rs_vagrant_shim/provisioners/rs_vagrant_shim.rb', line 28

def shim_dir
  @shim_dir
end

Instance Method Details

#validate(env, errors) ⇒ Object

TODO: Better error handling, verify shim dir and runlist dir exist, catch json errors when parsing runlists



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/rs_vagrant_shim/vagrant/rs_vagrant_shim/provisioners/rs_vagrant_shim.rb', line 33

def validate(env, errors)

  errors.add(I18n.t("vagrant.config.rs_vagrant_shim.shim_dir_missing")) if !@shim_dir || @shim_dir.empty?
  errors.add(I18n.t("vagrant.config.rs_vagrant_shim.run_list_dir_missing")) if !@run_list_dir || @run_list_dir.empty?

  if @shim_dir && !@shim_dir.empty? && @run_list_dir && !@run_list_dir.empty?
    node_js_file = File.join(Dir.pwd, @shim_dir, 'node.js')
    dispatch_dir = File.join(Dir.pwd, @shim_dir, 'dispatch')
    FileUtils.mkdir_p dispatch_dir unless File.directory? dispatch_dir

    dispatch_files = Dir.entries(dispatch_dir).reject{|f| /^\.+/ =~ f}.sort_by{|f| File.mtime(File.join(dispatch_dir, f))}

    runlist = JSON.parse(File.read(File.join(Dir.pwd, @run_list_dir, 'default.json')))

    if File.exist? node_js_file
      runlist.merge! JSON.parse(File.read(node_js_file))["normal"]
    end

    # A specified runlist trumps all, but still inherits from default
    if ENV['runlist']
      runlist_file = File.join(Dir.pwd, @run_list_dir, "#{ENV['runlist']}.json")
      runlist.merge!(JSON.parse(File.read(runlist_file))) if File.exist? runlist_file
    elsif dispatch_files.length > 0
      dispatch_file = File.join(dispatch_dir, dispatch_files.first)
      runlist.merge!(JSON.parse(File.read(dispatch_file)))
      @one_time_runlist_file = dispatch_file
    end

    @json = {:rs_vagrant_shim => to_hash}.merge(runlist)
    @run_list = runlist['run_list']
  end

  super(env, errors)
end