baptize 0.1.1 → 0.1.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/README.markdown +1 -126
- data/lib/baptize/package_definition.rb +16 -4
- data/lib/baptize/plugins/execution.rb +4 -4
- data/lib/baptize/registry.rb +14 -6
- data/lib/baptize/version.rb +1 -1
- data/lib/baptize.rb +1 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11dedf7433eb9c33188a68b80a8d1b79b1a9bf1f
|
4
|
+
data.tar.gz: 5af048e9e82eeafa942d46194b2cc77c72ccf089
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2da09b4fb58133cfa2756fbd78aaf06c67bb99f4aa6fa426f38f938dc8ec5c1eb6e8ac0bd133ef41bccc518195aaf80bd3a2f2de43544248f8fec0a62fca5998
|
7
|
+
data.tar.gz: 1c4a577daa8bf401a315587cc610e08957dffad5903ed520596879e7063d7adf32a9d9e1a323bea4985f107085b35e0b6798b1876cea3e098fbcc453b28c99ca
|
data/README.markdown
CHANGED
@@ -3,129 +3,4 @@ Baptize
|
|
3
3
|
|
4
4
|
Baptize is an extension for Capistrano, that allows for server provisioning. The API resembles [Sprinkle](https://github.com/sprinkle-tool/sprinkle), but the underlying implementation is quite different. Where Sprinkle tries to compile a static payload of commands and push to the server, Baptize is executed in runtime. It also reuses much more of Capistrano, than Sprinkle does. Basically, each Baptize package is a capistrano task - Baptize just adds some helpers and fancy dsl on top, to make it look declarative.
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
Setup
|
9
|
-
---
|
10
|
-
|
11
|
-
At some point, I'll probably wrap this procedure in a generator, but for now you'll have to do so manually.
|
12
|
-
|
13
|
-
To get started, create a `Gemfile`:
|
14
|
-
|
15
|
-
```ruby
|
16
|
-
source 'https://rubygems.org'
|
17
|
-
gem 'capistrano', '~> 2.15'
|
18
|
-
gem 'baptize'
|
19
|
-
```
|
20
|
-
|
21
|
-
And a `Capfile`:
|
22
|
-
|
23
|
-
```ruby
|
24
|
-
require 'bundler'
|
25
|
-
require 'capistrano'
|
26
|
-
require 'baptize'
|
27
|
-
load_configuration :roles
|
28
|
-
Dir.glob("#{capistrano_path}/packages/**/*.rb").each do |package|
|
29
|
-
load(package)
|
30
|
-
end
|
31
|
-
Dir.glob("#{capistrano_path}/recipes/**/*.rb").each do |recipe|
|
32
|
-
load(recipe)
|
33
|
-
end
|
34
|
-
```
|
35
|
-
|
36
|
-
And a couple of folders and files:
|
37
|
-
|
38
|
-
./capistrano/
|
39
|
-
./capistrano/config/
|
40
|
-
./capistrano/config/roles.rb # Globally applied configuration. Define roles here.
|
41
|
-
./capistrano/config/baptize.rb # Contains config files used by baptize packages. Define policies here.
|
42
|
-
./capistrano/packages/ # Put package definitions in here.
|
43
|
-
./capistrano/recipes/ # Put regular capistrano tasks in here.
|
44
|
-
./capistrano/assets/ # Place auxiliary files here.
|
45
|
-
|
46
|
-
And Finally, run the following command:
|
47
|
-
|
48
|
-
bundle
|
49
|
-
|
50
|
-
Sample configuration
|
51
|
-
---
|
52
|
-
|
53
|
-
First define some roles, by opening up `config/roles.rb` - This is just regular Capistrano stuff. For example:
|
54
|
-
|
55
|
-
```ruby
|
56
|
-
role :server, "192.168.1.1"
|
57
|
-
```
|
58
|
-
|
59
|
-
Next define a policy for the server. Open up `config/baptize.rb` and put this:
|
60
|
-
|
61
|
-
```ruby
|
62
|
-
policy :server do
|
63
|
-
requires :system_update
|
64
|
-
end
|
65
|
-
```
|
66
|
-
|
67
|
-
This defines that the role `:server` needs a package `system_update`.
|
68
|
-
|
69
|
-
You probably should define which login credentials to use as well:
|
70
|
-
|
71
|
-
```ruby
|
72
|
-
# ssh login user
|
73
|
-
set :user, 'ubuntu'
|
74
|
-
# ssh key location
|
75
|
-
ssh_options[:keys] = '~/.ssh/aws-key.pem'
|
76
|
-
# run commands through sudo
|
77
|
-
set :use_sudo, true
|
78
|
-
```
|
79
|
-
|
80
|
-
Note that since this is defined inside `config/baptize.rb`, it won't apply to capistrano recipes outside of baptize. The roles, on the other hand, is globally loaded (That happens in the `Capfile`).
|
81
|
-
|
82
|
-
Better create that packages then. Open up `packages/system_update.rb`:
|
83
|
-
|
84
|
-
```ruby
|
85
|
-
package :system_update do
|
86
|
-
description "System Update"
|
87
|
-
install do
|
88
|
-
run 'apt-get update -y'
|
89
|
-
run 'apt-get upgrade -y'
|
90
|
-
end
|
91
|
-
end
|
92
|
-
```
|
93
|
-
|
94
|
-
This defines a package, that will upgrade the apt package manager of the target system.
|
95
|
-
|
96
|
-
Deploying policies
|
97
|
-
---
|
98
|
-
|
99
|
-
You can now run the following command:
|
100
|
-
|
101
|
-
cap baptize
|
102
|
-
|
103
|
-
Which should make capistrano ssh in to the `:server` role and try to update apt. It'll probably fail, unless you actually have a server running at that IP.
|
104
|
-
|
105
|
-
If you want to just configure a single role, you can do so by running:
|
106
|
-
|
107
|
-
cap baptize:policies:server
|
108
|
-
|
109
|
-
Using Baptize alongside Capistrano
|
110
|
-
---
|
111
|
-
|
112
|
-
If you also want to use Capistrano for regular application deployment (what it's actually ment for), you might want to create a file in `config/deploy.rb` to hold settings for this. E.g.:
|
113
|
-
|
114
|
-
```ruby
|
115
|
-
set :application, "set your application name here"
|
116
|
-
set :repository, "set your repository location here"
|
117
|
-
```
|
118
|
-
|
119
|
-
And to make sure it is loaded, modify your `Capfile` to include:
|
120
|
-
|
121
|
-
```ruby
|
122
|
-
load 'deploy'
|
123
|
-
load 'deploy/assets' # For using Rails' asset pipeline
|
124
|
-
before 'deploy' do
|
125
|
-
load_configuration :deploy
|
126
|
-
end
|
127
|
-
```
|
128
|
-
|
129
|
-
---
|
130
|
-
|
131
|
-
TODO: There is more to Baptize, but that'll have to wait for now.
|
6
|
+
For now, there is virtually no documentation. Have a peek at `sample/` for an idea of how it works.
|
@@ -17,8 +17,18 @@ module Baptize
|
|
17
17
|
def execute
|
18
18
|
unless @registry.packages_executed.include? full_name
|
19
19
|
@registry.packages_executed << full_name
|
20
|
-
|
21
|
-
|
20
|
+
logger.info "Resolving dependencies for #{name}"
|
21
|
+
@registry.before(self).each do |dependency|
|
22
|
+
logger.debug "--> #{dependency}"
|
23
|
+
@registry.resolve_dependency(dependency).tap do |task|
|
24
|
+
task.call
|
25
|
+
end
|
26
|
+
end
|
27
|
+
@dependencies.each do |dependency|
|
28
|
+
logger.debug "--> #{dependency}"
|
29
|
+
@registry.resolve_dependency(dependency).tap do |task|
|
30
|
+
task.call
|
31
|
+
end
|
22
32
|
end
|
23
33
|
instance_eval(&before_block) if self.before_block
|
24
34
|
if verify_block
|
@@ -49,8 +59,10 @@ module Baptize
|
|
49
59
|
logger.info "Nothing to do for package #{name}"
|
50
60
|
end
|
51
61
|
instance_eval(&after_block) if after_block
|
52
|
-
@registry.after(self).each do |
|
53
|
-
task
|
62
|
+
@registry.after(self).each do |dependency|
|
63
|
+
@registry.resolve_dependency(dependency).tap do |task|
|
64
|
+
task.call
|
65
|
+
end
|
54
66
|
end
|
55
67
|
end
|
56
68
|
end
|
@@ -44,11 +44,11 @@ module Baptize
|
|
44
44
|
SSHKit.config.output_verbosity = Logger::DEBUG
|
45
45
|
end
|
46
46
|
begin
|
47
|
-
if fetch(:
|
48
|
-
|
49
|
-
else
|
50
|
-
ssh.send(action, *args)
|
47
|
+
if fetch(:use_bash)
|
48
|
+
args = ["bash -c " + args.join(" ; ").shellescape]
|
51
49
|
end
|
50
|
+
args.unshift(:sudo) if fetch(:use_sudo)
|
51
|
+
ssh.send(action, *args)
|
52
52
|
ensure
|
53
53
|
SSHKit.config.output_verbosity = old_verbosity if old_verbosity
|
54
54
|
end
|
data/lib/baptize/registry.rb
CHANGED
@@ -32,9 +32,7 @@ module Baptize
|
|
32
32
|
@befores ||= {}
|
33
33
|
@befores[subject_name] ||= []
|
34
34
|
if other_task
|
35
|
-
|
36
|
-
raise "Didn't find a package by that name" if task.nil?
|
37
|
-
@befores[subject_name] << task.method(:execute)
|
35
|
+
@befores[subject_name] << other_task
|
38
36
|
elsif block_given?
|
39
37
|
@befores[subject_name] << block
|
40
38
|
end
|
@@ -45,15 +43,25 @@ module Baptize
|
|
45
43
|
@afters ||= {}
|
46
44
|
@afters[subject_name] ||= []
|
47
45
|
if other_task
|
48
|
-
|
49
|
-
raise "Didn't find a package by that name" if task.nil?
|
50
|
-
@afters[subject_name] << task.method(:execute)
|
46
|
+
@afters[subject_name] << other_task
|
51
47
|
elsif block_given?
|
52
48
|
@afters[subject_name] << block
|
53
49
|
end
|
54
50
|
@afters[subject_name]
|
55
51
|
end
|
56
52
|
|
53
|
+
def self.resolve_dependency(mixed)
|
54
|
+
if mixed.kind_of?(String) || mixed.kind_of?(Symbol)
|
55
|
+
task = packages[mixed.to_s]
|
56
|
+
raise "Didn't find a package by that name: '#{mixed}'" if task.nil?
|
57
|
+
task.method(:execute)
|
58
|
+
elsif mixed.kind_of? PackageDefinition
|
59
|
+
mixed.method(:execute)
|
60
|
+
else
|
61
|
+
mixed
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
57
65
|
def self.define_package(package_name, &config_block)
|
58
66
|
package = PackageDefinition.new(package_name, self.execution_scope, self)
|
59
67
|
packages[package.full_name] = package
|
data/lib/baptize/version.rb
CHANGED
data/lib/baptize.rb
CHANGED