hubcap 0.0.1
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/Capfile.example +37 -0
- data/README.md +168 -0
- data/Rakefile +10 -0
- data/bin/hubcap +98 -0
- data/hubcap.gemspec +17 -0
- data/lib/hubcap/application.rb +24 -0
- data/lib/hubcap/group.rb +223 -0
- data/lib/hubcap/hub.rb +125 -0
- data/lib/hubcap/recipes/puppet.rb +176 -0
- data/lib/hubcap/recipes/servers.rb +21 -0
- data/lib/hubcap/server.rb +46 -0
- data/lib/hubcap/version.rb +5 -0
- data/lib/hubcap.rb +29 -0
- data/test/data/example.rb +68 -0
- data/test/data/parts/foo_param.rb +1 -0
- data/test/data/readme.rb +47 -0
- data/test/data/simple.rb +4 -0
- data/test/test_helper.rb +2 -0
- data/test/unit/test_application.rb +20 -0
- data/test/unit/test_group.rb +176 -0
- data/test/unit/test_hub.rb +104 -0
- data/test/unit/test_hubcap.rb +39 -0
- data/test/unit/test_server.rb +69 -0
- metadata +94 -0
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'capistrano'
|
4
|
+
|
5
|
+
class Hubcap::TestHub < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_hub
|
8
|
+
hub = Hubcap.hub { application('example') }
|
9
|
+
assert_equal(hub, hub.hub)
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def test_history
|
14
|
+
hub = Hubcap.hub { application('example') }
|
15
|
+
assert_equal([], hub.history)
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
def test_configure_capistrano_in_agnostic_mode
|
20
|
+
hub = Hubcap.hub {
|
21
|
+
application('a') {
|
22
|
+
group('g') {
|
23
|
+
role(:baseline)
|
24
|
+
server('s') { role(:everything) }
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
cap = Capistrano::Configuration.new
|
30
|
+
cap.set(:hubcap_agnostic, true)
|
31
|
+
hub.configure_capistrano(cap)
|
32
|
+
|
33
|
+
assert_equal(hub, cap.hubcap)
|
34
|
+
assert_not_nil(cap.find_task('servers:list'))
|
35
|
+
assert_not_nil(cap.find_task('puppet:check'))
|
36
|
+
assert_nil(cap.find_task('deploy:setup'))
|
37
|
+
assert_equal('s', cap.roles[:baseline].servers.first.host)
|
38
|
+
assert_equal('s', cap.roles[:everything].servers.first.host)
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def test_configure_capistrano_in_application_mode
|
43
|
+
hub = Hubcap.hub {
|
44
|
+
application('a', :recipes => 'deploy') {
|
45
|
+
group('g') {
|
46
|
+
cap_set(:branch, 'deploy')
|
47
|
+
role(:baseline)
|
48
|
+
server('s') { role(:everything) }
|
49
|
+
}
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
cap = Capistrano::Configuration.new
|
54
|
+
cap.set(:hubcap_agnostic, false)
|
55
|
+
hub.configure_capistrano(cap)
|
56
|
+
|
57
|
+
assert_equal('deploy', cap.branch)
|
58
|
+
assert_not_nil(cap.find_task('deploy:setup'))
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
def test_configure_capistrano_in_application_mode_with_two_applications
|
63
|
+
hub = Hubcap.hub {
|
64
|
+
role(:baseline)
|
65
|
+
application('a1') { server('s1') }
|
66
|
+
application('a2') { server('s2') }
|
67
|
+
}
|
68
|
+
|
69
|
+
cap = Capistrano::Configuration.new
|
70
|
+
cap.set(:hubcap_agnostic, false)
|
71
|
+
assert_raises(Hubcap::ApplicationModeError::TooManyApplications) {
|
72
|
+
hub.configure_capistrano(cap)
|
73
|
+
}
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
def test_configure_capistrano_in_application_mode_with_no_applications
|
78
|
+
hub = Hubcap.hub { server('s1') { role(:baseline) } }
|
79
|
+
|
80
|
+
cap = Capistrano::Configuration.new
|
81
|
+
cap.set(:hubcap_agnostic, false)
|
82
|
+
assert_raises(Hubcap::ApplicationModeError::NoApplications) {
|
83
|
+
hub.configure_capistrano(cap)
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
def test_configure_capistrano_in_application_mode_with_no_applications
|
89
|
+
hub = Hubcap.hub {
|
90
|
+
cap_set(:foo => 'bar')
|
91
|
+
server('s1') {
|
92
|
+
cap_set(:foo => 'baz')
|
93
|
+
role(:baseline)
|
94
|
+
}
|
95
|
+
}
|
96
|
+
|
97
|
+
cap = Capistrano::Configuration.new
|
98
|
+
cap.set(:hubcap_agnostic, false)
|
99
|
+
assert_raises(Hubcap::ApplicationModeError::DuplicateSets) {
|
100
|
+
hub.configure_capistrano(cap)
|
101
|
+
}
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Hubcap::TestHubcap < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_hub
|
6
|
+
hub = Hubcap.hub('group2') {
|
7
|
+
role(:baseline)
|
8
|
+
group('group1') { server('serverA') }
|
9
|
+
group('group2') { server('serverB') }
|
10
|
+
group('group3') { server('serverC') }
|
11
|
+
}
|
12
|
+
assert_equal(1, hub.servers.length)
|
13
|
+
assert_equal('serverB', hub.servers.last.name)
|
14
|
+
assert_equal([:baseline], hub.servers.first.cap_roles)
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
def test_load
|
19
|
+
# Fully specified path to a single file.
|
20
|
+
hub = Hubcap.load('', 'test/data/simple.rb')
|
21
|
+
assert_equal('simple', hub.groups.first.name)
|
22
|
+
assert_equal('localhost', hub.servers.last.name)
|
23
|
+
|
24
|
+
# You can omit the .rb
|
25
|
+
hub = Hubcap.load('', 'test/data/simple')
|
26
|
+
assert_equal(1, hub.groups.length)
|
27
|
+
|
28
|
+
# You can load multiple files.
|
29
|
+
hub = Hubcap.load('', 'test/data/simple', 'test/data/example')
|
30
|
+
assert_equal(6, hub.groups.length)
|
31
|
+
|
32
|
+
# You can load a directory (or directories).
|
33
|
+
hub = Hubcap.load('', 'test/data')
|
34
|
+
assert_equal(11, hub.groups.length)
|
35
|
+
# ..but note that Hubcap doesn't recurse into subdirectories:
|
36
|
+
assert_equal(nil, hub.params[:foo])
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Hubcap::TestServer < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_address
|
6
|
+
hub = Hubcap.hub { server('test') }
|
7
|
+
assert_equal('test', hub.servers.first.address)
|
8
|
+
hub = Hubcap.hub { server('test', :address => 'test.example.com') }
|
9
|
+
assert_equal('test.example.com', hub.servers.first.address)
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def test_subgroups_disallowed
|
14
|
+
assert_raises(Hubcap::ServerSubgroupDisallowed) {
|
15
|
+
Hubcap.hub { server('test') { application('child') } }
|
16
|
+
}
|
17
|
+
assert_raises(Hubcap::ServerSubgroupDisallowed) {
|
18
|
+
Hubcap.hub { server('test') { server('child') } }
|
19
|
+
}
|
20
|
+
assert_raises(Hubcap::ServerSubgroupDisallowed) {
|
21
|
+
Hubcap.hub { server('test') { group('child') } }
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
def test_application_parent
|
27
|
+
# No application
|
28
|
+
hub = Hubcap.hub { server('test') }
|
29
|
+
assert_equal(nil, hub.servers.first.application_parent)
|
30
|
+
|
31
|
+
# Direct inheritance
|
32
|
+
hub = Hubcap.hub {
|
33
|
+
application('foo') { server('test') }
|
34
|
+
application('bar')
|
35
|
+
}
|
36
|
+
assert_equal('foo', hub.servers.first.application_parent.name)
|
37
|
+
|
38
|
+
# Grandparent in a complex structure
|
39
|
+
hub = Hubcap.hub {
|
40
|
+
group('everything') {
|
41
|
+
application('baz') {
|
42
|
+
group('g1') {
|
43
|
+
server('test')
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
}
|
48
|
+
assert_equal('baz', hub.servers.first.application_parent.name)
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def test_yaml
|
53
|
+
hub = Hubcap.hub {
|
54
|
+
group('everything') {
|
55
|
+
role('baseline')
|
56
|
+
server('test') {
|
57
|
+
role('test::server')
|
58
|
+
param('foo' => 1, 'bar' => 2)
|
59
|
+
}
|
60
|
+
}
|
61
|
+
}
|
62
|
+
hash = YAML.load(hub.servers.first.yaml)
|
63
|
+
assert_equal(['baseline', 'test::server'], hash['classes'])
|
64
|
+
assert_equal(['classes', 'parameters'], hash.keys.sort)
|
65
|
+
assert_equal(['bar', 'foo'], hash['parameters'].keys.sort)
|
66
|
+
assert_equal([1, 2], hash['parameters'].values.sort)
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hubcap
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Joseph Pearson
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2012-09-20 00:00:00 +10:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Unite Capistrano and Puppet config in one Ruby file.
|
22
|
+
email:
|
23
|
+
- joseph@booki.sh
|
24
|
+
executables:
|
25
|
+
- hubcap
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- Capfile.example
|
32
|
+
- README.md
|
33
|
+
- Rakefile
|
34
|
+
- bin/hubcap
|
35
|
+
- hubcap.gemspec
|
36
|
+
- lib/hubcap.rb
|
37
|
+
- lib/hubcap/application.rb
|
38
|
+
- lib/hubcap/group.rb
|
39
|
+
- lib/hubcap/hub.rb
|
40
|
+
- lib/hubcap/recipes/puppet.rb
|
41
|
+
- lib/hubcap/recipes/servers.rb
|
42
|
+
- lib/hubcap/server.rb
|
43
|
+
- lib/hubcap/version.rb
|
44
|
+
- test/data/example.rb
|
45
|
+
- test/data/parts/foo_param.rb
|
46
|
+
- test/data/readme.rb
|
47
|
+
- test/data/simple.rb
|
48
|
+
- test/test_helper.rb
|
49
|
+
- test/unit/test_application.rb
|
50
|
+
- test/unit/test_group.rb
|
51
|
+
- test/unit/test_hub.rb
|
52
|
+
- test/unit/test_hubcap.rb
|
53
|
+
- test/unit/test_server.rb
|
54
|
+
has_rdoc: true
|
55
|
+
homepage: ""
|
56
|
+
licenses: []
|
57
|
+
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
segments:
|
68
|
+
- 0
|
69
|
+
version: "0"
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
77
|
+
requirements: []
|
78
|
+
|
79
|
+
rubyforge_project:
|
80
|
+
rubygems_version: 1.3.6
|
81
|
+
signing_key:
|
82
|
+
specification_version: 3
|
83
|
+
summary: Hubcap Capistrano/Puppet extension
|
84
|
+
test_files:
|
85
|
+
- test/data/example.rb
|
86
|
+
- test/data/parts/foo_param.rb
|
87
|
+
- test/data/readme.rb
|
88
|
+
- test/data/simple.rb
|
89
|
+
- test/test_helper.rb
|
90
|
+
- test/unit/test_application.rb
|
91
|
+
- test/unit/test_group.rb
|
92
|
+
- test/unit/test_hub.rb
|
93
|
+
- test/unit/test_hubcap.rb
|
94
|
+
- test/unit/test_server.rb
|