Class: Engineyard::Local::Middleware::Chef
Instance Method Summary
collapse
#bash_rvm_setup, #export_ruby, #ruby_env_const, #rvm_env, #use_ruby_with_gemset
#project_dir, #ssh_exec, #ssh_exec!
#ssh_upload!
Constructor Details
#initialize(app, env) ⇒ Chef
Returns a new instance of Chef.
9
10
11
12
|
# File 'lib/engineyard-local/middleware/chef.rb', line 9
def initialize(app, env)
@app = app
@env = env
end
|
Instance Method Details
#cached_data_path ⇒ Object
21
22
23
|
# File 'lib/engineyard-local/middleware/chef.rb', line 21
def cached_data_path
"#{@env[:root_path]}/.ey_local_data"
end
|
#call(env) ⇒ Object
14
15
16
17
18
19
|
# File 'lib/engineyard-local/middleware/chef.rb', line 14
def call(env)
@env[:ui].info I18n.t("eylocal.setup.chef")
copy_patches(env)
ssh_exec!(env, commands)
@app.call(env)
end
|
#commands ⇒ Object
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/engineyard-local/middleware/chef.rb', line 35
def commands
rvm_env +
[
ensure_that_recipes_are_installed,
"cd /etc/chef",
"sudo env PATH=/usr/local/ey_resin/bin:/sbin:/bin:/usr/sbin:/usr/bin chef-solo -j /etc/chef/dna.json -c /etc/chef/solo.rb",
"if [[ ! -e /usr/bin/rake ]]; then sudo ln -s /usr/bin/rake19 /usr/bin/rake; fi",
run_custom_chef_in_application_if_it_exists
]
end
|
#cookbook_suffix ⇒ Object
74
75
76
77
78
79
80
81
82
83
84
|
# File 'lib/engineyard-local/middleware/chef.rb', line 74
def cookbook_suffix
cookbook_uri =~ /\.(\w+)$/
case $1
when /bz2|tbz/
".bz2"
when /gz|tgz/
".gz"
else
""
end
end
|
#cookbook_uri ⇒ Object
64
65
66
67
68
69
70
71
72
|
# File 'lib/engineyard-local/middleware/chef.rb', line 64
def cookbook_uri
ey_local_data = nil
if ( !@cookbook_uri && File.exist?( cached_data_path ) )
ey_local_data = YAML.load( File.read( cached_data_path ) )
end
@la_brea_data ||= ey_local_data ? ey_local_data[:la_brea_data] : nil
@cookbook_uri ||= ( ey_local_data && ey_local_data[:la_brea_data][:cookbooks_url] ) ?
ey_local_data[:la_brea_data][:cookbooks_url] : Local.config[:box_defaults][:cookbook_uri]
end
|
#cookbook_version ⇒ Object
97
98
99
|
# File 'lib/engineyard-local/middleware/chef.rb', line 97
def cookbook_version
( @la_brea_data && @la_brea_data[:cookbooks_version] ) ? @la_brea_data[:cookbooks_version] : Local.config[:box_defaults][:cookbook_version]
end
|
#copy_patches(env) ⇒ Object
25
26
27
28
29
30
31
32
33
|
# File 'lib/engineyard-local/middleware/chef.rb', line 25
def copy_patches(env)
patchdir = "/tmp/eylocal_patches"
ssh_exec!(env, ["mkdir -p #{patchdir}"])
Local.config[:box_defaults][:patches].each do |p|
from = File.expand_path("config/patches/#{p}", Engineyard::Local.project_root)
ssh_upload!(env, from, File.join(patchdir,p))
end
end
|
#ensure_that_recipes_are_installed ⇒ Object
46
47
48
|
# File 'lib/engineyard-local/middleware/chef.rb', line 46
def ensure_that_recipes_are_installed
"if [[ ! -d /etc/chef/recipes ]]; then curl -s #{cookbook_uri} > /tmp/chef.tar#{cookbook_suffix}; sudo mkdir -p /etc/chef/recipes && cd /etc/chef/recipes && sudo tar #{tar_flags} /tmp/chef.tar#{cookbook_suffix}; sudo patch -p1 < /tmp/eylocal_patches/* >& /dev/null; sudo touch #{Engineyard::Local::Middleware::Cookbooks::COOKBOOK_VERSION_FILE}; sudo chown vagrant #{Engineyard::Local::Middleware::Cookbooks::COOKBOOK_VERSION_FILE}; echo \"#{cookbook_version}\" > #{Engineyard::Local::Middleware::Cookbooks::COOKBOOK_VERSION_FILE}; rm /tmp/chef.tar#{cookbook_suffix}; fi"
end
|
#run_custom_chef_in_application_if_it_exists ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/engineyard-local/middleware/chef.rb', line 50
def run_custom_chef_in_application_if_it_exists
"if [[ ! -d /etc/chef-custom/recipes ]]; then sudo mkdir -p /etc/chef-custom/recipes; fi;\nif [[ -d /vagrant/cookbooks ]]; then sudo ln -sF /vagrant/cookbooks /etc/chef-custom/recipes/cookbooks; fi;\necho 'cookbook_path \"/etc/chef-custom/recipes/cookbooks\"\nlog_level :info\nfile_store_path \"/etc/chef-custom/recipes/\"\nfile_cache_path \"/etc/chef-custom/recipes/\"\nnode_name \"localhost\"' > /tmp/_solo.rb;\nsudo mv -f /tmp/_solo.rb /etc/chef-custom/solo.rb;\nsudo env PATH=/usr/local/ey_resin/bin:/sbin:/bin:/usr/sbin:/usr/bin chef-solo -j /etc/chef/dna.json -c /etc/chef-custom/solo.rb;\n"
end
|
#tar_flags ⇒ Object
86
87
88
89
90
91
92
93
94
95
|
# File 'lib/engineyard-local/middleware/chef.rb', line 86
def tar_flags
case cookbook_suffix
when /bz2|tbz/
"-xjf"
when /gz|tgz/
"-xzf"
else
"-xf"
end
end
|