chake 0.3.1 → 0.3.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/ChangeLog.md +7 -0
- data/README.md +160 -24
- data/chake.gemspec +1 -1
- data/chake.spec.erb +1 -1
- data/lib/chake.rb +6 -6
- data/lib/chake/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ccedd33bee72b8c2b029a07bdb3519447db80d6
|
4
|
+
data.tar.gz: e742e82cb94db00ab390a154babda6d784fa0d05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 210582e1e859931e33b3fb80af745699980414859e153f1f33be2040b01786f7bc853c96c0da61f8569bed3ddd66339498fb5223a8dd0499cffe70fb26e8a92b
|
7
|
+
data.tar.gz: 8e00de96b07d27cd1cdc444ce625daa02c2ea3cf5259487519cd991321d99e164158c8b886ab549ed0956b0149915dd8775d58c60be4cfbd2d1b45d0da1f558b
|
data/.gitignore
CHANGED
data/ChangeLog.md
CHANGED
data/README.md
CHANGED
@@ -6,7 +6,7 @@ Simple host management with chef and rake. No chef server required.
|
|
6
6
|
|
7
7
|
$ gem install chake
|
8
8
|
|
9
|
-
##
|
9
|
+
## Creating the repository
|
10
10
|
|
11
11
|
Require chake on your `Rakefile`:
|
12
12
|
|
@@ -16,43 +16,179 @@ require 'chake'
|
|
16
16
|
|
17
17
|
Initializing the repository:
|
18
18
|
|
19
|
-
|
19
|
+
```
|
20
|
+
$ chake init
|
21
|
+
[create] nodes.yaml
|
22
|
+
[create] config.rb
|
23
|
+
[ mkdir] config/roles
|
24
|
+
[ mkdir] cookbooks/basics/recipes/
|
25
|
+
[create] cookbooks/basics/recipes/default.rb
|
26
|
+
[create] Rakefile
|
27
|
+
```
|
20
28
|
|
29
|
+
A brief explanation of the created files:
|
21
30
|
|
22
|
-
|
31
|
+
| File | Description |
|
32
|
+
|-----+-------|
|
33
|
+
| `nodes.yaml` | where you will list the hosts you will be managing, and what recipes to apply to each of them. |
|
34
|
+
| `config.rb` | contains the chef-solo configuration. You can modify it, but usually you won't need to. |
|
35
|
+
| `config/roles` | directory is where you can put your role definitions. |
|
36
|
+
| `cookbooks` | directory where you will store your cookbooks. A sample cookbook called "basics" is created, but feel free to remove it and add actual cookbooks. |
|
37
|
+
| `Rakefile` | Contains just the `require 'chake'` line. You can augment it with other tasks specific to your intrastructure. |
|
23
38
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
config/roles/
|
29
|
-
cookbooks/
|
30
|
-
cookbooks/myhost/
|
31
|
-
cookbooks/myhost/recipes/
|
32
|
-
cookbooks/myhost/recipes/default.rb
|
39
|
+
After the repository is created, you can call either `chake` or `rake`, as they
|
40
|
+
are completely equivalent.
|
41
|
+
|
42
|
+
## Managing nodes and recipes
|
33
43
|
|
44
|
+
Just after you created your repository, the contents of `nodes.yaml` is the
|
45
|
+
following:
|
46
|
+
|
47
|
+
```yaml
|
48
|
+
host1.mycompany.com:
|
49
|
+
run_list:
|
50
|
+
- recipe[basics]
|
34
51
|
```
|
35
52
|
|
36
|
-
|
37
|
-
* a `cookbooks` directory where you will store your cookbooks. A sample
|
38
|
-
cookbook called "myhost" is created, but feel free to remove it and add
|
39
|
-
actual cookbooks.
|
53
|
+
You can list your hosts with `rake nodes`:
|
40
54
|
|
55
|
+
```
|
56
|
+
$ rake nodes
|
57
|
+
host1.mycompany.com ssh
|
58
|
+
```
|
41
59
|
|
42
|
-
|
60
|
+
To add more nodes, just append to `nodes.yaml`:
|
43
61
|
|
44
62
|
```yaml
|
45
63
|
host1.mycompany.com:
|
46
|
-
|
47
|
-
|
48
|
-
- recipe[webserver]
|
64
|
+
run_list:
|
65
|
+
- recipe[basics]
|
49
66
|
host2.mycompany.com:
|
50
|
-
|
51
|
-
|
52
|
-
|
67
|
+
run_list:
|
68
|
+
- recipes[basics]
|
69
|
+
```
|
70
|
+
|
71
|
+
And chake now knows about your new node:
|
72
|
+
|
73
|
+
```
|
74
|
+
$ rake nodes
|
75
|
+
host1.mycompany.com ssh
|
76
|
+
host2.mycompany.com ssh
|
77
|
+
```
|
78
|
+
|
79
|
+
## Preparings nodes to be managed
|
80
|
+
|
81
|
+
Nodes has very few requirements to be managed with `chake`:
|
82
|
+
|
83
|
+
- The node must be accessible via SSH.
|
84
|
+
- The node must have `sudo` installed.
|
85
|
+
- The user you connect to the node must either be `root`, or be allowed to run
|
86
|
+
`sudo`.
|
87
|
+
|
88
|
+
**A note on password prompts:** every time chake calls ssh on a node, you may
|
89
|
+
be required to type in your password; every time chake calls sudo on the node,
|
90
|
+
you may be require to type in your password. For managaing one or two nodes
|
91
|
+
this is probably fine, but for larger numbers it is not practical. To avoid
|
92
|
+
password prompts, you can:
|
93
|
+
|
94
|
+
- configure SSH key authentication.
|
95
|
+
- this is more secure than using passwords, anyway.
|
96
|
+
- bonus points: disable password authentication completely, and only allow
|
97
|
+
key-based authentication
|
98
|
+
- configure passwordless `sudo` access for your user on the server
|
99
|
+
|
100
|
+
## Applying cookbooks
|
101
|
+
|
102
|
+
To apply the configuration to all nodes, run
|
103
|
+
|
104
|
+
```bash
|
105
|
+
$ rake converge
|
106
|
+
```
|
107
|
+
|
108
|
+
To apply the configuration to a single node, run
|
109
|
+
|
110
|
+
```bash
|
111
|
+
$ rake converge:$NODE
|
112
|
+
```
|
113
|
+
|
114
|
+
## Writing cookbooks
|
115
|
+
|
116
|
+
Since chake is actually a wrapper for Chef Solo, you should read the [chef
|
117
|
+
documentation](https://docs.chef.io/). In special, look at the [Chef Solo
|
118
|
+
Documentation](https://docs.chef.io/chef_solo.html).
|
119
|
+
|
120
|
+
## The node bootstrapping process
|
121
|
+
|
122
|
+
When chake acts on a node for the first time, it has to bootstrap it. The
|
123
|
+
bootstrapping process includes doing the following:
|
124
|
+
|
125
|
+
- installing chef and rsync
|
126
|
+
- disabling the chef client daemon
|
127
|
+
- setting up the hostname
|
128
|
+
|
129
|
+
## Node URLs
|
130
|
+
|
131
|
+
The keys in the hash that is represented in `nodes.yaml` is a node URL. All
|
132
|
+
components of the URL but the hostname are optional, so just listing hostnames
|
133
|
+
is the simplest form of specifying your nodes. Here are all the components of
|
134
|
+
the node URLs:
|
135
|
+
|
136
|
+
```
|
137
|
+
[backend://][username@]hostname[:port][/path]
|
138
|
+
```
|
139
|
+
|
140
|
+
|Parameter|Meaning|Default value|
|
141
|
+
|---------|-------|-------------|
|
142
|
+
| backend | backend to use to connect to the host. `ssh` or `local` | `ssh` |
|
143
|
+
| username | user name to connect with | The username on your local workstation |
|
144
|
+
| hostname | the hostname to connect to | _none_ |
|
145
|
+
| port | port number to connect to | 22 |
|
146
|
+
| /path | where to store the cookbooks at the node | `/var/tmp/chef.$USERNAME` |
|
147
|
+
|
148
|
+
|
149
|
+
## Extra features
|
150
|
+
|
151
|
+
### Encrypted files
|
152
|
+
|
153
|
+
Any files ending matching `*.gpg` and `*.asc` will be decrypted with GnuPG
|
154
|
+
before being sent to the node. You can use them to store passwords and other
|
155
|
+
sensitive information (SSL keys, etc) in the repository together with the rest
|
156
|
+
of the configuration.
|
157
|
+
|
158
|
+
### repository-local SSH configuration
|
159
|
+
|
160
|
+
If you need special SSH configuration parameters, you can create a file called
|
161
|
+
`.ssh_config` in at the root of your repository, and chake will use it when
|
162
|
+
calling `ssh`.
|
163
|
+
|
164
|
+
### Converging local host
|
165
|
+
|
166
|
+
If you want to manage your local workstation with chake, you can declare a local node like this in `nodes.yaml`:
|
167
|
+
|
168
|
+
```yaml
|
169
|
+
local://thunderbolt:
|
170
|
+
run_list:
|
171
|
+
- role[workstation]
|
172
|
+
```
|
173
|
+
|
174
|
+
To apply the configuration to the local host, you can use the conventional
|
175
|
+
`rake converse:thunderbolt`, or the special target `rake local`.
|
176
|
+
|
177
|
+
When converging all nodes, `chake` will skip nodes that are declared with the
|
178
|
+
`local://` backend and whose hostname does not match the hostname in the
|
179
|
+
declaration. For example:
|
180
|
+
|
181
|
+
```yaml
|
182
|
+
local://desktop:
|
183
|
+
run_list:
|
184
|
+
- role[workstation]
|
185
|
+
local://laptop:
|
186
|
+
run_list:
|
187
|
+
- role[workstation]
|
53
188
|
```
|
54
189
|
|
55
|
-
|
190
|
+
When you run `rake converge` on `desktop`, `laptop` will be skipped, and
|
191
|
+
vice-versa.
|
56
192
|
|
57
193
|
## Contributing
|
58
194
|
|
data/chake.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["terceiro@softwarelivre.org"]
|
11
11
|
spec.summary = %q{Simple host management with chef and rake. No chef server required.}
|
12
12
|
spec.description = %q{chake provides a set of rake tasks that you can use to manage any number of hosts via SSH. It doesn't require a chef server; all you need is a workstation from where you can SSH into all your hosts.}
|
13
|
-
spec.homepage = "https://
|
13
|
+
spec.homepage = "https://gitlab.com/terceiro/chake"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
data/chake.spec.erb
CHANGED
@@ -31,7 +31,7 @@ Requires: ruby, rubygem-rake
|
|
31
31
|
%install
|
32
32
|
%{__rm} -rf %{buildroot}
|
33
33
|
mkdir -p %{gembuilddir}
|
34
|
-
sed -i -e 's#spec.files\s*=.*#spec.files = Dir.glob(
|
34
|
+
sed -i -e 's#spec.files\s*=.*#spec.files = Dir.glob("**/*")#' %{name}.gemspec
|
35
35
|
rake build
|
36
36
|
gem install --local --install-dir %{gembuilddir} --force pkg/*.gem
|
37
37
|
mkdir -p %{buildroot}/%{_bindir}
|
data/lib/chake.rb
CHANGED
@@ -19,9 +19,9 @@ task :init do
|
|
19
19
|
else
|
20
20
|
File.open('nodes.yaml', 'w') do |f|
|
21
21
|
sample_nodes = <<EOF
|
22
|
-
host1.
|
22
|
+
host1.mycompany.com:
|
23
23
|
run_list:
|
24
|
-
- recipe[
|
24
|
+
- recipe[basics]
|
25
25
|
EOF
|
26
26
|
f.write(sample_nodes)
|
27
27
|
puts "[create] nodes.yaml"
|
@@ -43,11 +43,11 @@ EOF
|
|
43
43
|
FileUtils.mkdir_p 'config/roles'
|
44
44
|
puts '[ mkdir] config/roles'
|
45
45
|
end
|
46
|
-
if !File.exist?('cookbooks/
|
47
|
-
FileUtils.mkdir_p 'cookbooks/
|
48
|
-
puts '[ mkdir] cookbooks/
|
46
|
+
if !File.exist?('cookbooks/basics/recipes')
|
47
|
+
FileUtils.mkdir_p 'cookbooks/basics/recipes/'
|
48
|
+
puts '[ mkdir] cookbooks/basics/recipes/'
|
49
49
|
end
|
50
|
-
recipe = 'cookbooks/
|
50
|
+
recipe = 'cookbooks/basics/recipes/default.rb'
|
51
51
|
if File.exists?(recipe)
|
52
52
|
puts "[exists] #{recipe}"
|
53
53
|
else
|
data/lib/chake/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Antonio Terceiro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02
|
11
|
+
date: 2015-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -89,7 +89,7 @@ files:
|
|
89
89
|
- spec/chake/backend_spec.rb
|
90
90
|
- spec/chake/node_spec.rb
|
91
91
|
- spec/spec_helper.rb
|
92
|
-
homepage: https://
|
92
|
+
homepage: https://gitlab.com/terceiro/chake
|
93
93
|
licenses:
|
94
94
|
- MIT
|
95
95
|
metadata: {}
|