solutious-rudy 0.8.1 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/CHANGES.txt +9 -3
  2. data/README.rdoc +43 -1
  3. data/Rudyfile +15 -0
  4. data/bin/rudy +0 -12
  5. data/examples/debian-sinatra-thin/routines.rb +1 -1
  6. data/lib/rudy.rb +1 -1
  7. data/lib/rudy/routines.rb +4 -1
  8. data/lib/rudy/routines/helper.rb +1 -1
  9. data/lib/rudy/routines/helpers/dependshelper.rb +1 -1
  10. data/lib/rudy/routines/helpers/diskhelper.rb +3 -3
  11. data/lib/rudy/routines/helpers/scripthelper.rb +11 -14
  12. data/lib/rudy/routines/helpers/userhelper.rb +3 -3
  13. data/lib/rudy/routines/passthrough.rb +3 -3
  14. data/lib/rudy/scm.rb +1 -1
  15. data/lib/rudy/scm/git.rb +4 -4
  16. data/rudy.gemspec +1 -24
  17. metadata +1 -24
  18. data/lib/rudy/routines/helpers/scmhelper.rb +0 -39
  19. data/lib/rudy/routines/release.rb +0 -48
  20. data/test/01_mixins/10_hash_test.rb +0 -25
  21. data/test/10_config/00_setup_test.rb +0 -20
  22. data/test/10_config/30_machines_test.rb +0 -69
  23. data/test/15_scm/00_setup_test.rb +0 -20
  24. data/test/15_scm/20_git_test.rb +0 -61
  25. data/test/20_sdb/00_setup_test.rb +0 -16
  26. data/test/20_sdb/10_domains_test.rb +0 -115
  27. data/test/25_ec2/00_setup_test.rb +0 -29
  28. data/test/25_ec2/10_keypairs_test.rb +0 -41
  29. data/test/25_ec2/20_groups_test.rb +0 -131
  30. data/test/25_ec2/30_addresses_test.rb +0 -38
  31. data/test/25_ec2/40_volumes_test.rb +0 -49
  32. data/test/25_ec2/50_snapshots_test.rb +0 -74
  33. data/test/26_ec2_instances/00_setup_test.rb +0 -28
  34. data/test/26_ec2_instances/10_instances_test.rb +0 -83
  35. data/test/26_ec2_instances/50_images_test.rb +0 -13
  36. data/test/30_sdb_metadata/00_setup_test.rb +0 -21
  37. data/test/30_sdb_metadata/10_disks_test.rb +0 -109
  38. data/test/30_sdb_metadata/20_backups_test.rb +0 -102
  39. data/test/coverage.txt +0 -51
  40. data/test/helper.rb +0 -36
