lib/elzar/assistant.rb in elzar-0.0.1 vs lib/elzar/assistant.rb in elzar-0.0.2
- old
+ new
@@ -2,55 +2,74 @@
require 'tmpdir'
require 'elzar/chef_dna'
module Elzar
module Assistant
- ELZAR_COOKBOOKS_DIR = 'elzar'
+ ELZAR_DIR = 'elzar'
CHEF_SOLO_DIR = '/tmp/chef-solo'
- # order matters
- COOKBOOK_DIRS = ['site-cookbooks', 'cookbooks']
def self.generate_files(dest, options={})
vm_host_name = options[:app_name] ?
"#{options[:app_name].gsub('_','-')}.local" : "elzar.thinkrelevance.com"
- cookbooks_path = COOKBOOK_DIRS + COOKBOOK_DIRS.map {|dir| "#{ROOT_DIR}/#{dir}" }
Template.generate 'Vagrantfile', dest, :vm_host_name => vm_host_name,
- :cookbooks_path => cookbooks_path
- if options[:authorized_keys]
- create_authorized_key_data_bag(options[:authorized_keys], dest)
+ :cookbooks_path => Elzar::COOKBOOK_DIRS, :local => options[:local]
+ if options[:local]
+ generate_local_files dest
+ else
+ require 'multi_json'
+ generate_user_files dest, options
end
- if options[:app_name] && options[:database] && options[:ruby_version]
- create_dna_json(dest, *options.values_at(:app_name, :database, :ruby_version))
- end
end
- def self.create_user_provision_dir(dest)
+ def self.create_user_provision_dir(dest, local=false)
FileUtils.mkdir_p dest
cp "#{Elzar.templates_dir}/dna.json", dest
cp "#{Elzar.templates_dir}/Gemfile", dest
- cp "#{ROOT_DIR}/.rvmrc", dest
- cp_r "#{ROOT_DIR}/data_bags", dest
- cp_r "#{ROOT_DIR}/script", dest
+ cp "#{Elzar.templates_dir}/upgrade-chef.sh", dest
+ cp "#{Elzar.templates_dir}/.rvmrc", dest
+ cp_r "#{Elzar.templates_dir}/data_bags", dest
+ cp_r "#{Elzar.templates_dir}/script", dest
end
def self.merge_and_create_temp_directory(user_dir)
dest = Dir.mktmpdir
- elzar_dir = "#{dest}/#{ELZAR_COOKBOOKS_DIR}"
+ elzar_dir = "#{dest}/#{ELZAR_DIR}"
FileUtils.mkdir_p elzar_dir
- cookbook_path = COOKBOOK_DIRS.map {|dir| "#{CHEF_SOLO_DIR}/#{dir}" } +
- COOKBOOK_DIRS.map {|dir| "#{CHEF_SOLO_DIR}/#{ELZAR_COOKBOOKS_DIR}/#{dir}" }
- Template.generate "solo.rb", dest, :cookbook_path => cookbook_path,
- :chef_solo_dir => CHEF_SOLO_DIR
- cp_r "#{ROOT_DIR}/roles", dest
- cp_r "#{ROOT_DIR}/cookbooks", elzar_dir
- cp_r "#{ROOT_DIR}/site-cookbooks", elzar_dir
+ generate_solo_rb dest, Elzar::COOKBOOK_DIRS.map {|dir| "#{CHEF_SOLO_DIR}/#{ELZAR_DIR}/#{dir}" }
+ cp_r Elzar::ROLES_DIR, dest
+ cp_r "#{Elzar::CHEF_DIR}/cookbooks", elzar_dir
+ cp_r "#{Elzar::CHEF_DIR}/site-cookbooks", elzar_dir
+ cp_r "#{Elzar::CHEF_DIR}/.chef", dest
# merges user provision with elzar's provision
cp_r "#{user_dir}/.", dest
dest
end
private
+
+ def self.generate_local_files(dest)
+ generate_solo_rb dest
+ cp_r Elzar::ROLES_DIR, dest
+ cp_r "#{Elzar::CHEF_DIR}/cookbooks", dest
+ cp_r "#{Elzar::CHEF_DIR}/site-cookbooks", dest
+ cp_r "#{Elzar::CHEF_DIR}/.chef", dest
+ end
+
+ def self.generate_user_files(dest, options={})
+ if options[:authorized_keys]
+ create_authorized_key_data_bag(options[:authorized_keys], dest)
+ end
+ if options[:app_name] && options[:database] && options[:ruby_version]
+ create_dna_json(dest, *options.values_at(:app_name, :database, :ruby_version))
+ end
+ end
+
+ def self.generate_solo_rb(dest, additional=[])
+ dirs = Elzar::COOKBOOK_DIRS.map {|dir| "#{CHEF_SOLO_DIR}/#{dir}" }
+ Template.generate "solo.rb", dest, :cookbook_path => dirs + additional,
+ :chef_solo_dir => CHEF_SOLO_DIR
+ end
def self.cp(*args)
FileUtils.cp(*args)
end