right_link 5.9.1 → 5.9.2

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.
@@ -1,7 +1,7 @@
1
1
  # === Synopsis:
2
- # RightScale Log Level Manager (rs_log_level) - (c) 2009-2011 RightScale Inc
2
+ # RightScale Log Level Manager (rs_log_level) - (c) 2009-2013 RightScale Inc
3
3
  #
4
- # Log level manager allows setting and retrieving the RightLink agent
4
+ # Log level manager allows setting and retrieving the RightLink agent and Chef/RightScript
5
5
  # log level.
6
6
  #
7
7
  # === Examples:
@@ -16,20 +16,26 @@
16
16
  # rs_set_log_level [--log-level, -l debug|info|warn|error|fatal]
17
17
  #
18
18
  # Options:
19
- # --log-level, -l LVL Set log level of RightLink agent
19
+ # --log-level, -l LVL Set log level(for Chef/RightScript by default)
20
+ # --agent Set/get log level of RightLink agent
20
21
  # --verbose, -v Display debug information
21
22
  # --help: Display help
22
23
  # --version: Display version information
23
24
  #
24
- # No options prints the current RightLink agent log level
25
+ # No options prints the current Chef/RightScript log level
25
26
  #
26
27
 
27
28
  require 'right_agent/scripts/log_level_manager'
28
29
  require 'trollop'
30
+ require File.expand_path(File.join(File.dirname(__FILE__), 'command_helper'))
31
+ require File.expand_path(File.join(File.dirname(__FILE__), 'tagger'))
29
32
 
30
33
  module RightScale
31
34
 
32
35
  class RightLinkLogLevelManager < LogLevelManager
36
+ include CommandHelper
37
+
38
+ LOG_LEVEL_TAG = "rs_agent_dev:log_level"
33
39
 
34
40
  # Convenience wrapper for creating and running log level manager
35
41
  #
@@ -39,6 +45,7 @@ module RightScale
39
45
  m = RightLinkLogLevelManager.new
40
46
 
41
47
  options = m.parse_args
48
+ m.check_privileges
42
49
  m.manage(options)
43
50
 
44
51
  if options[:level] =~ /debug/i && !RightScale::Platform.windows?
@@ -47,10 +54,25 @@ module RightScale
47
54
  puts " log daemon may discard these messages. If debug messages do not appear,"
48
55
  puts " review your syslog configuration and restart the daemon."
49
56
  end
50
- rescue Errno::EACCES => e
51
- write_error(e.message)
52
- write_error("Try elevating privilege (sudo/runas) before invoking this command.")
53
- exit(2)
57
+ end
58
+
59
+ def manage(options)
60
+ return super(options) if options[:agent]
61
+ cmd = options[:level] ? { :name => :add_tag, } : { :name => :get_tags }
62
+ cmd[:tag] = "#{LOG_LEVEL_TAG}=#{options[:level]}" if options[:level]
63
+ res = send_command(cmd, options[:verbose], Tagger::TAG_REQUEST_TIMEOUT)
64
+ case cmd[:name]
65
+ when :get_tags
66
+ fail("Getting log level failed: #{res.inspect}") unless res.kind_of?(Array)
67
+ log_level_tag = res.detect { |tag| tag.start_with?(LOG_LEVEL_TAG) }
68
+ level = log_level_tag ? log_level_tag.split("=").last : send_command({ :name => 'get_log_level' }, options[:verbose], 5)
69
+ write_output("Chef/RightScript log level: #{level.to_s.upcase}")
70
+ when :add_tag
71
+ r = serialize_operation_result(res)
72
+ fail("Setting log level failed: #{r.inspect}") unless r.kind_of?(OperationResult)
73
+ fail("Setting log level failed: #{r.content}") unless r.success?
74
+ write_output("Successfully set log level to #{options[:level]}")
75
+ end
54
76
  end
55
77
 
56
78
  # Create options hash from command line arguments
@@ -62,31 +84,22 @@ module RightScale
62
84
 
63
85
  parser = Trollop::Parser.new do
64
86
  opt :level, "", :type => String, :long => "--log-level", :short => "-l"
87
+ opt :agent
65
88
  opt :verbose
66
89
  version ""
67
90
  end
68
91
 
69
- begin
92
+ parse do
70
93
  options.merge!(parser.parse)
71
94
  if options[:level]
72
95
  fail("Invalig log level '#{options[:level]}'") unless AgentManager::LEVELS.include?(options[:level].to_sym)
73
96
  end
74
97
  options