@@ -1,39 +0,0 @@
1
-
2
- module Rudy; module Routines;
3
- module SCMHelper
4
- include Rudy::Routines::HelperBase
5
- extend self
6
-
7
- # Does the routine config contain SCM routines?
8
- # Raises Rudy::Error if there is malformed configuration.
9
- def scm?(routine)
10
- scmnames = SUPPORTED_SCM_NAMES & routine.keys # Find intersections.
11
- return false if scmnames.empty? # Nothing to do.
12
- scmnames.each do |scm|
13
- routine[scm].values.each do |t| # Each SCM should have a
14
- raise "Bad #{scm} config" if !t.kind_of?(Hash) # Hash config. Otherwise
15
- end # it's misconfigured.
16
- end
17
- true
18
- end
19
-
20
- def create_scm_objects(routine)
21
- return nil unless routine
22
- scmnames = SUPPORTED_SCM_NAMES & routine.keys
23
- vlist = []
24
- # Look for scm config in the routine by checking all known scm types.
25
- # For each one we'll create an instance of the appropriate SCM class.
26
- scmnames.each do |scm|
27
- routine[scm].each_pair do |user,params|
28
- klass = eval "Rudy::SCM::#{scm.to_s.upcase}"
29
- params[:user] = user
30
- scm = klass.new(params)
31
- scm.raise_early_exceptions # Raises exceptions for obvious problems.
32
- vlist << scm
33
- end
34
- end
35
- vlist
36
- end
37
-
38
- end
39
- end; end
@@ -1,48 +0,0 @@
1
-
2
-
3
- module Rudy; module Routines;
4
- class Release < Rudy::Routines::Base
5
-
6
- def init(*args)
7
- @routine_name = args.first || :release # :release or :rerelease
8
- @routine = fetch_routine_config(@routine_name)
9
- end
10
-
11
- def execute()
12
- routine_separator(@routine_name)
13
-
14
- vlist = []
15
-
16
- # Some early version control system failing
17
- if Rudy::Routines::SCMHelper.scm?(@routine)
18
- vlist = Rudy::Routines::SCMHelper.create_scm_objects(@routine)
19
- puts task_separator("CREATING RELEASE TAG#{'S' if vlist.size > 1}")
20
- vlist.each do |scm|
21
- scm.create_release(Rudy.sysinfo.user)
22
- puts scm.liner_note
23
- end
24
- end
25
-
26
- machines = generic_machine_runner(:list) do |machine,rbox|
27
- vlist.each do |scm|
28
- puts task_separator("CREATING REMOTE #{scm.engine.to_s.upcase} CHECKOUT")
29
- scm.create_remote_checkout(rbox)
30
- end
31
- end
32
-
33
- machines
34
- end
35
-
36
- # Called by generic_machine_runner
37
- def raise_early_exceptions
38
- raise NoRoutine, :release unless @routine
39
- rmach = Rudy::Machines.new
40
- raise Rudy::PrivateKeyNotFound, root_keypairpath unless has_keypair?(:root)
41
- raise MachineGroupNotDefined, current_machine_group unless known_machine_group?
42
- raise MachineGroupNotRunning, current_machine_group unless rmach.running?
43
- end
44
-
45
-
46
-
47
- end
48
- end;end
@@ -1,25 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '..', 'helper')
2
-
3
- module Rudy::Test
4
-
5
- class Case_01_Mixins < Test::Unit::TestCase
6
-
7
- def one_level; {:empty=>1}; end
8
- def two_levels; {:l1 => {:empty=>1}}; end
9
- def three_levels; { :l1 => { :l2 => {:empty=>1, :empty=>1} } }; end
10
- def six_levels; {:l1 => {:l2 => {:l3 => {:l4 => {:l5 => {}, :empty=>1}, :empty=>1}}}}; end
11
-
12
- context "#{name}_10 Hash" do
13
-
14
- should "(10) should calculate deepest point" do
15
- assert_equal one_level.deepest_point, 1
16
- assert_equal two_levels.deepest_point, 2
17
- assert_equal three_levels.deepest_point, 3
18
- assert_equal six_levels.deepest_point, 6
19
- end
20
-
21
- end
22
-
23
- end
24
-
25
- end
@@ -1,20 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '..', 'helper')
2
-
3
- module Rudy::Test
4
-
5
- class Case_10_Config < Test::Unit::TestCase
6
- include Rudy::Huxtable
7
-
8
- @@logger = STDERR #StringIO.new
9
- @@zone = @@global.zone.to_s
10
-
11
- context "#{name}_00 Setup" do
12
- should "(00) have class variables setup" do
13
- stop_test !@@global.is_a?(Rudy::Global), "We don't have global (#{@@global})"
14
- stop_test !@@config.is_a?(Rudy::Config), "We don't have an instance of Rudy::Config (#{@@config})"
15
- end
16
- end
17
-
18
-
19
- end
20
- end
@@ -1,69 +0,0 @@
1
-
2
- module Rudy::Test
3
- class Case_10_Config
4
-
5
- context "#{name}_30 Machines" do
6
-
7
- should "(10) have accounts.aws" do
8
- stop_test !@@config.accounts.is_a?(Rudy::Config::Accounts), "Not an Accounts class"
9
-
10
- stop_test @@config.accounts.aws.accountnum.nil?, "No account"
11
- stop_test @@config.accounts.aws.accesskey.nil?, "No accesskey"
12
- stop_test @@config.accounts.aws.secretkey.nil?, "No secretkey"
13
- end
14
-
15
- should "(20) have defaults" do
16
- assert @@config.defaults.is_a?(Rudy::Config::Defaults), "Not a Defaults class"
17
- assert !@@config.defaults.region.nil?, "No default region"
18
- assert !@@config.defaults.zone.nil?, "No default zone"
19
- assert !@@config.defaults.environment.nil?, "No default environment"
20
- assert !@@config.defaults.role.nil?, "No default role"
21
- end
22
-
23
- should "(30) have machines" do
24
- assert @@config.machines.is_a?(Rudy::Config::Machines), "Not a Machines class"
25
- assert !@@config.machines.keys.empty?, "Nothing in machine config"
26
- end
27
-
28
- should "(31) have 2 disks" do
29
- reg, zon = @@config.defaults.region, @@config.defaults.zone
30
- env, rol = @@config.defaults.environment, @@config.defaults.role
31
-
32
- end
33
-
34
- # Disabled for 0.5.0 (routines config removed)
35
- xshould "(40) have routines" do
36
- assert @@config.routines.is_a?(Rudy::Config::Routines), "Not a Routines class"
37
- end
38
-
39
- # Disabled for 0.5.0 (most machines config removed)
40
- xshould "(50) be able to find and find_deferred" do
41
- reg, zon = @@config.defaults.region, @@config.defaults.zone
42
- env, rol = @@config.defaults.environment, @@config.defaults.role
43
-
44
- #Caesars.enable_debug
45
-
46
- conf = @@config.machines[env][rol]
47
- conf_find = @@config.machines.find(env, rol)
48
- conf_find_def = @@config.machines.find_deferred(env, rol)
49
-
50
- assert_equal conf, conf_find, "config hash and find not equal"
51
- assert_equal conf_find_def, conf_find, "find and find_deferred not equal"
52
- end
53
-
54
- should "(51) find different config for each zone" do
55
- reg, zon = @@config.defaults.region, @@config.defaults.zone
56
- env, rol = @@config.defaults.environment, @@config.defaults.role
57
-
58
- us_ami = @@config.machines.find(:"us-east-1b", :ami)
59
- eu_ami = @@config.machines.find(:"eu-west-1b", :ami)
60
-
61
- assert us_ami.is_a?(String), "No ami for us-east-1b zone"
62
- assert eu_ami.is_a?(String), "No ami for eu-west-1b"
63
- assert us_ami != eu_ami, "EU (#{eu_ami}) and US (#{us_ami}) AMIs are the same"
64
- end
65
-
66
- end
67
-
68
- end
69
- end
@@ -1,20 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '..', 'helper')
2
-
3
- module Rudy::Test
4
-
5
- class Case_15_SCM < Test::Unit::TestCase
6
- include Rudy::Huxtable
7
-
8
- @@logger = STDERR #StringIO.new
9
- @@zone = @@global.zone.to_s
10
-
11
- context "#{name}_00 Setup" do
12
- should "(00) have class variables setup" do
13
- stop_test !@@global.is_a?(Rudy::Global), "We don't have global (#{@@global})"
14
- stop_test !@@config.is_a?(Rudy::Config), "We don't have an instance of Rudy::Config (#{@@config})"
15
- end
16
- end
17
-
18
-
19
- end
20
- end
@@ -1,61 +0,0 @@
1
-
2
- module Rudy::Test
3
- class Case_15_SCM
4
-
5
- def generate_rtag(username=nil)
6
- now = Time.now
7
- mon = now.mon.to_s.rjust(2, '0')
8
- day = now.day.to_s.rjust(2, '0')
9
- rev = "01"
10
- criteria = ['rel', now.year, mon, day, rev]
11
- criteria.insert(-2, username) if username
12
- criteria.join(Rudy::DELIM)
13
- end
14
-
15
- context "#{name}_20 Git" do
16
- setup do
17
- @strand = Rudy::Utils.strand
18
- @scm = Rudy::SCM::GIT.new({
19
- :path => "/tmp/git-#{@strand}"
20
- })
21
- stop_test !Rudy::SCM::GIT.working_copy?, "Not in working directory"
22
- end
23
-
24
-
25
- should "(10) know when a tag is invalid" do
26
- bad_tag = generate_rtag(@strand)
27
- assert !@scm.valid_rtag?(bad_tag), "Said bad tag was valid"
28
- end
29
-
30
- should "(20) generate release tag name" do
31
- rtag_should = generate_rtag(@strand)
32
- rtag = @scm.find_next_rtag(@strand)
33
- assert_equal rtag_should, rtag, "Bad tag"
34
- end
35
-
36
- should "(30) create release" do
37
- rtag_should = generate_rtag(@strand)
38
- rtag = @scm.create_release(@strand)
39
- assert_equal rtag_should, rtag, "Bad tag"
40
- assert @scm.delete_rtag(rtag), "Could not delete tag"
41
- end
42
-
43
- should "(31) know when a tag is valid" do
44
- rtag = @scm.create_release(@strand)
45
- assert @scm.valid_rtag?(rtag), "Said bad tag was invalid"
46
- assert @scm.delete_rtag(rtag), "Could not delete tag"
47
- end
48
-
49
- should "(40) get remote URI" do
50
- rtag = @scm.get_remote_uri
51
- assert !@scm.get_remote_uri.nil? && !@scm.get_remote_uri.empty?, "No remote URI"
52
- end
53
-
54
- xshould "(90) raises exception when deleting a nonexistent tag" do
55
-
56
- end
57
- end
58
-
59
-
60
- end
61
- end
@@ -1,16 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '..', 'helper')
2
-
3
- module Rudy::Test
4
- # Expects:
5
- # * There to be no pre-existing keypairs, addresses, etc... (except
6
- # the default group)
7
- # * It can destroy instances, images, etc...
8
- #
9
- # DO NOT RUN THIS TEST ON A PRODUCTION AWS ACCOUNT!!
10
- #
11
- class Case_20_AWS_SDB < Test::Unit::TestCase
12
- include Rudy::Huxtable
13
-
14
- end
15
-
16
- end
@@ -1,115 +0,0 @@
1
- module Rudy::Test
2
- class Case_20_AWS_SDB
3
-
4
-
5
- def get_domain
6
-
7
- end
8
-
9
- context "#{name}_10 Domains" do
10
-
11
- setup do
12
- @sdb = Rudy::AWS::SDB.new(@@global.accesskey, @@global.secretkey, @@global.region)
13
- @domain_list = @sdb.list_domains || []
14
- @domain = @domain_list.first
15
- end
16
-
17
- should "(10) create domain" do
18
- dname = 'test_' << Rudy::Utils.strand
19
- assert @sdb.create_domain(dname), "Domain not created (#{dname})"
20
- end
21
-
22
- should "(20) list domains" do
23
- domain_list = @sdb.list_domains
24
- assert domain_list.is_a?(Array), "Not an Array"
25
- assert !domain_list.empty?, "No Domains"
26
- end
27
-
28
- should "(30) store objects" do
29
-
30
- assert !@domain.nil?, "No domain"
31
-
32
- produce = lambda {
33
- {
34
- 'orange' => rand(100) * 10,
35
- 'celery' => rand(100) * 100,
36
- 'grapes' => :green
37
- }
38
- }
39
-
40
- @sdb.put(@domain, 'produce1', produce.call, :replace)
41
- @sdb.put(@domain, 'produce2', produce.call, :replace)
42
-
43
- # TODO: Need assertion here!
44
-
45
- end
46
-
47
- should "(40) get objects" do
48
- assert !@domain.nil?, "No domain"
49
- item = @sdb.get(@domain, 'produce1')
50
- assert_equal Hash, item.class # good stuff
51
- assert_equal ['green'], item['grapes']
52
- end
53
-
54
- should "(50) query objects" do
55
-
56
- assert !@domain.nil?, "No domain"
57
-
58
- items = @sdb.query(@domain, "[ 'grapes' = 'green' ]")
59
- assert items.is_a?(Array), "Not an Array"
60
- assert_equal 2, items.size, "More than 2 objects"
61
- end
62
-
63
- should "(51) query objects with attributes" do
64
-
65
- assert !@domain.nil?, "No domain"
66
-
67
- items = @sdb.query_with_attributes(@domain, "[ 'grapes' = 'green' ]")
68
- assert items.is_a?(Hash), "Not a Hash"
69
- assert_equal 2, items.keys.size, "More than 2 objects"
70
- assert items['produce1']['celery'].first.to_i > 1000, "Celery less than 1000"
71
- end
72
-
73
- should "(60) select objects" do
74
- assert !@domain.nil?, "No domain"
75
- q = "select * from #{@domain}"
76
-
77
- items = @sdb.select(q)
78
- assert items.is_a?(Hash), "Not a Hash"
79
- assert_equal 2, items.keys.size, "More than 2 objects"
80
-
81
- # {"produce1"=>{"celery"=>["5200"], "grapes"=>["green"], "orange"=>["550"]}}
82
- assert items['produce1']['celery'].first.to_i > 1000, "Celery less than 1000"
83
- end
84
-
85
-
86
- should "(70) destroy objects" do
87
- assert !@domain.nil?, "No domain"
88
- q = "select * from #{@domain}"
89
- items = @sdb.select(q)
90
- assert items.is_a?(Hash), "Not a Hash"
91
- items.keys.each do |item|
92
- assert @sdb.destroy(@domain, item), "Not destroyed (#{item})"
93
- end
94
- sleep 1 # Eventual consistency. Items may still appear.
95
- q = "select * from #{@domain}"
96
- items = @sdb.select(q)
97
- assert items.nil?, "Some items not destroyed (#{items})"
98
- end
99
-
100
- should "(99) destroy domains" do
101
-
102
- assert !@domain.nil?, "No domain"
103
-
104
- @domain_list.each do |domain|
105
- assert @sdb.destroy_domain(domain), "Not destroyed (#{domain})"
106
- end
107
-
108
- domain_list = @sdb.list_domains
109
- assert domain_list.empty?, "Not empty"
110
- end
111
-
112
- end
113
-
114
- end
115
- end
@@ -1,29 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '..', 'helper')
2
-
3
- module Rudy::Test
4
- # Expects:
5
- # * There to be no pre-existing keypairs, addresses, etc... (except
6
- # the default group)
7
- # * It can destroy instances, images, etc...
8
- #
9
- # DO NOT RUN THIS TEST ON A PRODUCTION AWS ACCOUNT!!
10
- #
11
- class Case_25_EC2 < Test::Unit::TestCase
12
- include Rudy::Huxtable
13
-
14
- @@zone = @@global.zone.to_s
15
-
16
-
17
- context "#{name}_00 Setup" do
18
- should "(10) have class variables setup" do
19
- stop_test !@@global.is_a?(Rudy::Global), "We don't have global (#{@@global})"
20
- stop_test !@@config.is_a?(Rudy::Config), "We don't have an instance of Rudy::Config (#{@@config})"
21
- stop_test !@@global.accountnum, "No account number"
22
- end
23
- should "(11) be zone" do
24
- stop_test !@@zone, "No zone"
25
- end
26
- end
27
- end
28
-
29
- end