rudy 0.6.8 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/CHANGES.txt +15 -2
  2. data/README.rdoc +30 -23
  3. data/Rakefile +5 -5
  4. data/Rudyfile +87 -66
  5. data/bin/rudy +120 -167
  6. data/bin/rudy-ec2 +17 -13
  7. data/bin/rudy-s3 +6 -4
  8. data/bin/rudy-sdb +5 -4
  9. data/lib/annoy.rb +1 -1
  10. data/lib/console.rb +1 -3
  11. data/lib/rudy.rb +11 -25
  12. data/lib/rudy/aws/ec2/instance.rb +1 -1
  13. data/lib/rudy/aws/ec2/volume.rb +2 -2
  14. data/lib/rudy/aws/sdb/error.rb +2 -1
  15. data/lib/rudy/cli.rb +10 -1
  16. data/lib/rudy/cli/aws/ec2/addresses.rb +1 -1
  17. data/lib/rudy/cli/aws/ec2/images.rb +3 -1
  18. data/lib/rudy/cli/aws/ec2/instances.rb +2 -2
  19. data/lib/rudy/cli/candy.rb +11 -0
  20. data/lib/rudy/cli/config.rb +25 -44
  21. data/lib/rudy/cli/machines.rb +30 -10
  22. data/lib/rudy/cli/routines.rb +67 -19
  23. data/lib/rudy/config.rb +30 -13
  24. data/lib/rudy/config/objects.rb +135 -10
  25. data/lib/rudy/disks.rb +8 -52
  26. data/lib/rudy/global.rb +9 -5
  27. data/lib/rudy/guidelines.rb +18 -0
  28. data/lib/rudy/huxtable.rb +29 -19
  29. data/lib/rudy/machines.rb +10 -7
  30. data/lib/rudy/mixins/hash.rb +25 -0
  31. data/lib/rudy/routines.rb +160 -10
  32. data/lib/rudy/routines/helper.rb +50 -0
  33. data/lib/rudy/routines/helpers/diskhelper.rb +44 -18
  34. data/lib/rudy/routines/helpers/scmhelper.rb +39 -0
  35. data/lib/rudy/routines/helpers/scripthelper.rb +86 -35
  36. data/lib/rudy/routines/helpers/userhelper.rb +37 -0
  37. data/lib/rudy/routines/passthrough.rb +36 -0
  38. data/lib/rudy/routines/release.rb +38 -22
  39. data/lib/rudy/routines/shutdown.rb +20 -49
  40. data/lib/rudy/routines/startup.rb +20 -47
  41. data/lib/rudy/scm.rb +75 -0
  42. data/lib/rudy/scm/git.rb +215 -0
  43. data/lib/rudy/scm/svn.rb +7 -6
  44. data/lib/rudy/utils.rb +12 -30
  45. data/lib/storable.rb +4 -1
  46. data/lib/sysinfo.rb +10 -0
  47. data/rudy.gemspec +21 -9
  48. data/test/01_mixins/10_hash_test.rb +25 -0
  49. data/test/{05_config → 10_config}/00_setup_test.rb +1 -1
  50. data/test/{05_config → 10_config}/30_machines_test.rb +1 -1
  51. data/test/15_scm/00_setup_test.rb +20 -0
  52. data/test/15_scm/20_git_test.rb +61 -0
  53. data/test/helper.rb +1 -1
  54. data/vendor/highline-1.5.1/Rakefile +3 -3
  55. metadata +41 -12
  56. data/bin/ird +0 -175
data/bin/rudy-ec2 CHANGED
@@ -27,7 +27,7 @@ module RudyCLI_EC2
27
27
  # ----------------------------------- AMAZON EC2 COMMANDS --------
28
28
  # ------------------------------------------------------------------
29
29
 
30
- desc "Amazon EC2 Elastic IP addresses"
30
+ about "Amazon EC2 Elastic IP addresses"
31
31
  usage "rudy-ec2 addresses"
32
32
  usage "rudy-ec2 addresses -C"
33
33
  usage "rudy-ec2 addresses -A -i instance-id address"
@@ -45,7 +45,7 @@ module RudyCLI_EC2
45
45
  command_alias :addresses, :address
46
46
  command_alias :addresses, :a
47
47
 