75
- rescue Trollop::HelpNeeded
76
- write_output(Usage.scan(__FILE__))
77
- exit
78
- rescue Trollop::VersionNeeded
79
- write_output(version)
80
- succeed
81
- rescue SystemExit => e
82
- raise e
83
- rescue Exception => e
84
- write_output(e.message + "\nUse --help for additional information")
85
- exit(1)
86
98
  end
87
99
  end
88
100
 
89
101
  protected
102
+
90
103
  # Writes to STDOUT (and a placeholder for spec mocking).
91
104
  #
92
105
  # === Parameters
@@ -99,7 +112,7 @@ protected
99
112
  #
100
113
  # === Parameters
101
114
  # @param [String] message to write
102
- def write_error(message)
115
+ def self.write_error(message)
103
116
  STDERR.puts(message)
104
117
  end
105
118
 
@@ -108,12 +121,11 @@ protected
108
121
  # === Return
109
122
  # (String):: Version information
110
123
  def version
111
- gemspec = eval(File.read(File.join(File.dirname(__FILE__), '..', 'right_link.gemspec')))
112
- "rs_log_level #{gemspec.version} - RightLink's log level (c) 2011 RightScale"
124
+ "rs_log_level #{right_link_version} - RightLink's log level (c) 2013 RightScale"
113
125
  end
114
126
 
115
- def succeed
116
- exit(0)
127
+ def usage
128
+ Usage.scan(__FILE__)
117
129
  end
118
130
 
119
131
  end
@@ -1,5 +1,5 @@
1
1
  # === Synopsis:
2
- # RightScale Ohai Runner - Copyright (c) 2012 by RightScale Inc
2
+ # RightScale Ohai Runner - Copyright (c) 2013 by RightScale Inc
3
3
  #
4
4
  # runs Ohai in the RightScale environment
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # === Synopsis:
2
- # RightScale Re-enroller (rs_reenroll) - (c) 2010-2011 RightScale Inc
2
+ # RightScale Re-enroller (rs_reenroll) - (c) 2010-2013 RightScale Inc
3
3
  #
4
4
  # Re-enroller causes the instance to re-enroll
5
5
  # CAUTION: This process may take a while to take place, during that time
@@ -21,12 +21,14 @@ require 'fileutils'
21
21
  require 'right_agent'
22
22
  require 'right_agent/scripts/usage'
23
23
  require 'right_agent/scripts/common_parser'
24
+ require File.expand_path(File.join(File.dirname(__FILE__), 'command_helper'))
24
25
 
25
26
  require File.normalize_path(File.join(File.dirname(__FILE__), '..', 'lib', 'instance', 'agent_config'))
26
27
 
27
28
  module RightScale
28
29
 
29
30
  class Reenroller
31
+ include CommandHelper
30
32
 
31
33
  if RightScale::Platform.windows?
32
34
  # Note we currently only need a reenroller state file under windows.
@@ -96,17 +98,8 @@ module RightScale
96
98
  version ""
97
99
  end
98
100
 
99
- begin
101
+ parse do
100
102
  parser.parse
101
- rescue Trollop::HelpNeeded
102
- puts Usage.scan(__FILE__)
103
- exit
104
- rescue Trollop::VersionNeeded
105
- puts version
106
- exit(0)
107
- rescue Trollop::CommandlineError => e
108
- puts e.message + "\nUse --help for additional information"
109
- exit(1)
110
103
  end
111
104
  end
112
105
 
@@ -162,8 +155,11 @@ module RightScale
162
155
  # === Return
163
156
  # (String):: Version information
164
157
  def version
165
- gemspec = eval(File.read(File.join(File.dirname(__FILE__), '..', 'right_link.gemspec')))
166
- "rs_reenroll #{gemspec.version} - RightLink's reenroller (c) 2011 RightScale"
158
+ "rs_reenroll #{right_link_version} - RightLink's reenroller (c) 2013 RightScale"
159
+ end
160
+
161
+ def usage
162
+ Usage.scan(__FILE__)
167
163
  end
168
164
 
169
165
  end # Reenroller
@@ -1,5 +1,5 @@
1
1
  # === Synopsis:
2
- # RightScale Server Import Utility (rs_connect) - (c) 2011 RightScale Inc
2
+ # RightScale Server Import Utility (rs_connect) - (c) 2013 RightScale Inc
3
3
  #
4
4
  # This utility allows an arbitrary virtual or physical machine to be
5
5
  # managed by the RightScale dashboard.
@@ -32,10 +32,12 @@ require 'right_agent/scripts/usage'
32
32
  require 'right_agent/scripts/common_parser'
