elzar 0.0.2 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,6 @@
1
+ ## 0.1.0
2
+ * Initial working version for relevance_rails
3
+
1
4
  ## 0.0.2
2
5
  * Fixed to also work with Vagrant
3
6
  * Support local dev with rake bam
data/README.md CHANGED
@@ -1,45 +1,62 @@
1
- # Getting Started
1
+ ## Description
2
+ This gem enables a Rails app to define custom Chef recipes while still using an awesome default set
3
+ of Chef recipes. Best used in conjunction with relevance\_rails and slushy. Includes recipes for
4
+ ruby 1.9, ree, mysql, postgresql and nginx/passenger.
5
+
6
+ ## Usage
7
+
8
+ To use Elzar with your Rails app, just use (relevance_rails)[https://github.com/relevance/relevance_rails].
9
+
10
+ But if you'd like to manually do it:
11
+
12
+ ```ruby
13
+ # Creates a provision/ directory to define app-specific cookbooks
14
+ Elzar.create_provision_directory 'provision'
15
+
16
+ # To combine Elzar's cookbooks with your app's cookbooks
17
+ dir = Elzar.merge_and_create_temp_directory 'provision'
18
+ # You now have a directory you can put on a chef node
19
+ ```
20
+
21
+ ## Local Development
22
+
23
+ If you'd like to try these Chef cookbooks with Vagrant:
24
+
25
+ ```sh
26
+ $ git clone git@github.com:relevance/elzar.git
27
+ $ cd elzar
28
+ $ gem install bundler
29
+ # creates provision/ for local vagrant use
30
+ $ rake bam
31
+ $ cd provision
32
+ $ bundle install
33
+
34
+ ## Using Vagrant
2
35
 
3
36
  Download and install VirtualBox (as instructed in the Vagrant
4
37
  [Getting Started guide](http://vagrantup.com/docs/getting-started/index.html)). Then set up
5
38
  your bundle and grab the Ubuntu Lucid VM image.
6
39
 
7
- gem install bundler
8
- # creates provision/ for local vagrant use
9
- rake bam
10
- cd provision
11
- bundle install
12
40
  vagrant box add lucid64 http://files.vagrantup.com/lucid64.box
13
41
 
42
+ ```sh
14
43
  ## Spin up a new VM
15
-
16
- vagrant up
44
+ $ vagrant up
17
45
 
18
46
  ## SSH into the VM
19
-
20
- vagrant ssh
47
+ $ vagrant ssh
21
48
 
22
49
  ## Destroy the VM
23
-
24
- vagrant destroy
50
+ $ vagrant destroy
25
51
 
26
52
  ## Re-run Chef recipes on the VM
27
-
28
- vagrant provision
53
+ $ vagrant provision
29
54
 
30
55
  ## Stop/Start the VM
56
+ $ vagrant suspend
57
+ $ vagrant resume
58
+ ```
31
59
 
32
- vagrant suspend
33
- vagrant resume
34
-
35
- # Install additional cookbooks
36
-
37
- This script (and the knife extension it invokes) automatically creates a
38
- vendor branch for tracking upstream git sources, merges the cookbook into the
39
- cookbooks/ directory, and makes it easy to update these cookbook as needed in
40
- the future.
41
-
42
- To use this script, the cookbook must be in its own git repository, like those
43
- at https://github.com/cookbooks/.
60
+ ## Issues
44
61
 
45
- ./script/install_cookbook cookbooks/mysql
62
+ Please file issues [on github](https://github.com/relevance/elzar/issues).
data/Rakefile CHANGED
@@ -6,3 +6,10 @@ task :bam do
6
6
  require 'elzar'
7
7
  Elzar.create_provision_directory File.dirname(__FILE__) + '/provision', :local => true
8
8
  end
9
+
10
+ desc "Run Rspec tests"
11
+ task :spec do
12
+ sh 'rspec spec'
13
+ end
14
+
15
+ task :default => :spec
@@ -26,8 +26,10 @@ module Elzar
26
26
  cp "#{Elzar.templates_dir}/Gemfile", dest
27
27
  cp "#{Elzar.templates_dir}/upgrade-chef.sh", dest
28
28
  cp "#{Elzar.templates_dir}/.rvmrc", dest
29
+ cp "#{Elzar.templates_dir}/README.md", dest
29
30
  cp_r "#{Elzar.templates_dir}/data_bags", dest
30
31
  cp_r "#{Elzar.templates_dir}/script", dest
32
+ cp_r "#{Elzar.templates_dir}/.chef", dest
31
33
  end
32
34
 
33
35
  def self.merge_and_create_temp_directory(user_dir)
@@ -39,7 +41,6 @@ module Elzar
39
41
  cp_r Elzar::ROLES_DIR, dest
40
42
  cp_r "#{Elzar::CHEF_DIR}/cookbooks", elzar_dir
41
43
  cp_r "#{Elzar::CHEF_DIR}/site-cookbooks", elzar_dir
42
- cp_r "#{Elzar::CHEF_DIR}/.chef", dest
43
44
  # merges user provision with elzar's provision
44
45
  cp_r "#{user_dir}/.", dest
45
46
  dest
@@ -52,7 +53,6 @@ module Elzar
52
53
  cp_r Elzar::ROLES_DIR, dest
53
54
  cp_r "#{Elzar::CHEF_DIR}/cookbooks", dest
54
55
  cp_r "#{Elzar::CHEF_DIR}/site-cookbooks", dest
55
- cp_r "#{Elzar::CHEF_DIR}/.chef", dest
56
56
  end
57
57
 
58
58
  def self.generate_user_files(dest, options={})
@@ -0,0 +1,26 @@
1
+ ## Description
2
+ Use this directory to define your app's Chef cookbooks. If you're using relevance\_rails,
3
+ your app automatically bundles (Elzar's recipes)[http://github.com/relevance/elzar].
4
+
5
+ ## Usage
6
+
7
+ First, setup this directory: `cd provision && bundle install`.
8
+
9
+ To create new cookbooks or install [existing ones](https://github.com/cookbooks):
10
+
11
+ ```sh
12
+ # Create a new cookbook
13
+ $ script/new_cookbook my_cookbook
14
+
15
+ # Install any cookbook on github by user/name
16
+ $ script/install_cookbook cookbooks/mysql
17
+ ```
18
+
19
+ Once you've added a cookbook you need to add the recipe name to the "run_list" key of dna.json.
20
+
21
+ ## Elzar Cookbooks
22
+ Although Elzar's cookbooks and roles are automatically bundled, you can override them in cookbooks or
23
+ site_cookbooks.
24
+
25
+ ## Vagrant
26
+ To provision using Vagrant [see these detailed instructions](https://github.com/relevance/elzar#using-vagrant).
@@ -1,3 +1,3 @@
1
1
  module Elzar
2
- VERSION = '0.0.2'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe Elzar::ChefDNA do
4
+ let(:database) { 'mysql' }
5
+ let(:json) {
6
+ {
7
+ "run_list" => ["role[plumbing]", "mysql::server", "role[enterprise_appstack]", "rails_app"],
8
+ 'ruby' => {'url' => '', 'version' => '', 'gems_version' => ''},
9
+ 'ruby_enterprise' => {'url' => '', 'version' => '', 'gems_version' => ''}
10
+ }
11
+ }
12
+ let(:run_list) { json['run_list'] }
13
+
14
+ def splice(database = nil)
15
+ Elzar::ChefDNA.gene_splice(json, database, ruby_version)
16
+ end
17
+
18
+ describe '.gene_splice' do
19
+ context 'for mri ruby' do
20
+ let(:ruby_version) { 'ruby-1.9.3-p194' }
21
+
22
+ it "updates run_list correctly for mysql" do
23
+ splice 'mysql'
24
+ run_list[1].should == 'mysql::server'
25
+ end
26
+
27
+ it "updates run_list correctly for mysql as default" do
28
+ splice nil
29
+ run_list[1].should == 'mysql::server'
30
+ end
31
+
32
+ it "updates run_list correctly for postgresql" do
33
+ splice 'postgresql'
34
+ run_list[1].should == 'role[postgres_database]'
35
+ end
36
+
37
+ it "updates ruby dna correctly" do
38
+ splice
39
+ json['ruby']['url'].should == "http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz"
40
+ json['ruby']['version'].should == '1.9.3-p194'
41
+ json['ruby']['gems_version'].should == Gem::VERSION
42
+ run_list[2].should == 'role[ruby_appstack]'
43
+ end
44
+ end
45
+
46
+ context 'for ree' do
47
+ let(:ruby_version) { 'ree-1.8.7-2011.03' }
48
+
49
+ it "updates ree dna correctly" do
50
+ splice
51
+ json['ruby_enterprise']['url'].should == "http://rubyenterpriseedition.googlecode.com/files/ruby-enterprise-1.8.7-2011.03"
52
+ json['ruby_enterprise']['version'].should == '1.8.7-2011.03'
53
+ json['ruby_enterprise']['gems_version'].should == Gem::VERSION
54
+ run_list[2].should == 'role[enterprise_appstack]'
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,10 @@
1
+ require 'elzar'
2
+
3
+ RSpec.configure do |config|
4
+ config.filter_run_excluding :disabled => true
5
+ config.run_all_when_everything_filtered = true
6
+
7
+ config.alias_example_to :fit, :focused => true
8
+ config.alias_example_to :xit, :disabled => true
9
+ config.alias_example_to :they
10
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elzar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-05-06 00:00:00.000000000 Z
13
+ date: 2012-05-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: multi_json
@@ -90,7 +90,6 @@ files:
90
90
  - Gemfile.lock
91
91
  - README.md
92
92
  - Rakefile
93
- - chef/.chef/knife.rb
94
93
  - chef/cookbooks/.gitkeep
95
94
  - chef/cookbooks/apt/README.md
96
95
  - chef/cookbooks/apt/files/default/apt-cacher
@@ -227,8 +226,10 @@ files:
227
226
  - lib/elzar/assistant.rb
228
227
  - lib/elzar/chef_dna.rb
229
228
  - lib/elzar/template.rb
229
+ - lib/elzar/templates/.chef/knife.rb
230
230
  - lib/elzar/templates/.rvmrc
231
231
  - lib/elzar/templates/Gemfile
232
+ - lib/elzar/templates/README.md
232
233
  - lib/elzar/templates/Vagrantfile.erb
233
234
  - lib/elzar/templates/data_bags/deploy/authorized_keys.json
234
235
  - lib/elzar/templates/dna.json
@@ -237,6 +238,8 @@ files:
237
238
  - lib/elzar/templates/solo.rb.erb
238
239
  - lib/elzar/templates/upgrade-chef.sh
239
240
  - lib/elzar/version.rb
241
+ - spec/chef_dna_spec.rb
242
+ - spec/spec_helper.rb
240
243
  homepage: http://github.com/relevance/elzar
241
244
  licenses: []
242
245
  post_install_message:
@@ -261,4 +264,6 @@ rubygems_version: 1.8.21
261
264
  signing_key:
262
265
  specification_version: 3
263
266
  summary: Chef cookbooks for Rails
264
- test_files: []
267
+ test_files:
268
+ - spec/chef_dna_spec.rb
269
+ - spec/spec_helper.rb