solutious-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 (135) hide show
  1. data/CHANGES.txt +55 -14
  2. data/README.rdoc +26 -34
  3. data/Rudyfile +27 -32
  4. data/bin/rudy +47 -27
  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 +49 -89
  9. data/lib/rudy/aws.rb +2 -43
  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 +15 -16
  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 +37 -24
  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 +32 -7
  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 +98 -0
  37. data/lib/rudy/cli/candy.rb +1 -2
  38. data/lib/rudy/cli/config.rb +7 -4
  39. data/lib/rudy/cli/disks.rb +6 -8
  40. data/lib/rudy/cli/execbase.rb +53 -0
  41. data/lib/rudy/cli/machines.rb +14 -18
  42. data/lib/rudy/cli/metadata.rb +24 -10
  43. data/lib/rudy/cli/routines.rb +31 -5
  44. data/lib/rudy/config.rb +17 -22
  45. data/lib/rudy/config/objects.rb +44 -30
  46. data/lib/rudy/disks.rb +25 -0
  47. data/lib/rudy/exceptions.rb +95 -0
  48. data/lib/rudy/global.rb +46 -23
  49. data/lib/rudy/guidelines.rb +3 -2
  50. data/lib/rudy/huxtable.rb +66 -57
  51. data/lib/rudy/machines.rb +41 -263
  52. data/lib/rudy/metadata.rb +212 -38
  53. data/lib/rudy/metadata/backup.rb +123 -78
  54. data/lib/rudy/metadata/disk.rb +152 -170
  55. data/lib/rudy/metadata/machine.rb +179 -0
  56. data/lib/rudy/mixins.rb +2 -1
  57. data/lib/rudy/mixins/hash.rb +3 -1
  58. data/lib/rudy/mixins/symbol.rb +8 -0
  59. data/lib/rudy/routines.rb +127 -344
  60. data/lib/rudy/routines/base.rb +226 -0
  61. data/lib/rudy/routines/handlers/base.rb +48 -0
  62. data/lib/rudy/routines/handlers/depends.rb +49 -0
  63. data/lib/rudy/routines/handlers/disks.rb +239 -0
  64. data/lib/rudy/routines/handlers/group.rb +42 -0
  65. data/lib/rudy/routines/handlers/host.rb +72 -0
  66. data/lib/rudy/routines/handlers/keypair.rb +70 -0
  67. data/lib/rudy/routines/handlers/machines.rb +15 -0
  68. data/lib/rudy/routines/handlers/script.rb +85 -0
  69. data/lib/rudy/routines/handlers/user.rb +41 -0
  70. data/lib/rudy/routines/passthrough.rb +19 -23
  71. data/lib/rudy/routines/reboot.rb +82 -51
  72. data/lib/rudy/routines/shutdown.rb +61 -14
  73. data/lib/rudy/routines/startup.rb +111 -17
  74. data/lib/rudy/utils.rb +12 -59
  75. data/rudy.gemspec +85 -25
  76. data/tryouts/01_mixins/01_hash_tryouts.rb +20 -0
  77. data/tryouts/10_require_time/10_rudy_tryouts.rb +33 -0
  78. data/tryouts/10_require_time/15_global_tryouts.rb +58 -0
  79. data/tryouts/12_config/10_load_config_tryouts.rb +43 -0
  80. data/tryouts/12_config/20_defaults_tryouts.rb +16 -0
  81. data/tryouts/12_config/30_accounts_tryouts.rb +17 -0
  82. data/tryouts/12_config/40_machines_tryouts.rb +53 -0
  83. data/tryouts/12_config/50_commands_tryouts.rb +17 -0
  84. data/tryouts/12_config/60_routines_tryouts.rb +16 -0
  85. data/tryouts/15_huxtable/10_huxtable_tryouts.rb +47 -0
  86. data/tryouts/15_huxtable/20_user_tryouts.rb +47 -0
  87. data/tryouts/20_simpledb/10_domains_tryouts.rb +36 -0
  88. data/tryouts/20_simpledb/20_objects_tryouts.rb +56 -0
  89. data/tryouts/25_ec2/10_keypairs_tryouts.rb +54 -0
  90. data/tryouts/25_ec2/20_groups_tryouts.rb +56 -0
  91. data/tryouts/25_ec2/21_groups_authorize_address_tryouts.rb +53 -0
  92. data/tryouts/25_ec2/22_groups_authorize_account_tryouts.rb +54 -0
  93. data/tryouts/25_ec2/30_addresses_tryouts.rb +42 -0
  94. data/tryouts/25_ec2/40_volumes_tryouts.rb +53 -0
  95. data/tryouts/25_ec2/50_snapshots_tryouts.rb +75 -0
  96. data/tryouts/26_ec2_instances/10_instance_tryouts.rb +107 -0
  97. data/tryouts/26_ec2_instances/50_images_tryouts.rb +7 -0
  98. data/tryouts/30_metadata/10_include_tryouts.rb +45 -0
  99. data/tryouts/30_metadata/13_object_tryouts.rb +19 -0
  100. data/tryouts/30_metadata/50_disk_tryouts.rb +115 -0
  101. data/tryouts/30_metadata/51_disk_digest_tryouts.rb +24 -0
  102. data/tryouts/30_metadata/53_disk_list_tryouts.rb +35 -0
  103. data/tryouts/30_metadata/56_disk_volume_tryouts.rb +68 -0
  104. data/tryouts/30_metadata/60_backup_tryouts.rb +101 -0
  105. data/tryouts/30_metadata/63_backup_list_tryouts.rb +38 -0
  106. data/tryouts/30_metadata/64_backup_disk_tryouts.rb +65 -0
  107. data/tryouts/30_metadata/66_backup_snapshot_tryouts.rb +76 -0
  108. data/tryouts/30_metadata/70_machine_tryouts.rb +85 -0
  109. data/tryouts/30_metadata/73_machine_list_tryouts.rb +58 -0
  110. data/tryouts/30_metadata/76_machine_instance_tryouts.rb +64 -0
  111. data/tryouts/30_metadata/77_machines_tryouts.rb +45 -0
  112. data/tryouts/40_routines/10_keypair_handler_tryouts.rb +52 -0
  113. data/tryouts/40_routines/11_group_handler_tryouts.rb +36 -0
  114. data/tryouts/80_cli/10_rudyec2_tryouts.rb +8 -0
  115. data/tryouts/80_cli/60_rudy_tryouts.rb +41 -0
  116. data/tryouts/failer +6 -0
  117. data/tryouts/misc/console_tryout.rb +91 -0
  118. data/tryouts/misc/disks_tryout.rb +48 -0
  119. data/tryouts/misc/drydock_tryout.rb +48 -0
  120. data/tryouts/misc/nested_methods.rb +103 -0
  121. data/tryouts/misc/session_tryout.rb +46 -0
  122. data/tryouts/misc/tryouts.rb +33 -0
  123. data/tryouts/misc/usage_tryout.rb +23 -0
  124. metadata +119 -31
  125. data/bin/ird +0 -153
  126. data/lib/rudy/metadata/backups.rb +0 -67
  127. data/lib/rudy/metadata/debug.rb +0 -38
  128. data/lib/rudy/metadata/disks.rb +0 -67
  129. data/lib/rudy/metadata/objectbase.rb +0 -108
  130. data/lib/rudy/routines/helper.rb +0 -76
  131. data/lib/rudy/routines/helpers/dependshelper.rb +0 -34
  132. data/lib/rudy/routines/helpers/diskhelper.rb +0 -403
  133. data/lib/rudy/routines/helpers/scripthelper.rb +0 -197
  134. data/lib/rudy/routines/helpers/userhelper.rb +0 -37
  135. data/support/rudy-ec2-startup +0 -200