48
- desc "Amazon EC2 instance console output"
48
+ about "Amazon EC2 instance console output"
49
49
  usage "rudy-ec2 console [-g group] [instance ID]"
50
50
  option :g, :group, String, "A security group name"
51
51
  argv :awsid
@@ -53,7 +53,7 @@ module RudyCLI_EC2
53
53
  command_alias :consoles, :console
54
54
  command_alias :consoles, :c
55
55
 
56
- desc "Copy files to or from machines."
56
+ about "Copy files to or from machines."
57
57
  usage "rudy-ec2 copy [-p] [-r] [-u user] [-k path/2/privatekey] source target"
58
58
  usage "rudy-ec2 upload -k path/2/privatekey -u username local-source target"
59
59
  usage "rudy-ec2 download remote-source target"
@@ -73,7 +73,7 @@ module RudyCLI_EC2
73
73
  command_alias :copy, :upload
74
74
  command_alias :copy, :download
75
75
 
76
- desc "Amazon EC2 EC2 Security Groups"
76
+ about "Amazon EC2 EC2 Security Groups"
77
77
  usage "rudy-ec2 groups"
78
78
  usage "rudy-ec2 groups -C [-p ports] [-a addresses] [-r protocols] name"
79
79
  usage "rudy-ec2 groups -A [-p ports] [-a addresses] [-r protocols] name"
@@ -97,7 +97,7 @@ module RudyCLI_EC2
97
97
  command_alias :groups, :group
98
98
  command_alias :groups, :g
99
99
 
100
- desc "Amazon EC2 Machine Images (AMIs)"
100
+ about "Amazon EC2 Machine Images (AMIs)"
101
101
  usage "rudy-ec2 images"
102
102
  usage "rudy-ec2 images image-id"
103
103
  usage "rudy-ec2 images -o 123456789012"
@@ -117,7 +117,7 @@ module RudyCLI_EC2
117
117
  command_alias :images, :image
118
118
  command_alias :images, :im
119
119
 
120
- desc "Amazon EC2 Instances"
120
+ about "Amazon EC2 Instances"
121
121
  usage "rudy-ec2 instances"
122
122
  usage "rudy-ec2 instances [-g group-name] [instance-ID]"
123
123
  usage "rudy-ec2 instances -C -m ami-235fba4a -s m1.small -k keypair-name"
@@ -142,7 +142,7 @@ module RudyCLI_EC2
142
142
  command_alias :instances, :in
143
143
  command_alias :instances, :i
144
144
 
145
- desc "Amazon EC2 KeyPairs"
145
+ about "Amazon EC2 KeyPairs"
146
146
  usage "rudy-ec2 keypairs"
147
147
  usage "rudy-ec2 keypairs -C name"
148
148
  usage "rudy-ec2 keypairs -D name"
@@ -153,7 +153,7 @@ module RudyCLI_EC2
153
153
  command_alias :keypairs, :keypair
154
154
  command_alias :keypairs, :k
155
155
 
156
- desc "Amazon EC2 Snapshots"
156
+ about "Amazon EC2 Snapshots"
157
157
  usage "rudy-ec2 snapshots"
158
158
  usage "rudy-ec2 snapshots -C -v volume-id"
159
159
  usage "rudy-ec2 snapshots -D snapshot-id"
@@ -165,7 +165,7 @@ module RudyCLI_EC2
165
165
  command_alias :snapshots, :snapshot
166
166
  command_alias :snapshots, :t
167
167
 
168
- desc "Open an SSH connection"
168
+ about "Open an SSH connection"
169
169
  usage "rudy-ec2 ssh"
170
170
  usage "rudy-ec2 -u root -k path/2/key ssh"
171
171
  usage "rudy-ec2 -u root -k path/2/key ssh uname -a"
@@ -178,10 +178,10 @@ module RudyCLI_EC2
178
178
  command :ssh => Rudy::CLI::AWS::EC2::Candy
179
179
  command_alias :ssh, :connect
180
180
 
181
- desc "Amazon EC2 status"
181
+ about "Amazon EC2 status"
182
182
  command :status => Rudy::CLI::AWS::EC2::Candy
183
183
 
184
- desc "Amazon EC2 Volumes"
184
+ about "Amazon EC2 Volumes"
185
185
  usage "rudy-ec2 volumes"
186
186
  usage "rudy-ec2 volumes -C -s size [-d device-path]"
