vagabond 0.2.8 → 0.2.10
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 +16 -0
- data/DEVELOP.md +38 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +33 -0
- data/README.md +55 -21
- data/USAGE.md +28 -3
- data/Vagabondfile.sample +47 -0
- data/Vagrantfile +17 -5
- data/bin/vagabond +5 -0
- data/lib/vagabond/Cheffile +7 -0
- data/lib/vagabond/Cheffile.dev +7 -0
- data/lib/vagabond/actions/cluster.rb +22 -8
- data/lib/vagabond/actions/create.rb +7 -4
- data/lib/vagabond/actions/destroy.rb +24 -14
- data/lib/vagabond/actions/freeze.rb +1 -0
- data/lib/vagabond/actions/init.rb +8 -11
- data/lib/vagabond/actions/provision.rb +16 -8
- data/lib/vagabond/actions/rebuild.rb +4 -9
- data/lib/vagabond/actions/ssh.rb +9 -1
- data/lib/vagabond/actions/start.rb +1 -0
- data/lib/vagabond/actions/status.rb +1 -0
- data/lib/vagabond/actions/thaw.rb +1 -0
- data/lib/vagabond/actions/up.rb +22 -7
- data/lib/vagabond/bootstraps/chef_10_compat_config.erb +62 -0
- data/lib/vagabond/bootstraps/no_lazy_load.erb +63 -0
- data/lib/vagabond/bootstraps/server-zero.erb +1 -8
- data/lib/vagabond/bootstraps/server.erb +9 -6
- data/lib/vagabond/constants.rb +1 -6
- data/lib/vagabond/core.rb +209 -0
- data/lib/vagabond/errors.rb +3 -0
- data/lib/vagabond/helpers.rb +11 -99
- data/lib/vagabond/helpers/base.rb +134 -0
- data/lib/vagabond/helpers/callbacks.rb +47 -0
- data/lib/vagabond/helpers/chains.rb +23 -0
- data/lib/vagabond/helpers/commands.rb +49 -0
- data/lib/vagabond/helpers/knife.rb +47 -0
- data/lib/vagabond/helpers/naming.rb +39 -0
- data/lib/vagabond/helpers/server.rb +30 -0
- data/lib/vagabond/internal_configuration.rb +186 -32
- data/lib/vagabond/kitchen.rb +110 -60
- data/lib/vagabond/knife.rb +5 -1
- data/lib/vagabond/layout.rb +1 -0
- data/lib/vagabond/monkey/kitchen_config.rb +1 -0
- data/lib/vagabond/notify_mash.rb +25 -0
- data/lib/vagabond/server.rb +81 -49
- data/lib/vagabond/settings.rb +17 -0
- data/lib/vagabond/spec.rb +125 -99
- data/lib/vagabond/uploader.rb +4 -1
- data/lib/vagabond/uploader/berkshelf.rb +2 -1
- data/lib/vagabond/uploader/knife.rb +3 -9
- data/lib/vagabond/uploader/librarian.rb +2 -5
- data/lib/vagabond/vagabond.rb +77 -93
- data/lib/vagabond/vagabondfile.rb +73 -9
- data/lib/vagabond/version.rb +2 -1
- data/vagabond.gemspec +7 -5
- metadata +58 -81
- data/lib/vagabond/cookbooks/apt/Berksfile +0 -8
- data/lib/vagabond/cookbooks/apt/CHANGELOG.md +0 -97
- data/lib/vagabond/cookbooks/apt/CONTRIBUTING +0 -29
- data/lib/vagabond/cookbooks/apt/LICENSE +0 -201
- data/lib/vagabond/cookbooks/apt/README.md +0 -243
- data/lib/vagabond/cookbooks/apt/TESTING.md +0 -25
- data/lib/vagabond/cookbooks/apt/attributes/default.rb +0 -4
- data/lib/vagabond/cookbooks/apt/files/default/apt-proxy-v2.conf +0 -50
- data/lib/vagabond/cookbooks/apt/metadata.rb +0 -30
- data/lib/vagabond/cookbooks/apt/providers/preference.rb +0 -61
- data/lib/vagabond/cookbooks/apt/providers/repository.rb +0 -132
- data/lib/vagabond/cookbooks/apt/recipes/cacher-client.rb +0 -59
- data/lib/vagabond/cookbooks/apt/recipes/cacher-ng.rb +0 -40
- data/lib/vagabond/cookbooks/apt/recipes/default.rb +0 -68
- data/lib/vagabond/cookbooks/apt/resources/preference.rb +0 -30
- data/lib/vagabond/cookbooks/apt/resources/repository.rb +0 -40
- data/lib/vagabond/cookbooks/apt/templates/debian-6.0/acng.conf.erb +0 -174
- data/lib/vagabond/cookbooks/apt/templates/default/01proxy.erb +0 -2
- data/lib/vagabond/cookbooks/apt/templates/default/acng.conf.erb +0 -276
- data/lib/vagabond/cookbooks/apt/templates/ubuntu-10.04/acng.conf.erb +0 -270
- data/lib/vagabond/cookbooks/apt/test/cookbooks/apt_test/README.md +0 -1
- data/lib/vagabond/cookbooks/apt/test/cookbooks/apt_test/files/default/tests/minitest/cacher-ng_test.rb +0 -28
- data/lib/vagabond/cookbooks/apt/test/cookbooks/apt_test/files/default/tests/minitest/default_test.rb +0 -28
- data/lib/vagabond/cookbooks/apt/test/cookbooks/apt_test/files/default/tests/minitest/lwrps_test.rb +0 -48
- data/lib/vagabond/cookbooks/apt/test/cookbooks/apt_test/files/default/tests/minitest/support/helpers.rb +0 -29
- data/lib/vagabond/cookbooks/apt/test/cookbooks/apt_test/metadata.rb +0 -6
- data/lib/vagabond/cookbooks/apt/test/cookbooks/apt_test/recipes/cacher-ng.rb +0 -20
- data/lib/vagabond/cookbooks/apt/test/cookbooks/apt_test/recipes/default.rb +0 -20
- data/lib/vagabond/cookbooks/apt/test/cookbooks/apt_test/recipes/lwrps.rb +0 -66
- data/lib/vagabond/cookbooks/lxc/CHANGELOG.md +0 -37
- data/lib/vagabond/cookbooks/lxc/Gemfile +0 -4
- data/lib/vagabond/cookbooks/lxc/Gemfile.lock +0 -41
- data/lib/vagabond/cookbooks/lxc/README.md +0 -112
- data/lib/vagabond/cookbooks/lxc/attributes/default.rb +0 -26
- data/lib/vagabond/cookbooks/lxc/files/default/knife_lxc +0 -228
- data/lib/vagabond/cookbooks/lxc/files/default/lxc-awesome-ephemeral +0 -499
- data/lib/vagabond/cookbooks/lxc/libraries/lxc.rb +0 -477
- data/lib/vagabond/cookbooks/lxc/libraries/lxc_expanded_resources.rb +0 -40
- data/lib/vagabond/cookbooks/lxc/libraries/lxc_file_config.rb +0 -84
- data/lib/vagabond/cookbooks/lxc/libraries/monkey.rb +0 -51
- data/lib/vagabond/cookbooks/lxc/metadata.rb +0 -12
- data/lib/vagabond/cookbooks/lxc/providers/config.rb +0 -75
- data/lib/vagabond/cookbooks/lxc/providers/container.rb +0 -354
- data/lib/vagabond/cookbooks/lxc/providers/default.rb +0 -57
- data/lib/vagabond/cookbooks/lxc/providers/ephemeral.rb +0 -40
- data/lib/vagabond/cookbooks/lxc/providers/fstab.rb +0 -30
- data/lib/vagabond/cookbooks/lxc/providers/interface.rb +0 -45
- data/lib/vagabond/cookbooks/lxc/providers/service.rb +0 -53
- data/lib/vagabond/cookbooks/lxc/recipes/containers.rb +0 -13
- data/lib/vagabond/cookbooks/lxc/recipes/default.rb +0 -58
- data/lib/vagabond/cookbooks/lxc/recipes/install_dependencies.rb +0 -15
- data/lib/vagabond/cookbooks/lxc/recipes/knife.rb +0 -37
- data/lib/vagabond/cookbooks/lxc/resources/config.rb +0 -19
- data/lib/vagabond/cookbooks/lxc/resources/container.rb +0 -54
- data/lib/vagabond/cookbooks/lxc/resources/default.rb +0 -12
- data/lib/vagabond/cookbooks/lxc/resources/ephemeral.rb +0 -13
- data/lib/vagabond/cookbooks/lxc/resources/fstab.rb +0 -12
- data/lib/vagabond/cookbooks/lxc/resources/interface.rb +0 -13
- data/lib/vagabond/cookbooks/lxc/resources/service.rb +0 -5
- data/lib/vagabond/cookbooks/lxc/templates/default/client.rb.erb +0 -13
- data/lib/vagabond/cookbooks/lxc/templates/default/default-lxc.erb +0 -3
- data/lib/vagabond/cookbooks/lxc/templates/default/file_content.erb +0 -2
- data/lib/vagabond/cookbooks/lxc/templates/default/fstab.erb +0 -5
- data/lib/vagabond/cookbooks/lxc/templates/default/interface.erb +0 -27
- data/lib/vagabond/cookbooks/vagabond/README.md +0 -10
- data/lib/vagabond/cookbooks/vagabond/attributes/default.rb +0 -18
- data/lib/vagabond/cookbooks/vagabond/files/default/lxc-centos +0 -460
- data/lib/vagabond/cookbooks/vagabond/libraries/vagabond.rb +0 -10
- data/lib/vagabond/cookbooks/vagabond/metadata.rb +0 -8
- data/lib/vagabond/cookbooks/vagabond/recipes/default.rb +0 -132
- data/lib/vagabond/cookbooks/vagabond/recipes/zero.rb +0 -9
- data/lib/vagabond/helpers/cheffile_loader.rb +0 -20
- data/vagabond-0.2.6.gem +0 -0
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
## v0.2.10
|
|
2
|
+
* Fix `:berkshelf` key to be optionally Hash type
|
|
3
|
+
* Allow all types for roles/environments/data bags
|
|
4
|
+
* Add guards for uploads of file types (thanks @jaypipes)
|
|
5
|
+
* Raise exception on failed provisions
|
|
6
|
+
* Force utf-8 on all files
|
|
7
|
+
* Better output on parallel cluster builds
|
|
8
|
+
* Use Librarian to vendor internal cookbooks at runtime
|
|
9
|
+
* Provide `spec` support within isolated cookbooks (outside of chef-repo)
|
|
10
|
+
* Make `server` nodes ephemeral
|
|
11
|
+
* Build base erchef server containers with versions
|
|
12
|
+
* Customize host provisioning cookbook versions based on dev/release version
|
|
13
|
+
* Added callbacks
|
|
14
|
+
* Allow passing commands to nodes via `ssh` action
|
|
15
|
+
* Lots of cleanup and other stuff that's not jumping out of the git history
|
|
16
|
+
|
|
1
17
|
## v0.2.8
|
|
2
18
|
* Disable `chef-server` clone on provision (#14)
|
|
3
19
|
* Temporarily disable provision on init action
|
data/DEVELOP.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Hacking Vagabond
|
|
2
|
+
|
|
3
|
+
Here's some useful notes about hacking on Vagabond
|
|
4
|
+
|
|
5
|
+
## Git branch
|
|
6
|
+
|
|
7
|
+
Unstable development is on the `develop` branch. Pull requests should
|
|
8
|
+
be based on the `develop` branch and any changes will be merged there
|
|
9
|
+
prior to being merged into `master`. The `master` branch will always
|
|
10
|
+
be the currently stable released version.
|
|
11
|
+
|
|
12
|
+
## Versioning
|
|
13
|
+
|
|
14
|
+
Stable versions will always be even numbered patch levels. Unstable
|
|
15
|
+
versions will always be odd numbered patch levels.
|
|
16
|
+
|
|
17
|
+
### Unstable behavior
|
|
18
|
+
|
|
19
|
+
When unstable versions are detected vagabond will provision the system
|
|
20
|
+
differently than when within stable versions. The Cheffile used to vendor
|
|
21
|
+
cookbooks for provisioning the host will use cookbook linked to unstable
|
|
22
|
+
versions of the cookbooks, and these will be updated every hour.
|
|
23
|
+
|
|
24
|
+
Since stable versions of vagabond will link directly to released versions
|
|
25
|
+
of cookbooks, a single update to pull the dependencies is sufficient. In
|
|
26
|
+
development mode with cookbooks linked to changing cookbooks, getting updates
|
|
27
|
+
will be required as the code is updated.
|
|
28
|
+
|
|
29
|
+
## Debugging
|
|
30
|
+
|
|
31
|
+
Vagabond will not print stacktraces by default when an error is encountered.
|
|
32
|
+
To enable stacktraces on errors, set the environment variable `VAGABOND_EXIT_DEBUG`
|
|
33
|
+
prior to running a command. Alternatively you can export the variable so it
|
|
34
|
+
will always be set:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
$ export VAGABOND_EXIT_DEBUG=true
|
|
38
|
+
```
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
GIT
|
|
2
|
+
remote: git://github.com/mitchellh/vagrant
|
|
3
|
+
revision: a7853fe7b7f08dbedbc934eb9230d33be6bf746f
|
|
4
|
+
tag: v1.2.1
|
|
5
|
+
specs:
|
|
6
|
+
vagrant (1.2.1)
|
|
7
|
+
childprocess (~> 0.3.7)
|
|
8
|
+
erubis (~> 2.7.0)
|
|
9
|
+
i18n (~> 0.6.0)
|
|
10
|
+
json (>= 1.5.1, < 1.8.0)
|
|
11
|
+
log4r (~> 1.1.9)
|
|
12
|
+
net-scp (~> 1.1.0)
|
|
13
|
+
net-ssh (~> 2.6.6)
|
|
14
|
+
|
|
15
|
+
GEM
|
|
16
|
+
remote: https://rubygems.org/
|
|
17
|
+
specs:
|
|
18
|
+
childprocess (0.3.9)
|
|
19
|
+
ffi (~> 1.0, >= 1.0.11)
|
|
20
|
+
erubis (2.7.0)
|
|
21
|
+
ffi (1.9.3)
|
|
22
|
+
i18n (0.6.5)
|
|
23
|
+
json (1.7.7)
|
|
24
|
+
log4r (1.1.10)
|
|
25
|
+
net-scp (1.1.2)
|
|
26
|
+
net-ssh (>= 2.6.5)
|
|
27
|
+
net-ssh (2.6.8)
|
|
28
|
+
|
|
29
|
+
PLATFORMS
|
|
30
|
+
ruby
|
|
31
|
+
|
|
32
|
+
DEPENDENCIES
|
|
33
|
+
vagrant!
|
data/README.md
CHANGED
|
@@ -38,33 +38,47 @@ Hash you return. Heres a simple example:
|
|
|
38
38
|
:nodes => {
|
|
39
39
|
:precise => {
|
|
40
40
|
:template => 'ubuntu_1204',
|
|
41
|
-
:run_list =>
|
|
42
|
-
},
|
|
43
|
-
:db => {
|
|
44
|
-
:template => 'ubuntu_1204',
|
|
45
|
-
:run_list => %w(role[db])
|
|
41
|
+
:run_list => ['role[base]']
|
|
46
42
|
}
|
|
47
43
|
},
|
|
48
|
-
:
|
|
44
|
+
:server => {
|
|
49
45
|
:enabled => true,
|
|
50
|
-
:auto_upload => true
|
|
46
|
+
:auto_upload => true,
|
|
47
|
+
:librarian => true,
|
|
48
|
+
:berkshelf => false
|
|
51
49
|
}
|
|
52
50
|
}
|
|
53
51
|
```
|
|
52
|
+
We can also use the `describe` DSL instead of building hashes directly:
|
|
54
53
|
|
|
54
|
+
```ruby
|
|
55
|
+
Vagabond::Vagabondfile.describe do
|
|
56
|
+
nodes do
|
|
57
|
+
precise do
|
|
58
|
+
template 'ubuntu_1204'
|
|
59
|
+
run_list ['role[base]']
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
server do
|
|
63
|
+
enabled true
|
|
64
|
+
auto_upload true
|
|
65
|
+
librarian true
|
|
66
|
+
berkshelf false
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
```
|
|
55
70
|
Now, to create a node, simply run:
|
|
56
71
|
|
|
57
72
|
```
|
|
58
|
-
$ vagabond up
|
|
73
|
+
$ vagabond up precise
|
|
59
74
|
```
|
|
60
75
|
|
|
61
|
-
|
|
62
|
-
containers prior to starting up a linux container. It does this by
|
|
63
|
-
running the vagabond chef recipe embedded in this gem at
|
|
64
|
-
`lib/vagabond/cookbooks/vagabond/recipes/default.rb`.
|
|
76
|
+
## System preparation
|
|
65
77
|
|
|
66
|
-
|
|
67
|
-
|
|
78
|
+
Vagabond will provision the host system automatically as required to create
|
|
79
|
+
required base lxc templates and ensure proper configuration. However, we can
|
|
80
|
+
also initialize the system directly and create required base images using the
|
|
81
|
+
`init` action:
|
|
68
82
|
|
|
69
83
|
```
|
|
70
84
|
$ vagabond init
|
|
@@ -72,8 +86,9 @@ $ vagabond init
|
|
|
72
86
|
|
|
73
87
|
This command runs the chef recipe and generates a basic Vagabondfile and
|
|
74
88
|
creates the base containers specified in that file. Those base
|
|
75
|
-
containers are Ubuntu 12.04 and CentOS 6.
|
|
76
|
-
take a while so now is a good time to get a
|
|
89
|
+
containers are Ubuntu 12.04 and CentOS 6. This creation process can
|
|
90
|
+
take a while depending on download speeds so now is a good time to get a
|
|
91
|
+
fresh pot of coffee.
|
|
77
92
|
|
|
78
93
|
Pretty simple, right?
|
|
79
94
|
|
|
@@ -81,13 +96,13 @@ Pretty simple, right?
|
|
|
81
96
|
|
|
82
97
|
Currently builtin templates:
|
|
83
98
|
|
|
99
|
+
* ubuntu_1004
|
|
84
100
|
* ubuntu_1204
|
|
85
101
|
* ubuntu_1210
|
|
86
102
|
* debian_6
|
|
87
103
|
* debian_7
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* centos_64
|
|
104
|
+
* centos_5
|
|
105
|
+
* centos_6
|
|
91
106
|
|
|
92
107
|
## Commands
|
|
93
108
|
|
|
@@ -106,6 +121,19 @@ local server option is enabled. It's just an important bit of information
|
|
|
106
121
|
to remember so you can make a mental note to stop or freeze it when not
|
|
107
122
|
in use. Or just let them run. What ever floats your boat.
|
|
108
123
|
|
|
124
|
+
### Lightweight chef server
|
|
125
|
+
|
|
126
|
+
Vagabond also supports chef-zero instead of running a full blown erchef
|
|
127
|
+
instance. You can specify this by setting it within the `server` block:
|
|
128
|
+
|
|
129
|
+
```ruby
|
|
130
|
+
...
|
|
131
|
+
server do
|
|
132
|
+
zero true
|
|
133
|
+
end
|
|
134
|
+
...
|
|
135
|
+
```
|
|
136
|
+
|
|
109
137
|
### Vagabond knife
|
|
110
138
|
|
|
111
139
|
Since you can have a local chef server running, it can also be helpful
|
|
@@ -215,7 +243,7 @@ keys can be repeated `n` times to provide multiple nodes of a specific type.
|
|
|
215
243
|
### Usage
|
|
216
244
|
|
|
217
245
|
```
|
|
218
|
-
$ vagabond spec my_cluster
|
|
246
|
+
$ vagabond spec start my_cluster
|
|
219
247
|
```
|
|
220
248
|
|
|
221
249
|
### Applying specs
|
|
@@ -242,7 +270,7 @@ against actual live infrastructure to see if it is currently in a valid
|
|
|
242
270
|
state based on existing specs. Awesome!
|
|
243
271
|
|
|
244
272
|
```
|
|
245
|
-
$ vagabond spec my_cluster --environment production
|
|
273
|
+
$ vagabond spec start my_cluster --irl --environment production
|
|
246
274
|
```
|
|
247
275
|
|
|
248
276
|
## Important note
|
|
@@ -262,6 +290,10 @@ boring old `sudo`, you can do that to:
|
|
|
262
290
|
:sudo => 'rvmsudo'
|
|
263
291
|
```
|
|
264
292
|
|
|
293
|
+
Vagabond will attempt to be smart about determining how to sudo. So if the
|
|
294
|
+
`sudo` option is not set (`nil`) it will discover its environment and use
|
|
295
|
+
`sudo` or `rvmsudo` accordingly.
|
|
296
|
+
|
|
265
297
|
## Extra note
|
|
266
298
|
|
|
267
299
|
This thing is still very new and shiny with lots of sharp edges. They
|
|
@@ -286,4 +318,6 @@ get help making things better!
|
|
|
286
318
|
|
|
287
319
|
## Infos
|
|
288
320
|
|
|
321
|
+
* Issues: https://github.com/chrisroberts/vagabond/issues
|
|
289
322
|
* Repository: https://github.com/chrisroberts/vagabond
|
|
323
|
+
* IRC: #vagabond @ Freenode
|
data/USAGE.md
CHANGED
|
@@ -73,6 +73,23 @@ to then use that template:
|
|
|
73
73
|
}
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
+
## Assigning static IP addresses to nodes
|
|
77
|
+
|
|
78
|
+
Nodes can be assigned static IP addresses using the `:ipaddress` key in
|
|
79
|
+
the node's Hash:
|
|
80
|
+
|
|
81
|
+
```ruby
|
|
82
|
+
{
|
|
83
|
+
:nodes => {
|
|
84
|
+
:my_precise_node => {
|
|
85
|
+
:template => 'ubuntu_1204',
|
|
86
|
+
:run_list => ['role[base]'],
|
|
87
|
+
:ipaddress => '10.0.0.10'
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
...
|
|
91
|
+
```
|
|
92
|
+
|
|
76
93
|
## vagabond
|
|
77
94
|
|
|
78
95
|
The `vagabond` command is used for interaction with nodes. Simply running:
|
|
@@ -92,6 +109,12 @@ provide the name and it will drop you into a root session:
|
|
|
92
109
|
$ vagabond ssh my_precise_node
|
|
93
110
|
```
|
|
94
111
|
|
|
112
|
+
or run a command remotely on the given node:
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
$ vagabond ssh my_precise_node ps -AH ux
|
|
116
|
+
```
|
|
117
|
+
|
|
95
118
|
## vagabond server
|
|
96
119
|
|
|
97
120
|
Vagabond will optionally allow the installation of a chef server that is
|
|
@@ -107,7 +130,7 @@ look like this:
|
|
|
107
130
|
:run_list => ['role[base]']
|
|
108
131
|
}
|
|
109
132
|
},
|
|
110
|
-
:
|
|
133
|
+
:server => {
|
|
111
134
|
:enabled => true
|
|
112
135
|
}
|
|
113
136
|
}
|
|
@@ -120,11 +143,13 @@ Vagabond. The server commands are explicitly for the server container.
|
|
|
120
143
|
The commands are similar to the basic `vagabond` commands, with a few
|
|
121
144
|
extra commands as well.
|
|
122
145
|
|
|
123
|
-
The `:
|
|
146
|
+
The `:server` hash has a few helper keys for setting up
|
|
124
147
|
the server:
|
|
125
148
|
|
|
126
149
|
* `:auto_upload` - Uploads all cookbooks, roles, data bags and environments after build
|
|
127
150
|
* `:berkshelf` - Uses berkshelf for cookbook upload instead of knife
|
|
151
|
+
* `:librarian` - Uses librarian for cookbook upload instead of knife
|
|
152
|
+
* `:zero` - Uses Chef Zero instead of Chef 11 (erchef)
|
|
128
153
|
|
|
129
154
|
## vagabond knife
|
|
130
155
|
|
|
@@ -194,4 +219,4 @@ Simple, yet so very very awesome. \o/
|
|
|
194
219
|
|
|
195
220
|
Testing support is still very young, just like Vagabond. But there are plans
|
|
196
221
|
in the works for more features. Take a look at the issues section in github
|
|
197
|
-
with `kitchen` tags. Feel free to add more if you see something missing!
|
|
222
|
+
with `kitchen` tags. Feel free to add more if you see something missing!
|
data/Vagabondfile.sample
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
Vagabond::Vagabondfile.describe do
|
|
2
|
+
defaults do
|
|
3
|
+
template 'ubuntu_1204'
|
|
4
|
+
environment 'testing'
|
|
5
|
+
run_list ['recipe[apt]']
|
|
6
|
+
end
|
|
7
|
+
definitions do
|
|
8
|
+
database do
|
|
9
|
+
template 'ubuntu_1204'
|
|
10
|
+
run_list ['recipe[internal::db]']
|
|
11
|
+
end
|
|
12
|
+
web_site do
|
|
13
|
+
run_list ['recipe[internal::website]']
|
|
14
|
+
attributes do
|
|
15
|
+
apache do
|
|
16
|
+
ports %w(80 443)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
nodes do
|
|
22
|
+
db do
|
|
23
|
+
definition 'database'
|
|
24
|
+
environment 'production'
|
|
25
|
+
custom_specs %w(blah blah blah)
|
|
26
|
+
end
|
|
27
|
+
db_slave.definition 'database'
|
|
28
|
+
db_slave.attributes.internal.database.role 'slave'
|
|
29
|
+
end
|
|
30
|
+
clusters do
|
|
31
|
+
db ['db', 'db_slave']
|
|
32
|
+
end
|
|
33
|
+
specs.clusters do
|
|
34
|
+
db do
|
|
35
|
+
overrides.environment 'staging'
|
|
36
|
+
provision do
|
|
37
|
+
times 4
|
|
38
|
+
spec :after_2, :after_4
|
|
39
|
+
after(2) do
|
|
40
|
+
run.on.db '/usr/bin/fail_database'
|
|
41
|
+
pause 3
|
|
42
|
+
end
|
|
43
|
+
after.every.run '/usr/bin/log_database_state'
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
data/Vagrantfile
CHANGED
|
@@ -2,9 +2,15 @@
|
|
|
2
2
|
# vi: set ft=ruby :
|
|
3
3
|
|
|
4
4
|
Vagrant.configure("2") do |config|
|
|
5
|
-
config.vm.hostname = "
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
config.vm.hostname = "vagabond-lxc-host"
|
|
6
|
+
|
|
7
|
+
unless(ENV['DISABLE_PRESEED'])
|
|
8
|
+
config.vm.box = 'precise-64-lxc-preseed'
|
|
9
|
+
config.vm.box_url = 'http://vagrant.hw-ops.com/precise-64-lxc-preseed.box'
|
|
10
|
+
else
|
|
11
|
+
config.vm.box = 'precise-64'
|
|
12
|
+
config.vm.box_url = 'https://github.com/downloads/chrisroberts/vagrant-boxes/precise-64.box'
|
|
13
|
+
end
|
|
8
14
|
|
|
9
15
|
if(ENV['ENABLE_APT_PROXY'])
|
|
10
16
|
proxy = [
|
|
@@ -20,9 +26,15 @@ Vagrant.configure("2") do |config|
|
|
|
20
26
|
proxy + [
|
|
21
27
|
"lxc-destroy -n ubuntu_1204",
|
|
22
28
|
"apt-get update",
|
|
23
|
-
"apt-get install -y -q
|
|
29
|
+
"apt-get install -y -q python-software-properties git build-essential",
|
|
30
|
+
"add-apt-repository ppa:brightbox/ruby-ng",
|
|
31
|
+
"apt-get update",
|
|
32
|
+
"apt-get install -y -q ruby1.9.1 ruby1.9.1-dev",
|
|
24
33
|
"gem install --no-ri --no-rdoc bundler",
|
|
25
|
-
"
|
|
34
|
+
"cd /home/vagrant",
|
|
35
|
+
%(echo "source 'https://rubygems.org'\ngem 'vagabond', path: '/vagrant'\n" > Gemfile),
|
|
36
|
+
"bundle install --binstubs",
|
|
37
|
+
"chown -R vagrant:vagrant /home/vagrant"
|
|
26
38
|
]
|
|
27
39
|
).join("\n")
|
|
28
40
|
end
|
data/bin/vagabond
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
#encoding: utf-8
|
|
2
3
|
|
|
3
4
|
Signal.trap('INT'){ exit 255 }
|
|
4
5
|
|
|
@@ -44,6 +45,10 @@ else
|
|
|
44
45
|
Vagabond::Vagabond
|
|
45
46
|
end.start
|
|
46
47
|
rescue Vagabond::VagabondError => e
|
|
48
|
+
$stderr.puts "Vagabond error encountered. Exiting: #{e}"
|
|
49
|
+
if(ENV['VAGABOND_EXIT_DEBUG'])
|
|
50
|
+
puts "#{e.class}: #{e}\n#{e.backtrace.join("\n")}"
|
|
51
|
+
end
|
|
47
52
|
exit e.exit_code
|
|
48
53
|
rescue Exception => e
|
|
49
54
|
$stderr.puts "Vagabond exiting. Reason: #{e}"
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
site 'http://community.opscode.com/api/v1'
|
|
2
|
+
|
|
3
|
+
cookbook 'vagabond', git: 'git://github.com/chrisroberts/chef-vagabond.git', ref: 'develop'
|
|
4
|
+
cookbook 'lxc', git: 'git://github.com/hw-cookbooks/lxc.git', ref: 'develop'
|
|
5
|
+
cookbook 'chef-server-populator', git: 'git://github.com/hw-cookbooks/chef-server-populator.git', ref: 'develop'
|
|
6
|
+
|
|
7
|
+
cookbook 'chef-server', '2.0.0'
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
#encoding: utf-8
|
|
1
2
|
module Vagabond
|
|
2
3
|
module Actions
|
|
3
4
|
module Cluster
|
|
@@ -33,20 +34,22 @@ module Vagabond
|
|
|
33
34
|
clr = vagabondfile[:clusters][name] if vagabondfile[:clusters]
|
|
34
35
|
if(clr)
|
|
35
36
|
ui.info "#{ui.color('Vagabond:', :bold)} Building cluster - #{ui.color(name, :green)}"
|
|
36
|
-
if(vagabondfile
|
|
37
|
+
if(vagabondfile.local_chef_server?)
|
|
37
38
|
require 'vagabond/server'
|
|
38
39
|
srv = ::Vagabond::Server.new
|
|
39
|
-
srv.
|
|
40
|
-
srv.
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
srv.options = options.dup
|
|
41
|
+
srv.options[:auto_provision] = true
|
|
42
|
+
unless(srv.lxc.running?)
|
|
43
|
+
srv.up
|
|
44
|
+
# Reload so we get proper values
|
|
45
|
+
configure
|
|
46
|
+
end
|
|
43
47
|
end
|
|
44
48
|
cluster_instances = clr.map do |n|
|
|
45
49
|
ui.info "Building #{n} for cluster!"
|
|
46
50
|
v_inst = Vagabond.new
|
|
47
51
|
v_inst.options = options.dup
|
|
48
|
-
v_inst.
|
|
49
|
-
v_inst.execute
|
|
52
|
+
v_inst.up(n, :ui => ui)
|
|
50
53
|
if(options[:delay].to_i > 0 && n != clr.last)
|
|
51
54
|
ui.warn "Delay requested between node processing. Sleeping for #{options[:delay].to_i} seconds."
|
|
52
55
|
sleep(options[:delay].to_i)
|
|
@@ -59,7 +62,18 @@ module Vagabond
|
|
|
59
62
|
inst.wait_for_completion
|
|
60
63
|
end
|
|
61
64
|
end
|
|
62
|
-
|
|
65
|
+
failed = cluster_instances.map{|i|i.send(:tasks)}.map(&:values).flatten.detect do |hash|
|
|
66
|
+
hash[:result] == false
|
|
67
|
+
end
|
|
68
|
+
result = failed ? ['FAILED', :red, :bold] : ['SUCCESS', :green, :bold]
|
|
69
|
+
ui.info "\nCluster build #{name}: #{ui.color(*result)}"
|
|
70
|
+
cluster_instances.each do |inst|
|
|
71
|
+
failed = inst.send(:tasks).values.flatten.detect do |hash|
|
|
72
|
+
hash[:result] == false
|
|
73
|
+
end
|
|
74
|
+
result = failed ? ['FAILED', :red, :bold] : ['SUCCESS', :green, :bold]
|
|
75
|
+
ui.info " -> #{inst.name}: #{ui.color(*result)}"
|
|
76
|
+
end
|
|
63
77
|
else
|
|
64
78
|
ui.error "Cluster name provided does not exist: #{name}"
|
|
65
79
|
end
|