gusteau 1.1.1 → 1.2.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.
- data/CHANGELOG.md +12 -0
- data/README.md +10 -3
- data/bootstrap/omnibus.sh +8 -4
- data/lib/gusteau/chef.rb +2 -2
- data/lib/gusteau/config.rb +4 -1
- data/lib/gusteau/vagrant.rb +6 -1
- data/lib/gusteau/version.rb +1 -1
- data/spec/config/emile.yml +2 -0
- data/spec/lib/gusteau/chef_spec.rb +1 -1
- data/spec/lib/gusteau/config_spec.rb +4 -2
- data/spec/lib/gusteau/vagrant_spec.rb +27 -1
- data/template/Gemfile +1 -1
- data/template/Vagrantfile +1 -0
- metadata +4 -4
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## 1.2.0 / 2013-07-17
|
2
|
+
* Add ability to configure the version of Chef which will be bootstrapped - [@ctaintor][], [#30][]
|
3
|
+
* Add 'box' configuration option for vagrant VMs - [@ctaintor][], [#29][]
|
4
|
+
* RVM related issue ([CHEF-3581](http://tickets.opscode.com/browse/CHEF-3581)) work around: run chef-solo without `GEM_HOME` `GEM_PATH` - [@locochris][], [#26][]
|
5
|
+
|
1
6
|
## 1.1.1 / 2013-07-14
|
2
7
|
* Bugfix: environment attributes got altered by node ones
|
3
8
|
|
@@ -19,6 +24,7 @@
|
|
19
24
|
* Bugfix: `after` hook was not taking effect
|
20
25
|
* Add a quick `show nodename` subcommand for printing out individual node configuration
|
21
26
|
* Add an ability to configure `cookbooks_path` and `roles_path` from within `.gusteau.yml`
|
27
|
+
|
22
28
|
## 1.0.3.dev / 2013-07-07
|
23
29
|
* Implement `before` and `after` hooks (global and environment-based)
|
24
30
|
|
@@ -36,3 +42,9 @@
|
|
36
42
|
* Use omnibus installation if platform is unspecified
|
37
43
|
* Update the template to include a test-kitchen setup with serverspec tests
|
38
44
|
|
45
|
+
<!--- The following link definition list is generated by PimpMyChangelog --->
|
46
|
+
[#26]: https://github.com/locomote/gusteau/issues/26
|
47
|
+
[#29]: https://github.com/locomote/gusteau/issues/29
|
48
|
+
[#30]: https://github.com/locomote/gusteau/issues/30
|
49
|
+
[@ctaintor]: https://github.com/ctaintor
|
50
|
+
[@locochris]: https://github.com/locochris
|
data/README.md
CHANGED
@@ -116,7 +116,7 @@ nodes:
|
|
116
116
|
|
117
117
|
The following snippet configures Vagrant for all Gusteau nodes which have `vagrant` sections defined.
|
118
118
|
|
119
|
-
```
|
119
|
+
```ruby
|
120
120
|
Vagrant.configure('2') do |config|
|
121
121
|
Gusteau::Vagrant.detect(config) do |setup|
|
122
122
|
setup.prefix = 'loco'
|
@@ -126,7 +126,7 @@ end
|
|
126
126
|
```
|
127
127
|
|
128
128
|
* The `prefix` option lets you prepend your VirtualBox VMs names, e.g. `loco-nodename`.
|
129
|
-
* The `defaults` one lets you provide default values for `cpus`, `memory`, `box_url`.
|
129
|
+
* The `defaults` one lets you provide default values for `cpus`, `memory`, `box_url`, `box`.
|
130
130
|
|
131
131
|
Please note that the add-on only works with Vagrant ~> 1.2 and needs gusteau to be installed as a Vagrant plugin:
|
132
132
|
|
@@ -169,7 +169,13 @@ You can also override `run_list` for specific nodes.
|
|
169
169
|
|
170
170
|
### Bootstrap script
|
171
171
|
|
172
|
-
By default, Gusteau installs the [Omnibus Chef](http://www.opscode.com/chef/install/).
|
172
|
+
By default, Gusteau installs the [Omnibus Chef](http://www.opscode.com/chef/install/) 11.4.4. You can also set the Omnibus Chef version explicitly by specifying it in `.gusteau.yml`:
|
173
|
+
|
174
|
+
```
|
175
|
+
chef_version: 10.26.0
|
176
|
+
```
|
177
|
+
|
178
|
+
If you're targeting a non Omnibus-supported platform you might want to specify the `platform` value for a node: this invokes a specific [script](https://github.com/locomote/gusteau/tree/master/bootstrap).
|
173
179
|
|
174
180
|
Alternatively, you can specify a custom script in `.gusteau.yml`:
|
175
181
|
|
@@ -177,6 +183,7 @@ Alternatively, you can specify a custom script in `.gusteau.yml`:
|
|
177
183
|
bootstrap: ./scripts/freebsd.sh
|
178
184
|
```
|
179
185
|
|
186
|
+
|
180
187
|
### Custom cookbooks path
|
181
188
|
|
182
189
|
By default, Gusteau uploads and sets Chef Solo up to use cookbooks from `./cookbooks` and `./site-cookbooks` directories. If it doesn't work for you, you can override these values in `.gusteau.yml`:
|
data/bootstrap/omnibus.sh
CHANGED
@@ -1,15 +1,19 @@
|
|
1
1
|
#!/bin/sh
|
2
|
+
# Usage: omnibus.sh VERSION - installs the requested version of Chef, skipping if it's already installed
|
2
3
|
|
3
4
|
install_sh="https://www.opscode.com/chef/install.sh"
|
4
|
-
|
5
|
+
requested_version=$1
|
5
6
|
|
6
7
|
if type -p chef-solo > /dev/null; then
|
7
|
-
|
8
|
+
installed_version=$(chef-solo --v | awk '{print $2}')
|
9
|
+
fi
|
10
|
+
if [ $installed_version == $requested_version ]; then
|
11
|
+
echo "Using chef-solo $installed_version at $(which chef-solo)"
|
8
12
|
else
|
9
13
|
if command -v curl &>/dev/null; then
|
10
|
-
curl -L "$install_sh" | sudo bash -s -- -v "$
|
14
|
+
curl -L "$install_sh" | sudo bash -s -- -v "$requested_version"
|
11
15
|
elif command -v wget &>/dev/null; then
|
12
|
-
wget -qO- "$install_sh" | sudo bash -s -- -v "$
|
16
|
+
wget -qO- "$install_sh" | sudo bash -s -- -v "$requested_version"
|
13
17
|
else
|
14
18
|
echo "Neither wget nor curl found. Please install one." >&2
|
15
19
|
exit 1
|
data/lib/gusteau/chef.rb
CHANGED
@@ -14,9 +14,9 @@ module Gusteau
|
|
14
14
|
@server.upload [dir], @dest_dir, :exclude => '.git/', :strip_c => 2
|
15
15
|
end
|
16
16
|
|
17
|
-
@server.run "sh /etc/chef/bootstrap.sh" if opts['bootstrap']
|
17
|
+
@server.run "sh /etc/chef/bootstrap.sh #{Gusteau::Config.settings['chef_version']}" if opts['bootstrap']
|
18
18
|
|
19
|
-
cmd = "chef-solo -c #{@dest_dir}/solo.rb -j #{@dest_dir}/dna.json --color"
|
19
|
+
cmd = "unset GEM_HOME; unset GEM_PATH; chef-solo -c #{@dest_dir}/solo.rb -j #{@dest_dir}/dna.json --color"
|
20
20
|
cmd << " -F #{opts['format']}" if opts['format']
|
21
21
|
cmd << " -l #{opts['log_level']}" if opts['log_level']
|
22
22
|
cmd << " -W" if opts['why-run']
|
data/lib/gusteau/config.rb
CHANGED
@@ -3,6 +3,8 @@ require 'gusteau/helpers'
|
|
3
3
|
|
4
4
|
module Gusteau
|
5
5
|
class Config
|
6
|
+
DEFAULT_CHEF_VERSION = '11.4.4'
|
7
|
+
|
6
8
|
include Gusteau::ERB
|
7
9
|
|
8
10
|
def self.read(config_path)
|
@@ -45,7 +47,8 @@ module Gusteau
|
|
45
47
|
{
|
46
48
|
'cookbooks_path' => @config['cookbooks_path'] || ['cookbooks', 'site-cookbooks'],
|
47
49
|
'roles_path' => @config['roles_path'] || 'roles',
|
48
|
-
'bootstrap' => @config['bootstrap']
|
50
|
+
'bootstrap' => @config['bootstrap'],
|
51
|
+
'chef_version' => @config['chef_version'] || DEFAULT_CHEF_VERSION
|
49
52
|
}
|
50
53
|
end
|
51
54
|
|
data/lib/gusteau/vagrant.rb
CHANGED
@@ -40,9 +40,14 @@ module Gusteau
|
|
40
40
|
defaults[:box_url]
|
41
41
|
end
|
42
42
|
|
43
|
+
# If no one set the VirtualBox box name explicitly, use the end of the box_url
|
44
|
+
# as the box name
|
45
|
+
box_name = config.fetch('box', defaults[:box] || box_url.sub(/.*\/([^\/]+).box$/,'\1'))
|
46
|
+
|
43
47
|
{
|
44
48
|
:name => node.name,
|
45
49
|
:label => label,
|
50
|
+
:box => box_name,
|
46
51
|
:box_url => box_url,
|
47
52
|
:ip => config['IP'] || defaults[:ip],
|
48
53
|
:cpus => config['cpus'] || defaults[:cpus] || 1,
|
@@ -54,7 +59,7 @@ module Gusteau
|
|
54
59
|
vm_config = vm_config(node, options)
|
55
60
|
|
56
61
|
config.vm.define vm_config[:name] do |instance|
|
57
|
-
instance.vm.box = vm_config[:
|
62
|
+
instance.vm.box = vm_config[:box]
|
58
63
|
instance.vm.box_url = vm_config[:box_url]
|
59
64
|
|
60
65
|
instance.vm.provider :virtualbox do |vb|
|
data/lib/gusteau/version.rb
CHANGED
data/spec/config/emile.yml
CHANGED
@@ -31,7 +31,7 @@ describe Gusteau::Chef do
|
|
31
31
|
let(:bootstrap) { true }
|
32
32
|
|
33
33
|
it "should run the bootstrap script and chef solo" do
|
34
|
-
server.expects(:run).with('sh /etc/chef/bootstrap.sh')
|
34
|
+
server.expects(:run).with('sh /etc/chef/bootstrap.sh 10.26.0')
|
35
35
|
expects_run_chef_solo
|
36
36
|
chef.run({ :path => '/tmp/node.json' }, opts)
|
37
37
|
end
|
@@ -41,18 +41,20 @@ describe Gusteau::Config do
|
|
41
41
|
describe "#settings" do
|
42
42
|
let(:settings) { Gusteau::Config.settings }
|
43
43
|
|
44
|
-
it "should have defaults for cookbooks_path, roles_path, bootstrap" do
|
44
|
+
it "should have defaults for cookbooks_path, roles_path, bootstrap, chef_version" do
|
45
45
|
settings['cookbooks_path'].must_equal ['cookbooks', 'site-cookbooks']
|
46
46
|
settings['roles_path'].must_equal 'roles'
|
47
47
|
settings['bootstrap'].must_equal nil
|
48
|
+
settings['chef_version'].must_equal Gusteau::Config::DEFAULT_CHEF_VERSION
|
48
49
|
end
|
49
50
|
|
50
51
|
context "settings defined in the config yml" do
|
51
52
|
before { Gusteau::Config.read("./spec/config/emile.yml") }
|
52
53
|
|
53
|
-
it "should have defaults for cookbooks_path, roles_path" do
|
54
|
+
it "should have defaults for cookbooks_path, roles_path, chef_version" do
|
54
55
|
settings['cookbooks_path'].must_equal ['private-cookbooks', '/home/user/.cookbooks']
|
55
56
|
settings['roles_path'].must_equal 'basic-roles'
|
57
|
+
settings['chef_version'].must_equal '10.26.0'
|
56
58
|
end
|
57
59
|
end
|
58
60
|
end
|
@@ -21,7 +21,7 @@ describe Gusteau::Vagrant do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should define vm instances with correct settings" do
|
24
|
-
subvm.expects('box='.to_sym).with('
|
24
|
+
subvm.expects('box='.to_sym).with('b')
|
25
25
|
subvm.expects('box_url='.to_sym).with("http://a.com/b.box")
|
26
26
|
subvm.expects(:network).with(:private_network, { :ip => '192.168.100.21' })
|
27
27
|
subvm.expects(:provision).never
|
@@ -71,6 +71,7 @@ describe Gusteau::Vagrant do
|
|
71
71
|
{
|
72
72
|
:name => 'development-playground',
|
73
73
|
:label => expected_label,
|
74
|
+
:box => 'centos-6.4',
|
74
75
|
:box_url => 'https://opscode.s3.amazonaws.com/centos-6.4.box',
|
75
76
|
:ip => '192.168.100.21',
|
76
77
|
:cpus => 2,
|
@@ -98,6 +99,31 @@ describe Gusteau::Vagrant do
|
|
98
99
|
proc { subject }.must_raise RuntimeError
|
99
100
|
end
|
100
101
|
end
|
102
|
+
|
103
|
+
context "box specified" do
|
104
|
+
let(:defaults) do
|
105
|
+
{
|
106
|
+
:box => 'custom_box_name',
|
107
|
+
:box_url => 'https://opscode.s3.amazonaws.com/centos-6.4.box'
|
108
|
+
}
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should use default attribute" do
|
112
|
+
subject[:box].must_equal "custom_box_name"
|
113
|
+
end
|
114
|
+
|
115
|
+
context "as node attribute" do
|
116
|
+
let(:node) do
|
117
|
+
Gusteau::Config.nodes['development-playground'].tap do |node|
|
118
|
+
node.config['server']['vagrant']['box'] = 'another_box_name'
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should use node attribute" do
|
123
|
+
subject[:box].must_equal 'another_box_name'
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
101
127
|
end
|
102
128
|
|
103
129
|
describe "#define_provisioner" do
|
data/template/Gemfile
CHANGED
data/template/Vagrantfile
CHANGED
@@ -11,6 +11,7 @@ Vagrant.configure('2') do |config|
|
|
11
11
|
config.omnibus.chef_version = '11.4.4'
|
12
12
|
|
13
13
|
Gusteau::Vagrant.detect(config) do |setup|
|
14
|
+
setup.defaults.box = 'opscode-ubuntu-13.04'
|
14
15
|
setup.defaults.box_url = 'https://opscode-vm-bento.s3.amazonaws.com/vagrant/opscode_ubuntu-13.04_provisionerless.box'
|
15
16
|
setup.prefix = Time.now.to_i
|
16
17
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gusteau
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.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: 2013-07-
|
13
|
+
date: 2013-07-17 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: optitron
|
@@ -302,7 +302,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
302
302
|
version: '0'
|
303
303
|
segments:
|
304
304
|
- 0
|
305
|
-
hash:
|
305
|
+
hash: 325111124965789744
|
306
306
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
307
307
|
none: false
|
308
308
|
requirements:
|
@@ -311,7 +311,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
311
311
|
version: '0'
|
312
312
|
segments:
|
313
313
|
- 0
|
314
|
-
hash:
|
314
|
+
hash: 325111124965789744
|
315
315
|
requirements: []
|
316
316
|
rubyforge_project:
|
317
317
|
rubygems_version: 1.8.23
|