187
187
  usage "rudy-ec2 volumes -A volume-id instance-id"
@@ -200,7 +200,7 @@ module RudyCLI_EC2
200
200
  command_alias :volumes, :volume
201
201
  command_alias :volumes, :v
202
202
 
203
- desc "Availability Zones"
203
+ about "Availability Zones"
204
204
  usage "rudy-ec2 zones"
205
205
  argv :name
206
206
  command :zones => Rudy::CLI::AWS::EC2::Zones
@@ -224,11 +224,14 @@ end
224
224
  # will run after Rye shuts down the ssh-agent.
225
225
  begin
226
226
  Drydock.run!(ARGV, STDIN) if Drydock.run? && !Drydock.has_run?
227
- rescue Drydock::ArgError, Drydock::OptError=> ex
227
+ rescue Drydock::ArgError, Drydock::OptError => ex
228
228
  STDERR.puts ex.message
229
229
  STDERR.puts ex.usage
230
+ rescue Drydock::InvalidArgument => ex
231
+ STDERR.puts ex.message
230
232
  rescue Rudy::Error => ex
231
233
  STDERR.puts ex.message
234
+ STDERR.puts ex.backtrace if Drydock.debug?
232
235
  rescue => ex
233
236
  STDERR.puts "ERROR (#{ex.class.to_s}): #{ex.message}"
234
237
  STDERR.puts ex.backtrace if Drydock.debug?
@@ -239,3 +242,4 @@ rescue SystemExit
239
242
  # Don't balk
240
243
  end
241
244
 
245
+
data/bin/rudy-s3 CHANGED
@@ -25,7 +25,7 @@ module RudyCLI_S3
25
25
  # ------------------------------------ AMAZON S3 COMMANDS --------
26
26
  # ------------------------------------------------------------------
27
27
 
28
- desc "Amazon S3 Buckets"
28
+ about "Amazon S3 Buckets"
29
29
  usage "rudy-s3 buckets"
30
30
  option :l, :list, "List bucket objects"
31
31
  action :C, :create, "Create a bucket"
@@ -34,7 +34,7 @@ module RudyCLI_S3
34
34
  command :buckets => Rudy::CLI::AWS::S3::Buckets
35
35
  command_alias :buckets, :b
36
36
 
37
- #desc "Amazon S3 Storage Interface"
37
+ #about "Amazon S3 Storage Interface"
38
38
  #usage "rudy-s3 store file-path"
39
39
  #option :b, :bucket, String, "Bucket name"
40
40
  #argv :path
@@ -61,11 +61,14 @@ end
61
61
  # will run after Rye shuts down the ssh-agent.
62
62
  begin
63
63
  Drydock.run!(ARGV, STDIN) if Drydock.run? && !Drydock.has_run?
64
- rescue Drydock::ArgError, Drydock::OptError=> ex
64
+ rescue Drydock::ArgError, Drydock::OptError => ex
65
65
  STDERR.puts ex.message
66
66
  STDERR.puts ex.usage
67
+ rescue Drydock::InvalidArgument => ex
68
+ STDERR.puts ex.message
67
69
  rescue Rudy::Error => ex
68
70
  STDERR.puts ex.message
71
+ STDERR.puts ex.backtrace if Drydock.debug?
69
72
  rescue => ex
70
73
  STDERR.puts "ERROR (#{ex.class.to_s}): #{ex.message}"
71
74
  STDERR.puts ex.backtrace if Drydock.debug?
@@ -76,4 +79,3 @@ rescue SystemExit
76
79
  # Don't balk
77
80
  end
78
81
 
79
-
data/bin/rudy-sdb CHANGED
@@ -26,7 +26,7 @@ module RudyCLI_SDB
26
26
  # ------------------------------------------------------------------
27
27
 
28
28
 
29
- desc "Displays the SimpleDB domains associated to your account"
29
+ about "Displays the SimpleDB domains associated to your account"
30
30
  action :C, :create, "Create a domain"
31
31
  action :D, :destroy, "Destroy a domain"
32
32
  argv :name
@@ -51,11 +51,14 @@ end
51
51
  # will run after Rye shuts down the ssh-agent.
52
52
  begin
53
53
  Drydock.run!(ARGV, STDIN) if Drydock.run? && !Drydock.has_run?