33
33
  require 'right_http_connection'
34
34
  require File.normalize_path(File.join(File.dirname(__FILE__), '..', 'lib', 'instance'))
35
+ require File.expand_path(File.join(File.dirname(__FILE__), 'command_helper'))
35
36
 
36
37
  module RightScale
37
38
 
38
39
  class ServerImporter
40
+ include CommandHelper
39
41
  # Exception class to use as a token that something went wrong with an HTTP query
40
42
  class QueryFailed < Exception; end
41
43
 
@@ -136,55 +138,22 @@ module RightScale
136
138
  version ""
137
139
  end
138
140
 
139
- begin
141
+ parse do
140
142
  options.merge(parser.parse)
141
- rescue Trollop::HelpNeeded
142
- puts Usage.scan(__FILE__)
143
- exit
144
- rescue Trollop::CommandlineError => e
145
- puts e.message + "\nUse --help for additional information"
146
- exit(1)
147
- rescue Trollop::VersionNeeded
148
- puts version
149
- succeed
150
143
  end
151
144
  end
152
145
 
153
146
  protected
154
-
155
- # Print error on console and exit abnormally
156
- #
157
- # === Parameter
158
- # reason(String|Exception):: Error message or exception, default to nil (no message printed)
159
- # print_usage(Boolean):: Whether script usage should be printed, default to false
160
- #
161
- # === Return
162
- # R.I.P. does not return
163
- def fail(reason=nil, print_usage=false)
164
- case reason
165
- when Errno::EACCES
166
- STDERR.puts reason.message
167
- STDERR.puts "Try elevating privilege (sudo/runas) before invoking this command."
168
- code = 2
169
- when Exception
170
- STDERR.puts "** #{reason.message}"
171
- code = 1
172
- else
173
- STDERR.puts "** #{reason}" if reason
174
- code = 1
175
- end
176
-
177
- puts Usage.scan(__FILE__) if print_usage
178
- exit(code)
179
- end
180
-
181
147
  # Version information
182
148
  #
183
149
  # === Return
184
150
  # (String):: Version information
185
151
  def version
186
- gemspec = eval(File.read(File.join(File.dirname(__FILE__), '..', 'right_link.gemspec')))
187
- "rs_connect #{gemspec.version} - RightLink's server importer (c) 2011 RightScale"
152
+ "rs_connect #{right_link_version} - RightLink's server importer (c) 2013 RightScale"
153
+ end
154
+
155
+ def usage
156
+ Usage.scan(__FILE__)
188
157
  end
189
158
 
190
159
  private
@@ -285,9 +254,6 @@ protected
285
254
  return uri
286
255
  end
287
256
 
288
- def succeed
289
- exit(0)
290
- end
291
257
  end
292
258
 
293
259
  end
@@ -1,5 +1,5 @@
1
1
  # === Synopsis:
2
- # RightScale System Shutdown Utility (rs_shutdown) - (c) 2011 RightScale Inc
2
+ # RightScale System Shutdown Utility (rs_shutdown) - (c) 2013 RightScale Inc
3
3
  #
4
4
  # This utility allows the given system to be shutdown or rebooted.
5
5
  #
@@ -35,10 +35,12 @@ require 'right_agent/scripts/usage'
35
35
  require 'right_agent/scripts/common_parser'
36
36
 
37
37
  require File.normalize_path(File.join(File.dirname(__FILE__), '..', 'lib', 'instance', 'shutdown_request'))
38
+ require File.expand_path(File.join(File.dirname(__FILE__), 'command_helper'))
38
39
 
39
40
  module RightScale
40
41
 
41
42
  class ShutdownClient
43
+ include CommandHelper
42
44
 
43
45
  # Run
44
46
  #
@@ -48,17 +50,14 @@ module RightScale
48
50
  # === Return
49
51
  # true:: Always return true
50
52
  def run(options)
53
+ check_privileges
51
54
  fail("Missing required shutdown argument") unless options[:level]
52
55
  cmd = {}
53
56
  cmd[:name] = :set_shutdown_request
54
57
  cmd[:level] = options[:level]
55
58
  cmd[:immediately] = options[:immediately]
56
- config_options = AgentConfig.agent_options('instance')
57
- listen_port = config_options[:listen_port]
58
- fail('Could not retrieve agent listen port') unless listen_port
59
- client = CommandClient.new(listen_port, config_options[:cookie])
60
59
  begin
61
- client.send_command(cmd, options[:verbose]) do |response|
60
+ send_command(cmd, options[:verbose]) do |response|
62
61
  if response[:error]
