solutious-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 (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