54
- rescue Drydock::ArgError, Drydock::OptError=> ex
54
+ rescue Drydock::ArgError, Drydock::OptError => ex
55
55
  STDERR.puts ex.message
56
56
  STDERR.puts ex.usage
57
+ rescue Drydock::InvalidArgument => ex
58
+ STDERR.puts ex.message
57
59
  rescue Rudy::Error => ex
58
60
  STDERR.puts ex.message
61
+ STDERR.puts ex.backtrace if Drydock.debug?
59
62
  rescue => ex
60
63
  STDERR.puts "ERROR (#{ex.class.to_s}): #{ex.message}"
61
64
  STDERR.puts ex.backtrace if Drydock.debug?
@@ -66,5 +69,3 @@ rescue SystemExit
66
69
  # Don't balk
67
70
  end
68
71
 
69
-
70
-
data/lib/annoy.rb CHANGED
@@ -39,7 +39,7 @@ class Annoy
39
39
 
40
40
  @@randsize = {
41
41
  :low => 10,
42
- :medium => 14,
42
+ :medium => 12,
43
43
  :high => 50,
44
44
  :insane => 1000
45
45
  }.freeze
data/lib/console.rb CHANGED
@@ -46,9 +46,7 @@ class String
46
46
  end
47
47
 
48
48
  # Shortcut for att(:bright)
49
- def bright
50
- att(:bright)
51
- end
49
+ def bright; att(:bright); end
52
50
 
53
51
  # Print the string at +x+ +y+. When +minus+ is any true value
54
52
  # the length of the string is subtracted from the value of x
data/lib/rudy.rb CHANGED
@@ -9,6 +9,7 @@ require 'digest/md5'
9
9
  require 'stringio'
10
10
  require 'ostruct'
11
11
  require 'yaml'
12
+ require 'json'
12
13
  require 'logger'
13
14
  require 'socket'
14
15
  require 'timeout'
@@ -26,6 +27,7 @@ require 'net/scp'
26
27
  require 'net/ssh/multi'
27
28
  require 'net/ssh/gateway'
28
29
 
30
+ require 'rudy/mixins/hash'
29
31
 
30
32
 
31
33
  # = Rudy
@@ -34,38 +36,16 @@ require 'net/ssh/gateway'
34
36
  #
35
37
  # Rudy is a development and deployment tool for the Amazon Elastic Compute Cloud
36
38
  # (EC2). See README.rdoc for more information.
37
- #
38
- # == Status: Alpha
39
39
  #
40
- # The current release (0.6) is not ready for general production use. Use it for
41
- # exploring EC2 and operating your development / ad-hoc instances. We've put in
42
- # a lot of effort to make sure Rudy plays safe, but it's possible we missed
43
- # something. That's why we consider it alpha code.
44
- #
45
- # To get started right away, try:
46
- #
47
- # $ rudy -h
48
- # $ rudy show-commands
49
- #
50
- # Also:
51
- #
52
- # $ rudy-ec2 -h
53
- # $ rudy-ec2 show-commands
54
- #
55
- # And if you're feeling particularly saucey, try Rudy's REPL interface:
56
- #
57
- # $ ird
58
40
  #
59
- #
60
- #
61
41
  module Rudy
62
42
  extend self
63
43
 
64
44
  module VERSION #:nodoc:
65
45
  unless defined?(MAJOR)
66
46
  MAJOR = 0.freeze
67
- MINOR = 6.freeze
68
- TINY = 8.freeze
47
+ MINOR = 7.freeze
48
+ TINY = 0.freeze
69
49
  end
70
50
  def self.to_s; [MAJOR, MINOR, TINY].join('.'); end
71
51
  def self.to_f; self.to_s.to_f; end
@@ -141,6 +121,11 @@ module Rudy
141
121
  lines.join($/)
142
122
  end
143
123
  end
124
+
125
+ #--
126
+ # TODO: Update exception Syntax based on:
127
+ # http://blog.rubybestpractices.com/posts/gregory/anonymous_class_hacks.html
128
+ #++
144
129
  class NoConfig < Rudy::Error
145
130
  def message; "No configuration found!"; end
146
131
  end
@@ -180,8 +165,9 @@ require 'rudy/huxtable' # requires
180
165
  require 'rudy/aws' # is
181
166
  require 'rudy/metadata' # important
182
167
 
