rudy 0.8.5 → 0.9.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.
Files changed (132) hide show
  1. data/CHANGES.txt +110 -18
  2. data/README.rdoc +40 -44
  3. data/Rudyfile +35 -50
  4. data/bin/rudy +88 -57
  5. data/bin/rudy-ec2 +2 -16
  6. data/bin/rudy-s3 +0 -10
  7. data/bin/rudy-sdb +11 -12
  8. data/lib/rudy.rb +59 -91
  9. data/lib/rudy/aws.rb +4 -45
  10. data/lib/rudy/aws/ec2.rb +57 -20
  11. data/lib/rudy/aws/ec2/address.rb +10 -11
  12. data/lib/rudy/aws/ec2/group.rb +10 -9
  13. data/lib/rudy/aws/ec2/image.rb +8 -8
  14. data/lib/rudy/aws/ec2/instance.rb +18 -19
  15. data/lib/rudy/aws/ec2/keypair.rb +14 -19
  16. data/lib/rudy/aws/ec2/snapshot.rb +16 -9
  17. data/lib/rudy/aws/ec2/volume.rb +39 -26
  18. data/lib/rudy/aws/ec2/zone.rb +5 -4
  19. data/lib/rudy/aws/s3.rb +2 -1
  20. data/lib/rudy/aws/sdb.rb +35 -86
  21. data/lib/rudy/backups.rb +24 -0
  22. data/lib/rudy/cli.rb +5 -131
  23. data/lib/rudy/cli/aws/ec2/addresses.rb +19 -27
  24. data/lib/rudy/cli/aws/ec2/candy.rb +45 -20
  25. data/lib/rudy/cli/aws/ec2/groups.rb +9 -13
  26. data/lib/rudy/cli/aws/ec2/images.rb +5 -133
  27. data/lib/rudy/cli/aws/ec2/instances.rb +25 -25
  28. data/lib/rudy/cli/aws/ec2/keypairs.rb +7 -11
  29. data/lib/rudy/cli/aws/ec2/snapshots.rb +5 -9
  30. data/lib/rudy/cli/aws/ec2/volumes.rb +22 -23
  31. data/lib/rudy/cli/aws/ec2/zones.rb +2 -3
  32. data/lib/rudy/cli/aws/sdb/domains.rb +5 -6
  33. data/lib/rudy/cli/aws/sdb/objects.rb +33 -0
  34. data/lib/rudy/cli/aws/sdb/select.rb +23 -0
  35. data/lib/rudy/cli/backups.rb +38 -0
  36. data/lib/rudy/cli/base.rb +104 -0
  37. data/lib/rudy/cli/candy.rb +1 -2
  38. data/lib/rudy/cli/config.rb +20 -7
  39. data/lib/rudy/cli/disks.rb +7 -9
  40. data/lib/rudy/cli/execbase.rb +56 -0
  41. data/lib/rudy/cli/machines.rb +242 -45
  42. data/lib/rudy/cli/metadata.rb +24 -10
  43. data/lib/rudy/cli/networks.rb +34 -0
  44. data/lib/rudy/cli/routines.rb +32 -6
  45. data/lib/rudy/cli/status.rb +60 -0
  46. data/lib/rudy/config.rb +55 -32
  47. data/lib/rudy/config/objects.rb +44 -30
  48. data/lib/rudy/disks.rb +25 -0
  49. data/lib/rudy/exceptions.rb +99 -0
  50. data/lib/rudy/global.rb +67 -28
  51. data/lib/rudy/guidelines.rb +3 -2
  52. data/lib/rudy/huxtable.rb +67 -58
  53. data/lib/rudy/machines.rb +41 -263
  54. data/lib/rudy/metadata.rb +212 -38
  55. data/lib/rudy/metadata/backup.rb +123 -78
  56. data/lib/rudy/metadata/disk.rb +153 -170
  57. data/lib/rudy/metadata/machine.rb +179 -0
  58. data/lib/rudy/mixins.rb +2 -1
  59. data/lib/rudy/mixins/hash.rb +3 -1
  60. data/lib/rudy/mixins/symbol.rb +8 -0
  61. data/lib/rudy/routines.rb +127 -344
  62. data/lib/rudy/routines/base.rb +229 -0
  63. data/lib/rudy/routines/handlers/base.rb +48 -0
  64. data/lib/rudy/routines/handlers/depends.rb +49 -0
  65. data/lib/rudy/routines/handlers/disks.rb +249 -0
  66. data/lib/rudy/routines/handlers/group.rb +44 -0
  67. data/lib/rudy/routines/handlers/host.rb +70 -0
  68. data/lib/rudy/routines/handlers/keypair.rb +70 -0
  69. data/lib/rudy/routines/handlers/machines.rb +15 -0
  70. data/lib/rudy/routines/handlers/script.rb +85 -0
  71. data/lib/rudy/routines/handlers/user.rb +45 -0
  72. data/lib/rudy/routines/passthrough.rb +19 -23
  73. data/lib/rudy/routines/reboot.rb +98 -50
  74. data/lib/rudy/routines/shutdown.rb +65 -14
  75. data/lib/rudy/routines/startup.rb +112 -17
  76. data/lib/rudy/utils.rb +35 -68
  77. data/rudy.gemspec +82 -25
  78. data/tryouts/01_mixins/01_hash_tryouts.rb +20 -0
  79. data/tryouts/10_require_time/10_rudy_tryouts.rb +33 -0
  80. data/tryouts/10_require_time/15_global_tryouts.rb +58 -0
  81. data/tryouts/12_config/10_load_config_tryouts.rb +43 -0
  82. data/tryouts/12_config/20_defaults_tryouts.rb +16 -0
  83. data/tryouts/12_config/30_accounts_tryouts.rb +17 -0
  84. data/tryouts/12_config/40_machines_tryouts.rb +53 -0
  85. data/tryouts/12_config/50_commands_tryouts.rb +17 -0
  86. data/tryouts/12_config/60_routines_tryouts.rb +16 -0
  87. data/tryouts/15_huxtable/10_huxtable_tryouts.rb +47 -0
  88. data/tryouts/15_huxtable/20_user_tryouts.rb +47 -0
  89. data/tryouts/20_simpledb/10_domains_tryouts.rb +36 -0
  90. data/tryouts/20_simpledb/20_objects_tryouts.rb +56 -0
  91. data/tryouts/25_ec2/10_keypairs_tryouts.rb +54 -0
  92. data/tryouts/25_ec2/20_groups_tryouts.rb +56 -0
  93. data/tryouts/25_ec2/21_groups_authorize_address_tryouts.rb +53 -0
  94. data/tryouts/25_ec2/22_groups_authorize_account_tryouts.rb +54 -0
  95. data/tryouts/25_ec2/30_addresses_tryouts.rb +42 -0
  96. data/tryouts/25_ec2/40_volumes_tryouts.rb +53 -0
  97. data/tryouts/25_ec2/50_snapshots_tryouts.rb +75 -0
  98. data/tryouts/26_ec2_instances/10_instance_tryouts.rb +107 -0
  99. data/tryouts/26_ec2_instances/50_images_tryouts.rb +7 -0
  100. data/tryouts/30_metadata/10_include_tryouts.rb +45 -0
  101. data/tryouts/30_metadata/13_object_tryouts.rb +19 -0
  102. data/tryouts/30_metadata/50_disk_tryouts.rb +115 -0
  103. data/tryouts/30_metadata/51_disk_digest_tryouts.rb +24 -0
  104. data/tryouts/30_metadata/53_disk_list_tryouts.rb +35 -0
  105. data/tryouts/30_metadata/56_disk_volume_tryouts.rb +68 -0
  106. data/tryouts/30_metadata/60_backup_tryouts.rb +101 -0
  107. data/tryouts/30_metadata/63_backup_list_tryouts.rb +38 -0
  108. data/tryouts/30_metadata/64_backup_disk_tryouts.rb +65 -0
  109. data/tryouts/30_metadata/66_backup_snapshot_tryouts.rb +76 -0
  110. data/tryouts/30_metadata/70_machine_tryouts.rb +85 -0
  111. data/tryouts/30_metadata/73_machine_list_tryouts.rb +58 -0
  112. data/tryouts/30_metadata/76_machine_instance_tryouts.rb +64 -0
  113. data/tryouts/30_metadata/77_machines_tryouts.rb +45 -0
  114. data/tryouts/40_routines/10_keypair_handler_tryouts.rb +52 -0
  115. data/tryouts/40_routines/11_group_handler_tryouts.rb +36 -0
  116. data/tryouts/80_cli/10_rudyec2_tryouts.rb +8 -0
  117. data/tryouts/80_cli/60_rudy_tryouts.rb +41 -0
  118. data/tryouts/exploration/console.rb +91 -0
  119. data/tryouts/exploration/machine.rb +23 -0
  120. data/tryouts/failer +6 -0
  121. metadata +116 -32
  122. data/bin/ird +0 -153
  123. data/lib/rudy/metadata/backups.rb +0 -67
  124. data/lib/rudy/metadata/debug.rb +0 -38
  125. data/lib/rudy/metadata/disks.rb +0 -67
  126. data/lib/rudy/metadata/objectbase.rb +0 -108
  127. data/lib/rudy/routines/helper.rb +0 -76
  128. data/lib/rudy/routines/helpers/dependshelper.rb +0 -34
  129. data/lib/rudy/routines/helpers/diskhelper.rb +0 -403
  130. data/lib/rudy/routines/helpers/scripthelper.rb +0 -197
  131. data/lib/rudy/routines/helpers/userhelper.rb +0 -37
  132. data/support/rudy-ec2-startup +0 -200
