elzar 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.chef/knife.rb +3 -0
- data/.gitignore +1 -0
- data/.rvmrc +1 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +96 -0
- data/README.md +42 -0
- data/Rakefile +1 -0
- data/Vagrantfile +16 -0
- data/cookbooks/.gitkeep +0 -0
- data/cookbooks/apt/README.md +122 -0
- data/cookbooks/apt/files/default/apt-cacher +9 -0
- data/cookbooks/apt/files/default/apt-cacher.conf +144 -0
- data/cookbooks/apt/files/default/apt-proxy-v2.conf +50 -0
- data/cookbooks/apt/metadata.rb +13 -0
- data/cookbooks/apt/providers/repository.rb +73 -0
- data/cookbooks/apt/recipes/cacher-client.rb +44 -0
- data/cookbooks/apt/recipes/cacher.rb +45 -0
- data/cookbooks/apt/recipes/default.rb +50 -0
- data/cookbooks/apt/resources/repository.rb +30 -0
- data/cookbooks/build-essential/README.md +24 -0
- data/cookbooks/build-essential/metadata.rb +10 -0
- data/cookbooks/build-essential/recipes/default.rb +45 -0
- data/cookbooks/database/README.md +403 -0
- data/cookbooks/database/libraries/provider_database_mysql.rb +97 -0
- data/cookbooks/database/libraries/provider_database_mysql_user.rb +76 -0
- data/cookbooks/database/libraries/provider_database_postgresql.rb +126 -0
- data/cookbooks/database/libraries/provider_database_postgresql_user.rb +78 -0
- data/cookbooks/database/libraries/provider_database_sql_server.rb +109 -0
- data/cookbooks/database/libraries/provider_database_sql_server_user.rb +106 -0
- data/cookbooks/database/libraries/resource_database.rb +111 -0
- data/cookbooks/database/libraries/resource_database_user.rb +90 -0
- data/cookbooks/database/libraries/resource_mysql_database.rb +34 -0
- data/cookbooks/database/libraries/resource_mysql_database_user.rb +34 -0
- data/cookbooks/database/libraries/resource_postgresql_database.rb +35 -0
- data/cookbooks/database/libraries/resource_postgresql_database_user.rb +35 -0
- data/cookbooks/database/libraries/resource_sql_server_database.rb +34 -0
- data/cookbooks/database/libraries/resource_sql_server_database_user.rb +34 -0
- data/cookbooks/database/metadata.rb +21 -0
- data/cookbooks/database/recipes/default.rb +20 -0
- data/cookbooks/database/recipes/ebs_backup.rb +89 -0
- data/cookbooks/database/recipes/ebs_volume.rb +196 -0
- data/cookbooks/database/recipes/master.rb +78 -0
- data/cookbooks/database/recipes/snapshot.rb +62 -0
- data/cookbooks/database/templates/default/app_grants.sql.erb +8 -0
- data/cookbooks/database/templates/default/aws_config.erb +3 -0
- data/cookbooks/database/templates/default/chef-solo-database-snapshot.cron.erb +10 -0
- data/cookbooks/database/templates/default/chef-solo-database-snapshot.json.erb +1 -0
- data/cookbooks/database/templates/default/chef-solo-database-snapshot.rb.erb +6 -0
- data/cookbooks/database/templates/default/ebs-backup-cron.erb +2 -0
- data/cookbooks/database/templates/default/ebs-db-backup.sh.erb +8 -0
- data/cookbooks/database/templates/default/ebs-db-restore.sh.erb +10 -0
- data/cookbooks/database/templates/default/s3cfg.erb +27 -0
- data/cookbooks/mysql/README.md +148 -0
- data/cookbooks/mysql/attributes/server.rb +68 -0
- data/cookbooks/mysql/libraries/database.rb +19 -0
- data/cookbooks/mysql/libraries/helpers.rb +33 -0
- data/cookbooks/mysql/metadata.rb +90 -0
- data/cookbooks/mysql/recipes/client.rb +51 -0
- data/cookbooks/mysql/recipes/default.rb +20 -0
- data/cookbooks/mysql/recipes/server.rb +133 -0
- data/cookbooks/mysql/recipes/server_ec2.rb +49 -0
- data/cookbooks/mysql/templates/default/debian.cnf.erb +12 -0
- data/cookbooks/mysql/templates/default/grants.sql.erb +15 -0
- data/cookbooks/mysql/templates/default/my.cnf.erb +176 -0
- data/cookbooks/mysql/templates/default/mysql-server.seed.erb +10 -0
- data/cookbooks/mysql/templates/default/port_mysql.erb +3 -0
- data/cookbooks/openssl/README.md +37 -0
- data/cookbooks/openssl/libraries/secure_password.rb +37 -0
- data/cookbooks/openssl/metadata.rb +8 -0
- data/cookbooks/openssl/recipes/default.rb +19 -0
- data/cookbooks/passenger_enterprise/README.rdoc +8 -0
- data/cookbooks/passenger_enterprise/attributes/default.rb +28 -0
- data/cookbooks/passenger_enterprise/cc.gemspec +36 -0
- data/cookbooks/passenger_enterprise/metadata.json +44 -0
- data/cookbooks/passenger_enterprise/metadata.rb +16 -0
- data/cookbooks/passenger_enterprise/recipes/apache2.rb +54 -0
- data/cookbooks/passenger_enterprise/recipes/default.rb +30 -0
- data/cookbooks/passenger_enterprise/recipes/nginx.rb +50 -0
- data/cookbooks/passenger_enterprise/templates/default/passenger.conf.erb +2 -0
- data/cookbooks/passenger_enterprise/templates/default/passenger.load.erb +1 -0
- data/cookbooks/passenger_enterprise/templates/default/passenger_nginx.conf.erb +2 -0
- data/cookbooks/ruby_enterprise/README.rdoc +55 -0
- data/cookbooks/ruby_enterprise/attributes/default.rb +33 -0
- data/cookbooks/ruby_enterprise/cc.gemspec +36 -0
- data/cookbooks/ruby_enterprise/definitions/ree_gem.rb +28 -0
- data/cookbooks/ruby_enterprise/metadata.json +45 -0
- data/cookbooks/ruby_enterprise/metadata.rb +13 -0
- data/cookbooks/ruby_enterprise/recipes/default.rb +67 -0
- data/data_bags/deploy/authorized_keys.json +9 -0
- data/dna.json +25 -0
- data/elzar.gemspec +22 -0
- data/lib/elzar.rb +21 -0
- data/lib/elzar/assistant.rb +77 -0
- data/lib/elzar/chef_dna.rb +48 -0
- data/lib/elzar/template.rb +24 -0
- data/lib/elzar/templates/Gemfile +11 -0
- data/lib/elzar/templates/Vagrantfile.erb +16 -0
- data/lib/elzar/templates/dna.json +25 -0
- data/lib/elzar/templates/solo.rb.erb +6 -0
- data/lib/elzar/version.rb +3 -0
- data/roles/enterprise_appstack.rb +4 -0
- data/roles/plumbing.rb +11 -0
- data/roles/postgres_database.rb +4 -0
- data/roles/ruby_appstack.rb +4 -0
- data/script/install_cookbook +6 -0
- data/script/new_cookbook +5 -0
- data/site-cookbooks/.gitkeep +0 -0
- data/site-cookbooks/curl/README.md +17 -0
- data/site-cookbooks/curl/metadata.rb +6 -0
- data/site-cookbooks/curl/recipes/default.rb +11 -0
- data/site-cookbooks/nginx/CHANGELOG.md +11 -0
- data/site-cookbooks/nginx/CONTRIBUTING +29 -0
- data/site-cookbooks/nginx/LICENSE +201 -0
- data/site-cookbooks/nginx/README.md +76 -0
- data/site-cookbooks/nginx/attributes/default.rb +65 -0
- data/site-cookbooks/nginx/definitions/nginx_site.rb +35 -0
- data/site-cookbooks/nginx/files/default/mime.types +73 -0
- data/site-cookbooks/nginx/metadata.rb +89 -0
- data/site-cookbooks/nginx/recipes/default.rb +57 -0
- data/site-cookbooks/nginx/recipes/source.rb +126 -0
- data/site-cookbooks/nginx/templates/default/default-site.erb +11 -0
- data/site-cookbooks/nginx/templates/default/nginx.conf.erb +42 -0
- data/site-cookbooks/nginx/templates/default/nginx.init.erb +91 -0
- data/site-cookbooks/nginx/templates/default/nxdissite.erb +29 -0
- data/site-cookbooks/nginx/templates/default/nxensite.erb +38 -0
- data/site-cookbooks/passenger/README.md +12 -0
- data/site-cookbooks/passenger/attributes/default.rb +3 -0
- data/site-cookbooks/passenger/metadata.rb +6 -0
- data/site-cookbooks/passenger/recipes/default.rb +39 -0
- data/site-cookbooks/passenger/templates/default/passenger_nginx.conf.erb +2 -0
- data/site-cookbooks/postgresql/README.md +150 -0
- data/site-cookbooks/postgresql/attributes/default.rb +72 -0
- data/site-cookbooks/postgresql/metadata.rb +21 -0
- data/site-cookbooks/postgresql/recipes/client.rb +40 -0
- data/site-cookbooks/postgresql/recipes/default.rb +20 -0
- data/site-cookbooks/postgresql/recipes/server.rb +74 -0
- data/site-cookbooks/postgresql/recipes/server_debian.rb +62 -0
- data/site-cookbooks/postgresql/recipes/server_redhat.rb +82 -0
- data/site-cookbooks/postgresql/templates/default/debian.postgresql.conf.erb +499 -0
- data/site-cookbooks/postgresql/templates/default/pg_hba.conf.erb +83 -0
- data/site-cookbooks/postgresql/templates/default/redhat.postgresql.conf.erb +501 -0
- data/site-cookbooks/rails_app/README.md +15 -0
- data/site-cookbooks/rails_app/attributes/default.rb +2 -0
- data/site-cookbooks/rails_app/files/default/sudoers +26 -0
- data/site-cookbooks/rails_app/metadata.rb +6 -0
- data/site-cookbooks/rails_app/recipes/default.rb +143 -0
- data/site-cookbooks/rails_app/recipes/system_libraries.rb +12 -0
- data/site-cookbooks/rails_app/templates/default/pg_hba.conf.erb +84 -0
- data/site-cookbooks/rails_app/templates/default/rails_app_nginx.erb +10 -0
- data/site-cookbooks/ruby/README.md +12 -0
- data/site-cookbooks/ruby/attributes/default.rb +6 -0
- data/site-cookbooks/ruby/metadata.rb +6 -0
- data/site-cookbooks/ruby/recipes/default.rb +54 -0
- data/solo.rb +7 -0
- data/upgrade-chef.sh +8 -0
- metadata +272 -0
@@ -0,0 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: ruby_enterprise
|
3
|
+
# attributes:: ruby_enterprise
|
4
|
+
#
|
5
|
+
# Author:: Mike Fiedler (<miketheman@gmail.com>)
|
6
|
+
# Author:: Joshua Timberman (<joshua@opscode.com>)
|
7
|
+
# Author:: Sean Cribbs (<seancribbs@gmail.com>)
|
8
|
+
# Author:: Michael Hale (<mikehale@gmail.com>)
|
9
|
+
#
|
10
|
+
# Copyright:: 2011, Mike Fiedler
|
11
|
+
# Copyright:: 2009-2010, Opscode, Inc.
|
12
|
+
# Copyright:: 2009, Sean Cribbs
|
13
|
+
# Copyright:: 2009, Michael Hale
|
14
|
+
#
|
15
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
16
|
+
# you may not use this file except in compliance with the License.
|
17
|
+
# You may obtain a copy of the License at
|
18
|
+
#
|
19
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
20
|
+
#
|
21
|
+
# Unless required by applicable law or agreed to in writing, software
|
22
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
23
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
24
|
+
# See the License for the specific language governing permissions and
|
25
|
+
# limitations under the License.
|
26
|
+
#
|
27
|
+
|
28
|
+
default[:ruby_enterprise][:install_path] = "/opt/ruby-enterprise"
|
29
|
+
default[:ruby_enterprise][:ruby_bin] = "/opt/ruby-enterprise/bin/ruby"
|
30
|
+
default[:ruby_enterprise][:gems_dir] = "#{ruby_enterprise[:install_path]}/lib/ruby/gems/1.8"
|
31
|
+
default[:ruby_enterprise][:version] = '1.8.7-2011.03'
|
32
|
+
default[:ruby_enterprise][:url] = "http://rubyenterpriseedition.googlecode.com/files/ruby-enterprise-#{ruby_enterprise[:version]}"
|
33
|
+
default[:ruby_enterprise][:gems_version] = "1.8.24"
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../',__FILE__)
|
3
|
+
lib_up = File.expand_path('../../', __FILE__)
|
4
|
+
$:.unshift lib unless $:.include?(lib)
|
5
|
+
$:.unshift lib_up unless $:.include?(lib_up)
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
ENV['GEM_PATH']=ENV['BUNDLE_INSTALL_PATH'] if ENV['BUNDLE_INSTALL_PATH']
|
9
|
+
ENV['GEM_HOME']=ENV['BUNDLE_INSTALL_PATH'] if ENV['BUNDLE_INSTALL_PATH']
|
10
|
+
|
11
|
+
name = File.split(lib)[-1]||""
|
12
|
+
raise ArgumentError, '', caller if name.empty?
|
13
|
+
@name=name
|
14
|
+
|
15
|
+
Gem.use_paths(ENV['BUNDLE_INSTALL_PATH'],[]) if ENV['BUNDLE_INSTALL_PATH']
|
16
|
+
|
17
|
+
Gem::Specification.new do |s|
|
18
|
+
|
19
|
+
md = JSON.parse(File.read(File.expand_path('../metadata.json', __FILE__)))
|
20
|
+
|
21
|
+
# Required attributes (gem build fails without these)
|
22
|
+
s.name = @name
|
23
|
+
s.version = md['version'] && !md['version'].empty? ? md['version'] : '0'
|
24
|
+
s.files = Dir.glob('**/*') #.map{|f| File.expand_path(f)}
|
25
|
+
s.summary = md['description'] ? md['description'] : "The Chef cookbook for #{s.name}"
|
26
|
+
|
27
|
+
# Optional attributes (gem build warning raised without these)
|
28
|
+
s.author = md['maintainer'] ? md['maintainer'] : 'No acknowledged maintainer'
|
29
|
+
s.description = md['long_description'] ? md['long_description'] : s.summary
|
30
|
+
s.email = md['maintainer_email'] ? md['maintainer_email'] : 'No acknowledged maintainer email'
|
31
|
+
s.homepage = 'http://www.opscode.com'
|
32
|
+
md['dependencies'].each { |k,v| s.add_dependency(k,v) };
|
33
|
+
|
34
|
+
s.post_install_message = "Installed Chef Cookbook #{s.name}\n#{s.description}"
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: ruby_enterprise
|
3
|
+
# Recipe:: ree_gem
|
4
|
+
#
|
5
|
+
# Author:: Joshua Timberman (<joshua@opscode.com>)
|
6
|
+
#
|
7
|
+
# Copyright 2009, Opscode, Inc.
|
8
|
+
#
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
10
|
+
# you may not use this file except in compliance with the License.
|
11
|
+
# You may obtain a copy of the License at
|
12
|
+
#
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
14
|
+
#
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
18
|
+
# See the License for the specific language governing permissions and
|
19
|
+
# limitations under the License.
|
20
|
+
#
|
21
|
+
|
22
|
+
define :ree_gem, :source => nil, :version => nil do
|
23
|
+
gem_package params[:name] do
|
24
|
+
gem_binary "#{node[:ruby_enterprise][:install_path]}/bin/gem"
|
25
|
+
source params[:source] if params[:source]
|
26
|
+
version params[:version] if params[:version]
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
{
|
2
|
+
"name": "ruby_enterprise",
|
3
|
+
"description": "Installs/Configures ruby-enterprise",
|
4
|
+
"long_description": "= DESCRIPTION:\n\nInstalls Ruby Enterprise Edition (REE) from Phusion.\n\n= REQUIREMENTS:\n\nOpscode's build-essential cookbook to get a compiler and associated files installed.\n\n= ATTRIBUTES: \n\n* ruby_enterprise[:install_path] - Location to install REE. Default /opt/ruby-enterprise\n* ruby_enterprise[:version] - Version-datestamp to use. Default 1.8.6-20090610. May lag behind latest REE release.\n* ruby_enterprise[:url] - URL to download. Default is from RubyForge, with the version specified. Note the download ID must be updated when there are new releases.\n\n= USAGE:\n\nInclude the ruby_enterprise recipe to install REE.\n\n include_recipe \"ruby_enterprise\"\n\nOr add it to your role, or directly to a node's recipes.\n\nInstall RubyGems under REE with the ree_gem definition.\n\n ree_gem \"rails\" do\n source \"http://gems.rubyforge.org\"\n version \"2.3.4\"\n end\n\nThe definition supports parameters for source and version, though they are optional.\n\n= LICENSE and AUTHOR:\n\nAuthor:: Joshua Timberman (<joshua@opscode.com>)\nAuthor:: Sean Cribbs (<seancribbs@gmail.com>)\nAuthor:: Michael Hale (<mikehale@gmail.com>)\n\nCopyright:: 2009-2010, Opscode, Inc.\nCopyright:: 2009, Sean Cribbs\nCopyright:: 2009, Michael Hale\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n",
|
5
|
+
"maintainer": "Opscode, Inc.",
|
6
|
+
"maintainer_email": "cookbooks@opscode.com",
|
7
|
+
"license": "Apache 2.0",
|
8
|
+
"platforms": {
|
9
|
+
"redhat": [
|
10
|
+
|
11
|
+
],
|
12
|
+
"centos": [
|
13
|
+
|
14
|
+
],
|
15
|
+
"fedora": [
|
16
|
+
|
17
|
+
],
|
18
|
+
"ubuntu": [
|
19
|
+
|
20
|
+
]
|
21
|
+
},
|
22
|
+
"dependencies": {
|
23
|
+
"build-essential": [
|
24
|
+
|
25
|
+
]
|
26
|
+
},
|
27
|
+
"recommendations": {
|
28
|
+
},
|
29
|
+
"suggestions": {
|
30
|
+
},
|
31
|
+
"conflicting": {
|
32
|
+
},
|
33
|
+
"providing": {
|
34
|
+
},
|
35
|
+
"replacing": {
|
36
|
+
},
|
37
|
+
"attributes": {
|
38
|
+
},
|
39
|
+
"groupings": {
|
40
|
+
},
|
41
|
+
"recipes": {
|
42
|
+
"ruby_enterprise": "Installs Ruby Enterprise Edition"
|
43
|
+
},
|
44
|
+
"version": "0.2.4"
|
45
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
maintainer "Mike Fiedler"
|
2
|
+
maintainer_email "miketheman@gmail.com"
|
3
|
+
license "Apache 2.0"
|
4
|
+
description "Installs/Configures ruby-enterprise"
|
5
|
+
long_description IO.read(File.join(File.dirname(__FILE__), 'README.rdoc'))
|
6
|
+
version "0.2.5"
|
7
|
+
|
8
|
+
recipe "ruby_enterprise", "Installs Ruby Enterprise Edition"
|
9
|
+
|
10
|
+
depends "build-essential"
|
11
|
+
%w{redhat centos fedora ubuntu}.each do |os|
|
12
|
+
supports os
|
13
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: ruby_enterprise
|
3
|
+
# Recipe:: default
|
4
|
+
#
|
5
|
+
# Author:: Joshua Timberman (<joshua@opscode.com>)
|
6
|
+
# Author:: Sean Cribbs (<seancribbs@gmail.com>)
|
7
|
+
# Author:: Michael Hale (<mikehale@gmail.com>)
|
8
|
+
#
|
9
|
+
# Copyright:: 2009-2010, Opscode, Inc.
|
10
|
+
# Copyright:: 2009, Sean Cribbs
|
11
|
+
# Copyright:: 2009, Michael Hale
|
12
|
+
#
|
13
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
14
|
+
# you may not use this file except in compliance with the License.
|
15
|
+
# You may obtain a copy of the License at
|
16
|
+
#
|
17
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
18
|
+
#
|
19
|
+
# Unless required by applicable law or agreed to in writing, software
|
20
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
21
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
22
|
+
# See the License for the specific language governing permissions and
|
23
|
+
# limitations under the License.
|
24
|
+
#
|
25
|
+
|
26
|
+
include_recipe "build-essential"
|
27
|
+
|
28
|
+
packages = value_for_platform(
|
29
|
+
["centos","redhat","fedora"] => {'default' => ['readline-devel', 'openssl-devel', 'patch']},
|
30
|
+
"default" => ['libssl-dev', 'libreadline5-dev']
|
31
|
+
)
|
32
|
+
|
33
|
+
packages.each do |pkg|
|
34
|
+
package pkg
|
35
|
+
end
|
36
|
+
|
37
|
+
remote_file "/tmp/ruby-enterprise-#{node[:ruby_enterprise][:version]}.tar.gz" do
|
38
|
+
source "#{node[:ruby_enterprise][:url]}.tar.gz"
|
39
|
+
not_if { ::File.exists?("/tmp/ruby-enterprise-#{node[:ruby_enterprise][:version]}.tar.gz") }
|
40
|
+
end
|
41
|
+
|
42
|
+
bash "Install Ruby Enterprise Edition" do
|
43
|
+
cwd "/tmp"
|
44
|
+
code <<-EOH
|
45
|
+
tar zxf ruby-enterprise-#{node[:ruby_enterprise][:version]}.tar.gz
|
46
|
+
ruby-enterprise-#{node[:ruby_enterprise][:version]}/installer \
|
47
|
+
--auto=#{node[:ruby_enterprise][:install_path]}
|
48
|
+
EOH
|
49
|
+
not_if do
|
50
|
+
::File.exists?("#{node[:ruby_enterprise][:install_path]}/bin/ree-version") &&
|
51
|
+
system("#{node[:ruby_enterprise][:install_path]}/bin/ree-version | grep -q '#{node[:ruby_enterprise][:version]}$'")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
execute "Installing bundler" do
|
56
|
+
command "#{node[:ruby_enterprise][:install_path]}/bin/gem install bundler"
|
57
|
+
not_if "#{node[:ruby_enterprise][:install_path]}/bin/gem list -l bundler$ | grep -q bundler"
|
58
|
+
end
|
59
|
+
|
60
|
+
# Remove since ree-installed passenger causes a conflict with our specified version
|
61
|
+
execute "Uninstall passenger" do
|
62
|
+
command "#{node[:ruby_enterprise][:install_path]}/bin/gem uninstall -Iax passenger"
|
63
|
+
end
|
64
|
+
|
65
|
+
execute "Updating rubygems" do
|
66
|
+
command "#{node[:ruby_enterprise][:install_path]}/bin/gem update --system #{node[:ruby_enterprise][:gems_version]}"
|
67
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
{
|
2
|
+
"id":"authorized_keys",
|
3
|
+
"keys": [
|
4
|
+
"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzqe0G9iGh9QoCdBVYmaTIxZU0cZP15uiXtLUsOf+BAjniNy2tX6fM+9+Mwmz76sqPlpL/ai/eVKg/WlmjtZErInTUdEu5IGoNqORLtwxGtu4u0tl/bByIEeYInHqlFlQnyEFeSEcWwW9JKWC7jL3Wh4M8FZrrGIQ7yd+XF4Q3vUpL+MZThs3/+VSoGvqcPbRGHoLtlgjwsjobXI6ckj839SkT0zVPuIoUl7zxlD4FRH95Hv60fjVIFU3D2aeOJrLkqHFogGjrXG47AIjgw5Xb1cwTUA0zQQ1Lq5TF038smXEyvySPOAuPPTnBC11TuzADdEuI0zFmjSu2RYi4/TfZw== alex.redington@thinkrelevance.com",
|
5
|
+
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/aJwkhY3lpj6f62mpsy+fZ1lS90jF2cSTkX/bmjXrBO4yyFQsPFzsZhe6kdKkJGsVocppS8TZujzwL2vnhH4zfIIDIEwl9F9bqBznTwuwP0BcPIEJTEc7YVds2ocjR73A9YHHZxV7IfzYnYVunEmPtvPCSdQn+xq3V1bzY9tJJzXu/9DI0qxjTQAWB5nPfqyGwNnn2pcfNeZQquXMRHQnEyncpGq936vrYemwr25MlGNGzvhq0vQM8Qo5PSqh7XwSHR31aTsyL6RDF9nMOqHvqRsF+MKrsZSCYhjZ9ebuSRjdiDeWGNeYA8+zJJiirjJYwN6qxIGQ1AAkNrqZfKzV russolsen@thinkrelevance.com",
|
6
|
+
"ssh-dss AAAAB3NzaC1kc3MAAACBAJCaIm17djv5DOGA0amRQTibubORv0mVCDnhkT/rYOIEAXr9S+s3JqrWqC9Q9++wFxVvuTr7rJArktoPQJXuAZfk9yH1Yyd2dhzMM/jHnw/TYKOnYj6mn4ygwARm9oZkuBI9AV81ICBtZPdBwPAH4vpOoY8FtKCCaiKrJdOCJfSPAAAAFQDlOSP4ehJY3w65d5GDEMftZ2va/wAAAIAUwmNmhG4W8LNv+ONsvJ/+GY2OumSJt72uzjcFRx9OLFzMgTG5YqQNuCbosA5SXvRS4w1F2+gPW/Tsdh9D3CElqOq3slMY+1JuDWznDK3byDe5sHQz8OOpjBtxFdn+bZJHTXercVpfIqjxR+903/zjYUT2tgv8kyZu44thn8+wRAAAAIBCoJqTsZwwErIH+RnX+LIETPYkKMt664CYb9mnNDj5a6hV/JX+ThiFdDd4YBUTVQkyNTQasJgOfZyauDT0BQJiEIiag1guvRtLhYH3PEId3vMsMGfv5349v2UqVr9g01CnbOL+yGc/Akxcw58/5QZe45S3A7hDbgUGsEBTNEuGaQ== sam@thinkrelevance.com",
|
7
|
+
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/kJu5qUgbtVqYdxxN0LvZMJ5//JRno7bgnQ8ZB6dAouyE13GaiJ3jl61xCdKIOe6FL9/x2C379fcj2MUXiq/iIH4bllgn9owux7TucE4bKmMm2DxwDH/A2kvES3V+7LznvSSyhUJTSIVII2gQdeSaeE1DrJDNJJv/riXvmP6BI1AaLJnfE82Ym7XuYeLqvz1f6pCwxCZipuxjqr8HNBL3MfVN4Dw2xxya5AwAiR5Za93fVmszXBoyGo+BaUTTjdGzb4ghGOHjgp7rdLWbRoVcyXWntXq0jQ/Jkdg0dUVvFgLA88/IjyKvstmI1SrKK6SlwCWLSjAESpX3xRG2FNhp gabriel.horner@gmail.com"
|
8
|
+
]
|
9
|
+
}
|
data/dna.json
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
{
|
2
|
+
"run_list":["role[plumbing]", "mysql::server", "role[enterprise_appstack]", "rails_app"],
|
3
|
+
"mysql": {"server_root_password": ""},
|
4
|
+
"passenger": {
|
5
|
+
"version": "3.0.11",
|
6
|
+
"root_path": "/opt/relevance-ruby/lib/ruby/gems/1.9.1/gems/passenger-3.0.11",
|
7
|
+
"module_path": "/opt/relevance-ruby/lib/ruby/gems/1.9.1/gems/passenger-3.0.11/ext/apache2/mod_passenger.so"
|
8
|
+
},
|
9
|
+
"passenger_enterprise": {
|
10
|
+
"version": "3.0.11",
|
11
|
+
"root_path": "/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-3.0.11",
|
12
|
+
"module_path": "/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-3.0.11/ext/apache2/mod_passenger.so"
|
13
|
+
},
|
14
|
+
"ruby": {
|
15
|
+
"version": "1.9.3-p125",
|
16
|
+
"url": "http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p125.tar.gz"
|
17
|
+
},
|
18
|
+
"ruby_enterprise": {
|
19
|
+
"version": "1.8.7-2012.02",
|
20
|
+
"url": "http://rubyenterpriseedition.googlecode.com/files/ruby-enterprise-1.8.7-2012.02"
|
21
|
+
},
|
22
|
+
"rails_app": {
|
23
|
+
"name": "elzar_test"
|
24
|
+
}
|
25
|
+
}
|
data/elzar.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "elzar/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "elzar"
|
7
|
+
s.version = Elzar::VERSION
|
8
|
+
s.homepage = "http://github.com/relevance/elzar"
|
9
|
+
s.authors = ["Alex Redington", "Gabriel Horner"]
|
10
|
+
s.email = ["alex.redington@thinkrelevance.com"]
|
11
|
+
s.summary = %q{Chef cookbooks for Rails}
|
12
|
+
s.description = %q{Provides Chef cookbooks for a production Rails environment. Also supports Chef-erizing a Rails app.}
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
|
18
|
+
s.add_dependency 'multi_json', '~> 1.3.0'
|
19
|
+
s.add_development_dependency 'rake', '~> 0.9.2.2'
|
20
|
+
s.add_development_dependency 'rspec'
|
21
|
+
s.add_development_dependency 'bundler'
|
22
|
+
end
|
data/lib/elzar.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'elzar/version'
|
2
|
+
require 'elzar/template'
|
3
|
+
require 'elzar/assistant'
|
4
|
+
require 'multi_json'
|
5
|
+
|
6
|
+
module Elzar
|
7
|
+
ROOT_DIR = File.expand_path File.dirname(__FILE__) + '/../'
|
8
|
+
|
9
|
+
def self.templates_dir
|
10
|
+
@templates_dir ||= "#{ROOT_DIR}/lib/elzar/templates"
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.create_provision_directory(destination, options={})
|
14
|
+
Assistant.create_user_provision_dir destination.to_s
|
15
|
+
Assistant.generate_files destination.to_s, options
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.merge_and_create_temp_directory(user_dir)
|
19
|
+
Assistant.merge_and_create_temp_directory user_dir
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'tmpdir'
|
3
|
+
require 'elzar/chef_dna'
|
4
|
+
|
5
|
+
module Elzar
|
6
|
+
module Assistant
|
7
|
+
ELZAR_COOKBOOKS_DIR = 'elzar'
|
8
|
+
CHEF_SOLO_DIR = '/tmp/chef-solo'
|
9
|
+
# order matters
|
10
|
+
COOKBOOK_DIRS = ['site-cookbooks', 'cookbooks']
|
11
|
+
|
12
|
+
def self.generate_files(dest, options={})
|
13
|
+
vm_host_name = options[:app_name] ?
|
14
|
+
"#{options[:app_name].gsub('_','-')}.local" : "elzar.thinkrelevance.com"
|
15
|
+
cookbooks_path = COOKBOOK_DIRS + COOKBOOK_DIRS.map {|dir| "#{ROOT_DIR}/#{dir}" }
|
16
|
+
Template.generate 'Vagrantfile', dest, :vm_host_name => vm_host_name,
|
17
|
+
:cookbooks_path => cookbooks_path
|
18
|
+
if options[:authorized_keys]
|
19
|
+
create_authorized_key_data_bag(options[:authorized_keys], dest)
|
20
|
+
end
|
21
|
+
if options[:app_name] && options[:database] && options[:ruby_version]
|
22
|
+
create_dna_json(dest, *options.values_at(:app_name, :database, :ruby_version))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.create_user_provision_dir(dest)
|
27
|
+
FileUtils.mkdir_p dest
|
28
|
+
cp "#{Elzar.templates_dir}/dna.json", dest
|
29
|
+
cp "#{Elzar.templates_dir}/Gemfile", dest
|
30
|
+
cp "#{ROOT_DIR}/.rvmrc", dest
|
31
|
+
cp_r "#{ROOT_DIR}/data_bags", dest
|
32
|
+
cp_r "#{ROOT_DIR}/script", dest
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.merge_and_create_temp_directory(user_dir)
|
36
|
+
dest = Dir.mktmpdir
|
37
|
+
elzar_dir = "#{dest}/#{ELZAR_COOKBOOKS_DIR}"
|
38
|
+
FileUtils.mkdir_p elzar_dir
|
39
|
+
|
40
|
+
cookbook_path = COOKBOOK_DIRS.map {|dir| "#{CHEF_SOLO_DIR}/#{dir}" } +
|
41
|
+
COOKBOOK_DIRS.map {|dir| "#{CHEF_SOLO_DIR}/#{ELZAR_COOKBOOKS_DIR}/#{dir}" }
|
42
|
+
Template.generate "solo.rb", dest, :cookbook_path => cookbook_path,
|
43
|
+
:chef_solo_dir => CHEF_SOLO_DIR
|
44
|
+
cp_r "#{ROOT_DIR}/roles", dest
|
45
|
+
cp_r "#{ROOT_DIR}/cookbooks", elzar_dir
|
46
|
+
cp_r "#{ROOT_DIR}/site-cookbooks", elzar_dir
|
47
|
+
# merges user provision with elzar's provision
|
48
|
+
cp_r "#{user_dir}/.", dest
|
49
|
+
dest
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def self.cp(*args)
|
55
|
+
FileUtils.cp(*args)
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.cp_r(*args)
|
59
|
+
FileUtils.cp_r(*args)
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.create_dna_json(dest, app_name, database, ruby_version)
|
63
|
+
content = MultiJson.load(File.read("#{Elzar.templates_dir}/dna.json"))
|
64
|
+
content['rails_app']['name'] = app_name
|
65
|
+
ChefDNA.gene_splice(content, database, ruby_version)
|
66
|
+
File.open("#{dest}/dna.json", 'w+') {|f| f.write MultiJson.dump(content) }
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.create_authorized_key_data_bag(authorized_keys, dest)
|
70
|
+
data_bag_dir = "#{dest}/data_bags/deploy"
|
71
|
+
FileUtils.mkdir_p data_bag_dir
|
72
|
+
File.open("#{data_bag_dir}/authorized_keys.json", 'w+') do |f|
|
73
|
+
f.write MultiJson.dump("id" => "authorized_keys", "keys" => authorized_keys)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Elzar
|
2
|
+
module ChefDNA
|
3
|
+
def self.gene_splice(content, database, ruby_version)
|
4
|
+
set_ruby(content, ruby_version)
|
5
|
+
set_database(content, database)
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def self.set_database(content, database)
|
11
|
+
if database == 'postgresql'
|
12
|
+
db_index = content['run_list'].find_index { |e| (e == 'mysql::server') || (e == 'role[postgres_database]')}
|
13
|
+
content['run_list'][db_index] = 'role[postgres_database]'
|
14
|
+
elsif database.nil? || (database == 'mysql')
|
15
|
+
db_index = content['run_list'].find_index { |e| (e == 'mysql::server') || (e == 'role[postgres_database]')}
|
16
|
+
content['run_list'][db_index] = 'mysql::server'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.set_ruby(content, ruby_version)
|
21
|
+
if ruby_version =~ /^ree-(.*)/i
|
22
|
+
content['ruby_enterprise']['version'] = $1
|
23
|
+
content['ruby_enterprise']['url'] = "http://rubyenterpriseedition.googlecode.com/files/ruby-enterprise-#{$1}"
|
24
|
+
content['ruby_enterprise']['gems_version'] = rubygems_version
|
25
|
+
update_run_list! content['run_list'], 'role[enterprise_appstack]'
|
26
|
+
elsif ruby_version =~ /^ruby-(.*)/i
|
27
|
+
full_version = $1
|
28
|
+
content['ruby']['version'] = full_version
|
29
|
+
major_version = full_version[/(\d\.\d).*/, 1]
|
30
|
+
content['ruby']['url'] = "http://ftp.ruby-lang.org/pub/ruby/#{major_version}/ruby-#{full_version}.tar.gz"
|
31
|
+
content['ruby']['gems_version'] = rubygems_version
|
32
|
+
update_run_list! content['run_list'], 'role[ruby_appstack]'
|
33
|
+
else
|
34
|
+
raise "Your ruby is NOT SUPPORTED. Please use ree or ruby."
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.update_run_list!(run_list, val)
|
39
|
+
appstack_index = run_list.find_index {|e| e[/^role\[.*_appstack\]$/] }
|
40
|
+
run_list[appstack_index] = val
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.rubygems_version
|
44
|
+
require 'rubygems' unless defined?(Gem)
|
45
|
+
Gem::VERSION
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'erb'
|
2
|
+
|
3
|
+
module Elzar
|
4
|
+
module Template
|
5
|
+
class << self; attr_accessor :source_directory; end
|
6
|
+
self.source_directory = File.dirname(__FILE__) + '/templates'
|
7
|
+
|
8
|
+
def self.generate(file, dest, ivars={})
|
9
|
+
str = generate_string(file, ivars)
|
10
|
+
File.open("#{dest}/#{file}", 'w+') {|f| f.write str }
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.generate_string(file, ivars={})
|
14
|
+
file = source_directory + "/#{file}.erb"
|
15
|
+
ERB.new(File.read(file)).result(create_template_binding(ivars))
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.create_template_binding(ivars)
|
19
|
+
obj = Object.new
|
20
|
+
ivars.each {|name, val| obj.instance_variable_set("@#{name}", val) }
|
21
|
+
obj.instance_eval { binding }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|