183
- require 'rudy/machines'
184
168
  require 'rudy/disks'
169
+ require 'rudy/machines'
185
170
  require 'rudy/routines'
171
+ require 'rudy/scm'
186
172
 
187
173
 
@@ -25,7 +25,7 @@ module Rudy::AWS
25
25
 
26
26
  def liner_note
27
27
  info = self.running? ? self.dns_public : self.state
28
- "%s %s" % [self.awsid.bright, info]
28
+ "%s %-30s" % [self.awsid.bright, info]
29
29
  end
30
30
 
31
31
  def to_s(with_title=false)
@@ -101,7 +101,7 @@ module Rudy::AWS
101
101
  opts = {
102
102
  :volume_id => vol_id,
103
103
  :instance_id => inst_id,
104
- :device => device
104
+ :device => device.to_s # Solaris devices are numbers
105
105
  }
106
106
  ret = execute_request(false) { @ec2.attach_volume(opts) }
107
107
  (ret['status'] == 'attaching')
@@ -154,7 +154,7 @@ module Rudy::AWS
154
154
 
155
155
  def get(vol_id)
156
156
  vol_id = Volumes.get_vol_id(vol_id)
157
- list(:any, vol_id).first || nil
157
+ list(:any, vol_id).first rescue nil
158
158
  end
159
159
 
160
160
  # deleting?, available?, etc...
@@ -29,7 +29,7 @@ module Rudy
29
29
 
30
30
  class FeatureDeprecatedError < RequestError ; end
31
31
 
32
- class ConnectionError < Error
32
+ class ConnectionError < Rudy::Error
33
33
  attr_reader :response
34
34
 
35
35
  def initialize(response)
@@ -39,6 +39,7 @@ module Rudy
39
39
  )
40
40
  @response = response
41
41
  end
42
+
42
43
  end
43
44
 
44
45
  end
data/lib/rudy/cli.rb CHANGED
@@ -25,7 +25,10 @@ module Rudy
25
25
 
26
26
  protected
27
27
  def init
28
-
28
+
29
+
30
+ Rudy::Huxtable.update_config
31
+
29
32
  # The CLI wants output!
30
33
  Rudy::Huxtable.update_logger STDOUT
31
34
 
@@ -80,6 +83,12 @@ module Rudy
80
83
  end
81
84
  end
82
85
 
86
+ def machine_separator(name, awsid)
87
+ dashes = 80 - name.size #
88
+ dashes = 0 if dashes < 1
89
+ ('%s %-63s awsid: %s ' % [$/, name, awsid]).att(:reverse)
90
+ end
91
+
83
92
  end
84
93
 
85
94
  def self.generate_header(global, config)
@@ -23,7 +23,7 @@ module AWS; module EC2;
23
23
  raise "Could not fetch #{address.ipaddress}" unless address
24
24
 
25
25
  puts "Destroying address: #{@argv.ipaddress}"
26
- puts "NOTE: this IP address will become available to other EC2 customers.".color(:blue)
26
+ puts "NOTE: this IP address will become available to other EC2 customers.".bright
27
27
  execute_check(:medium)
28
28
  execute_action { @radd.destroy(@argv.ipaddress) }
29
29
  self.addresses
@@ -93,7 +93,7 @@ module AWS; module EC2;
93
93
  opts[:group] = :any if @option.all
94
94
  opts[:id] = @option.instid if @option.instid
95
95
 
96
- puts "You may want to run rudy-ec2 #{@alias} --prepare before this.".color(:blue)
96
+ puts "You may want to run rudy-ec2 #{@alias} --prepare before this.".bright
97
97
  puts "This feature is experimental. Make sure you enter the bucket"
98
98
  puts "and image names correctly because if they're wrong the image"
99
99
  puts "won't get created and you'll be annoyed that you waited."
@@ -126,6 +126,8 @@ module AWS; module EC2;
126
126
  # Open the connection and run the command
127
127
  rbox = Rye::Box.new(inst.dns_public, ssh_opts)
128
128
 
129
+ # TODO: Replace with rbox.upload
130
+
129
131
  # ~/.rudy, /etc/motd, history -c, /etc/hosts, /var/log/rudy*
130
132
  cert = File.read(@@global.cert)
131
133
  pk = File.read(@@global.privatekey)
