rubber 1.13.2 → 1.14.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 +9 -0
- data/VERSION +1 -1
- data/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +9 -1
- data/generators/vulcanize/templates/base/config/rubber/rubber-rvm.yml +3 -0
- data/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +1 -1
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/database.yml +1 -1
- data/generators/vulcanize/templates/redis/config/rubber/rubber-redis.yml +1 -1
- data/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +1 -1
- data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +2 -2
- data/lib/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +9 -1
- data/lib/generators/vulcanize/templates/base/config/rubber/rubber-rvm.yml +3 -0
- data/lib/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +1 -1
- data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/database.yml +1 -1
- data/lib/generators/vulcanize/templates/redis/config/rubber/rubber-redis.yml +1 -1
- data/lib/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +1 -1
- data/lib/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +2 -2
- data/lib/rubber/instance.rb +4 -2
- data/lib/rubber/recipes/rubber/deploy.rb +1 -1
- data/lib/rubber/recipes/rubber/instances.rb +1 -1
- data/lib/rubber/recipes/rubber/setup.rb +2 -20
- data/lib/rubber/recipes/rubber/static_ips.rb +2 -0
- data/lib/rubber/recipes/rubber/volumes.rb +8 -2
- data/lib/rubber/tasks/rubber.rb +1 -1
- metadata +5 -16
- data/test/environment_test.rb +0 -137
- data/test/generator_test.rb +0 -370
- data/test/instance_test.rb +0 -180
- data/test/test_helper.rb +0 -14
- data/test/util_test.rb +0 -19
- data/test/zerigo_test.rb +0 -88
data/CHANGELOG
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
1.14.0 (06/02/2011)
|
2
|
+
-----
|
3
|
+
|
4
|
+
Projects using bundler will now run rake with bundle exec
|
5
|
+
Added ability to lockdown the version of rake that RVM will install (vulcanize base for the changes)
|
6
|
+
Added the image type and ID for each instance to the instance file
|
7
|
+
Fixed an issue with LVM groups keeping physical volumes in /etc/fstab
|
8
|
+
Fixed an issue using the mysql2 adapter with the stock MySQL config
|
9
|
+
|
1
10
|
1.13.2
|
2
11
|
-----
|
3
12
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.14.0
|
@@ -37,11 +37,19 @@ namespace :rubber do
|
|
37
37
|
|
38
38
|
bash ./scripts/install
|
39
39
|
|
40
|
+
# Set up the rubygems version
|
40
41
|
sed -i 's/rubygems_version=.*/rubygems_version=#{rubber_env.rubygems_version}/' #{rubber_env.rvm_prefix}/config/db
|
41
42
|
|
43
|
+
# Set up the rake version
|
44
|
+
sed -i 's/rake.*/rake -v#{rubber_env.rake_version}/' #{rubber_env.rvm_prefix}/gemsets/default.gems
|
45
|
+
sed -i 's/rake.*/rake -v#{rubber_env.rake_version}/' #{rubber_env.rvm_prefix}/gemsets/global.gems
|
46
|
+
|
47
|
+
# Set up the .gemrc file
|
48
|
+
echo "--- " >> ~/.gemrc
|
49
|
+
echo "gem: --no-ri --no-rdoc" >> ~/.gemrc
|
50
|
+
|
42
51
|
#
|
43
52
|
# end rvm install script
|
44
|
-
|
45
53
|
fi
|
46
54
|
ENDSCRIPT
|
47
55
|
end
|
@@ -22,6 +22,9 @@ rvm_ruby: 1.9.2
|
|
22
22
|
# know about newer RubyGems. So you may need to bump your rvm_version to get the latest RubyGems release.
|
23
23
|
rubygems_version: 1.5.2
|
24
24
|
|
25
|
+
# REQUIRED: Set to version of rake you want RVM to install.
|
26
|
+
rake_version: 0.8.7
|
27
|
+
|
25
28
|
# When rvm is installed as root, and you set the default, it symlinks ruby executables
|
26
29
|
# into /usr/local/rvm
|
27
30
|
ruby_prefix: /usr/local/rvm
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# Sets up rails to talk to mysql-proxy load balancer running on localhost,
|
6
6
|
# which then then balances requests between sql nodes in the cluster
|
7
7
|
<%= RUBBER_ENV %>:
|
8
|
-
adapter:
|
8
|
+
adapter: <%= YAML::load(File.open("#{RUBBER_ROOT}/config/database.yml"))["production"]["adapter"] %>
|
9
9
|
encoding: utf8
|
10
10
|
database: <%= rubber_env.db_name %>
|
11
11
|
username: <%= rubber_env.db_user %>
|
@@ -72,7 +72,7 @@ namespace :rubber do
|
|
72
72
|
|
73
73
|
# runs the given ultrasphinx rake tasks
|
74
74
|
def run_sphinx task
|
75
|
-
rsudo "cd #{current_path} && RAILS_ENV=#{RUBBER_ENV} rake #{task}", :as => runner
|
75
|
+
rsudo "cd #{current_path} && RAILS_ENV=#{RUBBER_ENV} #{fetch(:rake, 'rake')} #{task}", :as => runner
|
76
76
|
end
|
77
77
|
|
78
78
|
|
@@ -2,8 +2,8 @@
|
|
2
2
|
@path = '/etc/monit/monit.d/monit-sphinx.conf'
|
3
3
|
|
4
4
|
pidfile = "#{RUBBER_ROOT}/log/searchd.#{RUBBER_ENV}.pid"
|
5
|
-
start_program = "cd #{RUBBER_ROOT} && rake ts:start"
|
6
|
-
stop_program = "cd #{RUBBER_ROOT} && rake ts:stop"
|
5
|
+
start_program = "cd #{RUBBER_ROOT} && #{fetch(:rake, 'rake')} ts:start"
|
6
|
+
stop_program = "cd #{RUBBER_ROOT} && #{fetch(:rake, 'rake')} ts:stop"
|
7
7
|
%>
|
8
8
|
|
9
9
|
check process sphinx with pidfile <%= pidfile %>
|
@@ -37,11 +37,19 @@ namespace :rubber do
|
|
37
37
|
|
38
38
|
bash ./scripts/install
|
39
39
|
|
40
|
+
# Set up the rubygems version
|
40
41
|
sed -i 's/rubygems_version=.*/rubygems_version=#{rubber_env.rubygems_version}/' #{rubber_env.rvm_prefix}/config/db
|
41
42
|
|
43
|
+
# Set up the rake version
|
44
|
+
sed -i 's/rake.*/rake -v#{rubber_env.rake_version}/' #{rubber_env.rvm_prefix}/gemsets/default.gems
|
45
|
+
sed -i 's/rake.*/rake -v#{rubber_env.rake_version}/' #{rubber_env.rvm_prefix}/gemsets/global.gems
|
46
|
+
|
47
|
+
# Set up the .gemrc file
|
48
|
+
echo "--- " >> ~/.gemrc
|
49
|
+
echo "gem: --no-ri --no-rdoc" >> ~/.gemrc
|
50
|
+
|
42
51
|
#
|
43
52
|
# end rvm install script
|
44
|
-
|
45
53
|
fi
|
46
54
|
ENDSCRIPT
|
47
55
|
end
|
@@ -22,6 +22,9 @@ rvm_ruby: 1.9.2
|
|
22
22
|
# know about newer RubyGems. So you may need to bump your rvm_version to get the latest RubyGems release.
|
23
23
|
rubygems_version: 1.5.2
|
24
24
|
|
25
|
+
# REQUIRED: Set to version of rake you want RVM to install.
|
26
|
+
rake_version: 0.8.7
|
27
|
+
|
25
28
|
# When rvm is installed as root, and you set the default, it symlinks ruby executables
|
26
29
|
# into /usr/local/rvm
|
27
30
|
ruby_prefix: /usr/local/rvm
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# Sets up rails to talk to mysql-proxy load balancer running on localhost,
|
6
6
|
# which then then balances requests between sql nodes in the cluster
|
7
7
|
<%= RUBBER_ENV %>:
|
8
|
-
adapter:
|
8
|
+
adapter: <%= YAML::load(File.open("#{RUBBER_ROOT}/config/database.yml"))["production"]["adapter"] %>
|
9
9
|
encoding: utf8
|
10
10
|
database: <%= rubber_env.db_name %>
|
11
11
|
username: <%= rubber_env.db_user %>
|
@@ -72,7 +72,7 @@ namespace :rubber do
|
|
72
72
|
|
73
73
|
# runs the given ultrasphinx rake tasks
|
74
74
|
def run_sphinx task
|
75
|
-
rsudo "cd #{current_path} && RAILS_ENV=#{RUBBER_ENV} rake #{task}", :as => runner
|
75
|
+
rsudo "cd #{current_path} && RAILS_ENV=#{RUBBER_ENV} #{fetch(:rake, 'rake')} #{task}", :as => runner
|
76
76
|
end
|
77
77
|
|
78
78
|
|
@@ -2,8 +2,8 @@
|
|
2
2
|
@path = '/etc/monit/monit.d/monit-sphinx.conf'
|
3
3
|
|
4
4
|
pidfile = "#{RUBBER_ROOT}/log/searchd.#{RUBBER_ENV}.pid"
|
5
|
-
start_program = "cd #{RUBBER_ROOT} && rake ts:start"
|
6
|
-
stop_program = "cd #{RUBBER_ROOT} && rake ts:stop"
|
5
|
+
start_program = "cd #{RUBBER_ROOT} && #{fetch(:rake, 'rake')} ts:start"
|
6
|
+
stop_program = "cd #{RUBBER_ROOT} && #{fetch(:rake, 'rake')} ts:stop"
|
7
7
|
%>
|
8
8
|
|
9
9
|
check process sphinx with pidfile <%= pidfile %>
|
data/lib/rubber/instance.rb
CHANGED
@@ -114,7 +114,7 @@ module Rubber
|
|
114
114
|
|
115
115
|
# The configuration for a single instance
|
116
116
|
class InstanceItem
|
117
|
-
attr_reader :name, :domain, :instance_id, :security_groups
|
117
|
+
attr_reader :name, :domain, :instance_id, :image_type, :image_id, :security_groups
|
118
118
|
attr_accessor :roles, :zone
|
119
119
|
attr_accessor :external_host, :external_ip
|
120
120
|
attr_accessor :internal_host, :internal_ip
|
@@ -122,11 +122,13 @@ module Rubber
|
|
122
122
|
attr_accessor :spot_instance_request_id
|
123
123
|
attr_accessor :platform
|
124
124
|
|
125
|
-
def initialize(name, domain, roles, instance_id, security_group_list=[])
|
125
|
+
def initialize(name, domain, roles, instance_id, image_type, image_id, security_group_list=[])
|
126
126
|
@name = name
|
127
127
|
@domain = domain
|
128
128
|
@roles = roles
|
129
129
|
@instance_id = instance_id
|
130
|
+
@image_type = image_type
|
131
|
+
@image_id = image_id
|
130
132
|
@security_groups = security_group_list
|
131
133
|
end
|
132
134
|
|
@@ -84,7 +84,7 @@ namespace :rubber do
|
|
84
84
|
put(File.read(secret), File.join(path, base, File.basename(secret)), :mode => "+r")
|
85
85
|
end
|
86
86
|
|
87
|
-
rsudo "cd #{path} && #{extra_env} rake rubber:config"
|
87
|
+
rsudo "cd #{path} && #{extra_env} #{fetch(:rake, 'rake')} rubber:config"
|
88
88
|
end
|
89
89
|
|
90
90
|
end
|
@@ -295,7 +295,7 @@ namespace :rubber do
|
|
295
295
|
|
296
296
|
logger.info "Instance #{instance_alias} created: #{instance_id}"
|
297
297
|
|
298
|
-
instance_item = Rubber::Configuration::InstanceItem.new(instance_alias, env.domain, instance_roles, instance_id, security_groups)
|
298
|
+
instance_item = Rubber::Configuration::InstanceItem.new(instance_alias, env.domain, instance_roles, instance_id, ami_type, ami, security_groups)
|
299
299
|
instance_item.spot_instance_request_id = request_id if create_spot_instance
|
300
300
|
rubber_instances.add(instance_item)
|
301
301
|
rubber_instances.save()
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "bundler/capistrano" if Rubber::Util.is_bundler?
|
2
|
+
|
1
3
|
namespace :rubber do
|
2
4
|
|
3
5
|
desc <<-DESC
|
@@ -257,26 +259,6 @@ namespace :rubber do
|
|
257
259
|
gem_helper(false)
|
258
260
|
end
|
259
261
|
|
260
|
-
desc <<-DESC
|
261
|
-
Install ruby gems defined in Gemfile
|
262
|
-
DESC
|
263
|
-
after "deploy:update_code", "rubber:install_bundler_gems" if Rubber::Util.is_bundler?
|
264
|
-
task :install_bundler_gems do
|
265
|
-
# copied from bundler/capistrano in bundler distro
|
266
|
-
bundle_dir = fetch(:bundle_dir, " #{fetch(:shared_path)}/bundle")
|
267
|
-
bundle_without = [*fetch(:bundle_without, [:development, :test])].compact
|
268
|
-
bundle_flags = fetch(:bundle_flags, "--deployment --quiet")
|
269
|
-
bundle_gemfile = fetch(:bundle_gemfile, "Gemfile")
|
270
|
-
bundle_cmd = fetch(:bundle_cmd, "bundle")
|
271
|
-
|
272
|
-
args = ["--gemfile #{fetch(:latest_release)}/#{bundle_gemfile}"]
|
273
|
-
args << "--path #{bundle_dir}" unless bundle_dir.to_s.empty?
|
274
|
-
args << bundle_flags.to_s
|
275
|
-
args << "--without #{bundle_without.join(" ")}" unless bundle_without.empty?
|
276
|
-
|
277
|
-
rsudo "#{bundle_cmd} install #{args.join(' ')}"
|
278
|
-
end
|
279
|
-
|
280
262
|
desc <<-DESC
|
281
263
|
Install ruby gems defined in the rails environment.rb
|
282
264
|
DESC
|
@@ -134,6 +134,7 @@ namespace :rubber do
|
|
134
134
|
# First half of the sync.
|
135
135
|
new_receiver = Rubber::Configuration::InstanceItem.new(old_receiver.name,
|
136
136
|
old_receiver.domain, old_receiver.roles, old_receiver.instance_id,
|
137
|
+
old_receiver.image_type, old_receiver.image_id,
|
137
138
|
old_receiver.security_groups)
|
138
139
|
new_receiver.static_ip = static_ip
|
139
140
|
rubber_instances.add(new_receiver)
|
@@ -153,6 +154,7 @@ namespace :rubber do
|
|
153
154
|
# Second half of the sync.
|
154
155
|
new_donor = Rubber::Configuration::InstanceItem.new(old_donor.name,
|
155
156
|
old_donor.domain, old_donor.roles, old_donor.instance_id,
|
157
|
+
old_donor.image_type, old_donor.image_id,
|
156
158
|
old_donor.security_groups)
|
157
159
|
rubber_instances.add(new_donor)
|
158
160
|
|
@@ -221,12 +221,12 @@ namespace :rubber do
|
|
221
221
|
|
222
222
|
task :_setup_raid_volume, :hosts => ic.external_ip do
|
223
223
|
rubber.sudo_script 'setup_raid_volume', <<-ENDSCRIPT
|
224
|
-
if ! grep -
|
224
|
+
if ! grep -qE '#{raid_spec['device']}|#{raid_spec['mount']}' /etc/fstab; then
|
225
225
|
if mount | grep -q '#{raid_spec['mount']}'; then
|
226
226
|
umount '#{raid_spec['mount']}'
|
227
227
|
fi
|
228
228
|
mv /etc/fstab /etc/fstab.bak
|
229
|
-
cat /etc/fstab.bak | grep -
|
229
|
+
cat /etc/fstab.bak | grep -vE '#{raid_spec['device']}|#{raid_spec['mount']}' > /etc/fstab
|
230
230
|
echo '#{raid_spec['device']} #{raid_spec['mount']} #{raid_spec['filesystem']} noatime 0 0 # rubber raid volume' >> /etc/fstab
|
231
231
|
|
232
232
|
# seems to help devices initialize, otherwise mdadm fails because
|
@@ -325,10 +325,16 @@ namespace :rubber do
|
|
325
325
|
for device in #{physical_volumes.join(' ')}
|
326
326
|
do
|
327
327
|
if ! pvdisplay $device >> /dev/null 2>&1; then
|
328
|
+
|
328
329
|
if grep $device /etc/mtab; then
|
329
330
|
umount $device
|
330
331
|
fi
|
331
332
|
|
333
|
+
if grep -q "$device" /etc/fstab; then
|
334
|
+
mv /etc/fstab /etc/fstab.bak
|
335
|
+
cat /etc/fstab.bak | grep -v "$device\\b" > /etc/fstab
|
336
|
+
fi
|
337
|
+
|
332
338
|
pvcreate $device
|
333
339
|
|
334
340
|
# See if the volume group already exists. If so, add the new physical volume to it.
|
data/lib/rubber/tasks/rubber.rb
CHANGED
@@ -40,7 +40,7 @@ namespace :rubber do
|
|
40
40
|
end
|
41
41
|
env = cfg.environment.bind(roles, instance_alias)
|
42
42
|
domain = env.domain
|
43
|
-
instance = Rubber::Configuration::InstanceItem.new(instance_alias, domain, role_items, 'dummyid', ['dummygroup'])
|
43
|
+
instance = Rubber::Configuration::InstanceItem.new(instance_alias, domain, role_items, 'dummyid', 'm1.small', 'ami-7000f019' ['dummygroup'])
|
44
44
|
instance.external_host = instance.full_name
|
45
45
|
instance.external_ip = "127.0.0.1"
|
46
46
|
instance.internal_host = instance.full_name
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: rubber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.
|
5
|
+
version: 1.14.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Matt Conway
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-06-02 00:00:00 -04:00
|
14
14
|
default_executable: vulcanize
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -466,12 +466,6 @@ files:
|
|
466
466
|
- lib/rubber/thread_safe_proxy.rb
|
467
467
|
- lib/rubber/util.rb
|
468
468
|
- rails/init.rb
|
469
|
-
- test/environment_test.rb
|
470
|
-
- test/generator_test.rb
|
471
|
-
- test/instance_test.rb
|
472
|
-
- test/test_helper.rb
|
473
|
-
- test/util_test.rb
|
474
|
-
- test/zerigo_test.rb
|
475
469
|
has_rdoc: true
|
476
470
|
homepage: http://github.com/wr0ngway/rubber
|
477
471
|
licenses: []
|
@@ -496,14 +490,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
496
490
|
requirements: []
|
497
491
|
|
498
492
|
rubyforge_project: rubber
|
499
|
-
rubygems_version: 1.
|
493
|
+
rubygems_version: 1.3.8
|
500
494
|
signing_key:
|
501
495
|
specification_version: 3
|
502
496
|
summary: A capistrano plugin for managing multi-instance deployments to the cloud (ec2)
|
503
|
-
test_files:
|
504
|
-
|
505
|
-
- test/generator_test.rb
|
506
|
-
- test/instance_test.rb
|
507
|
-
- test/test_helper.rb
|
508
|
-
- test/util_test.rb
|
509
|
-
- test/zerigo_test.rb
|
497
|
+
test_files: []
|
498
|
+
|
data/test/environment_test.rb
DELETED
@@ -1,137 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
gem 'test-unit'
|
3
|
-
|
4
|
-
require 'test/unit'
|
5
|
-
require 'tempfile'
|
6
|
-
require File.expand_path(File.join(__FILE__, '..', 'test_helper'))
|
7
|
-
|
8
|
-
class EnvironmentTest < Test::Unit::TestCase
|
9
|
-
include Rubber::Configuration
|
10
|
-
|
11
|
-
def test_known_roles
|
12
|
-
env = Rubber::Configuration::Environment.new("#{File.dirname(__FILE__)}/fixtures/basic")
|
13
|
-
assert_equal ['role1', 'role2'], env.known_roles, "list of know roles not correct"
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_env
|
17
|
-
env = Rubber::Configuration::Environment.new("#{File.dirname(__FILE__)}/fixtures/basic")
|
18
|
-
e = env.bind()
|
19
|
-
assert_equal 'val1', e['var1'], 'env not retrieving right val'
|
20
|
-
assert_equal 'val2', e['var2'], 'env not retrieving right val'
|
21
|
-
assert_equal 'val1', e.var1, 'env not retrieving right val for method missing'
|
22
|
-
assert_equal 'val2', e.var2, 'env not retrieving right val for method missing'
|
23
|
-
|
24
|
-
assert_equal 'val3', e.var3, 'env not retrieving right val for config in supplemental file'
|
25
|
-
|
26
|
-
e = env.bind('role1', 'nohost')
|
27
|
-
assert_equal 'val1', e['var1'], 'env not retrieving right val'
|
28
|
-
assert_equal 'role1val2', e['var2'], 'env not retrieving right val'
|
29
|
-
assert_equal 'val1', e.var1, 'env not retrieving right val for method missing'
|
30
|
-
assert_equal 'role1val2', e.var2, 'env not retrieving right val for method missing'
|
31
|
-
|
32
|
-
e = env.bind('role1', 'host1')
|
33
|
-
assert_equal 'val1', e['var1'], 'env not retrieving right val'
|
34
|
-
assert_equal 'host1val2', e['var2'], 'env not retrieving right val'
|
35
|
-
assert_equal 'val1', e.var1, 'env not retrieving right val for method missing'
|
36
|
-
assert_equal 'host1val2', e.var2, 'env not retrieving right val for method missing'
|
37
|
-
|
38
|
-
e = env.bind('norole', 'host1')
|
39
|
-
assert_equal 'val1', e['var1'], 'env not retrieving right val'
|
40
|
-
assert_equal 'host1val2', e['var2'], 'env not retrieving right val'
|
41
|
-
assert_equal 'val1', e.var1, 'env not retrieving right val for method missing'
|
42
|
-
assert_equal 'host1val2', e.var2, 'env not retrieving right val for method missing'
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_host_override
|
46
|
-
env = Rubber::Configuration::Environment.new("#{File.dirname(__FILE__)}/fixtures/basic")
|
47
|
-
e = env.bind('norole', 'host2')
|
48
|
-
assert_equal 'host2val3', e['var3'], 'env not retrieving right val'
|
49
|
-
assert_equal %w[host2val4a host2val4b], e['var4'], 'env not retrieving right val'
|
50
|
-
assert_equal [{'var51a' => 'val51a', 'var52a' => 'val52a'}, {'var53' => 'val53'}, {'var54' => 'val54'}], e['var5'], 'env not retrieving right val'
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_combine
|
54
|
-
env = Rubber::Configuration::Environment
|
55
|
-
assert_equal "new", env.combine("old", "new"), "Last should win for scalar combine"
|
56
|
-
assert_equal 5, env.combine(1, 5), "Last should win for scalar combine"
|
57
|
-
assert_equal [1, 2, 3, 4], env.combine([1, 2, 3], [3, 4]), "Arrays should be unioned when combined"
|
58
|
-
assert_equal({1 => "1", 2 => "2", 3 => "3", 4 => "4"}, env.combine({1 => "1", 2 => "2"}, {3 => "3", 4 => "4"}), "Maps should be unioned when combined")
|
59
|
-
assert_equal({1 => "2"}, env.combine({1 => "1"}, {1 => "2"}), "Last should win for scalars in maps when combined")
|
60
|
-
assert_equal({1 => {1 => "1", 2 => "2"}}, env.combine({1 => {1 => "1"}}, {1 => {2 => "2"}}), "Maps should be unioned recursively when combined")
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_expansion
|
64
|
-
env = Rubber::Configuration::Environment.new("#{File.dirname(__FILE__)}/fixtures/expansion")
|
65
|
-
e = env.bind()
|
66
|
-
assert_equal 'val1', e['var1']
|
67
|
-
assert_equal 'val2', e['var2']
|
68
|
-
assert_equal 'val1', e['var3']
|
69
|
-
assert_equal '4 is val2', e['var4']
|
70
|
-
assert_equal 'val1', e['var5']
|
71
|
-
assert_equal %w[lv1 lv2 val1], e['list1']
|
72
|
-
expected = {'mk1' => 'mv1', 'mk2' => 'mv2', 'mk3' => 'val2'}
|
73
|
-
e.map1.each do |k, v|
|
74
|
-
assert_equal expected[k], v
|
75
|
-
end
|
76
|
-
|
77
|
-
e = env.bind('role1', 'nohost')
|
78
|
-
assert_equal 'role1val1', e['var1']
|
79
|
-
assert_equal 'role1val1', e['var3']
|
80
|
-
assert_equal %w[lv1 lv2 role1val1 role1lv1 role1val2], e['list1']
|
81
|
-
|
82
|
-
e = env.bind('role1', 'host1')
|
83
|
-
assert_equal 'host1val1', e['var1']
|
84
|
-
assert_equal 'host1val1', e['var3']
|
85
|
-
assert_equal %w[lv1 lv2 host1val1 role1lv1 host1val2 host1lv1], e['list1'] # lists are additive
|
86
|
-
|
87
|
-
e = env.bind('norole', 'host1')
|
88
|
-
assert_equal 'host1val1', e['var1']
|
89
|
-
assert_equal 'host1val1', e['var3']
|
90
|
-
assert_equal %w[lv1 lv2 host1val1 host1lv1 host1val2], e['list1']
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_bool_expansion
|
94
|
-
env = Rubber::Configuration::Environment.new("#{File.dirname(__FILE__)}/fixtures/expansion")
|
95
|
-
e = env.bind()
|
96
|
-
assert_equal true, e['truevar']
|
97
|
-
assert_equal false, e['falsevar']
|
98
|
-
assert_equal true, e['truevar_exp']
|
99
|
-
assert 'true' != e['truevar_exp']
|
100
|
-
assert_equal false, e['falsevar_exp']
|
101
|
-
assert 'false' != e['falsevar_exp']
|
102
|
-
assert_equal 'true thing', e['faketruevar_exp']
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_secret_env
|
106
|
-
env = Rubber::Configuration::Environment.new("#{File.dirname(__FILE__)}/fixtures/basic")
|
107
|
-
e = env.bind()
|
108
|
-
assert_nil e['rubber_secret'], 'env should not have secret set'
|
109
|
-
|
110
|
-
fixture_dir = File.expand_path("#{File.dirname(__FILE__)}/fixtures/secret")
|
111
|
-
env = Rubber::Configuration::Environment.new(fixture_dir)
|
112
|
-
e = env.bind()
|
113
|
-
assert_equal "#{fixture_dir}/secret.yml", e['rubber_secret'], 'env should have secret set'
|
114
|
-
assert_equal "secret_val", e['secret_key'], 'env should have gotten setting from secret file'
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_nested_ref
|
118
|
-
env = Rubber::Configuration::Environment.new("#{File.dirname(__FILE__)}/fixtures/nested")
|
119
|
-
e = env.bind()
|
120
|
-
assert_equal 'val1', e.var1, 'env not retrieving right val'
|
121
|
-
assert_equal 'val3', e.var2.var3, 'env not retrieving right val'
|
122
|
-
assert_equal({'var5' => 'val5'}, e.var2.var4, 'env not retrieving right val')
|
123
|
-
assert_equal ['val6a', 'val6b'], e.var2.var6, 'env not retrieving right val'
|
124
|
-
assert_equal 'val1', e.var2.var7, 'env not retrieving right val'
|
125
|
-
assert_equal 'val3', e.var2.var8, 'env not retrieving right val'
|
126
|
-
assert_equal 'val5', e.var2.var9, 'env not retrieving right val'
|
127
|
-
end
|
128
|
-
|
129
|
-
def test_instances_in_expansion
|
130
|
-
config = Rubber::Configuration::get_configuration('test', "#{File.dirname(__FILE__)}/fixtures/instance_expansion")
|
131
|
-
config.environment
|
132
|
-
e = config.environment.bind()
|
133
|
-
e.stubs(:rubber_instances).returns(config.instance)
|
134
|
-
assert_equal "50.1.1.1", e['var1']
|
135
|
-
end
|
136
|
-
|
137
|
-
end
|
data/test/generator_test.rb
DELETED
@@ -1,370 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
gem 'test-unit'
|
3
|
-
|
4
|
-
require 'test/unit'
|
5
|
-
require 'tempfile'
|
6
|
-
require File.expand_path(File.join(__FILE__, '..', 'test_helper'))
|
7
|
-
|
8
|
-
class GeneratorTest < Test::Unit::TestCase
|
9
|
-
include Rubber::Configuration
|
10
|
-
|
11
|
-
def test_validate
|
12
|
-
assert_raise RuntimeError do
|
13
|
-
src = <<-SRC
|
14
|
-
hello
|
15
|
-
SRC
|
16
|
-
Generator.new(nil, nil, nil).transform(src)
|
17
|
-
end
|
18
|
-
assert_raise RuntimeError do
|
19
|
-
src = <<-SRC
|
20
|
-
<%
|
21
|
-
@read_cmd = 'ls'
|
22
|
-
%>
|
23
|
-
hello
|
24
|
-
SRC
|
25
|
-
Generator.new(nil, nil, nil).transform(src)
|
26
|
-
end
|
27
|
-
assert_raise RuntimeError do
|
28
|
-
src = <<-SRC
|
29
|
-
<%
|
30
|
-
@write_cmd = 'cat'
|
31
|
-
%>
|
32
|
-
hello
|
33
|
-
SRC
|
34
|
-
Generator.new(nil, nil, nil).transform(src)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_simple_transform
|
39
|
-
out_file = Tempfile.new('testsimple')
|
40
|
-
src = <<-SRC
|
41
|
-
<%
|
42
|
-
@path = '#{out_file.path}'
|
43
|
-
%>
|
44
|
-
hello
|
45
|
-
SRC
|
46
|
-
|
47
|
-
Generator.new(nil, nil, nil).transform(src)
|
48
|
-
assert File.exists?(out_file.path), "transform did not generate an output file"
|
49
|
-
assert_equal "hello", File.read(out_file.path).strip, "transformed contents are incorrect"
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_additive_transform
|
53
|
-
out_file = Tempfile.new('testadditive')
|
54
|
-
open(out_file.path, 'w') { |f| f.write("howdy\n")}
|
55
|
-
src = <<-SRC
|
56
|
-
<%
|
57
|
-
@path = '#{out_file.path}'
|
58
|
-
@additive = ['#start', '#end']
|
59
|
-
%>
|
60
|
-
hello
|
61
|
-
SRC
|
62
|
-
|
63
|
-
Generator.new(nil, nil, nil).transform(src)
|
64
|
-
assert File.exists?(out_file.path), "transform did not generate an output file"
|
65
|
-
assert_equal "howdy\n#start \n hello\n#end", File.read(out_file.path).strip, "transformed contents are incorrect"
|
66
|
-
|
67
|
-
src += "neato\n"
|
68
|
-
open(out_file.path, 'a') { |f| f.write("again\n")}
|
69
|
-
Generator.new(nil, nil, nil).transform(src)
|
70
|
-
assert File.exists?(out_file.path), "transform did not generate an output file"
|
71
|
-
assert_equal "howdy\n#start \n hello\nneato\n#end\nagain", File.read(out_file.path).strip, "transformed contents are incorrect"
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_post_command
|
75
|
-
out_file = Tempfile.new('testpost')
|
76
|
-
post_file = out_file.path + '.post'
|
77
|
-
src = <<-SRC
|
78
|
-
<%
|
79
|
-
@path = '#{out_file.path}'
|
80
|
-
@post = 'touch #{post_file}'
|
81
|
-
%>
|
82
|
-
hello
|
83
|
-
SRC
|
84
|
-
|
85
|
-
Generator.new(nil, nil, nil).transform(src)
|
86
|
-
assert File.exists?(out_file.path), "transform did not generate an output file"
|
87
|
-
assert File.exists?(post_file), "transform did not execute post"
|
88
|
-
assert_equal "hello", File.read(out_file.path).strip, "transformed contents are incorrect"
|
89
|
-
|
90
|
-
FileUtils.rm_f(post_file)
|
91
|
-
Generator.new(nil, nil, nil).transform(src)
|
92
|
-
assert File.exists?(out_file.path), "transform did not generate an output file"
|
93
|
-
assert ! File.exists?(post_file), "post should not have been executed as dest file unchanged"
|
94
|
-
assert_equal "hello", File.read(out_file.path).strip, "transformed contents are incorrect"
|
95
|
-
|
96
|
-
FileUtils.rm_f(post_file)
|
97
|
-
gen = Generator.new(nil, nil, nil)
|
98
|
-
gen.force = true
|
99
|
-
gen.transform(src)
|
100
|
-
assert File.exists?(out_file.path), "transform did not generate an output file"
|
101
|
-
assert File.exists?(post_file), "forced transform did not execute post"
|
102
|
-
assert_equal "hello", File.read(out_file.path).strip, "transformed contents are incorrect"
|
103
|
-
|
104
|
-
FileUtils.rm_f(post_file)
|
105
|
-
gen = Generator.new(nil, nil, nil)
|
106
|
-
gen.no_post = true
|
107
|
-
gen.transform(src + "there")
|
108
|
-
assert File.exists?(out_file.path), "transform did not generate an output file"
|
109
|
-
assert ! File.exists?(post_file), "post should not have been generated for no_post option"
|
110
|
-
assert_equal "hello\nthere", File.read(out_file.path).strip, "transformed contents are incorrect"
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_stop_on_error
|
114
|
-
out_file = Tempfile.new('teststoponerr')
|
115
|
-
post_file = out_file.path + '.post'
|
116
|
-
src = <<-SRC
|
117
|
-
<%
|
118
|
-
@path = '#{out_file.path}'
|
119
|
-
@post = 'badcommand; touch #{post_file}'
|
120
|
-
%>
|
121
|
-
hello
|
122
|
-
SRC
|
123
|
-
|
124
|
-
g = Generator.new(nil, nil, nil)
|
125
|
-
g.transform(src)
|
126
|
-
assert File.exists?(out_file.path), "transform did not generate an output file"
|
127
|
-
assert File.exists?(post_file), "transform did not execute post"
|
128
|
-
assert_equal "hello", File.read(out_file.path).strip, "transformed contents are incorrect"
|
129
|
-
|
130
|
-
FileUtils.rm_f(post_file)
|
131
|
-
g = Generator.new(nil, nil, nil)
|
132
|
-
g.stop_on_error_cmd = "function error_exit { exit 99; }; trap error_exit ERR"
|
133
|
-
g.transform(src)
|
134
|
-
assert File.exists?(out_file.path), "transform did not generate an output file"
|
135
|
-
assert ! File.exists?(post_file), "post should not have been executed as comes after error"
|
136
|
-
end
|
137
|
-
|
138
|
-
def test_pipe_command
|
139
|
-
out_file = Tempfile.new('testpipe')
|
140
|
-
src = <<-SRC
|
141
|
-
<%
|
142
|
-
@read_cmd = 'echo hi'
|
143
|
-
@write_cmd = 'cat > #{out_file.path}'
|
144
|
-
%>
|
145
|
-
hello
|
146
|
-
SRC
|
147
|
-
|
148
|
-
Generator.new(nil, nil, nil).transform(src)
|
149
|
-
assert File.exists?(out_file.path), "transform did not generate to write_cmd"
|
150
|
-
assert_equal "hello", File.read(out_file.path).strip, "transformed contents are incorrect"
|
151
|
-
|
152
|
-
FileUtils.rm_f(out_file.path)
|
153
|
-
src = <<-SRC
|
154
|
-
<%
|
155
|
-
@read_cmd = 'echo hi'
|
156
|
-
@write_cmd = 'cat > #{out_file.path}'
|
157
|
-
@additive = ['#start', '#end']
|
158
|
-
%>
|
159
|
-
hello
|
160
|
-
SRC
|
161
|
-
|
162
|
-
Generator.new(nil, nil, nil).transform(src)
|
163
|
-
assert File.exists?(out_file.path), "transform did not generate to write_cmd"
|
164
|
-
assert_equal "hi\n#start \n hello\n#end", File.read(out_file.path).strip, "transformed contents are incorrect"
|
165
|
-
|
166
|
-
FileUtils.rm_f(out_file.path)
|
167
|
-
src = <<-SRC
|
168
|
-
<%
|
169
|
-
@read_cmd = 'echo "#start\nthere\n#end\nhi\n"'
|
170
|
-
@write_cmd = 'cat > #{out_file.path}'
|
171
|
-
@additive = ['#start', '#end']
|
172
|
-
%>
|
173
|
-
hello
|
174
|
-
SRC
|
175
|
-
|
176
|
-
Generator.new(nil, nil, nil).transform(src)
|
177
|
-
assert File.exists?(out_file.path), "transform did not generate to write_cmd"
|
178
|
-
assert_equal "#start \n hello\n#end\nhi", File.read(out_file.path).strip, "transformed contents are incorrect"
|
179
|
-
|
180
|
-
FileUtils.rm_f(out_file.path)
|
181
|
-
src = <<-SRC
|
182
|
-
<%
|
183
|
-
@read_cmd = 'echo hi'
|
184
|
-
@write_cmd = 'badcommand'
|
185
|
-
%>
|
186
|
-
hello
|
187
|
-
SRC
|
188
|
-
|
189
|
-
assert_raises do
|
190
|
-
Generator.new(nil, nil, nil).transform(src)
|
191
|
-
end
|
192
|
-
|
193
|
-
end
|
194
|
-
|
195
|
-
def list_dir(dir)
|
196
|
-
l = Dir.entries(dir)
|
197
|
-
l.delete_if {|d| d =~ /(^\.+$)|\.bak$/}
|
198
|
-
end
|
199
|
-
|
200
|
-
def test_scoping
|
201
|
-
out_dir = "#{Dir::tmpdir}/test_rubber_scoping"
|
202
|
-
FileUtils.rm_rf(out_dir)
|
203
|
-
assert ! File.exists?(out_dir)
|
204
|
-
|
205
|
-
g = Generator.new("#{File.dirname(__FILE__)}/fixtures/basic", nil, nil, :out_dir => out_dir)
|
206
|
-
g.run()
|
207
|
-
assert File.directory?(out_dir), "scoped transform did not create dir"
|
208
|
-
assert_equal ['bar.conf', 'foo.conf'], list_dir(out_dir), "scoped transform did not create correct files"
|
209
|
-
assert_equal "common", File.read("#{out_dir}/foo.conf").strip, "transformed contents are incorrect"
|
210
|
-
assert_equal "common", File.read("#{out_dir}/bar.conf").strip, "transformed contents are incorrect"
|
211
|
-
|
212
|
-
FileUtils.rm_rf(out_dir)
|
213
|
-
assert ! File.exists?(out_dir)
|
214
|
-
|
215
|
-
g = Generator.new("#{File.dirname(__FILE__)}/fixtures/basic", ['role1'], nil, :out_dir => out_dir)
|
216
|
-
g.run()
|
217
|
-
assert File.directory?(out_dir), "scoped transform did not create dir"
|
218
|
-
assert_equal ['bar.conf', 'foo.conf'], list_dir(out_dir), "scoped transform did not create correct files"
|
219
|
-
assert_equal "role1", File.read("#{out_dir}/foo.conf").strip, "transformed contents are incorrect"
|
220
|
-
assert_equal "common", File.read("#{out_dir}/bar.conf").strip, "transformed contents are incorrect"
|
221
|
-
|
222
|
-
FileUtils.rm_rf(out_dir)
|
223
|
-
assert ! File.exists?(out_dir)
|
224
|
-
|
225
|
-
g = Generator.new("#{File.dirname(__FILE__)}/fixtures/basic", ['role2', 'role1'], nil, :out_dir => out_dir)
|
226
|
-
g.run()
|
227
|
-
assert File.directory?(out_dir), "scoped transform did not create dir"
|
228
|
-
assert_equal ['bar.conf', 'foo.conf'], list_dir(out_dir), "scoped transform did not create correct files"
|
229
|
-
assert_equal "role2", File.read("#{out_dir}/foo.conf").strip, "transformed contents are incorrect"
|
230
|
-
assert_equal "common", File.read("#{out_dir}/bar.conf").strip, "transformed contents are incorrect"
|
231
|
-
|
232
|
-
FileUtils.rm_rf(out_dir)
|
233
|
-
assert ! File.exists?(out_dir)
|
234
|
-
|
235
|
-
g = Generator.new("#{File.dirname(__FILE__)}/fixtures/basic", ['role1'], 'host1', :out_dir => out_dir)
|
236
|
-
g.run()
|
237
|
-
assert File.directory?(out_dir), "scoped transform did not create dir"
|
238
|
-
assert_equal ['bar.conf', 'foo.conf'], list_dir(out_dir), "scoped transform did not create correct files"
|
239
|
-
assert_equal "host1", File.read("#{out_dir}/foo.conf").strip, "transformed contents are incorrect"
|
240
|
-
assert_equal "common", File.read("#{out_dir}/bar.conf").strip, "transformed contents are incorrect"
|
241
|
-
|
242
|
-
|
243
|
-
FileUtils.rm_rf(out_dir)
|
244
|
-
end
|
245
|
-
|
246
|
-
def test_ordering_of_additive
|
247
|
-
out_dir = "#{Dir::tmpdir}/test_rubber_ordering"
|
248
|
-
FileUtils.rm_rf(out_dir)
|
249
|
-
assert ! File.exists?(out_dir)
|
250
|
-
|
251
|
-
g = Generator.new("#{File.dirname(__FILE__)}/fixtures/generator_order", ['role2', 'role1'], 'host1', :out_dir => out_dir)
|
252
|
-
g.run()
|
253
|
-
assert File.directory?(out_dir), "transform did not create dir"
|
254
|
-
assert_equal ['out.conf'], list_dir(out_dir), "transform did not create correct file"
|
255
|
-
result = <<DATA
|
256
|
-
# common first start
|
257
|
-
first
|
258
|
-
# common first end
|
259
|
-
# common last start
|
260
|
-
last
|
261
|
-
# common last end
|
262
|
-
# role1 first start
|
263
|
-
role1 first
|
264
|
-
# role1 first end
|
265
|
-
# role1 last start
|
266
|
-
role1 last
|
267
|
-
# role1 last end
|
268
|
-
# role2 first start
|
269
|
-
role2 first
|
270
|
-
# role2 first end
|
271
|
-
# role2 last start
|
272
|
-
role2 last
|
273
|
-
# role2 last end
|
274
|
-
# host1 first start
|
275
|
-
host1 first
|
276
|
-
# host1 first end
|
277
|
-
# host1 last start
|
278
|
-
host1 last
|
279
|
-
# host1 last end
|
280
|
-
DATA
|
281
|
-
assert_equal result.strip, File.read("#{out_dir}/out.conf").strip, "transformed contents are incorrect"
|
282
|
-
|
283
|
-
FileUtils.rm_rf(out_dir)
|
284
|
-
end
|
285
|
-
|
286
|
-
def test_file_pattern
|
287
|
-
out_dir = "#{Dir::tmpdir}/test_rubber_scoping"
|
288
|
-
FileUtils.rm_rf(out_dir)
|
289
|
-
assert ! File.exists?(out_dir)
|
290
|
-
|
291
|
-
g = Generator.new("#{File.dirname(__FILE__)}/fixtures/basic", nil, nil, :out_dir => out_dir)
|
292
|
-
g.file_pattern = 'foo\.conf'
|
293
|
-
g.run()
|
294
|
-
assert File.directory?(out_dir), "scoped transform did not create dir"
|
295
|
-
assert_equal ['foo.conf'], list_dir(out_dir), "scoped transform did not create correct files"
|
296
|
-
assert_equal "common", File.read("#{out_dir}/foo.conf").strip, "transformed contents are incorrect"
|
297
|
-
end
|
298
|
-
|
299
|
-
def test_perms
|
300
|
-
user = ENV['USER']
|
301
|
-
group = `groups`.split.last
|
302
|
-
out_file = Tempfile.new('testperms')
|
303
|
-
src = <<-SRC
|
304
|
-
<%
|
305
|
-
@path = '#{out_file.path}'
|
306
|
-
@perms = 0777
|
307
|
-
@owner = '#{user}'
|
308
|
-
@group = '#{group}'
|
309
|
-
%>
|
310
|
-
hello
|
311
|
-
SRC
|
312
|
-
|
313
|
-
Generator.new(nil, nil, nil).transform(src)
|
314
|
-
assert File.exists?(out_file.path), "transform did not generate an output file"
|
315
|
-
assert_equal "100777", sprintf("%o", File.stat(out_file.path).mode), "transformed permissions are incorrect"
|
316
|
-
assert_equal Etc.getpwnam(user).uid, File.stat(out_file.path).uid, "transformed owner is incorrect"
|
317
|
-
assert_equal Etc.getgrnam(group).gid, File.stat(out_file.path).gid, "transformed group is incorrect"
|
318
|
-
end
|
319
|
-
|
320
|
-
def test_skip
|
321
|
-
out_file = Tempfile.new('testskip')
|
322
|
-
File.delete(out_file.path)
|
323
|
-
src = <<-SRC
|
324
|
-
<%
|
325
|
-
@skip = true
|
326
|
-
@path = '#{out_file.path}'
|
327
|
-
%>
|
328
|
-
hello
|
329
|
-
SRC
|
330
|
-
|
331
|
-
Generator.new(nil, nil, nil).transform(src)
|
332
|
-
assert ! File.exists?(out_file.path), "transform didn't skip generation of an output file"
|
333
|
-
end
|
334
|
-
|
335
|
-
def test_backup
|
336
|
-
out_file = Tempfile.new('testbak')
|
337
|
-
assert ! File.exists?("#{out_file.path}.bak")
|
338
|
-
File.open(out_file.path, 'w') {|f| f.write("howdy")}
|
339
|
-
|
340
|
-
src = <<-SRC
|
341
|
-
<%
|
342
|
-
@path = '#{out_file.path}'
|
343
|
-
%>
|
344
|
-
hello <%= Time.now.to_f %>
|
345
|
-
SRC
|
346
|
-
|
347
|
-
Generator.new(nil, nil, nil).transform(src)
|
348
|
-
|
349
|
-
assert File.exists?("#{out_file.path}.bak"), "transform didn't generate backup"
|
350
|
-
assert_match /howdy/, File.read("#{out_file.path}.bak"), "transform backup has wrong contents"
|
351
|
-
end
|
352
|
-
|
353
|
-
def test_no_backup
|
354
|
-
out_file = Tempfile.new('testnobak')
|
355
|
-
assert ! File.exists?("#{out_file.path}.bak")
|
356
|
-
File.open(out_file.path, 'w') {|f| f.write("howdy")}
|
357
|
-
src = <<-SRC
|
358
|
-
<%
|
359
|
-
@path = '#{out_file.path}'
|
360
|
-
@backup = false
|
361
|
-
%>
|
362
|
-
hello <%= Time.now.to_f %>
|
363
|
-
SRC
|
364
|
-
|
365
|
-
Generator.new(nil, nil, nil).transform(src)
|
366
|
-
|
367
|
-
assert ! File.exists?("#{out_file.path}.bak"), "transform shouldn't generate backup"
|
368
|
-
end
|
369
|
-
|
370
|
-
end
|
data/test/instance_test.rb
DELETED
@@ -1,180 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
gem 'test-unit'
|
3
|
-
|
4
|
-
require 'test/unit'
|
5
|
-
require 'tempfile'
|
6
|
-
require File.expand_path(File.join(__FILE__, '..', 'test_helper'))
|
7
|
-
|
8
|
-
class InstanceTest < Test::Unit::TestCase
|
9
|
-
include Rubber::Configuration
|
10
|
-
|
11
|
-
def setup
|
12
|
-
@instance = Instance.new(Tempfile.new('testforrole').path)
|
13
|
-
@instance.add(@i1 = InstanceItem.new('host1', 'domain.com', [RoleItem.new('role1')], ''))
|
14
|
-
@instance.add(@i2 = InstanceItem.new('host2', 'domain.com', [RoleItem.new('role1')], ''))
|
15
|
-
@instance.add(@i3 = InstanceItem.new('host3', 'domain.com', [RoleItem.new('role2')], ''))
|
16
|
-
@instance.add(@i4 = InstanceItem.new('host4', 'domain.com', [RoleItem.new('role2', 'primary' => true)], ''))
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_for_role
|
20
|
-
assert_equal 2, @instance.for_role('role1').size, 'not finding correct instances for role'
|
21
|
-
assert_equal 2, @instance.for_role('role2').size, 'not finding correct instances for role'
|
22
|
-
assert_equal 1, @instance.for_role('role2', {}).size, 'not finding correct instances for role'
|
23
|
-
assert_equal @i3, @instance.for_role('role2', {}).first, 'not finding correct instances for role'
|
24
|
-
assert_equal 1, @instance.for_role('role2', 'primary' => true).size, 'not finding correct instances for role'
|
25
|
-
assert_equal @i4, @instance.for_role('role2', 'primary' => true).first, 'not finding correct instances for role'
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_unfiltered
|
29
|
-
ENV['FILTER'] = nil
|
30
|
-
ENV['FILTER_ROLES'] = nil
|
31
|
-
setup
|
32
|
-
assert_equal 4, @instance.filtered().size, 'should not filter for empty FILTER(_ROLES)'
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
|
-
def test_filtered
|
37
|
-
ENV['FILTER_ROLES'] = nil
|
38
|
-
ENV['FILTER'] = 'host1'
|
39
|
-
setup
|
40
|
-
assert_equal [@i1], @instance.filtered(), 'should have only filtered host'
|
41
|
-
|
42
|
-
ENV['FILTER'] = 'host2 , host4'
|
43
|
-
setup
|
44
|
-
assert_equal [@i2, @i4], @instance.filtered(), 'should have only filtered hosts'
|
45
|
-
|
46
|
-
ENV['FILTER'] = '-host2'
|
47
|
-
setup
|
48
|
-
assert_equal [@i1, @i3, @i4], @instance.filtered(), 'should not have negated hosts'
|
49
|
-
|
50
|
-
ENV['FILTER'] = 'host1,host2,-host2'
|
51
|
-
setup
|
52
|
-
assert_equal [@i1], @instance.filtered(), 'should not have negated hosts'
|
53
|
-
|
54
|
-
ENV['FILTER'] = 'host1~host3'
|
55
|
-
setup
|
56
|
-
assert_equal [@i1, @i2, @i3], @instance.filtered(), 'should allow range in filter'
|
57
|
-
|
58
|
-
ENV['FILTER'] = '-host1~-host3'
|
59
|
-
setup
|
60
|
-
assert_equal [@i4], @instance.filtered(), 'should allow negative range in filter'
|
61
|
-
|
62
|
-
ENV['FILTER'] = '-host1'
|
63
|
-
ENV['FILTER_ROLES'] = 'role1'
|
64
|
-
setup
|
65
|
-
assert_equal [@i2], @instance.filtered(), 'should not have negated roles'
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_filtered_roles
|
69
|
-
ENV['FILTER'] = nil
|
70
|
-
ENV['FILTER_ROLES'] = 'role1'
|
71
|
-
setup
|
72
|
-
assert_equal [@i1, @i2], @instance.filtered(), 'should have only filtered roles'
|
73
|
-
|
74
|
-
ENV['FILTER_ROLES'] = 'role1 , role2'
|
75
|
-
setup
|
76
|
-
assert_equal [@i1, @i2, @i3, @i4], @instance.filtered(), 'should have only filtered roles'
|
77
|
-
|
78
|
-
ENV['FILTER_ROLES'] = '-role1'
|
79
|
-
setup
|
80
|
-
assert_equal [@i3, @i4], @instance.filtered(), 'should not have negated roles'
|
81
|
-
|
82
|
-
ENV['FILTER_ROLES'] = 'role1~role2'
|
83
|
-
setup
|
84
|
-
assert_equal [@i1, @i2, @i3, @i4], @instance.filtered(), 'should allow range in filter'
|
85
|
-
|
86
|
-
ENV['FILTER_ROLES'] = '-role1~-role2'
|
87
|
-
setup
|
88
|
-
assert_equal [], @instance.filtered(), 'should allow negative range in filter'
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_validate_filters
|
92
|
-
ENV['FILTER'] = "nohost"
|
93
|
-
setup
|
94
|
-
assert_raises do
|
95
|
-
@instance.filtered()
|
96
|
-
end
|
97
|
-
|
98
|
-
ENV['FILTER'] = "-nohost"
|
99
|
-
setup
|
100
|
-
assert_raises do
|
101
|
-
@instance.filtered()
|
102
|
-
end
|
103
|
-
|
104
|
-
ENV['FILTER_ROLES'] = "norole"
|
105
|
-
setup
|
106
|
-
assert_raises do
|
107
|
-
@instance.filtered()
|
108
|
-
end
|
109
|
-
|
110
|
-
ENV['FILTER_ROLES'] = "-norole"
|
111
|
-
setup
|
112
|
-
assert_raises do
|
113
|
-
@instance.filtered()
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_equality
|
118
|
-
assert RoleItem.new('a').eql?(RoleItem.new('a'))
|
119
|
-
assert RoleItem.new('a') == RoleItem.new('a')
|
120
|
-
assert_equal RoleItem.new('a').hash, RoleItem.new('a').hash
|
121
|
-
|
122
|
-
assert ! RoleItem.new('a').eql?(RoleItem.new('b'))
|
123
|
-
assert RoleItem.new('a') != RoleItem.new('b')
|
124
|
-
assert_not_equal RoleItem.new('a').hash, RoleItem.new('b').hash
|
125
|
-
|
126
|
-
assert RoleItem.new('a', {'a' => 'b', 1 => true}).eql?(RoleItem.new('a', {'a' => 'b', 1 => true}))
|
127
|
-
assert RoleItem.new('a', {'a' => 'b', 1 => true}) == RoleItem.new('a', {'a' => 'b', 1 => true})
|
128
|
-
assert_equal RoleItem.new('a', {'a' => 'b', 1 => true}).hash, RoleItem.new('a', {'a' => 'b', 1 => true}).hash
|
129
|
-
|
130
|
-
assert ! RoleItem.new('a', {'a' => 'b', 1 => true}).eql?(RoleItem.new('a', {'a' => 'b', 2 => true}))
|
131
|
-
assert RoleItem.new('a', {'a' => 'b', 1 => true}) != RoleItem.new('a', {'a' => 'b', 2 => true})
|
132
|
-
assert_equal RoleItem.new('a', {'a' => 'b', 1 => true}).hash, RoleItem.new('a', {'a' => 'b', 2 => true}).hash
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_role_parse
|
136
|
-
assert_equal RoleItem.new('a'), RoleItem.parse("a")
|
137
|
-
assert_equal RoleItem.new('a', {'b' => 'c'}), RoleItem.parse("a:b=c")
|
138
|
-
assert_equal RoleItem.new('a', {'b' => 'c', 'd' => 'e'}), RoleItem.parse("a:b=c;d=e")
|
139
|
-
assert_equal RoleItem.new('a', {'b' => true, 'c' => false}), RoleItem.parse("a:b=true;c=false")
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_role_to_s
|
143
|
-
assert_equal "a", RoleItem.new('a').to_s
|
144
|
-
assert_equal "a:b=c", RoleItem.new('a', {'b' => 'c'}).to_s
|
145
|
-
assert_equal "a:b=c;d=e", RoleItem.new('a', {'b' => 'c', 'd' => 'e'}).to_s
|
146
|
-
assert_equal "a:b=true;c=false", RoleItem.new('a', {'b' => true, 'c' => false}).to_s
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_expand_role_dependencies
|
150
|
-
deps = { RoleItem.new('a') => RoleItem.new('b'),
|
151
|
-
RoleItem.new('b') => RoleItem.new('c'),
|
152
|
-
RoleItem.new('c') => [RoleItem.new('d'), RoleItem.new('a')]}
|
153
|
-
roles = [RoleItem.new('a'),RoleItem.new('b'),RoleItem.new('c'),RoleItem.new('d')]
|
154
|
-
assert_equal roles, RoleItem.expand_role_dependencies(RoleItem.new('a'), deps).sort
|
155
|
-
assert_equal roles, RoleItem.expand_role_dependencies([RoleItem.new('a'), RoleItem.new('d')], deps).sort
|
156
|
-
|
157
|
-
deps = { RoleItem.new('mysql_master') => RoleItem.new('db', {'primary' => true}),
|
158
|
-
RoleItem.new('mysql_slave') => RoleItem.new('db'),
|
159
|
-
RoleItem.new('db', {'primary' => true}) => RoleItem.new('mysql_master'),
|
160
|
-
RoleItem.new('db') => RoleItem.new('mysql_slave')
|
161
|
-
}
|
162
|
-
assert_equal [RoleItem.new('db', 'primary' => true), RoleItem.new('mysql_master')],
|
163
|
-
RoleItem.expand_role_dependencies(RoleItem.new('mysql_master'), deps).sort
|
164
|
-
assert_equal [RoleItem.new('db', 'primary' => true), RoleItem.new('mysql_master')],
|
165
|
-
RoleItem.expand_role_dependencies(RoleItem.new('db', 'primary' => true), deps).sort
|
166
|
-
assert_equal [RoleItem.new('db'), RoleItem.new('mysql_slave')],
|
167
|
-
RoleItem.expand_role_dependencies(RoleItem.new('mysql_slave'), deps).sort
|
168
|
-
assert_equal [RoleItem.new('db'), RoleItem.new('mysql_slave')],
|
169
|
-
RoleItem.expand_role_dependencies(RoleItem.new('db'), deps).sort
|
170
|
-
|
171
|
-
end
|
172
|
-
|
173
|
-
def test_common_dependencies
|
174
|
-
deps = { RoleItem.new('a') => RoleItem.new('b'),
|
175
|
-
RoleItem.new('common') => [RoleItem.new('c')]}
|
176
|
-
roles = [RoleItem.new('a'), RoleItem.new('b'), RoleItem.new('c')]
|
177
|
-
assert_equal roles, RoleItem.expand_role_dependencies(RoleItem.new('a'), deps).sort
|
178
|
-
end
|
179
|
-
|
180
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
$:.unshift "#{File.dirname(__FILE__)}/../lib"
|
2
|
-
|
3
|
-
require 'rubber'
|
4
|
-
Rubber::initialize(File.dirname(__FILE__), 'test')
|
5
|
-
|
6
|
-
require 'rubygems'
|
7
|
-
require 'mocha'
|
8
|
-
require 'pp'
|
9
|
-
require 'fakeweb'
|
10
|
-
FakeWeb.allow_net_connect = false
|
11
|
-
|
12
|
-
def fakeweb_fixture(name)
|
13
|
-
return File.read("#{File.dirname(__FILE__)}/fixtures/fakeweb/#{name}")
|
14
|
-
end
|
data/test/util_test.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
gem 'test-unit'
|
3
|
-
|
4
|
-
require 'test/unit'
|
5
|
-
require File.expand_path(File.join(__FILE__, '..', 'test_helper'))
|
6
|
-
|
7
|
-
class UtilTest < Test::Unit::TestCase
|
8
|
-
|
9
|
-
def test_stringify
|
10
|
-
assert_equal "", Rubber::Util::stringify(nil)
|
11
|
-
assert_equal "hi", Rubber::Util::stringify("hi")
|
12
|
-
assert_equal "1", Rubber::Util::stringify(1)
|
13
|
-
assert_equal "3.4", Rubber::Util::stringify(3.4)
|
14
|
-
assert_equal ["1", "2", "r"], Rubber::Util::stringify([1, 2, "r"])
|
15
|
-
assert_equal({"1" => "2", "three" => "four"}, Rubber::Util::stringify({1 => 2, :three => "four"}))
|
16
|
-
assert_equal [{"3" => "4"}], Rubber::Util::stringify([{3 => 4}])
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
data/test/zerigo_test.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
gem 'test-unit'
|
3
|
-
|
4
|
-
require 'test/unit'
|
5
|
-
require File.expand_path(File.join(__FILE__, '..', 'test_helper'))
|
6
|
-
require 'rubber/dns'
|
7
|
-
require 'rubber/dns/zerigo'
|
8
|
-
require 'rexml/document'
|
9
|
-
|
10
|
-
class ZerigoTest < Test::Unit::TestCase
|
11
|
-
|
12
|
-
def setup
|
13
|
-
env = Rubber::Configuration::Environment::BoundEnv.new({'dns_providers' => {'zerigo' => {'email' => 'foo@bar.com', 'token' => 'testtoken'}}}, nil, nil)
|
14
|
-
@dns = Rubber::Dns::Zerigo.new(env)
|
15
|
-
FakeWeb.register_uri(:get,
|
16
|
-
"https://foo%40bar.com:testtoken@ns.zerigo.com/api/1.1/zones.xml",
|
17
|
-
:body => fakeweb_fixture('zerigo/get_zones.xml'))
|
18
|
-
@domain = "example1.com"
|
19
|
-
@zone = ::Zerigo::DNS::Zone.find_or_create(@domain)
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_find_records
|
23
|
-
hosts_xml = fakeweb_fixture('zerigo/get_hosts.xml')
|
24
|
-
FakeWeb.register_uri(:get,
|
25
|
-
"https://foo%40bar.com:testtoken@ns.zerigo.com/api/1.1/hosts.xml?zone_id=1",
|
26
|
-
:body => hosts_xml)
|
27
|
-
records = @dns.find_host_records(:host => '*', :domain => 'example1.com')
|
28
|
-
assert_equal 2, records.size
|
29
|
-
assert_equal({:type=>"A", :host=>"host1", :domain=>"example1.com", :id=>1, :data=>"172.16.16.1"}, records.first)
|
30
|
-
|
31
|
-
doc = REXML::Document.new(hosts_xml)
|
32
|
-
doc.root.elements.delete(1)
|
33
|
-
hosts_xml_single = doc.to_s
|
34
|
-
FakeWeb.register_uri(:get,
|
35
|
-
"https://foo%40bar.com:testtoken@ns.zerigo.com/api/1.1/hosts.xml?fqdn=example1.com&zone_id=1",
|
36
|
-
:body => hosts_xml_single)
|
37
|
-
records = @dns.find_host_records(:host => '', :domain => 'example1.com')
|
38
|
-
assert_equal 1, records.size
|
39
|
-
assert_equal '', records.first[:host]
|
40
|
-
|
41
|
-
doc = REXML::Document.new(hosts_xml)
|
42
|
-
doc.root.elements.delete(2)
|
43
|
-
hosts_xml_single = doc.to_s
|
44
|
-
FakeWeb.register_uri(:get,
|
45
|
-
"https://foo%40bar.com:testtoken@ns.zerigo.com/api/1.1/hosts.xml?fqdn=host1.example1.com&zone_id=1",
|
46
|
-
:body => hosts_xml_single)
|
47
|
-
records = @dns.find_host_records(:host => 'host1', :domain => 'example1.com')
|
48
|
-
assert_equal 1, records.size
|
49
|
-
assert_equal 'host1', records.first[:host]
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_create_record
|
53
|
-
params = {:host => 'newhost', :domain => 'example1.com', :data => '1.1.1.1', :type => 'A', :ttl => '333'}
|
54
|
-
dest_params = {'hostname' => 'newhost', 'data' => '1.1.1.1', 'host_type' => 'A', 'ttl' => '333', :zone_id => @zone.id}
|
55
|
-
|
56
|
-
::Zerigo::DNS::Host.expects(:create).with(dest_params)
|
57
|
-
|
58
|
-
@dns.create_host_record(params)
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_destroy_record
|
62
|
-
params = {:host => 'host1', :domain => 'example1.com'}
|
63
|
-
|
64
|
-
FakeWeb.register_uri(:get,
|
65
|
-
"https://foo%40bar.com:testtoken@ns.zerigo.com/api/1.1/hosts.xml?fqdn=host1.example1.com&zone_id=1",
|
66
|
-
:body => fakeweb_fixture('zerigo/host1.xml'))
|
67
|
-
FakeWeb.register_uri(:delete,
|
68
|
-
"https://foo%40bar.com:testtoken@ns.zerigo.com/api/1.1/hosts/1.xml",
|
69
|
-
:body => "")
|
70
|
-
|
71
|
-
@dns.destroy_host_record(params)
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_update_record
|
75
|
-
params = {:host => 'host1', :domain => 'example1.com', :data => "1.1.1.1"}
|
76
|
-
new = {:host => 'host1', :domain => 'example1.com', :data => "1.1.1.2"}
|
77
|
-
|
78
|
-
FakeWeb.register_uri(:get,
|
79
|
-
"https://foo%40bar.com:testtoken@ns.zerigo.com/api/1.1/hosts.xml?fqdn=host1.example1.com&zone_id=1",
|
80
|
-
:body => fakeweb_fixture('zerigo/host1.xml'))
|
81
|
-
FakeWeb.register_uri(:post,
|
82
|
-
"https://foo%40bar.com:testtoken@ns.zerigo.com/api/1.1/hosts/1.xml",
|
83
|
-
:body => "")
|
84
|
-
|
85
|
-
@dns.update_host_record(params, new)
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|