morpheus-cli 3.3.2.2 → 3.3.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/morpheus/cli.rb +16 -0
- data/lib/morpheus/cli/alias_command.rb +1 -1
- data/lib/morpheus/cli/cli_command.rb +3 -0
- data/lib/morpheus/cli/edit_profile_command.rb +46 -0
- data/lib/morpheus/cli/edit_rc_command.rb +61 -0
- data/lib/morpheus/cli/instances.rb +34 -32
- data/lib/morpheus/cli/library_container_scripts_command.rb +4 -4
- data/lib/morpheus/cli/library_container_templates_command.rb +2 -2
- data/lib/morpheus/cli/login.rb +1 -1
- data/lib/morpheus/cli/logout.rb +1 -1
- data/lib/morpheus/cli/man_command.rb +2 -7
- data/lib/morpheus/cli/option_parser.rb +28 -2
- data/lib/morpheus/cli/power_scheduling_command.rb +12 -13
- data/lib/morpheus/cli/remote.rb +3 -3
- data/lib/morpheus/cli/shell.rb +146 -52
- data/lib/morpheus/cli/tasks.rb +124 -36
- data/lib/morpheus/cli/version.rb +1 -1
- data/lib/morpheus/cli/workflows.rb +79 -45
- data/lib/morpheus/formatters.rb +2 -2
- data/lib/morpheus/terminal.rb +18 -5
- metadata +4 -2
@@ -151,7 +151,7 @@ class Morpheus::Cli::LibraryContainerScriptsCommand
|
|
151
151
|
|
152
152
|
def add(args)
|
153
153
|
options = {}
|
154
|
-
params = {'scriptType' => 'bash', 'scriptPhase' => '
|
154
|
+
params = {'scriptType' => 'bash', 'scriptPhase' => 'provision'}
|
155
155
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
156
156
|
opts.banner = subcommand_usage("[name]")
|
157
157
|
opts.on('--name VALUE', String, "Name") do |val|
|
@@ -160,7 +160,7 @@ class Morpheus::Cli::LibraryContainerScriptsCommand
|
|
160
160
|
opts.on('--type [bash|powershell]', String, "Script Type. Default is 'bash'") do |val|
|
161
161
|
params['scriptType'] = val
|
162
162
|
end
|
163
|
-
opts.on('--phase [start|stop
|
163
|
+
opts.on('--phase [provision|start|stop]', String, "Script Phase. Default is 'provision'") do |val|
|
164
164
|
params['scriptPhase'] = val
|
165
165
|
end
|
166
166
|
opts.on('--category VALUE', String, "Category") do |val|
|
@@ -169,7 +169,7 @@ class Morpheus::Cli::LibraryContainerScriptsCommand
|
|
169
169
|
opts.on('--script TEXT', String, "Contents of the script.") do |val|
|
170
170
|
params['script'] = val
|
171
171
|
end
|
172
|
-
opts.on('--file FILE', "File containing the script. This can be used instead --script" ) do |filename|
|
172
|
+
opts.on('--file FILE', "File containing the script. This can be used instead of --script" ) do |filename|
|
173
173
|
full_filename = File.expand_path(filename)
|
174
174
|
if File.exists?(full_filename)
|
175
175
|
params['script'] = File.read(full_filename)
|
@@ -257,7 +257,7 @@ class Morpheus::Cli::LibraryContainerScriptsCommand
|
|
257
257
|
opts.on('--script TEXT', String, "Contents of the script.") do |val|
|
258
258
|
params['script'] = val
|
259
259
|
end
|
260
|
-
opts.on('--file FILE', "File containing the script. This can be used instead --script" ) do |filename|
|
260
|
+
opts.on('--file FILE', "File containing the script. This can be used instead of --script" ) do |filename|
|
261
261
|
full_filename = File.expand_path(filename)
|
262
262
|
if File.exists?(full_filename)
|
263
263
|
params['script'] = File.read(full_filename)
|
@@ -188,7 +188,7 @@ class Morpheus::Cli::LibraryContainerTemplatesCommand
|
|
188
188
|
opts.on('--template TEXT', String, "Contents of the template.") do |val|
|
189
189
|
params['template'] = val
|
190
190
|
end
|
191
|
-
opts.on('--file FILE', "File containing the template. This can be used instead --template" ) do |filename|
|
191
|
+
opts.on('--file FILE', "File containing the template. This can be used instead of --template" ) do |filename|
|
192
192
|
full_filename = File.expand_path(filename)
|
193
193
|
if File.exists?(full_filename)
|
194
194
|
params['template'] = File.read(full_filename)
|
@@ -283,7 +283,7 @@ class Morpheus::Cli::LibraryContainerTemplatesCommand
|
|
283
283
|
opts.on('--template TEXT', String, "Contents of the template.") do |val|
|
284
284
|
params['template'] = val
|
285
285
|
end
|
286
|
-
opts.on('--file FILE', "File containing the template. This can be used instead --template" ) do |filename|
|
286
|
+
opts.on('--file FILE', "File containing the template. This can be used instead of --template" ) do |filename|
|
287
287
|
full_filename = File.expand_path(filename)
|
288
288
|
if File.exists?(full_filename)
|
289
289
|
params['template'] = File.read(full_filename)
|
data/lib/morpheus/cli/login.rb
CHANGED
@@ -78,7 +78,7 @@ class Morpheus::Cli::Login
|
|
78
78
|
# recalcuate echo vars
|
79
79
|
Morpheus::Cli::Echo.recalculate_variable_map()
|
80
80
|
# recalculate shell prompt after this change
|
81
|
-
if Morpheus::Cli::Shell.
|
81
|
+
if Morpheus::Cli::Shell.has_instance?
|
82
82
|
Morpheus::Cli::Shell.instance.reinitialize()
|
83
83
|
end
|
84
84
|
|
data/lib/morpheus/cli/logout.rb
CHANGED
@@ -63,7 +63,7 @@ class Morpheus::Cli::Logout
|
|
63
63
|
# recalcuate echo vars
|
64
64
|
Morpheus::Cli::Echo.recalculate_variable_map()
|
65
65
|
# recalculate shell prompt after this change
|
66
|
-
if Morpheus::Cli::Shell.
|
66
|
+
if Morpheus::Cli::Shell.has_instance?
|
67
67
|
Morpheus::Cli::Shell.instance.reinitialize()
|
68
68
|
end
|
69
69
|
return 0
|
@@ -111,13 +111,8 @@ EOT
|
|
111
111
|
def system_command_available?(cmd)
|
112
112
|
has_it = false
|
113
113
|
begin
|
114
|
-
cmd = cmd.strip
|
115
|
-
|
116
|
-
cmd =~ /^rm/ || cmd.strip =~ /^mv/ || cmd.strip =~ /^passwd/ ||
|
117
|
-
cmd.include?("/rm") || cmd.include?("/mv") || cmd.include?("/passwd")
|
118
|
-
raise_command_error "The specified system command '#{cmd}' is invalid."
|
119
|
-
end
|
120
|
-
system("which #{cmd} > /dev/null 2>&1")
|
114
|
+
cmd = cmd.strip.gsub("'",'')
|
115
|
+
system("which '#{cmd}' > /dev/null 2>&1")
|
121
116
|
has_it = $?.success?
|
122
117
|
rescue => e
|
123
118
|
raise e
|
@@ -8,7 +8,10 @@ module Morpheus
|
|
8
8
|
class Morpheus::Cli::OptionParser < OptionParser
|
9
9
|
|
10
10
|
attr_accessor :footer
|
11
|
-
|
11
|
+
|
12
|
+
# Array of option names to keep out of help message
|
13
|
+
attr_accessor :hidden_options
|
14
|
+
|
12
15
|
alias :original_to_s :to_s
|
13
16
|
|
14
17
|
def to_s
|
@@ -23,7 +26,19 @@ module Morpheus
|
|
23
26
|
end
|
24
27
|
if !self.to_a.empty?
|
25
28
|
#out << "Options:\n"
|
26
|
-
|
29
|
+
# the default way..
|
30
|
+
# out << summarize().join("")
|
31
|
+
|
32
|
+
# super hacky, should be examining the option, not the fully formatted description
|
33
|
+
my_summaries = summarize()
|
34
|
+
summarize().each do |opt_description|
|
35
|
+
is_hidden = (@hidden_options || []).find { |hidden_switch|
|
36
|
+
opt_description.include?("--#{hidden_switch}")
|
37
|
+
}
|
38
|
+
if !is_hidden
|
39
|
+
out << opt_description
|
40
|
+
end
|
41
|
+
end
|
27
42
|
end
|
28
43
|
if footer
|
29
44
|
# nice_footer = footer.split("\n").collect {|line| "#{summary_indent}#{line}" }.join("\n")
|
@@ -35,6 +50,17 @@ module Morpheus
|
|
35
50
|
out
|
36
51
|
end
|
37
52
|
|
53
|
+
def add_hidden_option(opt_name)
|
54
|
+
opt_array = [opt_name].flatten.compact
|
55
|
+
@hidden_options ||= []
|
56
|
+
opt_array.each do |val|
|
57
|
+
if !@hidden_options.include?(val)
|
58
|
+
@hidden_options << val
|
59
|
+
end
|
60
|
+
end
|
61
|
+
@hidden_options
|
62
|
+
end
|
63
|
+
|
38
64
|
end
|
39
65
|
|
40
66
|
end
|
@@ -113,7 +113,9 @@ class Morpheus::Cli::PowerSchedulingCommand
|
|
113
113
|
end
|
114
114
|
|
115
115
|
def _get(id, options)
|
116
|
-
|
116
|
+
options ||= {}
|
117
|
+
options[:max_servers] ||= 10
|
118
|
+
options[:max_instances] ||= 10
|
117
119
|
begin
|
118
120
|
schedule = find_schedule_by_name_or_id(id)
|
119
121
|
if schedule.nil?
|
@@ -168,23 +170,20 @@ class Morpheus::Cli::PowerSchedulingCommand
|
|
168
170
|
# print cyan,"No instances",reset,"\n"
|
169
171
|
else
|
170
172
|
print_h2 "Instances (#{instances.size})"
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
#print cyan, "(and #{instances.size - options[:max_instances]} more...)\n"
|
175
|
-
end
|
173
|
+
instance_rows = instances.first(options[:max_instances])
|
174
|
+
print as_pretty_table(instance_rows, [:id, :name])
|
175
|
+
print_results_pagination({'meta'=>{'total'=>instances.size,'size'=>instance_rows.size,'max'=>options[:max_servers],'offset'=>0}}, {:label => "instance in schedule", :n_label => "instances in schedule"})
|
176
176
|
end
|
177
177
|
|
178
178
|
## Hosts
|
179
179
|
if servers.size == 0
|
180
180
|
# print cyan,"No hosts",reset,"\n"
|
181
181
|
else
|
182
|
+
options[:max_servers] ||= 10
|
182
183
|
print_h2 "Hosts (#{servers.size})"
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
#print cyan, "(and #{servers.size - options[:max_servers]} more...)\n"
|
187
|
-
end
|
184
|
+
server_rows = servers.first(options[:max_servers])
|
185
|
+
print as_pretty_table(server_rows, [:id, :name])
|
186
|
+
print_results_pagination({'meta'=>{'total'=>servers.size,'size'=>server_rows.size,'max'=>options[:max_servers],'offset'=>0}}, {:label => "host in schedule", :n_label => "hosts in schedule"})
|
188
187
|
end
|
189
188
|
|
190
189
|
print reset,"\n"
|
@@ -226,7 +225,7 @@ class Morpheus::Cli::PowerSchedulingCommand
|
|
226
225
|
end
|
227
226
|
end
|
228
227
|
opts.on('--enabled [on|off]', String, "Can be used to disable it") do |val|
|
229
|
-
|
228
|
+
params['enabled'] = !(val.to_s == 'off' || val.to_s == 'false')
|
230
229
|
end
|
231
230
|
build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote, :quiet])
|
232
231
|
opts.footer = "Create a new power schedule." + "\n" +
|
@@ -305,7 +304,7 @@ class Morpheus::Cli::PowerSchedulingCommand
|
|
305
304
|
end
|
306
305
|
end
|
307
306
|
opts.on('--enabled [on|off]', String, "Can be used to disable it") do |val|
|
308
|
-
|
307
|
+
params['enabled'] = !(val.to_s == 'off' || val.to_s == 'false')
|
309
308
|
end
|
310
309
|
build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote, :quiet])
|
311
310
|
opts.footer = "Update a power schedule." + "\n" +
|
data/lib/morpheus/cli/remote.rb
CHANGED
@@ -558,7 +558,7 @@ EOT
|
|
558
558
|
# recalcuate echo vars
|
559
559
|
Morpheus::Cli::Echo.recalculate_variable_map()
|
560
560
|
# recalculate shell prompt after this change
|
561
|
-
if Morpheus::Cli::Shell.
|
561
|
+
if Morpheus::Cli::Shell.has_instance?
|
562
562
|
Morpheus::Cli::Shell.instance.reinitialize()
|
563
563
|
end
|
564
564
|
return 0, nil
|
@@ -600,7 +600,7 @@ EOT
|
|
600
600
|
# recalcuate echo vars
|
601
601
|
Morpheus::Cli::Echo.recalculate_variable_map()
|
602
602
|
# recalculate shell prompt after this change
|
603
|
-
if Morpheus::Cli::Shell.
|
603
|
+
if Morpheus::Cli::Shell.has_instance?
|
604
604
|
Morpheus::Cli::Shell.instance.reinitialize()
|
605
605
|
end
|
606
606
|
|
@@ -630,7 +630,7 @@ EOT
|
|
630
630
|
# recalcuate echo vars
|
631
631
|
Morpheus::Cli::Echo.recalculate_variable_map()
|
632
632
|
# recalculate shell prompt after this change
|
633
|
-
if Morpheus::Cli::Shell.
|
633
|
+
if Morpheus::Cli::Shell.has_instance?
|
634
634
|
Morpheus::Cli::Shell.instance.reinitialize()
|
635
635
|
end
|
636
636
|
return true
|
data/lib/morpheus/cli/shell.rb
CHANGED
@@ -16,6 +16,10 @@ class Morpheus::Cli::Shell
|
|
16
16
|
|
17
17
|
@@instance = nil
|
18
18
|
|
19
|
+
def self.has_instance?
|
20
|
+
defined?(@@instance) && @@instance
|
21
|
+
end
|
22
|
+
|
19
23
|
def self.instance
|
20
24
|
@@instance ||= reload_instance
|
21
25
|
end
|
@@ -108,12 +112,55 @@ class Morpheus::Cli::Shell
|
|
108
112
|
usage = "Usage: morpheus #{command_name}"
|
109
113
|
optparse = OptionParser.new do|opts|
|
110
114
|
opts.banner = usage
|
115
|
+
# change to a temporary home directory, delete it afterwards.
|
116
|
+
opts.on('-e','--exec COMMAND', "Execute the provided morpheus commands and exit.") do |val|
|
117
|
+
@execute_mode = true
|
118
|
+
@execute_mode_command = val
|
119
|
+
end
|
111
120
|
opts.on('--norc','--norc', "Do not read and execute the personal initialization script .morpheusrc") do
|
112
121
|
@norc = true
|
113
122
|
end
|
114
123
|
opts.on('-I','--insecure', "Allow for insecure HTTPS communication i.e. bad SSL certificate") do |val|
|
115
124
|
@@insecure = true
|
116
125
|
Morpheus::RestClient.enable_ssl_verification = false
|
126
|
+
end
|
127
|
+
opts.on('-Z','--incognito', "Incognito mode. Use a temporary shell, no saved credentials and no history.") do
|
128
|
+
@incognito_mode = true
|
129
|
+
#@norc = true # perhaps?
|
130
|
+
tmpdir = ENV['MORPHEUS_CLI_TMPDIR'] || ENV['TMPDIR'] || ENV['TMP']
|
131
|
+
if !tmpdir
|
132
|
+
puts_error "Temporary directory not found. Use environment variable MORPHEUS_CLI_TMPDIR or TMPDIR or TMP"
|
133
|
+
end
|
134
|
+
@original_home_directory = my_terminal.home_directory
|
135
|
+
@temporary_home_directory = File.join(tmpdir, "morpheus-temp-shell-#{rand().to_s[2..7]}")
|
136
|
+
# change to a temporary home directory
|
137
|
+
Morpheus::Logging::DarkPrinter.puts "incognito mode" if Morpheus::Logging.debug?
|
138
|
+
Morpheus::Logging::DarkPrinter.puts "temporary home directory is #{@temporary_home_directory}" if Morpheus::Logging.debug?
|
139
|
+
my_terminal.set_home_directory(@temporary_home_directory)
|
140
|
+
# wow..this already has cached list of Remote.appliances
|
141
|
+
# this is kinda nice though..keep it for now,
|
142
|
+
#Morpheus::Cli::Remote.load_appliance_file
|
143
|
+
|
144
|
+
Morpheus::Cli::Remote.appliances.each do |app_name, app|
|
145
|
+
#app[:username] = "(anonymous)"
|
146
|
+
#app[:status] = "fresh"
|
147
|
+
app[:authenticated] = false
|
148
|
+
app.delete(:username)
|
149
|
+
app.delete(:last_login_at)
|
150
|
+
app.delete(:last_logout_at)
|
151
|
+
app.delete(:last_success_at)
|
152
|
+
app.delete(:last_check)
|
153
|
+
app.delete(:username)
|
154
|
+
app.delete(:error)
|
155
|
+
#app[:error] = "ho ho ho"
|
156
|
+
end
|
157
|
+
|
158
|
+
# Morpheus::Cli::Remote.save_appliances(new_remote_config)
|
159
|
+
|
160
|
+
# Morpheus::Cli::Remote.clear_active_appliance
|
161
|
+
# Morpheus::Cli::Credentials.clear_saved_credentials(@appliance_name)
|
162
|
+
# Morpheus::Cli::Credentials.load_saved_credentials
|
163
|
+
# Morpheus::Cli::Credentials.new(@appliance_name, @appliance_url).load_saved_credentials()
|
117
164
|
end
|
118
165
|
opts.on('-C','--nocolor', "Disable ANSI coloring") do
|
119
166
|
Term::ANSIColor::coloring = false
|
@@ -146,18 +193,63 @@ class Morpheus::Cli::Shell
|
|
146
193
|
# recalculate_prompt()
|
147
194
|
# recalculate_auto_complete_commands()
|
148
195
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
#
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
196
|
+
result = nil
|
197
|
+
if @execute_mode_command
|
198
|
+
# execute a single command and exit
|
199
|
+
result = execute_commands(@execute_mode_command)
|
200
|
+
else
|
201
|
+
# interactive prompt
|
202
|
+
result = 0
|
203
|
+
@exit_now_please = false
|
204
|
+
while !@exit_now_please do
|
205
|
+
Readline.completion_append_character = " "
|
206
|
+
Readline.completion_proc = @auto_complete
|
207
|
+
Readline.basic_word_break_characters = ""
|
208
|
+
#Readline.basic_word_break_characters = "\t\n\"\‘`@$><=;|&{( "
|
209
|
+
input = Readline.readline(@calculated_prompt, true).to_s
|
210
|
+
input = input.strip
|
211
|
+
|
212
|
+
result = execute_commands(input)
|
213
|
+
end
|
159
214
|
end
|
160
215
|
|
216
|
+
# incognito mode, cover our tracks
|
217
|
+
if @temporary_home_directory
|
218
|
+
if @temporary_home_directory.include?("morpheus-temp-shell")
|
219
|
+
begin
|
220
|
+
FileUtils.remove_dir(@temporary_home_directory, true)
|
221
|
+
Morpheus::Logging::DarkPrinter.puts "cleaning up temporary home directory #{@temporary_home_directory}" if Morpheus::Logging.debug?
|
222
|
+
rescue
|
223
|
+
end
|
224
|
+
end
|
225
|
+
@temporary_home_directory = nil
|
226
|
+
if @original_home_directory
|
227
|
+
my_terminal.set_home_directory(@original_home_directory)
|
228
|
+
end
|
229
|
+
@original_home_directory = nil
|
230
|
+
end
|
231
|
+
|
232
|
+
return result
|
233
|
+
end
|
234
|
+
|
235
|
+
# return exitstatus integer for a given command result
|
236
|
+
#todo: clean up CliCommand return values, handle a few diff types for now
|
237
|
+
def parse_result_exitstatus(result)
|
238
|
+
exit_code, err = 0, nil
|
239
|
+
if result.is_a?(Array) # exit_code, err
|
240
|
+
exit_code = result[0].to_i
|
241
|
+
err = result[1]
|
242
|
+
elsif result == nil || result == true || result == 0
|
243
|
+
exit_code = 0
|
244
|
+
elsif result == false
|
245
|
+
exit_code = 1
|
246
|
+
# elsif result.is_a?(Integer)
|
247
|
+
# exit_code = result.to_i
|
248
|
+
else
|
249
|
+
exit_code = result.to_i
|
250
|
+
end
|
251
|
+
# return exit_code, err
|
252
|
+
return exit_code
|
161
253
|
end
|
162
254
|
|
163
255
|
# same as Terminal instance
|
@@ -198,12 +290,12 @@ class Morpheus::Cli::Shell
|
|
198
290
|
if flow_cmd == '&&'
|
199
291
|
# AND operator
|
200
292
|
current_operator = flow_cmd
|
201
|
-
if previous_command_result
|
293
|
+
if parse_result_exitstatus(previous_command_result) != 0
|
202
294
|
still_executing = false
|
203
295
|
end
|
204
296
|
elsif flow_cmd == '||' # or with previous command
|
205
297
|
current_operator = flow_cmd
|
206
|
-
if previous_command_result
|
298
|
+
if parse_result_exitstatus(previous_command_result) == 0
|
207
299
|
still_executing = false
|
208
300
|
end
|
209
301
|
elsif flow_cmd == '|' # or with previous command
|
@@ -282,7 +374,9 @@ class Morpheus::Cli::Shell
|
|
282
374
|
if input == 'exit'
|
283
375
|
#print cyan,"Goodbye\n",reset
|
284
376
|
@history_logger.info "exit" if @history_logger
|
285
|
-
|
377
|
+
@exit_now_please = true
|
378
|
+
return 0
|
379
|
+
#exit 0
|
286
380
|
elsif input == 'help'
|
287
381
|
|
288
382
|
#print_h1 "Morpheus Shell Help", [], white
|
@@ -356,44 +450,44 @@ class Morpheus::Cli::Shell
|
|
356
450
|
@history_logger = load_history_logger
|
357
451
|
puts "history cleared!"
|
358
452
|
return 0
|
359
|
-
elsif input == "edit rc"
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
elsif input == "edit profile"
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
453
|
+
# elsif input == "edit rc"
|
454
|
+
# fn = Morpheus::Cli::DotFile.morpheusrc_filename
|
455
|
+
# editor = ENV['EDITOR'] # || 'nano'
|
456
|
+
# if !editor
|
457
|
+
# puts "You have no EDITOR defined. Use 'export EDITOR=emacs'"
|
458
|
+
# #puts "Trying nano..."
|
459
|
+
# #editor = "nano"
|
460
|
+
# end
|
461
|
+
# system("which #{editor} > /dev/null 2>&1")
|
462
|
+
# has_editor = $?.success?
|
463
|
+
# if has_editor
|
464
|
+
# puts "opening #{fn} for editing with #{editor} ..."
|
465
|
+
# system("#{editor} #{fn}")
|
466
|
+
# puts "Use 'reload' to re-execute your startup script #{File.basename(fn)}"
|
467
|
+
# else
|
468
|
+
# puts_error2 Morpheus::Terminal.angry_prompt
|
469
|
+
# puts_error "The defined EDITOR '#{editor}' was not found on your system."
|
470
|
+
# end
|
471
|
+
# return 0 # $?
|
472
|
+
# elsif input == "edit profile"
|
473
|
+
# fn = Morpheus::Cli::DotFile.morpheus_profile_filename
|
474
|
+
# editor = ENV['EDITOR'] # || 'nano'
|
475
|
+
# if !editor
|
476
|
+
# puts "You have no EDITOR defined. Use 'export EDITOR=emacs'."
|
477
|
+
# #puts "Trying nano..."
|
478
|
+
# #editor = "nano"
|
479
|
+
# end
|
480
|
+
# system("which #{editor} > /dev/null 2>&1")
|
481
|
+
# has_editor = $?.success?
|
482
|
+
# if has_editor
|
483
|
+
# puts "opening #{fn} for editing with #{editor} ..."
|
484
|
+
# `#{editor} #{fn}`
|
485
|
+
# puts "Use 'reload' to re-execute your startup script #{File.basename(fn)}"
|
486
|
+
# else
|
487
|
+
# puts_error Morpheus::Terminal.angry_prompt
|
488
|
+
# puts_error "The defined EDITOR '#{editor}' was not found on your system."
|
489
|
+
# end
|
490
|
+
# return 0 # $?
|
397
491
|
elsif input == 'reload' || input == 'reload!'
|
398
492
|
# raise RestartShellPlease
|
399
493
|
#log_history_command(input)
|
@@ -497,7 +591,7 @@ class Morpheus::Cli::Shell
|
|
497
591
|
::RestClient.log = Morpheus::Logging.debug? ? Morpheus::Logging::DarkPrinter.instance : nil
|
498
592
|
@return_to_log_level = nil
|
499
593
|
end
|
500
|
-
|
594
|
+
|
501
595
|
# commands should be a number or nil (treated as 0)
|
502
596
|
if cmd_result == true
|
503
597
|
cmd_result = 0
|