@@ -48,8 +48,8 @@ module AWS; module EC2;
48
48
  puts "Creating #{opts[:size]} instance in #{@@global.zone}"
49
49
 
50
50
  unless opts[:keypair]
51
- puts "You did not specify a keypair. Unless you've prepared a user account".color(:blue)
52
- puts "on this image (#{opts[:ami]}) you will not be able to log in to it.".color(:blue)
51
+ puts "You did not specify a keypair. Unless you've prepared a user account".bright
52
+ puts "on this image (#{opts[:ami]}) you will not be able to log in to it.".bright
53
53
  exit unless Annoy.proceed?(:low)
54
54
  end
55
55
 
@@ -3,6 +3,17 @@ module Rudy
3
3
  module CLI
4
4
  class Candy < Rudy::CLI::CommandBase
5
5
 
6
+ def open
7
+ rmach = Rudy::Machines.new
8
+ machines = rmach.list
9
+ puts 1
10
+ if machines
11
+ `open http://#{machines.first.dns_public}`
12
+ else
13
+ puts "No machines"
14
+ end
15
+ end
16
+
6
17
  end
7
18
  end
8
19
  end
@@ -31,54 +31,35 @@ module Rudy
31
31
  # $ rudy config --all
32
32
  #
33
33
  def config
34
- return if @@config.nil?
34
+ # if Rudy.in_situ? # TODO: do something intelligent when running on EC2
35
35
 
36
+ if @@config.nil? || @@config.empty?
37
+ return if @@global.quiet
38
+ raise Rudy::NoConfig
39
+ end
40
+
41
+ outform = @@global.format == :json ? :to_json : :to_yaml
36
42
 
37
- @option.group ||= [@@global.environment, @@global.role].join(Rudy::DELIM)
38
-
39
- return if @@config.empty?
40
-
41
- # We need to check whether we're running on a human's computer
42
- # or within EC2 (we call that running "in-situ"). The userdata
43
- # available when running in-situ is in a different format.
44
- if Rudy.in_situ?
45
- puts "TODO: do something intelligent with config when running on EC2"
43
+ types = @option.marshal_dump.keys & @@config.keys # Intersections only
44
+ types = @@config.keys if @option.all
45
+ types = [:machines] if types.empty?
46
+
47
+ if @option.project
48
+ rf = File.join(RUDY_HOME, 'Rudyfile')
49
+ raise "Cannot find: #{rf}" unless File.exists?(rf)
50
+ puts File.read(rf)
51
+
52
+ elsif @option.script
53
+ conf = fetch_script_config
54
+ puts conf.to_hash.send(outform) if conf
55
+
46
56
  else
47
- if @option.all
48
- puts "# ACCOUNTS: not displayed"
49
- if @@config.machines?
50
- puts "# MACHINES: "
51
- y @@config.machines.to_hash
52
- end
53
- if @@config.routines?
54
- puts "# ROUTINES: "
55
- y @@config.routines.to_hash
56
- end
57
- elsif @option.defaults?
58
- y @@config.defaults.to_hash
59
- elsif @option.script
60
- y fetch_script_config.to_hash
61
- elsif @option.project
62
- rf = File.join(RUDY_HOME, 'Rudyfile')
63
- raise "Cannot find: #{rf}" unless File.exists?(rf)
64
- puts File.read(rf)
65
- else
66
- zon, env, rol = @@global.zone, @@global.environment, @@global.role
67
- usr, att = @@global.user, @argv.name
68
- val = @@config.machines.find_deferred(zon, env, rol, usr, att) || ''
69
- puts (val.is_a?(String)) ? val : val.to_hash.to_yaml
57
+ puts "# ACCOUNTS: [not displayed]" if types.delete(:accounts)
58
+ types.each do |conftype|
59
+ puts "# #{conftype.to_s.upcase}"
60
+ next unless @@config[conftype] # Nothing to output
61
+ puts @@config[conftype].to_hash.send(outform)
70
62
  end
71
-
72
- #name = @argv.first
73
- #if name && @@config.userdata.has_key?(which)
74
- # value = @@config.userdata[which][name.to_s]
75
- # puts value if value
76
- #elsif @option.all
77
- # puts @@config.to_yaml
78
- #else
79
- # value = @@config.userdata[which]
80
- # puts value.to_yaml if value
81
- #end
82
63
  end
83
64
 
84
65
  end