63
62
  fail("Failed #{cmd.inspect} with #{response[:error]}")
64
63
  else
@@ -94,66 +93,27 @@ module RightScale
94
93
  conflicts :deferred, :immediately
95
94
  end
96
95
 
97
- begin
96
+ parse do
98
97
  options.merge!(parser.parse)
99
98
  options[:level] = ::RightScale::ShutdownRequest::REBOOT if options[:reboot]
100
99
  options[:level] = ::RightScale::ShutdownRequest::STOP if options[:stop]
101
100
  options[:level] = ::RightScale::ShutdownRequest::TERMINATE if options[:terminate]
102
101
  options[:immediately] = false if options[:deferred]
103
- rescue Trollop::VersionNeeded
104
- puts version
105
- succeed
106
- rescue Trollop::HelpNeeded
107
- puts Usage.scan(__FILE__)
108
- exit
109
- rescue SystemExit => e
110
- raise e
111
- rescue Exception => e
112
- puts e.message + "\nUse --help for additional information"
113
- exit(1)
114
102
  end
115
103
  options
116
104
  end
117
105
 
118
106
  protected
119
-
120
- # Print error on console and exit abnormally
121
- #
122
- # === Parameter
123
- # reason(String|Exception):: Error message or exception, default to nil (no message printed)
124
- # print_usage(Boolean):: Whether script usage should be printed, default to false
125
- #
126
- # === Return
127
- # R.I.P. does not return
128
- def fail(reason=nil, print_usage=false)
129
- case reason
130
- when Errno::EACCES
131
- STDERR.puts "** #{reason.message}"
132
- STDERR.puts "** Try elevating privilege (sudo/runas) before invoking this command."
133
- code = 2
134
- when Exception
135
- STDERR.puts "** #{reason.message}"
136
- code = 1
137
- else
138
- STDERR.puts "** #{reason}" if reason
139
- code = 1
140
- end
141
-
142
- puts Usage.scan(__FILE__) if print_usage
143
- exit(code)
144
- end
145
-
146
107
  # Version information
147
108
  #
148
109
  # === Return
149
110
  # (String):: Version information
150
111
  def version
151
- gemspec = eval(File.read(File.join(File.dirname(__FILE__), '..', 'right_link.gemspec')))
152
- "rs_shutdown #{gemspec.version} - RightLink's shutdown client (c) 2011 RightScale"
112
+ "rs_shutdown #{right_link_version} - RightLink's shutdown client (c) 2013 RightScale"
153
113
  end
154
114
 
155
- def succeed
156
- exit(0)
115
+ def usage
116
+ Usage.scan(__FILE__)
157
117
  end
158
118
 
159
119
  end # ShutdownClient
@@ -1,5 +1,5 @@
1
1
  # === Synopsis:
2
- # RightScale System Configuration Utility (system) - (c) 2011 RightScale Inc
2
+ # RightScale System Configuration Utility (system) - (c) 2013 RightScale Inc
3
3
  #
4
4
  # This utility performs miscellaneous system configuration tasks.
5
5
  #
@@ -24,6 +24,7 @@ require 'right_agent/scripts/common_parser'
24
24
 
25
25
  # RightLink dependencies
26
26
  require File.normalize_path(File.join(File.dirname(__FILE__), '..', 'lib', 'instance', 'agent_config'))
27
+ require File.expand_path(File.join(File.dirname(__FILE__), 'command_helper'))
27
28
 
28
29
  cloud_dir = RightScale::AgentConfig.cloud_state_dir
29
30
 
@@ -41,6 +42,7 @@ end
41
42
 
42
43
  module RightScale
43
44
  class SystemConfigurator
45
+ include CommandHelper
44
46
  RSA_KEY = File.join(RightScale::Platform.filesystem.ssh_cfg_dir, 'ssh_host_rsa_key')
45
47
  DSA_KEY = File.join(RightScale::Platform.filesystem.ssh_cfg_dir, 'ssh_host_dsa_key')
46
48
  SUDO_USER = 'rightscale'
@@ -109,16 +111,8 @@ module RightScale
109
111
  opt :action, "", :type => :string
110
112
  end
111
113
 
112
- begin
114
+ parse do
113
115
  parser.parse
114
- rescue Trollop::HelpNeeded
115
- puts Usage.scan(__FILE__)
116
- exit
117
- rescue Trollop::CommandlineError => e
118
- puts e.message + "\nUse --help for additional information"
119
- exit(1)
120
- rescue SystemExit => e
121
- raise e
122
116
  end
123
117
  end
124
118