@@ -0,0 +1,7 @@
1
+
2
+ group "EC2 Instances"
3
+ library :rudy, 'lib'
4
+
5
+ tryouts "Images" do
6
+ xdrill "TODO"
7
+ end
@@ -0,0 +1,45 @@
1
+
2
+ group "Metadata"
3
+ library :rudy, 'lib'
4
+ tryouts "include Rudy::Metadata" do
5
+ set :test_domain, 'test_' #<< Rudy::Utils.strand
6
+
7
+ setup do
8
+ Rudy::Huxtable.global.offline = true
9
+ Rudy::Huxtable.update_config # Read config files
10
+ end
11
+ clean do
12
+ Rudy::Huxtable.global.offline = false
13
+ end
14
+
15
+ drill "has default domain", Rudy::DOMAIN do
16
+ Rudy::Metadata.domain
17
+ end
18
+
19
+ drill "can set domain", test_domain do
20
+ Rudy::Metadata.domain = test_domain
21
+ end
22
+
23
+ drill "can open simpledb connection", true do
24
+ global = Rudy::Huxtable.global
25
+ akey, skey, region = global.accesskey, global.secretkey, global.region
26
+ Rudy::Metadata.connect akey, skey, region
27
+ end
28
+
29
+ dream test_domain
30
+ drill "can create test domain (automatically sets new internal domain)" do
31
+ Rudy::Metadata.domain = Rudy::DOMAIN
32
+ Rudy::Metadata.create_domain test_domain
33
+ end
34
+
35
+ dream [:environment, :region, :role, :zone]
36
+ drill "can build a default criteria" do
37
+ Rudy::Metadata.build_criteria(Rudy::Machines::RTYPE).keys.sort
38
+ end
39
+
40
+ dream true
41
+ drill "can destroy domain (automatically returns to default)" do
42
+ Rudy::Metadata.destroy_domain test_domain
43
+ end
44
+
45
+ end
@@ -0,0 +1,19 @@
1
+
2
+
3
+ group "Metadata"
4
+ library :rudy, 'lib'
5
+ tryouts "Rudy::Metadata objects" do
6
+ set :test_domain, 'test_' #<< Rudy::Utils.strand
7
+
8
+ setup do
9
+ Rudy::Huxtable.update_config
10
+ global = Rudy::Huxtable.global
11
+ akey, skey, region = global.accesskey, global.secretkey, global.region
12
+ end
13
+
14
+ dream [:region, :zone, :environment, :role, :position]
15
+ drill "sets up common fields on include" do
16
+ Anything.field_names
17
+ end
18
+
19
+ end
@@ -0,0 +1,115 @@
1
+
2
+ group "Metadata"
3
+ library :rudy, 'lib'
4
+
5
+ tryout "Disk API" do
6
+
7
+ set :test_domain, Rudy::DOMAIN #'test_' << Rudy::Utils.strand(4)
8
+ set :test_env, 'stage' #'env_' << Rudy::Utils.strand(4)
9
+
10
+ setup do
11
+ Rudy.enable_debug
12
+ Rudy::Huxtable.global.offline = true
13
+ Rudy::Huxtable.update_config # Read config files
14
+ global = Rudy::Huxtable.global
15
+ global.environment = test_env
16
+ akey, skey, region = global.accesskey, global.secretkey, global.region
17
+ Rudy::Metadata.connect akey, skey, region
18
+ Rudy::AWS::EC2.connect akey, skey, region
19
+ end
20
+
21
+ clean do
22
+ if Rudy.debug?
23
+ puts $/, "Rudy Debugging:"
24
+ Rudy::Huxtable.logger.rewind
25
+ puts Rudy::Huxtable.logger.read unless Rudy::Huxtable.logger.closed_read?
26
+ end
27
+ end
28
+
29
+ xdrill "can create test domain", test_domain do
30
+ Rudy::Metadata.create_domain test_domain
31
+ end
32
+
33
+
34
+ dream :class, Rudy::Disk
35
+ dream :name do
36
+ tmp = [Rudy::Huxtable.global.zone, Rudy::Huxtable.global.environment]
37
+ tmp += [Rudy::Huxtable.global.role, '01']
38
+ # disk-us-east-1b-env_xxxxxx-app-01-rudy-disk
39
+ ['disk', tmp].join(Rudy::DELIM)
40
+ end
41
+ drill "can create disk object for root path" do
42
+ Rudy::Disk.new('/')
43
+ end
44
+
45
+ dream :name do
46
+ tmp = [Rudy::Huxtable.global.zone, Rudy::Huxtable.global.environment]
47
+ tmp += [Rudy::Huxtable.global.role, '01']
48
+ # disk-us-east-1b-env_xxxxxx-app-01-any-path
49
+ ['disk', tmp, 'any', 'path'].join(Rudy::DELIM)
50
+ end
51
+ drill "can create disk object for an arbitrary path" do
52
+ Rudy::Disk.new('/any/path')
53
+ end
54
+
55
+ dream :size, 1
56
+ dream :device, '/dev/sdh'
57
+ dream :path, '/'
58
+ drill "has a default size and device" do
59
+ Rudy::Disk.new('/')
60
+ end
61
+
62
+ dream :path, '/anything'
63
+ dream :position, '09'
64
+ drill "can specify a position" do
65
+ Rudy::Disk.new '09', '/anything'
66
+ end
67
+
68
+ drill "save disk metadata", true do
69
+ Rudy::Disk.new('/any/path').save
70
+ end
71
+
72
+ drill "knows when an object exists", true do
73
+ Rudy::Disk.new('/any/path').exists?
74
+ end
75
+
76
+ drill "knows when an object doesn't exist", false do
77
+ Rudy::Disk.new('/no/such/disk').exists?
78
+ end
79
+
80
+ dream :exception, Rudy::Metadata::DuplicateRecord
81
+ drill "won't save over a disk with the same name" do
82
+ Rudy::Disk.new('/any/path').save
83
+ end
84
+
85
+ drill "will save over a disk with the same name if forced", true do
86
+ Rudy::Disk.new('/any/path').save(:replace)
87
+ end
88
+
89
+ dream :class, Rudy::Disk
90
+ drill "get disk metadata" do
91
+ Rudy::Disks.get '/any/path'
92
+ end
93
+
94
+ dream :class, Rudy::Disk
95
+ dream :mounted, false
96
+ drill "refresh disk metadata" do
97
+ d = Rudy::Disk.new('/any/path')
98
+ d.mounted = true
99
+ d.refresh!
100
+ d
101
+ end
102
+
103
+ dream true
104
+ drill "destroy disk metadata" do
105
+ d = Rudy::Disk.new('/any/path')
106
+ d.destroy
107
+ end
108
+
109
+ xdrill "destroy a domain (#{test_domain})" do
110
+ Rudy::Metadata.destroy_domain test_domain
111
+ end
112
+
113
+ end
114
+
115
+
@@ -0,0 +1,24 @@
1
+
2
+ group "Metadata"
3
+ library :rudy, 'lib'
4
+
5
+ Gibbler.enable_debug if Tryouts.verbose > 3
6
+
7
+ tryout "Disk API" do
8
+
9
+ setup do
10
+ Rudy.enable_debug
11
+ Rudy::Huxtable.update_config # Read config files
12
+ global = Rudy::Huxtable.global
13
+ akey, skey, region = global.accesskey, global.secretkey, global.region
14
+ Rudy::Metadata.connect akey, skey, region
15
+ Rudy::AWS::EC2.connect akey, skey, region
16
+ end
17
+
18
+ dream :class, Gibbler::Digest
19
+ drill "has gibbler digest" do
20
+ Rudy::Disk.new('/any/path').gibbler
21
+ end
22
+
23
+
24
+ end
@@ -0,0 +1,35 @@
1
+
2
+ group "Metadata"
3
+ library :rudy, 'lib'
4
+
5
+ Gibbler.enable_debug if Tryouts.verbose > 3
6
+
7
+ tryout "List Disks" do
8
+
9
+ setup do
10
+ Rudy.enable_debug
11
+ Rudy::Huxtable.update_config # Read config files
12
+ global = Rudy::Huxtable.global
13
+ akey, skey, region = global.accesskey, global.secretkey, global.region
14
+ Rudy::Metadata.connect akey, skey, region
15
+ Rudy::AWS::EC2.connect akey, skey, region
16
+ Rudy::Disk.new('/any/path1').save :replace
17
+ Rudy::Disk.new('/any/path2').save :replace
18
+ end
19
+
20
+ clean do
21
+ Rudy::Disk.new('/any/path1').destroy
22
+ Rudy::Disk.new('/any/path2').destroy
23
+ end
24
+
25
+ dream :class, Array
26
+ dream :empty?, false
27
+ drill "can list available disks" do
28
+ Rudy::Disks.list
29
+ end
30
+
31
+
32
+ end
33
+
34
+
35
+
@@ -0,0 +1,68 @@
1
+ group "Metadata"
2
+ library :rudy, 'lib'
3
+
4
+ tryout "Disk Volume API" do
5
+
6
+ set :test_domain, 'test_' #<< Rudy::Utils.strand(4)
7
+ set :test_env, 'stage' << Rudy::Utils.strand(4)
8
+
9
+ setup do
10
+ Rudy.enable_debug
11
+ Rudy::Huxtable.global.offline = true
12
+ Rudy::Huxtable.update_config # Read config files
13
+ global = Rudy::Huxtable.global
14
+ global.environment = test_env
15
+ akey, skey, region = global.accesskey, global.secretkey, global.region
16
+ Rudy::Metadata.connect akey, skey, region
17
+ Rudy::AWS::EC2.connect akey, skey, region
18
+ end
19
+
20
+ clean do
21
+ if Rudy.debug?
22
+ puts $/, "Rudy Debugging:"
23
+ Rudy::Huxtable.logger.rewind
24
+ puts Rudy::Huxtable.logger.read unless Rudy::Huxtable.logger.closed_read?
25
+ end
26
+ end
27
+
28
+ dream :volid, nil
29
+ drill "disk volid is nil by default" do
30
+ Rudy::Disk.new '/any/path'
31
+ end
32
+
33
+ dream :nil?, false
34
+ dream :class, String
35
+ drill "create disk instance with volume" do
36
+ disk = Rudy::Disk.new '/sergeant/disk'
37
+ disk.create
38
+ disk.volid
39
+ end
40
+
41
+ dream :nil?, false
42
+ drill "refresh disk" do
43
+ disk = Rudy::Disk.new '/sergeant/disk'
44
+ disk.refresh!
45
+ disk.volid
46
+ end
47
+
48
+ xdrill "can attach volume to instance"
49
+ xdrill "can mount volume"
50
+ xdrill "can detach volume from instance"
51
+
52
+ dream [true, false, false]
53
+ drill "knows about the state of the volume" do
54
+ disk = Rudy::Disk.new '/sergeant/disk'
55
+ disk.refresh!
56
+ [disk.volume_exists?, disk.volume_attached?, disk.volume_in_use?]
57
+ end
58
+
59
+ dream true
60
+ drill "destroy disk with volume" do
61
+ disk = Rudy::Disk.new '/sergeant/disk'
62
+ disk.refresh!
63
+ disk.destroy
64
+ end
65
+
66
+
67
+
68
+ end
@@ -0,0 +1,101 @@
1
+
2
+ group "Metadata"
3
+ library :rudy, 'lib'
4
+
5
+ tryout "Backup API" do
6
+
7
+ set :sample_time, Time.now.utc
8
+ set :test_domain, Rudy::DOMAIN #'test_' << Rudy::Utils.strand(4)
9
+ set :test_env, :stage #'env_' << Rudy::Utils.strand(4)
10
+
11
+ setup do
12
+ Rudy.enable_debug
13
+ Rudy::Huxtable.global.offline = true
14
+ Rudy::Huxtable.update_config # Read config files
15
+ global = Rudy::Huxtable.global
16
+ global.environment = test_env
17
+ akey, skey, region = global.accesskey, global.secretkey, global.region
18
+ Rudy::Metadata.connect akey, skey, region
19
+ Rudy::AWS::EC2.connect akey, skey, region
20
+ end
21
+
22
+ clean do
23
+ if Rudy.debug?
24
+ puts $/, "Rudy Debugging:"
25
+ Rudy::Huxtable.logger.rewind
26
+ puts Rudy::Huxtable.logger.read unless Rudy::Huxtable.logger.closed_read?
27
+ end
28
+ end
29
+
30
+ xdrill "can create test domain", test_domain do
31
+ Rudy::Metadata.create_domain test_domain
32
+ end
33
+
34
+ dream :class, Rudy::Backup
35
+ drill "can create an instance" do
36
+ Rudy::Backup.new
37
+ end
38
+
39
+ dream :class, Rudy::Backup
40
+ dream :name do
41
+ global = Rudy::Huxtable.global
42
+ tmp = [global.zone, global.environment, global.role, '01']
43
+ tmp += ['20090201', '0000', '00']
44
+ ['back', tmp].join(Rudy::DELIM)
45
+ end
46
+ drill "can create backup object for root path" do
47
+ Rudy::Backup.new(1, '/', :created => Time.parse('2009-02-01'))
48
+ end
49
+
50
+ dream :class, Rudy::Backup
51
+ dream :name do
52
+ global = Rudy::Huxtable.global
53
+ tmp = [global.zone, global.environment, global.role, '01']
54
+ tmp += ['any', 'path', '20090201', '0000', '00']
55
+ ['back', tmp].join(Rudy::DELIM)
56
+ end
57
+ drill "can create backup object for an arbitrary path" do
58
+ Rudy::Backup.new(1, '/any/path', :created => Time.parse('2009-02-01'))
59
+ end
60
+
61
+ dream :user, Rudy.sysinfo.user
62
+ drill "has a default user" do
63
+ Rudy::Backup.new(1, '/')
64
+ end
65
+
66
+ dream :class, Time
67
+ drill "has a default created time" do
68
+ Rudy::Backup.new(1, '/').created
69
+ end
70
+
71
+ drill "save metadata", true do
72
+ Rudy::Backup.new(1, '/any/path', :created => sample_time).save
73
+ end
74
+
75
+ drill "knows when an object exists", true do
76
+ Rudy::Backup.new(1, '/any/path', :created => sample_time).exists?
77
+ end
78
+
79
+ drill "knows when an object doesn't exist", false do
80
+ Rudy::Backup.new(1, '/no/such/disk', :created => sample_time).exists?
81
+ end
82
+
83
+ dream :class, Rudy::Disk
84
+ drill "creates associated disk object" do
85
+ Rudy::Backup.new(1, '/any/path', :created => sample_time).disk
86
+ end
87
+
88
+ dream :exception, Rudy::Backups::NoDisk
89
+ drill "raises exception when disk doesn't exist" do
90
+ Rudy::Backup.new(1, '/no/such/disk').create
91
+ end
92
+
93
+ drill "destroy all backups", false do
94
+ Rudy::Backups.list.each { |b| b.destroy }
95
+ Rudy::Backups.any?
96
+ end
97
+
98
+ xdrill "destroy a domain (#{test_domain})", true do
99
+ Rudy::Metadata.destroy_domain test_domain
100
+ end
101
+ end
@@ -0,0 +1,38 @@
1
+
2
+ group "Metadata"
3
+ library :rudy, 'lib'
4
+
5
+ Gibbler.enable_debug if Tryouts.verbose > 3
6
+
7
+ tryout "List Backups" do
8
+
9
+ set :sample_time, Time.now.utc
10
+
11
+ setup do
12
+ Rudy.enable_debug
13
+ Rudy::Huxtable.update_config # Read config files
14
+ global = Rudy::Huxtable.global
15
+ akey, skey, region = global.accesskey, global.secretkey, global.region
16
+ Rudy::Metadata.connect akey, skey, region
17
+ Rudy::AWS::EC2.connect akey, skey, region
18
+ Rudy::Backup.new(1, '/any/path1', :created => sample_time).save :replace
19
+ Rudy::Backup.new(2, '/any/path2', :created => sample_time).save :replace
20
+ end
21
+
22
+ clean do
23
+ Rudy::Backup.new(1, '/any/path1', :created => sample_time).destroy
24
+ Rudy::Backup.new(2, '/any/path2', :created => sample_time).destroy
25
+ end
26
+
27
+ dream :class, Array
28
+ dream :empty?, false
29
+ dream :size, 2
30
+ drill "can list available backups" do
31
+ Rudy::Backups.list
32
+ end
33
+
34
+
35
+ end
36
+
37
+
38
+