elzar 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. data/.chef/knife.rb +3 -0
  2. data/.gitignore +1 -0
  3. data/.rvmrc +1 -0
  4. data/Gemfile +11 -0
  5. data/Gemfile.lock +96 -0
  6. data/README.md +42 -0
  7. data/Rakefile +1 -0
  8. data/Vagrantfile +16 -0
  9. data/cookbooks/.gitkeep +0 -0
  10. data/cookbooks/apt/README.md +122 -0
  11. data/cookbooks/apt/files/default/apt-cacher +9 -0
  12. data/cookbooks/apt/files/default/apt-cacher.conf +144 -0
  13. data/cookbooks/apt/files/default/apt-proxy-v2.conf +50 -0
  14. data/cookbooks/apt/metadata.rb +13 -0
  15. data/cookbooks/apt/providers/repository.rb +73 -0
  16. data/cookbooks/apt/recipes/cacher-client.rb +44 -0
  17. data/cookbooks/apt/recipes/cacher.rb +45 -0
  18. data/cookbooks/apt/recipes/default.rb +50 -0
  19. data/cookbooks/apt/resources/repository.rb +30 -0
  20. data/cookbooks/build-essential/README.md +24 -0
  21. data/cookbooks/build-essential/metadata.rb +10 -0
  22. data/cookbooks/build-essential/recipes/default.rb +45 -0
  23. data/cookbooks/database/README.md +403 -0
  24. data/cookbooks/database/libraries/provider_database_mysql.rb +97 -0
  25. data/cookbooks/database/libraries/provider_database_mysql_user.rb +76 -0
  26. data/cookbooks/database/libraries/provider_database_postgresql.rb +126 -0
  27. data/cookbooks/database/libraries/provider_database_postgresql_user.rb +78 -0
  28. data/cookbooks/database/libraries/provider_database_sql_server.rb +109 -0
  29. data/cookbooks/database/libraries/provider_database_sql_server_user.rb +106 -0
  30. data/cookbooks/database/libraries/resource_database.rb +111 -0
  31. data/cookbooks/database/libraries/resource_database_user.rb +90 -0
  32. data/cookbooks/database/libraries/resource_mysql_database.rb +34 -0
  33. data/cookbooks/database/libraries/resource_mysql_database_user.rb +34 -0
  34. data/cookbooks/database/libraries/resource_postgresql_database.rb +35 -0
  35. data/cookbooks/database/libraries/resource_postgresql_database_user.rb +35 -0
  36. data/cookbooks/database/libraries/resource_sql_server_database.rb +34 -0
  37. data/cookbooks/database/libraries/resource_sql_server_database_user.rb +34 -0
  38. data/cookbooks/database/metadata.rb +21 -0
  39. data/cookbooks/database/recipes/default.rb +20 -0
  40. data/cookbooks/database/recipes/ebs_backup.rb +89 -0
  41. data/cookbooks/database/recipes/ebs_volume.rb +196 -0
  42. data/cookbooks/database/recipes/master.rb +78 -0
  43. data/cookbooks/database/recipes/snapshot.rb +62 -0
  44. data/cookbooks/database/templates/default/app_grants.sql.erb +8 -0
  45. data/cookbooks/database/templates/default/aws_config.erb +3 -0
  46. data/cookbooks/database/templates/default/chef-solo-database-snapshot.cron.erb +10 -0
  47. data/cookbooks/database/templates/default/chef-solo-database-snapshot.json.erb +1 -0
  48. data/cookbooks/database/templates/default/chef-solo-database-snapshot.rb.erb +6 -0
  49. data/cookbooks/database/templates/default/ebs-backup-cron.erb +2 -0
  50. data/cookbooks/database/templates/default/ebs-db-backup.sh.erb +8 -0
  51. data/cookbooks/database/templates/default/ebs-db-restore.sh.erb +10 -0
  52. data/cookbooks/database/templates/default/s3cfg.erb +27 -0
  53. data/cookbooks/mysql/README.md +148 -0
  54. data/cookbooks/mysql/attributes/server.rb +68 -0
  55. data/cookbooks/mysql/libraries/database.rb +19 -0
  56. data/cookbooks/mysql/libraries/helpers.rb +33 -0
  57. data/cookbooks/mysql/metadata.rb +90 -0
  58. data/cookbooks/mysql/recipes/client.rb +51 -0
  59. data/cookbooks/mysql/recipes/default.rb +20 -0
  60. data/cookbooks/mysql/recipes/server.rb +133 -0
  61. data/cookbooks/mysql/recipes/server_ec2.rb +49 -0
  62. data/cookbooks/mysql/templates/default/debian.cnf.erb +12 -0
  63. data/cookbooks/mysql/templates/default/grants.sql.erb +15 -0
  64. data/cookbooks/mysql/templates/default/my.cnf.erb +176 -0
  65. data/cookbooks/mysql/templates/default/mysql-server.seed.erb +10 -0
  66. data/cookbooks/mysql/templates/default/port_mysql.erb +3 -0
  67. data/cookbooks/openssl/README.md +37 -0
  68. data/cookbooks/openssl/libraries/secure_password.rb +37 -0
  69. data/cookbooks/openssl/metadata.rb +8 -0
  70. data/cookbooks/openssl/recipes/default.rb +19 -0
  71. data/cookbooks/passenger_enterprise/README.rdoc +8 -0
  72. data/cookbooks/passenger_enterprise/attributes/default.rb +28 -0
  73. data/cookbooks/passenger_enterprise/cc.gemspec +36 -0
  74. data/cookbooks/passenger_enterprise/metadata.json +44 -0
  75. data/cookbooks/passenger_enterprise/metadata.rb +16 -0
  76. data/cookbooks/passenger_enterprise/recipes/apache2.rb +54 -0
  77. data/cookbooks/passenger_enterprise/recipes/default.rb +30 -0
  78. data/cookbooks/passenger_enterprise/recipes/nginx.rb +50 -0
  79. data/cookbooks/passenger_enterprise/templates/default/passenger.conf.erb +2 -0
  80. data/cookbooks/passenger_enterprise/templates/default/passenger.load.erb +1 -0
  81. data/cookbooks/passenger_enterprise/templates/default/passenger_nginx.conf.erb +2 -0
  82. data/cookbooks/ruby_enterprise/README.rdoc +55 -0
  83. data/cookbooks/ruby_enterprise/attributes/default.rb +33 -0
  84. data/cookbooks/ruby_enterprise/cc.gemspec +36 -0
  85. data/cookbooks/ruby_enterprise/definitions/ree_gem.rb +28 -0
  86. data/cookbooks/ruby_enterprise/metadata.json +45 -0
  87. data/cookbooks/ruby_enterprise/metadata.rb +13 -0
  88. data/cookbooks/ruby_enterprise/recipes/default.rb +67 -0
  89. data/data_bags/deploy/authorized_keys.json +9 -0
  90. data/dna.json +25 -0
  91. data/elzar.gemspec +22 -0
  92. data/lib/elzar.rb +21 -0
  93. data/lib/elzar/assistant.rb +77 -0
  94. data/lib/elzar/chef_dna.rb +48 -0
  95. data/lib/elzar/template.rb +24 -0
  96. data/lib/elzar/templates/Gemfile +11 -0
  97. data/lib/elzar/templates/Vagrantfile.erb +16 -0
  98. data/lib/elzar/templates/dna.json +25 -0
  99. data/lib/elzar/templates/solo.rb.erb +6 -0
  100. data/lib/elzar/version.rb +3 -0
  101. data/roles/enterprise_appstack.rb +4 -0
  102. data/roles/plumbing.rb +11 -0
  103. data/roles/postgres_database.rb +4 -0
  104. data/roles/ruby_appstack.rb +4 -0
  105. data/script/install_cookbook +6 -0
  106. data/script/new_cookbook +5 -0
  107. data/site-cookbooks/.gitkeep +0 -0
  108. data/site-cookbooks/curl/README.md +17 -0
  109. data/site-cookbooks/curl/metadata.rb +6 -0
  110. data/site-cookbooks/curl/recipes/default.rb +11 -0
  111. data/site-cookbooks/nginx/CHANGELOG.md +11 -0
  112. data/site-cookbooks/nginx/CONTRIBUTING +29 -0
  113. data/site-cookbooks/nginx/LICENSE +201 -0
  114. data/site-cookbooks/nginx/README.md +76 -0
  115. data/site-cookbooks/nginx/attributes/default.rb +65 -0
  116. data/site-cookbooks/nginx/definitions/nginx_site.rb +35 -0
  117. data/site-cookbooks/nginx/files/default/mime.types +73 -0
  118. data/site-cookbooks/nginx/metadata.rb +89 -0
  119. data/site-cookbooks/nginx/recipes/default.rb +57 -0
  120. data/site-cookbooks/nginx/recipes/source.rb +126 -0
  121. data/site-cookbooks/nginx/templates/default/default-site.erb +11 -0
  122. data/site-cookbooks/nginx/templates/default/nginx.conf.erb +42 -0
  123. data/site-cookbooks/nginx/templates/default/nginx.init.erb +91 -0
  124. data/site-cookbooks/nginx/templates/default/nxdissite.erb +29 -0
  125. data/site-cookbooks/nginx/templates/default/nxensite.erb +38 -0
  126. data/site-cookbooks/passenger/README.md +12 -0
  127. data/site-cookbooks/passenger/attributes/default.rb +3 -0
  128. data/site-cookbooks/passenger/metadata.rb +6 -0
  129. data/site-cookbooks/passenger/recipes/default.rb +39 -0
  130. data/site-cookbooks/passenger/templates/default/passenger_nginx.conf.erb +2 -0
  131. data/site-cookbooks/postgresql/README.md +150 -0
  132. data/site-cookbooks/postgresql/attributes/default.rb +72 -0
  133. data/site-cookbooks/postgresql/metadata.rb +21 -0
  134. data/site-cookbooks/postgresql/recipes/client.rb +40 -0
  135. data/site-cookbooks/postgresql/recipes/default.rb +20 -0
  136. data/site-cookbooks/postgresql/recipes/server.rb +74 -0
  137. data/site-cookbooks/postgresql/recipes/server_debian.rb +62 -0
  138. data/site-cookbooks/postgresql/recipes/server_redhat.rb +82 -0
  139. data/site-cookbooks/postgresql/templates/default/debian.postgresql.conf.erb +499 -0
  140. data/site-cookbooks/postgresql/templates/default/pg_hba.conf.erb +83 -0
  141. data/site-cookbooks/postgresql/templates/default/redhat.postgresql.conf.erb +501 -0
  142. data/site-cookbooks/rails_app/README.md +15 -0
  143. data/site-cookbooks/rails_app/attributes/default.rb +2 -0
  144. data/site-cookbooks/rails_app/files/default/sudoers +26 -0
  145. data/site-cookbooks/rails_app/metadata.rb +6 -0
  146. data/site-cookbooks/rails_app/recipes/default.rb +143 -0
  147. data/site-cookbooks/rails_app/recipes/system_libraries.rb +12 -0
  148. data/site-cookbooks/rails_app/templates/default/pg_hba.conf.erb +84 -0
  149. data/site-cookbooks/rails_app/templates/default/rails_app_nginx.erb +10 -0
  150. data/site-cookbooks/ruby/README.md +12 -0
  151. data/site-cookbooks/ruby/attributes/default.rb +6 -0
  152. data/site-cookbooks/ruby/metadata.rb +6 -0
  153. data/site-cookbooks/ruby/recipes/default.rb +54 -0
  154. data/solo.rb +7 -0
  155. data/upgrade-chef.sh +8 -0
  156. 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
+ }
@@ -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
+ }
@@ -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
@@ -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