rudy 0.8.5 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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
+