@@ -0,0 +1,36 @@
1
+ group "Routines"
2
+ library :rudy, 'lib'
3
+
4
+ tryout "Group Handler" do
5
+ set :group, 'grp-' << Rudy::Utils.strand(4)
6
+ set :global, Rudy::Huxtable.global
7
+ set :config, Rudy::Huxtable.config
8
+ set :test_env, 'env_' << Rudy::Utils.strand
9
+ setup do
10
+ Rudy.enable_debug
11
+ Rudy::Huxtable.update_config # Read config files
12
+ akey, skey, region = global.accesskey, global.secretkey, global.region
13
+ Rudy::Metadata.connect akey, skey, region
14
+ Rudy::AWS::EC2.connect akey, skey, region
15
+ global.environment = test_env
16
+ end
17
+
18
+ drill "knows when a group doesn't exist", false do
19
+ Rudy::Routines::Handlers::Group.exists? group
20
+ end
21
+
22
+ dream :class, Rudy::AWS::EC2::Group
23
+ drill "create a group (#{group})" do
24
+ Rudy::Routines::Handlers::Group.create group
25
+ end
26
+
27
+ drill "knows when a group exists", true do
28
+ Rudy::Routines::Handlers::Group.exists? group
29
+ end
30
+
31
+ dream true
32
+ drill "destroy group" do
33
+ Rudy::Routines::Handlers::Group.destroy group
34
+ end
35
+
36
+ end
@@ -0,0 +1,8 @@
1
+
2
+ group "rudy-ec2"
3
+ command :rudy, File.expand_path(File.join(GYMNASIUM_HOME, '..', 'bin', 'rudy'))
4
+ xtryouts "Zones" do
5
+ dream :stdout do
6
+ end
7
+ drill "list zones", :zones
8
+ end
@@ -0,0 +1,41 @@
1
+
2
+ RUDY_HOME = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
3
+
4
+ group "Rudy CLI"
5
+ command :rudy, File.join(RUDY_HOME, 'bin', 'rudy')
6
+
7
+ dreams File.join(GYMNASIUM_HOME, '80_cli', '60_rudy_dreams.rb')
8
+ xtryout "rudy machines" do
9
+ drill "no machines, no args", :machines
10
+ ##drill "startup", :startup
11
+ end
12
+
13
+ xtryout "rudy myaddress" do
14
+ drill 'no args', :myaddress
15
+ drill 'internal only', :myaddress, :i
16
+ drill 'external only', :myaddress, :e
17
+ drill 'quiet', :q, :myaddress
18
+ end
19
+
20
+
21
+ ##dreams 'rudy myaddress' do
22
+ ## dream 'no args' do
23
+ ## output inline(%Q{
24
+ ## Internal: #{Rudy::Utils::internal_ip_address}
25
+ ## External: #{Rudy::Utils::external_ip_address}
26
+ ## })
27
+ ## end
28
+ ## dream 'internal only', " Internal: #{Rudy::Utils::internal_ip_address}"
29
+ ## dream 'external only', " External: #{Rudy::Utils::external_ip_address}"
30
+ ## dream 'quiet', [Rudy::Utils::internal_ip_address, Rudy::Utils::external_ip_address]
31
+ ##end
32
+ ##
33
+ ##
34
+ ##dreams 'rudy machines' do
35
+ ## dream 'no machines, no args' do
36
+ ## output inline(%Q{
37
+ ##No machines running in stage-app
38
+ ##Try: rudy machines --all
39
+ ## })
40
+ ## end
41
+ ##end
@@ -0,0 +1,6 @@
1
+ #!/bin/sh
2
+
3
+ # For some reason when this echo is commented out
4
+ # and Net::SSH always reports the exit code as 0.
5
+ echo "Failing with $1"
6
+ exit $1
@@ -0,0 +1,91 @@
1
+ RUDY_HOME = File.join(File.dirname(__FILE__), '..')
2
+ RUDY_LIB = File.join(RUDY_HOME, 'lib')
3
+ $:.unshift RUDY_LIB # Put our local lib in first place
4
+
5
+ require 'yaml'
6
+ require 'date'
7
+
8
+ require 'tryouts'
9
+ require 'console'
10
+
11
+ raise "Sorry Ruby 1.9 only!" unless RUBY_VERSION =~ /1.9/
12
+
13
+ before do
14
+ @title = "RUDY v0.3"
15
+ @now_utc = Time.now.utc.strftime("%Y-%m-%d %H:%M:%S")
16
+ @props = {
17
+ :zone => "us-east-1b",
18
+ :environment => "stage",
19
+ :role =>"app",
20
+ :position => "01"
21
+ }
22
+ # PROMPT_COMMAND
23
+ end
24
+
25
+ after do
26
+ #Console.clear
27
+ end
28
+
29
+
30
+ tryout :positioned do
31
+ Console.print_at(@title, {:y => Cursor.y, :x => Cursor.x })
32
+ sleep 1
33
+ Console.print_at(@now_utc, {:y => Cursor.y, :x => Console.width, :minus => true})
34
+ puts
35
+ sleep 1
36
+ Console.print_left(@title)
37
+ sleep 1
38
+ Console.print_right(@now_utc)
39
+ puts
40
+ sleep 1
41
+ Console.print_spaced('1'*25, 2, 3, '4'*30, 5, 6)
42
+ puts
43
+ sleep 1
44
+ Console.print_center(Window.bar(50))
45
+
46
+ end
47
+
48
+ tryout :u_r_d_l do
49
+ puts
50
+ Cursor.up && print('.')
51
+ sleep 1
52
+ Cursor.right && print('.')
53
+ sleep 1
54
+ Cursor.left && Cursor.down && print('.')
55
+ sleep 1
56
+ Cursor.left(3) && print('.')
57
+ end
58
+
59
+ tryout :update_inplace do
60
+ [(0..11).to_a, (90..110).to_a].flatten.each do |i|
61
+ Console.print_at(i, {:y => Cursor.y, :x => 4 })
62
+ sleep 0.05
63
+ end
64
+
65
+ end
66
+
67
+
68
+ tryout :danger! do
69
+ win = Window.new(:width => 100, :height => 100)
70
+
71
+ # DEBUGGING: There is a threading bug where the values of props and the
72
+ # string to print are being shared. Make Console and class and give an instance
73
+ # to each thread. However, that could fuck up shit like Cursor.position.
74
+
75
+
76
+ win.static(:right, 0.2, {:y => 0}) do
77
+ Time.now.utc.strftime("%Y-%m-%d %H:%M:%S").colour(:blue, :white, :underline)
78
+ end
79
+ win.static(:left, 0.2) do
80
+ rand
81
+ end
82
+
83
+ win.join_threads
84
+
85
+ puts $/, "Done!"
86
+
87
+ end
88
+
89
+
90
+
91
+
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Tryout - New Rudy::Metadata::Disk API
4
+ #
5
+
6
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
7
+ %w{drydock caesars rye}.each { |dir| $: << File.join(File.dirname(__FILE__), '..', '..', dir, 'lib') }
8
+
9
+ require 'rubygems'
10
+ require 'rudy'
11
+ require 'tryouts'
12
+ include Tryouts
13
+
14
+ #
15
+ #mach7 = Rudy::Machine.load('m-us-east-1b-stage-app-01')
16
+ mach7 = Rudy::Machine.new
17
+
18
+ #puts mach7.running?
19
+ #mach7.position = "07"
20
+ ##y mach1.start
21
+ ##mach1.save
22
+ #p Rudy::Machines.get(mach7.name)
23
+ #
24
+ #
25
+
26
+
27
+
28
+ #disk1 = Rudy::Metadata::Disk.new('/mnt/ride', 1, '/dev/sdh')
29
+ #p disk1.valid?
30
+ #p disk1.name
31
+ #disk1.save
32
+ #disk2 = Rudy::Disks.get("disk-poop-stage-app-01-")
33
+ #
34
+ #p disk1
35
+ #p disk2
36
+ #puts disk2 == disk1
37
+ #puts disk2.destroy
38
+
39
+ __END__
40
+
41
+
42
+ #puts disk1.to_select
43
+ #p disk1.to_query(nil, [:path])
44
+ #p Rudy::Disks.query( "['rtype'='disk']")
45
+
46
+ __END__
47
+ group = Rudy::Groups.new
48
+ inst = Rudy::Machines.new
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Tryout - Fix namespace conflicts between Drydock, Rudy, and Caesars
4
+ #
5
+
6
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
7
+
8
+ require 'drydock'
9
+ require 'tryouts'
10
+ include Tryouts
11
+
12
+ Drydock.run = false
13
+
14
+ tryout("include within module") do
15
+ module SomeModule
16
+ include Drydock
17
+ before do
18
+ end
19
+ puts "Works!" # Doesn't run
20
+ end
21
+ end
22
+
23
+ tryout("extend within module") do
24
+ module SomeModule
25
+ extend Drydock
26
+ before do
27
+ end
28
+ puts "Works!" # Runs
29
+ end
30
+ end
31
+
32
+ tryout("use before in main without include or extend") do
33
+ before do
34
+ end
35
+ puts "Works!" # Runs
36
+ end
37
+
38
+ tryout("include within main, use before in SomeModule") do
39
+ include Drydock
40
+ before do
41
+ end
42
+ module SomeModule
43
+ before do
44
+ end
45
+ puts "just ran SomeModule.before" # Run
46
+ end
47
+ puts "Works!" # Runs
48
+ end
@@ -0,0 +1,103 @@
1
+
2
+ ## Example 2
3
+
4
+ class Helper
5
+ attr_accessor :worker
6
+ def metaclass
7
+ (class << self; self; end)
8
+ end
9
+
10
+ def meta_eval &block
11
+ metaclass.instance_eval &block
12
+ end
13
+
14
+ def add_method(meth)
15
+ meta_eval do
16
+ define_method( meth ) do |val|
17
+ @worker2 = val if val
18
+ val
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ h = Helper.new
25
+ h.worker = true
26
+ h.add_method(:worker2)
27
+ h.worker2(1)
28
+
29
+
30
+
31
+ __END__
32
+
33
+ ## Example 1 -- test3 is not available until after test2 is called
34
+ module Helper
35
+
36
+ def test1
37
+ puts "test1"
38
+
39
+ def test2
40
+ def test3
41
+ puts "AWESOME"
42
+ end
43
+
44
+ puts "test2"
45
+ yield
46
+ end
47
+
48
+ def test3
49
+ puts "test3"
50
+ end
51
+ yield
52
+ end
53
+
54
+ end
55
+
56
+ include Helper
57
+
58
+ test1 do
59
+ puts "1"
60
+ test3 # => test3
61
+ test2 do
62
+ test3 # => AWESOME
63
+ puts "2"
64
+ end
65
+ end
66
+
67
+ # test2 # => throws error
68
+
69
+ __END__
70
+
71
+ ## Sam's example -- "there" is available to the entire method after hello is called.
72
+
73
+ class Foo
74
+
75
+ def machines
76
+ puts '1'
77
+ end
78
+
79
+ def ami
80
+ puts '2'
81
+ end
82
+
83
+ end
84
+
85
+
86
+ class Bar
87
+
88
+ def hello
89
+ def there
90
+ puts '3'
91
+ end
92
+ end
93
+ end
94
+
95
+
96
+ Foo.new.machines
97
+ Foo.new.ami
98
+ Bar.new.hello
99
+
100
+ Bar.new.there
101
+ Bar.new.there
102
+
103
+ #class << self;
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
+
5
+ require 'session'
6
+ require 'net/ssh'
7
+ require 'rye'
8
+ require 'yaml'
9
+ require 'stringio'
10
+
11
+ #p Rye.command('ssh', '-i', '', '')
12
+
13
+ module Rye::Box::Commands
14
+ def rudy(*args); command("/proj/git/rudy/bin/rudy", args); end
15
+ end
16
+
17
+ logger = StringIO.new
18
+ rbox = Rye::Box.new('localhost', 'delano', :stderr => logger).connect
19
+ #rbox2 = Rye::Box.new('ec2-174-129-173-3.compute-1.amazonaws.com', 'root')
20
+ #rbox.add_keys('/Users/delano/Projects/git/rudy/.rudy/key-test-app')
21
+ #rbox.connect
22
+ #puts rbox.date
23
+ #puts rbox.pwd
24
+ puts rbox['/usr/bin'].pwd
25
+ puts rbox.uptime
26
+ puts rbox.can
27
+ puts rbox.echo '$HOME'
28
+ puts rbox.rudy('myaddress')
29
+ rbox.disconnect
30
+ #puts logger.read
31
+ #>>
32
+
33
+ __END__
34
+
35
+
36
+ rgroup = Rye::Group.new('root', 'keydir/file')
37
+ rgroup.add_hosts('ec2-174-129-173-3.compute-1.amazonaws.com')
38
+ rgroup.command('hostname')
39
+
40
+
41
+
42
+ #shell = Session::Shell.new
43
+
44
+ #p shell.execute('ssh -T -t -i /Users/delano/Projects/git/rudy/.rudy/key-test-app.private root@ec2-174-129-82-193.compute-1.amazonaws.com')
45
+
46
+ #Net::SSH.configuration_for(localhost, ssh_options.fetch(:config, true)).merge(ssh_options)
@@ -0,0 +1,33 @@
1
+
2
+ require 'ostruct'
3
+
4
+ module Tryouts
5
+
6
+ # tryout :name do
7
+ # ...
8
+ # end
9
+ def tryout(name, &b)
10
+ puts '-'*50
11
+ puts "Running#{@poop}: #{name}"
12
+ begin
13
+ b.call
14
+ sleep 0.1
15
+ rescue Interrupt
16
+ rescue => ex
17
+ STDERR.puts "Tryout error: #{ex.message}"
18
+ end
19
+ puts $/*2
20
+ end
21
+
22
+ # Ignore everything
23
+ def xtryout(name, &b)
24
+ end
25
+
26
+ # Is this wacky syntax useful for anything?
27
+ # t2 :set .
28
+ # run = "poop"
29
+ def t2(*args)
30
+ OpenStruct.new
31
+ end
32
+
33
+ end