flombe 0.1.0.2
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.
- data/.gitignore +4 -0
- data/.gitmodules +3 -0
- data/.rspec +2 -0
- data/Flombefile +9 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +57 -0
- data/LICENSE +20 -0
- data/Rakefile +33 -0
- data/bin/flombe +17 -0
- data/config/rake.rb +38 -0
- data/cookbooks/homebrew/README.rdoc +8 -0
- data/cookbooks/homebrew/metadata.rb +8 -0
- data/cookbooks/homebrew/providers/homebrew.rb +39 -0
- data/cookbooks/homebrew/recipes/default.rb +42 -0
- data/cookbooks/homebrew/resources/homebrew.rb +14 -0
- data/cookbooks/mysql/README.rdoc +8 -0
- data/cookbooks/mysql/metadata.rb +6 -0
- data/cookbooks/mysql/recipes/default.rb +43 -0
- data/cookbooks/mysql/recipes/timezone.rb +10 -0
- data/cookbooks/redis/README.rdoc +8 -0
- data/cookbooks/redis/metadata.rb +6 -0
- data/cookbooks/redis/recipes/2.0.4.rb +24 -0
- data/cookbooks/redis/recipes/default.rb +7 -0
- data/cookbooks/rvm/CHANGELOG.md +19 -0
- data/cookbooks/rvm/README.md +564 -0
- data/cookbooks/rvm/Rakefile +35 -0
- data/cookbooks/rvm/attributes/default.rb +54 -0
- data/cookbooks/rvm/attributes/gem_package.rb +23 -0
- data/cookbooks/rvm/attributes/vagrant.rb +22 -0
- data/cookbooks/rvm/libraries/gem_package_monkeypatch.rb +34 -0
- data/cookbooks/rvm/libraries/helpers.rb +334 -0
- data/cookbooks/rvm/libraries/rvm_rubygems_package.rb +108 -0
- data/cookbooks/rvm/metadata.json +271 -0
- data/cookbooks/rvm/metadata.rb +95 -0
- data/cookbooks/rvm/providers/default_ruby.rb +46 -0
- data/cookbooks/rvm/providers/environment.rb +50 -0
- data/cookbooks/rvm/providers/gemset.rb +135 -0
- data/cookbooks/rvm/providers/global_gem.rb +99 -0
- data/cookbooks/rvm/providers/ruby.rb +100 -0
- data/cookbooks/rvm/providers/shell.rb +68 -0
- data/cookbooks/rvm/providers/wrapper.rb +58 -0
- data/cookbooks/rvm/recipes/default.rb +73 -0
- data/cookbooks/rvm/recipes/gem_package.rb +23 -0
- data/cookbooks/rvm/recipes/system.rb +69 -0
- data/cookbooks/rvm/recipes/user.rb +47 -0
- data/cookbooks/rvm/recipes/vagrant.rb +30 -0
- data/cookbooks/rvm/resources/default_ruby.rb +29 -0
- data/cookbooks/rvm/resources/environment.rb +29 -0
- data/cookbooks/rvm/resources/gem.rb +36 -0
- data/cookbooks/rvm/resources/gemset.rb +30 -0
- data/cookbooks/rvm/resources/global_gem.rb +33 -0
- data/cookbooks/rvm/resources/ruby.rb +29 -0
- data/cookbooks/rvm/resources/shell.rb +40 -0
- data/cookbooks/rvm/resources/wrapper.rb +32 -0
- data/cookbooks/rvm/templates/default/rvmrc.erb +14 -0
- data/cookbooks/rvm/templates/default/vagrant-chef-solo-wrapper.erb +23 -0
- data/cookbooks/utils/README.rdoc +8 -0
- data/cookbooks/utils/metadata.rb +6 -0
- data/cookbooks/utils/recipes/default.rb +10 -0
- data/cookbooks/utils/recipes/dotfiles.rb +21 -0
- data/cookbooks/utils/templates/default/dot.profile.erb +36 -0
- data/flombe.gemspec +28 -0
- data/lib/flombe/dsl.rb +66 -0
- data/lib/flombe.rb +107 -0
- data/spec/dsl_spec.rb +111 -0
- data/spec/flombe_spec.rb +30 -0
- data/spec/quality_spec.rb +11 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/support/helpers.rb +18 -0
- data/spec/support/matchers.rb +9 -0
- data/spec/support/path.rb +21 -0
- data/templates/chef_solo.erb +11 -0
- metadata +154 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: rvm
|
3
|
+
# Resource:: gemset
|
4
|
+
#
|
5
|
+
# Author:: Fletcher Nichol <fnichol@nichol.ca>
|
6
|
+
#
|
7
|
+
# Copyright 2011, Fletcher Nichol
|
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
|
+
actions :create, :delete, :empty, :update
|
23
|
+
|
24
|
+
attribute :gemset, :kind_of => String, :name_attribute => true
|
25
|
+
attribute :ruby_string, :kind_of => String, :regex => /^[^@]+$/
|
26
|
+
|
27
|
+
def initialize(*args)
|
28
|
+
super
|
29
|
+
@action = :create
|
30
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: rvm
|
3
|
+
# Resource:: global_gem
|
4
|
+
#
|
5
|
+
# Author:: Fletcher Nichol <fnichol@nichol.ca>
|
6
|
+
#
|
7
|
+
# Copyright 2011, Fletcher Nichol
|
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
|
+
actions :install, :upgrade, :remove, :purge
|
23
|
+
|
24
|
+
attribute :package_name, :kind_of => String, :name_attribute => true
|
25
|
+
attribute :version, :kind_of => String
|
26
|
+
attribute :source, :kind_of => String
|
27
|
+
attribute :options, :kind_of => Hash
|
28
|
+
attribute :gem_binary, :kind_of => String
|
29
|
+
|
30
|
+
def initialize(*args)
|
31
|
+
super
|
32
|
+
@action = :install
|
33
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: rvm
|
3
|
+
# Resource:: ruby
|
4
|
+
#
|
5
|
+
# Author:: Fletcher Nichol <fnichol@nichol.ca>
|
6
|
+
#
|
7
|
+
# Copyright 2011, Fletcher Nichol
|
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
|
+
actions :install, :uninstall, :remove
|
23
|
+
|
24
|
+
attribute :ruby_string, :kind_of => String, :name_attribute => true
|
25
|
+
|
26
|
+
def initialize(*args)
|
27
|
+
super
|
28
|
+
@action = :install
|
29
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: rvm
|
3
|
+
# Resource:: shell
|
4
|
+
#
|
5
|
+
# Author:: Fletcher Nichol <fnichol@nichol.ca>
|
6
|
+
#
|
7
|
+
# Copyright 2011, Fletcher Nichol
|
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
|
+
actions :run
|
23
|
+
|
24
|
+
attribute :name, :kind_of => String, :name_attribute => true
|
25
|
+
attribute :ruby_string, :kind_of => String, :default => "default"
|
26
|
+
attribute :code, :kind_of => String
|
27
|
+
attribute :creates, :kind_of => String
|
28
|
+
attribute :cwd, :kind_of => String
|
29
|
+
attribute :environment, :kind_of => Hash
|
30
|
+
attribute :group, :kind_of => String
|
31
|
+
attribute :path, :kind_of => Array
|
32
|
+
attribute :returns, :kind_of => Array, :default => [ 0 ]
|
33
|
+
attribute :timeout, :kind_of => Integer
|
34
|
+
attribute :user, :kind_of => String
|
35
|
+
attribute :umask, :kind_of => String
|
36
|
+
|
37
|
+
def initialize(*args)
|
38
|
+
super
|
39
|
+
@action = :run
|
40
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: rvm
|
3
|
+
# Resource:: wrapper
|
4
|
+
#
|
5
|
+
# Author:: Fletcher Nichol <fnichol@nichol.ca>
|
6
|
+
#
|
7
|
+
# Copyright 2011, Fletcher Nichol
|
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
|
+
actions :create
|
23
|
+
|
24
|
+
attribute :prefix, :kind_of => String, :name_attribute => true
|
25
|
+
attribute :ruby_string, :kind_of => String
|
26
|
+
attribute :binary, :kind_of => String
|
27
|
+
attribute :binaries, :kind_of => Array
|
28
|
+
|
29
|
+
def initialize(*args)
|
30
|
+
super
|
31
|
+
@action = :create
|
32
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# rvm configuration
|
2
|
+
#
|
3
|
+
# Generated by Chef for <%= node[:fqdn] %>
|
4
|
+
# Local modifications will be overwritten.
|
5
|
+
#
|
6
|
+
umask g+w
|
7
|
+
export rvm_path="<%= node['rvm']['root_path'] %>"
|
8
|
+
|
9
|
+
<% unless node['rvm']['rvm_gem_options'].empty? -%>
|
10
|
+
export rvm_gem_options="<%= node['rvm']['rvm_gem_options'] %>"
|
11
|
+
<% end -%>
|
12
|
+
<% node['rvm']['rvmrc'].each_pair do |k,v| -%>
|
13
|
+
export <%= k %>=<%= v %>
|
14
|
+
<% end -%>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# RVM-aware chef-solo wrapper
|
4
|
+
#
|
5
|
+
# Generated by Chef for <%= node[:fqdn] %>
|
6
|
+
# Local modifications will be overridden
|
7
|
+
|
8
|
+
if [[ -d "<%= node['rvm']['root_path'] %>" ]] ; then
|
9
|
+
export PATH="/bin:<%= node['rvm']['root_path'] %>:$PATH"
|
10
|
+
rvm_path='<%= node['rvm']['root_path'] %>'
|
11
|
+
export rvm_path
|
12
|
+
unset RUBY_VERSION
|
13
|
+
unset GEM_HOME
|
14
|
+
unset GEM_PATH
|
15
|
+
unset MY_RUBY_HOME
|
16
|
+
unset IRBRC
|
17
|
+
rvm_ruby_string='system'
|
18
|
+
export rvm_ruby_string
|
19
|
+
unset rvm_gemset_name
|
20
|
+
unset MAGLEV_HOME
|
21
|
+
fi
|
22
|
+
|
23
|
+
exec <%= node['rvm']['vagrant']['system_chef_solo'] %> "$@"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: utils::profile
|
3
|
+
# Recipe:: default
|
4
|
+
#
|
5
|
+
|
6
|
+
template "#{ENV['HOME']}/.flombe.profile" do
|
7
|
+
mode 0700
|
8
|
+
owner ENV['USER']
|
9
|
+
group Etc.getgrgid(Process.gid).name
|
10
|
+
source "dot.profile.erb"
|
11
|
+
variables({ :home => ENV['HOME'] })
|
12
|
+
end
|
13
|
+
|
14
|
+
execute "setup flombe profile sourcing in ~/.bash_profile" do
|
15
|
+
command "echo 'source ~/.flombe.profile' >> ~/.bash_profile"
|
16
|
+
not_if "grep -q 'flombe.profile' ~/.bash_profile"
|
17
|
+
end
|
18
|
+
|
19
|
+
execute "sourcing flombe profile for immediate usage" do
|
20
|
+
command "source ~/.flombe.profile"
|
21
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
export CLICOLOR=1
|
2
|
+
export LSCOLORS=ExFxCxDxBxegedabagacad
|
3
|
+
|
4
|
+
source /usr/local/etc/bash_completion.d/git-completion.bash
|
5
|
+
|
6
|
+
function parse_git_branch {
|
7
|
+
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/[\1] /'
|
8
|
+
}
|
9
|
+
|
10
|
+
function proml {
|
11
|
+
local BLUE="\[\033[0;34m\]"
|
12
|
+
local RED="\[\033[0;31m\]"
|
13
|
+
local LIGHT_RED="\[\033[1;31m\]"
|
14
|
+
local GREEN="\[\033[0;32m\]"
|
15
|
+
local LIGHT_GREEN="\[\033[1;32m\]"
|
16
|
+
local WHITE="\[\033[1;37m\]"
|
17
|
+
local LIGHT_GRAY="\[\033[0;37m\]"
|
18
|
+
local CYAN="\[\033[0;36m\]"
|
19
|
+
local NO_COLOUR="\[\033[0m\]"
|
20
|
+
case $TERM in
|
21
|
+
xterm*)
|
22
|
+
TITLEBAR='\[\033]0;\u@\h:\w\007\]'
|
23
|
+
;;
|
24
|
+
*)
|
25
|
+
TITLEBAR=""
|
26
|
+
;;
|
27
|
+
esac
|
28
|
+
|
29
|
+
PS1="${TITLEBAR}\
|
30
|
+
$BLUE\$(parse_git_branch)\
|
31
|
+
$NO_COLOUR\h:$CYAN\w\
|
32
|
+
$NO_COLOUR\u\$ "
|
33
|
+
PS2='> '
|
34
|
+
PS4='+ '
|
35
|
+
}
|
36
|
+
proml
|
data/flombe.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
2
|
+
require 'rubygems'
|
3
|
+
require 'bundler'
|
4
|
+
require 'flombe'
|
5
|
+
|
6
|
+
Gem::Specification.new do | s |
|
7
|
+
s.name = "flombe"
|
8
|
+
s.version = Flombe::VERSION
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.extra_rdoc_files = ["LICENSE"]
|
11
|
+
s.summary = "Mac OS X development configurator for multi project shops."
|
12
|
+
s.description = "A mix between the ease of use of Bundler and the super powers of Chef. Configuration management made easy on a per-project basis."
|
13
|
+
s.author = "Stephen Craton"
|
14
|
+
s.email = "stephen@babypips.com"
|
15
|
+
s.homepage = "http://github.com/devpips/flombe"
|
16
|
+
|
17
|
+
bundle = Bundler::Definition.build('Gemfile', 'Gemfile.lock', { })
|
18
|
+
bundle.dependencies.each do | dep |
|
19
|
+
next unless dep.groups.include?(:runtime)
|
20
|
+
s.add_dependency(dep.name)
|
21
|
+
end
|
22
|
+
|
23
|
+
s.bindir = "bin"
|
24
|
+
s.executables = %w( flombe )
|
25
|
+
s.require_path = 'lib'
|
26
|
+
s.files = `git ls-files`.split("\n") + Dir.glob("{cookbooks/rvm}/**/*")
|
27
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
28
|
+
end
|
data/lib/flombe/dsl.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'erubis'
|
2
|
+
|
3
|
+
module Flombe
|
4
|
+
class Dsl
|
5
|
+
CHEF_METHODS = %w(cookbook_path sandbox_path file_cache_path file_backup_path json_attribs log_level log_location verbose_logging node_name node_path solo ssl_verify_mode umask recipe_url cache_type cache_options)
|
6
|
+
BASE_COOKBOOKS = [File.expand_path('../../../cookbooks', __FILE__)]
|
7
|
+
FLOMBE_BASE = "#{ENV['HOME']}/.flombe"
|
8
|
+
|
9
|
+
def self.evaluate(flombefile)
|
10
|
+
builder = new
|
11
|
+
builder.instance_eval(File.open(flombefile, "rb") { |f| f.read }, flombefile.to_s, 1)
|
12
|
+
builder
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
@config = {}
|
17
|
+
@recipes = {}
|
18
|
+
end
|
19
|
+
|
20
|
+
def config
|
21
|
+
cookbooks = @config.delete(:cookbook_path)
|
22
|
+
cookbooks = [cookbooks] if cookbooks.kind_of? String
|
23
|
+
{
|
24
|
+
:file_cache_path => "#{FLOMBE_BASE}/cache",
|
25
|
+
:file_backup_path => "#{FLOMBE_BASE}/backup",
|
26
|
+
:sandbox_path => "#{FLOMBE_BASE}/sandbox",
|
27
|
+
:log_level => :info,
|
28
|
+
:log_location => STDOUT,
|
29
|
+
:cookbook_path => BASE_COOKBOOKS + (cookbooks || []),
|
30
|
+
:cache_options => {:path => "#{FLOMBE_BASE}/cache/checksums", :skip_expires => true}
|
31
|
+
}.merge!(@config)
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_dna
|
35
|
+
{
|
36
|
+
:recipes => @recipes.keys
|
37
|
+
}.merge!(@recipes).to_json
|
38
|
+
end
|
39
|
+
|
40
|
+
def to_solo_config
|
41
|
+
template = File.open(File.expand_path('../../../templates/chef_solo.erb', __FILE__), "r") { |f| f.read }
|
42
|
+
Erubis::Eruby.new(template).result(:config => config)
|
43
|
+
end
|
44
|
+
|
45
|
+
CHEF_METHODS.each do |method|
|
46
|
+
define_method method do |*args|
|
47
|
+
@config[method.to_sym] = args.pop
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def recipe(name, *args)
|
52
|
+
options = Hash === args.last ? args.pop : {}
|
53
|
+
@recipes[name.to_sym] = options
|
54
|
+
end
|
55
|
+
|
56
|
+
def rubies(rubies, *args)
|
57
|
+
@recipes[:rvm] = {} unless @recipes.has_key?(:rvm)
|
58
|
+
|
59
|
+
rubies = [rubies] if rubies.is_a? String
|
60
|
+
@recipes[:rvm][:rubies] = rubies
|
61
|
+
|
62
|
+
options = Hash === args.last ? args.pop : {}
|
63
|
+
@recipes[:rvm][:default_ruby] = options[:default] unless options[:default].nil?
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/flombe.rb
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
$:.unshift File.expand_path('..', __FILE__)
|
2
|
+
|
3
|
+
require "etc"
|
4
|
+
require "tmpdir"
|
5
|
+
require "json"
|
6
|
+
|
7
|
+
module Flombe
|
8
|
+
VERSION = "0.1.0.2"
|
9
|
+
|
10
|
+
autoload :Dsl, 'flombe/dsl'
|
11
|
+
|
12
|
+
class FlombeError < Exception ; end
|
13
|
+
class MissingXCodeError < FlombeError ; end
|
14
|
+
class BadMacOSXVersionError < FlombeError ; end
|
15
|
+
class NoFlombefileError < FlombeError ; end
|
16
|
+
class RunningAsRootError < FlombeError ; end
|
17
|
+
|
18
|
+
class Runner
|
19
|
+
RECOMMENDED_LLVM = 2206
|
20
|
+
|
21
|
+
def self.run
|
22
|
+
new.run
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.warn(msg)
|
26
|
+
$stderr.puts "\033[0;31m\033[1m==> \033[0m\033[1m" + msg + "\033[0m"
|
27
|
+
end
|
28
|
+
|
29
|
+
def run
|
30
|
+
raise BadMacOSXVersionError, "You must have Snow Leopard for Flombe. Sorry bro." unless macosx?
|
31
|
+
raise MissingXCodeError, "You must have xcode installed to run Flombe." unless xcode?
|
32
|
+
raise NoFlombefileError, "There is no Flombefile here: #{Dir.pwd}" unless flombefile?
|
33
|
+
raise RunningAsRootError, "Please do not run this command as root." if root?
|
34
|
+
|
35
|
+
if `/usr/bin/xcode-select -print-path` + `/usr/bin/llvm-gcc-4.2 -v 2>&1` =~ /LLVM build (\d{4,})/
|
36
|
+
if $1.to_i < RECOMMENDED_LLVM
|
37
|
+
warn "You should really upgrade your xcode install for best performance."
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
run_chef
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def xcode?
|
47
|
+
!`/usr/bin/xcode-select -print-path`.chomp.empty?
|
48
|
+
end
|
49
|
+
|
50
|
+
def macosx?
|
51
|
+
macosx_version >= 10.6
|
52
|
+
end
|
53
|
+
|
54
|
+
def flombefile?
|
55
|
+
File.exist?(flombefile)
|
56
|
+
end
|
57
|
+
|
58
|
+
def macosx_version
|
59
|
+
/(10\.\d+)(\.\d+)?/.match(`/usr/bin/sw_vers -productVersion`.chomp).captures.first.to_f
|
60
|
+
end
|
61
|
+
|
62
|
+
def root?
|
63
|
+
Etc.getpwuid.uid == 0
|
64
|
+
end
|
65
|
+
|
66
|
+
def run_chef
|
67
|
+
system("chef-solo -j #{dna} -c #{config}")
|
68
|
+
exit($?.to_i)
|
69
|
+
end
|
70
|
+
|
71
|
+
def sane_xcode_version?
|
72
|
+
xcode_path = `/usr/bin/xcode-select -print-path`.chomp
|
73
|
+
if xcode_path.empty?
|
74
|
+
false
|
75
|
+
elsif `#{xcode_path}/usr/bin/llvm-gcc-4.2 -v 2>&1` =~ /LLVM build (\d{4,})/
|
76
|
+
if $1.to_i < RECOMMENDED_LLVM
|
77
|
+
warn "You should really upgrade your xcode install"
|
78
|
+
end
|
79
|
+
true
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def flombefile
|
84
|
+
@flombefile ||= File.expand_path(File.join(Dir.pwd, "Flombefile"))
|
85
|
+
end
|
86
|
+
|
87
|
+
def flombe_definition
|
88
|
+
@flombe ||= Flombe::Dsl.evaluate(flombefile)
|
89
|
+
end
|
90
|
+
|
91
|
+
def config
|
92
|
+
config_file = File.expand_path(File.join(Dir.tmpdir, "solo.rb"))
|
93
|
+
File.open(config_file, "w") do |fp|
|
94
|
+
fp.write( flombe_definition.to_solo_config )
|
95
|
+
end
|
96
|
+
config_file
|
97
|
+
end
|
98
|
+
|
99
|
+
def dna
|
100
|
+
dna_file = File.expand_path(File.join(Dir.tmpdir, "dna.json"))
|
101
|
+
File.open(dna_file, "w") do |fp|
|
102
|
+
fp.write( flombe_definition.to_dna )
|
103
|
+
end
|
104
|
+
dna_file
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
data/spec/dsl_spec.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Flombe::Dsl do
|
4
|
+
let(:file) do
|
5
|
+
flombefile <<-G
|
6
|
+
recipe "homebrew"
|
7
|
+
G
|
8
|
+
end
|
9
|
+
let(:flombe) { Flombe::Dsl.evaluate(@file || file) }
|
10
|
+
let(:dna) { JSON.parse(flombe.to_dna) }
|
11
|
+
let(:config) { flombe.config }
|
12
|
+
|
13
|
+
describe "recipes" do
|
14
|
+
it "should add to the list of recipes" do
|
15
|
+
dna['recipes'].should == ['homebrew']
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "solo.rb configuration" do
|
20
|
+
context "it should let me call chef-solo methods" do
|
21
|
+
Flombe::Dsl::CHEF_METHODS.each do |method|
|
22
|
+
it "can set #{method}" do
|
23
|
+
flombe.send(method, "test")
|
24
|
+
flombe.config[method.to_sym].should == "test"
|
25
|
+
end unless method == "cookbook_path" # we'll test cookbook_path specifically later on
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should provide a set of defaults for the solo config" do
|
30
|
+
config[:file_cache_path].should be
|
31
|
+
config[:cookbook_path].should be
|
32
|
+
config[:log_level].should be
|
33
|
+
config[:log_location].should be
|
34
|
+
config[:cache_options].should be
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should allow overriding of config defaults" do
|
38
|
+
@file = flombefile <<-G
|
39
|
+
log_level :info
|
40
|
+
G
|
41
|
+
config[:log_level].should == :info
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "cookbook paths" do
|
46
|
+
let(:default_cookbook) { File.expand_path('../../cookbooks', __FILE__) }
|
47
|
+
|
48
|
+
it "should include the flombe cookbooks by default" do
|
49
|
+
config[:cookbook_path].should == [default_cookbook]
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should include the flobme cookbooks even if custom ones are set" do
|
53
|
+
flombe.send(:cookbook_path, "~/my/cookbooks")
|
54
|
+
flombe.config[:cookbook_path].should == [default_cookbook, "~/my/cookbooks"]
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should allow me to specify multiple cookbook paths" do
|
58
|
+
@file = flombefile <<-G
|
59
|
+
cookbook_path ["~/my/cookbooks", "./local/cookbooks"]
|
60
|
+
G
|
61
|
+
config[:cookbook_path].should == [default_cookbook, "~/my/cookbooks", "./local/cookbooks"]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "recipe config" do
|
66
|
+
it "should store extra params as config options" do
|
67
|
+
@file = flombefile <<-G
|
68
|
+
recipe "mysql", :root_password => 'qit13R', :tmp_path => '/tmp'
|
69
|
+
G
|
70
|
+
dna['mysql'].should == { "root_password" => "qit13R", "tmp_path" => "/tmp" }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "rvm rubies" do
|
75
|
+
let(:file) do
|
76
|
+
flombefile <<-G
|
77
|
+
rubies 'ruby-1.9.2-p180'
|
78
|
+
G
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should add a ruby intepreter to a list" do
|
82
|
+
dna['rvm']['rubies'].should == ['ruby-1.9.2-p180']
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should add the rvm recipe" do
|
86
|
+
dna['recipes'].should include('rvm')
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should not add the RVM recipe twice" do
|
90
|
+
@file = flombefile <<-G
|
91
|
+
recipe "rvm"
|
92
|
+
rubies 'ruby-1.9.2-p180'
|
93
|
+
G
|
94
|
+
dna['recipes'].should == ['rvm']
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should add multiple rubies to a list" do
|
98
|
+
@file = flombefile <<-G
|
99
|
+
rubies ['ruby-1.9.2-p180', 'ruby-1.8.7']
|
100
|
+
G
|
101
|
+
dna['rvm']['rubies'].should == ['ruby-1.9.2-p180', 'ruby-1.8.7']
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should let me define a default ruby" do
|
105
|
+
@file = flombefile <<-G
|
106
|
+
rubies ['ruby-1.9.2-p180', 'ruby-1.8.7'], :default => 'ruby-1.9.2-p180'
|
107
|
+
G
|
108
|
+
dna['rvm']['default_ruby'].should == 'ruby-1.9.2-p180'
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
data/spec/flombe_spec.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Flombe do
|
4
|
+
let(:runner) { Flombe::Runner.new }
|
5
|
+
|
6
|
+
it "should detect if xcode is missing" do
|
7
|
+
runner.stub!(:xcode?).and_return(false)
|
8
|
+
lambda { runner.run }.should raise_error(Flombe::MissingXCodeError)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should detect Mac OS X verson" do
|
12
|
+
runner.stub!(:macosx_version).and_return(10.5)
|
13
|
+
lambda { runner.run }.should raise_error(Flombe::BadMacOSXVersionError)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should detect that a Flombefile does not exist" do
|
17
|
+
runner.stub!(:flombefile?).and_return(false)
|
18
|
+
lambda { runner.run }.should raise_error(Flombe::NoFlombefileError)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should detect if it's trying to be run as root" do
|
22
|
+
runner.stub!(:root?).and_return(true)
|
23
|
+
lambda { runner.run }.should raise_error(Flombe::RunningAsRootError)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should run chef-solo" do
|
27
|
+
runner.should_receive(:run_chef)
|
28
|
+
runner.run
|
29
|
+
end
|
30
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
$:.unshift File.expand_path('..', __FILE__)
|
2
|
+
$:.unshift File.expand_path('../../lib', __FILE__)
|
3
|
+
|
4
|
+
require 'fileutils'
|
5
|
+
require 'rubygems'
|
6
|
+
require 'bundler'
|
7
|
+
require 'rspec'
|
8
|
+
|
9
|
+
require 'flombe'
|
10
|
+
|
11
|
+
Dir["#{File.expand_path('../support', __FILE__)}/*.rb"].each do |file|
|
12
|
+
require file
|
13
|
+
end
|
14
|
+
|
15
|
+
# RSpec::Rubygems.setup
|
16
|
+
|
17
|
+
RSpec.configure do |config|
|
18
|
+
config.include RSpec::Matchers
|
19
|
+
config.include RSpec::Helpers
|
20
|
+
config.include RSpec::Paths
|
21
|
+
end
|