rhc 0.97.17 → 0.98.16
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/rhc +9 -9
- data/bin/rhc-port-forward +3 -0
- data/bin/rhc-sshkey +3 -0
- data/features/README.md +163 -35
- data/features/application.feature +24 -0
- data/features/cartridge.feature +24 -0
- data/features/client.feature +11 -0
- data/features/domain.feature +29 -0
- data/features/lib/rhc_helper.rb +14 -0
- data/features/lib/rhc_helper/app.rb +2 -8
- data/features/lib/rhc_helper/cartridge.rb +1 -7
- data/features/lib/rhc_helper/commandify.rb +37 -6
- data/features/lib/rhc_helper/domain.rb +5 -1
- data/features/lib/rhc_helper/httpify.rb +124 -60
- data/features/lib/rhc_helper/loggable.rb +0 -2
- data/features/lib/rhc_helper/persistable.rb +12 -2
- data/features/lib/rhc_helper/sshkey.rb +29 -0
- data/features/multiple_cartridge.feature +17 -0
- data/features/sshkey.feature +58 -0
- data/features/step_definitions/application_steps.rb +60 -52
- data/features/step_definitions/cartridge_steps.rb +22 -24
- data/features/step_definitions/client_steps.rb +9 -2
- data/features/step_definitions/domain_steps.rb +4 -0
- data/features/step_definitions/sshkey_steps.rb +56 -0
- data/features/support/assumptions.rb +37 -0
- data/features/support/before_hooks.rb +25 -0
- data/features/support/env.rb +84 -39
- data/features/support/key1 +27 -0
- data/features/support/key1.pub +1 -0
- data/features/support/key2 +27 -0
- data/features/support/key2.pub +1 -0
- data/features/support/key3.pub +1 -0
- data/features/support/ssh.sh +2 -0
- data/features/verify.feature +18 -159
- data/lib/rhc-common.rb +8 -21
- data/lib/rhc.rb +9 -5
- data/lib/rhc/autocomplete.rb +68 -0
- data/lib/rhc/autocomplete_templates/rhc.erb +33 -0
- data/lib/rhc/cli.rb +9 -6
- data/lib/rhc/command_runner.rb +108 -0
- data/lib/rhc/commands.rb +66 -132
- data/lib/rhc/commands/base.rb +95 -24
- data/lib/rhc/commands/domain.rb +33 -50
- data/lib/rhc/commands/port-forward.rb +81 -0
- data/lib/rhc/commands/setup.rb +1 -1
- data/lib/rhc/commands/sshkey.rb +95 -0
- data/lib/rhc/config.rb +108 -103
- data/lib/rhc/context_helper.rb +19 -0
- data/lib/rhc/coverage_helper.rb +1 -1
- data/lib/rhc/exceptions.rb +55 -4
- data/lib/rhc/help_formatter.rb +2 -3
- data/lib/rhc/helpers.rb +31 -23
- data/lib/{rhc-rest.rb → rhc/rest.rb} +95 -23
- data/lib/{rhc-rest → rhc/rest}/application.rb +1 -1
- data/lib/{rhc-rest → rhc/rest}/cartridge.rb +1 -1
- data/lib/{rhc-rest → rhc/rest}/client.rb +40 -9
- data/lib/{rhc-rest → rhc/rest}/domain.rb +1 -1
- data/lib/{rhc-rest → rhc/rest}/key.rb +11 -1
- data/lib/{rhc-rest → rhc/rest}/user.rb +1 -1
- data/lib/rhc/ssh_key_helpers.rb +10 -1
- data/lib/rhc/targz.rb +7 -8
- data/lib/rhc/usage_templates/command_help.erb +7 -6
- data/lib/rhc/usage_templates/help.erb +6 -9
- data/lib/rhc/usage_templates/missing_help.erb +1 -0
- data/lib/rhc/version.rb +2 -2
- data/lib/rhc/wizard.rb +4 -9
- data/spec/coverage_helper.rb +2 -2
- data/spec/rest_spec_helper.rb +66 -16
- data/spec/rhc/cli_spec.rb +16 -5
- data/spec/rhc/command_spec.rb +61 -6
- data/spec/rhc/commands/domain_spec.rb +50 -27
- data/spec/rhc/commands/port-forward_spec.rb +133 -0
- data/spec/rhc/commands/setup_spec.rb +2 -2
- data/spec/rhc/commands/sshkey_spec.rb +141 -0
- data/spec/rhc/common_spec.rb +1 -1
- data/spec/rhc/config_spec.rb +6 -4
- data/spec/rhc/helpers_spec.rb +0 -21
- data/spec/rhc/rest_application_spec.rb +7 -7
- data/spec/rhc/rest_client_spec.rb +87 -24
- data/spec/rhc/rest_spec.rb +36 -36
- data/spec/rhc/wizard_spec.rb +3 -3
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +3 -3
- metadata +61 -31
- data/lib/rhc-rest/exceptions/exceptions.rb +0 -75
- data/test/functional/application_test.rb +0 -71
- data/test/functional/domain_test.rb +0 -123
- data/test/functional/test_credentials.rb +0 -5
- data/test/sample-usage.rb +0 -122
- data/test/support/server.rb +0 -14
- data/test/support/testcase.rb +0 -3
- data/test/test_helper.rb +0 -4
- data/test/unit/command_test.rb +0 -19
data/lib/rhc/commands.rb
CHANGED
@@ -3,100 +3,6 @@ require 'rhc/helpers'
|
|
3
3
|
|
4
4
|
module RHC
|
5
5
|
module Commands
|
6
|
-
class CommandHelpBindings
|
7
|
-
def initialize(command, instance_commands, global_options)
|
8
|
-
@command = command
|
9
|
-
@actions = instance_commands.collect do |ic|
|
10
|
-
m = /^#{command.name} ([^ ]+)/.match(ic[0])
|
11
|
-
# if we have a match and it is not an alias then we can use it
|
12
|
-
m and ic[0] == ic[1].name ? {:name => m[1], :summary => ic[1].summary || ""} : nil
|
13
|
-
end
|
14
|
-
@actions.compact!
|
15
|
-
@global_options = global_options
|
16
|
-
end
|
17
|
-
end
|
18
|
-
class Runner < Commander::Runner
|
19
|
-
# regex fix from git - match on word boundries
|
20
|
-
def valid_command_names_from *args
|
21
|
-
arg_string = args.delete_if { |value| value =~ /^-/ }.join ' '
|
22
|
-
commands.keys.find_all { |name| name if /^#{name}\b/.match arg_string }
|
23
|
-
end
|
24
|
-
|
25
|
-
# override so we can do our own error handling
|
26
|
-
def run!
|
27
|
-
trace = false
|
28
|
-
require_program :version, :description
|
29
|
-
trap('INT') { abort program(:int_message) } if program(:int_message)
|
30
|
-
trap('INT') { program(:int_block).call } if program(:int_block)
|
31
|
-
global_option('-h', '--help', 'Display help documentation') do
|
32
|
-
args = @args - %w[-h --help]
|
33
|
-
command(:help).run(*args)
|
34
|
-
return
|
35
|
-
end
|
36
|
-
global_option('-v', '--version', 'Display version information') { say version; return }
|
37
|
-
global_option('-t', '--trace', 'Display backtrace when an error occurs') { trace = true }
|
38
|
-
parse_global_options
|
39
|
-
remove_global_options options, @args
|
40
|
-
|
41
|
-
# if help is last arg run as if --help was passed in
|
42
|
-
if @args[-1] == "help"
|
43
|
-
args = @args - ["help"]
|
44
|
-
command(:help).run(*args)
|
45
|
-
return
|
46
|
-
end
|
47
|
-
|
48
|
-
unless trace
|
49
|
-
begin
|
50
|
-
run_active_command
|
51
|
-
rescue InvalidCommandError => e
|
52
|
-
usage = RHC::UsageHelpFormatter.new(self).render
|
53
|
-
i = @args.find_index { |a| a.start_with?('-') } || @args.length
|
54
|
-
abort "The command 'rhc #{@args[0,i].join(' ')}' is not recognized.\n#{usage}"
|
55
|
-
rescue \
|
56
|
-
ArgumentError,
|
57
|
-
OptionParser::InvalidOption,
|
58
|
-
OptionParser::InvalidArgument,
|
59
|
-
OptionParser::MissingArgument => e
|
60
|
-
|
61
|
-
help_bindings = CommandHelpBindings.new(active_command, commands, Commander::Runner.instance.options)
|
62
|
-
usage = RHC::UsageHelpFormatter.new(self).render_command(help_bindings)
|
63
|
-
say "#{e}\n#{usage}"
|
64
|
-
1
|
65
|
-
rescue Rhc::Rest::BaseException => e
|
66
|
-
RHC::Helpers.results { say "#{e}" }
|
67
|
-
e.code.nil? ? 128 : e.code
|
68
|
-
rescue Exception => e
|
69
|
-
RHC::Helpers.results { say "error: #{e} Use --trace to view backtrace." }
|
70
|
-
128
|
71
|
-
end
|
72
|
-
else
|
73
|
-
run_active_command
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def create_default_commands
|
78
|
-
command :help do |c|
|
79
|
-
c.syntax = 'rhc help <command>'
|
80
|
-
c.description = 'Display global or <command> help documentation.'
|
81
|
-
c.when_called do |args, options|
|
82
|
-
if args.empty?
|
83
|
-
say help_formatter.render
|
84
|
-
else
|
85
|
-
command = command args.join(' ')
|
86
|
-
begin
|
87
|
-
require_valid_command command
|
88
|
-
rescue InvalidCommandError => e
|
89
|
-
abort "#{e}"
|
90
|
-
end
|
91
|
-
|
92
|
-
help_bindings = CommandHelpBindings.new command, commands, Commander::Runner.instance.options
|
93
|
-
say help_formatter.render_command help_bindings
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
6
|
def self.load
|
101
7
|
Dir[File.join(File.dirname(__FILE__), "commands", "*.rb")].each do |file|
|
102
8
|
require file
|
@@ -106,71 +12,96 @@ module RHC
|
|
106
12
|
def self.add(opts)
|
107
13
|
commands[opts[:name]] = opts
|
108
14
|
end
|
109
|
-
def self.global_option(
|
110
|
-
global_options << [
|
111
|
-
end
|
112
|
-
def self.validate_command(c, args, options, args_metadata)
|
113
|
-
# check to see if an arg's option was set
|
114
|
-
raise ArgumentError.new("Invalid arguments") if args.length > args_metadata.length
|
115
|
-
args_metadata.each_with_index do |arg_meta, i|
|
116
|
-
switch = arg_meta[:switches]
|
117
|
-
value = options.__hash__[arg_meta[:name]]
|
118
|
-
unless value.nil?
|
119
|
-
raise ArgumentError.new("#{arg_meta[:name]} specified twice on the command line and as a #{switch[0]} switch") unless args.length == i
|
120
|
-
# add the option as an argument
|
121
|
-
args << value
|
122
|
-
end
|
123
|
-
end
|
15
|
+
def self.global_option(*args, &block)
|
16
|
+
global_options << [args, block]
|
124
17
|
end
|
125
18
|
|
126
19
|
def self.global_config_setup(options)
|
127
20
|
RHC::Config.set_opts_config(options.config) if options.config
|
128
21
|
RHC::Config.password = options.password if options.password
|
129
22
|
RHC::Config.opts_login = options.rhlogin if options.rhlogin
|
130
|
-
RHC::Config.noprompt(options.noprompt) if options.noprompt
|
131
23
|
RHC::Config
|
132
24
|
end
|
133
25
|
|
134
|
-
def self.
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
26
|
+
def self.deprecated?
|
27
|
+
command_name = Commander::Runner.instance.command_name_from_args
|
28
|
+
command = Commander::Runner.instance.active_command
|
29
|
+
|
30
|
+
if deprecated[command_name]
|
31
|
+
msg = "The command 'rhc #{command_name}' is deprecated. Please use 'rhc #{command.name}' instead."
|
32
|
+
|
33
|
+
raise DeprecatedError.new("#{msg} For porting and testing purposes you may switch this error to a warning by setting the DISABLE_DEPRECATED environment variable to 0. It is not recommended to do so in a production environment as this command may be removed in future releases.") if RHC::Helpers.disable_deprecated?
|
34
|
+
|
35
|
+
warn "Warning: #{msg} For porting and testing purposes you may switch this warning to an error by setting the DISABLE_DEPRECATED environment variable to 1. This command may be removed in future releases."
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.needs_configuration!(cmd, options, config)
|
40
|
+
if not (cmd.class.suppress_wizard? or
|
41
|
+
options.noprompt or
|
42
|
+
options.help or
|
43
|
+
config.has_local_config? or
|
44
|
+
config.has_opts_config?)
|
45
|
+
RHC::Wizard.new(config).run
|
139
46
|
end
|
140
|
-
false
|
141
47
|
end
|
142
48
|
|
143
49
|
def self.to_commander(instance=Commander::Runner.instance)
|
144
|
-
global_options.each
|
50
|
+
global_options.each do |args, block|
|
51
|
+
opts = (args.pop if Hash === args.last) || {}
|
52
|
+
option = instance.global_option(*args, &block).last
|
53
|
+
option.merge!(opts)
|
54
|
+
end
|
145
55
|
commands.each_pair do |name, opts|
|
146
56
|
instance.command name do |c|
|
147
57
|
c.description = opts[:description]
|
148
58
|
c.summary = opts[:summary]
|
149
59
|
c.syntax = opts[:syntax]
|
150
60
|
|
151
|
-
(opts[:options]||[]).each
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
arg_switches << arg_meta[:description]
|
156
|
-
c.option *arg_switches unless arg_switches.nil?
|
61
|
+
(options_metadata = opts[:options] || []).each do |o|
|
62
|
+
option_data = [o[:switches], o[:description]].flatten(1)
|
63
|
+
c.option *option_data
|
64
|
+
o[:arg] = Commander::Runner.switch_to_sym(o[:switches].last)
|
157
65
|
end
|
158
66
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
67
|
+
args_metadata = opts[:args] || []
|
68
|
+
args_metadata.each do |arg_meta|
|
69
|
+
arg_switches = arg_meta[:switches]
|
70
|
+
unless arg_switches.nil? or arg_switches.empty?
|
71
|
+
arg_switches << arg_meta[:description]
|
72
|
+
c.option *arg_switches
|
73
|
+
end
|
165
74
|
end
|
166
75
|
|
167
76
|
unless opts[:aliases].nil?
|
168
77
|
opts[:aliases].each do |a|
|
169
|
-
|
170
|
-
|
171
|
-
|
78
|
+
alias_cmd = a[:action]
|
79
|
+
|
80
|
+
unless a[:root_command]
|
81
|
+
# prepend the current resource
|
82
|
+
alias_components = name.split(" ")
|
83
|
+
alias_components[-1] = a[:action]
|
84
|
+
alias_cmd = alias_components.join(' ')
|
85
|
+
end
|
86
|
+
|
87
|
+
deprecated[alias_cmd] = true if a[:deprecated]
|
88
|
+
instance.alias_command "#{alias_cmd}", :"#{name}"
|
172
89
|
end
|
173
90
|
end
|
91
|
+
|
92
|
+
c.when_called do |args, options|
|
93
|
+
config = global_config_setup(options)
|
94
|
+
deprecated?
|
95
|
+
|
96
|
+
cmd = opts[:class].new
|
97
|
+
cmd.options = options
|
98
|
+
cmd.config = config
|
99
|
+
|
100
|
+
filled_args = cmd.validate_args_and_options(args_metadata, options_metadata, args)
|
101
|
+
|
102
|
+
needs_configuration!(cmd, options, config)
|
103
|
+
cmd.send(opts[:method], *filled_args)
|
104
|
+
end
|
174
105
|
end
|
175
106
|
end
|
176
107
|
self
|
@@ -183,5 +114,8 @@ module RHC
|
|
183
114
|
def self.global_options
|
184
115
|
@options ||= []
|
185
116
|
end
|
117
|
+
def self.deprecated
|
118
|
+
@deprecated ||= {}
|
119
|
+
end
|
186
120
|
end
|
187
121
|
end
|
data/lib/rhc/commands/base.rb
CHANGED
@@ -5,23 +5,66 @@ require 'rhc/wizard'
|
|
5
5
|
require 'rhc/config'
|
6
6
|
require 'rhc/commands'
|
7
7
|
require 'rhc/exceptions'
|
8
|
+
require 'rhc/context_helper'
|
8
9
|
|
9
10
|
class RHC::Commands::Base
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
config=
|
15
|
-
@
|
12
|
+
attr_writer :options, :config
|
13
|
+
|
14
|
+
def initialize(options=Commander::Command::Options.new,
|
15
|
+
config=nil)
|
16
|
+
@options, @config = options, config
|
16
17
|
|
17
18
|
# apply timeout here even though it isn't quite a global
|
18
19
|
$rest_timeout = @options.timeout ? @options.timeout.to_i : nil
|
19
20
|
end
|
20
21
|
|
22
|
+
def validate_args_and_options(args_metadata, options_metadata, args)
|
23
|
+
# process options
|
24
|
+
options_metadata.each do |option_meta|
|
25
|
+
arg = option_meta[:arg]
|
26
|
+
|
27
|
+
context_helper = option_meta[:context_helper]
|
28
|
+
@options.__hash__[arg] = self.send(context_helper) if @options.__hash__[arg].nil? and context_helper
|
29
|
+
raise ArgumentError.new("Missing required option '#{arg}'.") if option_meta[:required] and @options.__hash__[arg].nil?
|
30
|
+
end
|
31
|
+
|
32
|
+
# process args
|
33
|
+
arg_slots = [].fill(nil, 0, args_metadata.length)
|
34
|
+
fill_args = args.reverse
|
35
|
+
args_metadata.each_with_index do |arg_meta, i|
|
36
|
+
# check options
|
37
|
+
value = @options.__hash__[arg_meta[:name]]
|
38
|
+
if value
|
39
|
+
arg_slots[i] = value
|
40
|
+
elsif arg_meta[:arg_type] == :list
|
41
|
+
arg_slots[i] = fill_args.reverse
|
42
|
+
fill_args = []
|
43
|
+
else
|
44
|
+
raise ArgumentError.new("Missing required argument '#{arg_meta[:name]}'.") if fill_args.empty?
|
45
|
+
arg_slots[i] = fill_args.pop
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
raise ArgumentError.new("Too many arguments passed in.") unless fill_args.empty?
|
50
|
+
|
51
|
+
arg_slots
|
52
|
+
end
|
53
|
+
|
21
54
|
protected
|
22
55
|
include RHC::Helpers
|
56
|
+
include RHC::ContextHelpers
|
23
57
|
|
24
|
-
attr_reader :
|
58
|
+
attr_reader :options, :config
|
59
|
+
|
60
|
+
#
|
61
|
+
# The implicit config object provides no defaults.
|
62
|
+
#
|
63
|
+
def config
|
64
|
+
@config ||= begin
|
65
|
+
RHC::Config.new
|
66
|
+
end
|
67
|
+
end
|
25
68
|
|
26
69
|
def application
|
27
70
|
#@application ||= ... identify current application or throw,
|
@@ -31,18 +74,26 @@ class RHC::Commands::Base
|
|
31
74
|
# current git repo for remote, fail.
|
32
75
|
end
|
33
76
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
77
|
+
# Return a client object capable of making calls
|
78
|
+
# to the OpenShift API that transforms intent
|
79
|
+
# and options, to remote calls, and then handle
|
80
|
+
# the output (or failures) into exceptions and
|
81
|
+
# formatted object output. Most interactions
|
82
|
+
# should be through this call pattern.
|
83
|
+
def rest_client
|
84
|
+
@rest_client ||= begin
|
85
|
+
username = config.username
|
86
|
+
unless username
|
87
|
+
username = ask "To connect to #{openshift_server} enter your OpenShift login (email or Red Hat login id): "
|
88
|
+
config.config_user(username)
|
89
|
+
end
|
90
|
+
password = RHC::Config.password || RHC::get_password
|
91
|
+
|
92
|
+
RHC::Rest::Client.new(openshift_rest_node, username, password, @options.debug)
|
93
|
+
end
|
44
94
|
end
|
45
95
|
|
96
|
+
|
46
97
|
class InvalidCommand < StandardError ; end
|
47
98
|
|
48
99
|
def self.inherited(klass)
|
@@ -62,7 +113,7 @@ class RHC::Commands::Base
|
|
62
113
|
RHC::Commands.add((@options || {}).merge({
|
63
114
|
:name => name.join(' '),
|
64
115
|
:class => self,
|
65
|
-
:method => method
|
116
|
+
:method => method
|
66
117
|
}));
|
67
118
|
@options = nil
|
68
119
|
end
|
@@ -72,7 +123,7 @@ class RHC::Commands::Base
|
|
72
123
|
value ||= if self.name && !self.name.empty?
|
73
124
|
self.name.split('::').last
|
74
125
|
end
|
75
|
-
value.to_s.downcase if value
|
126
|
+
value.to_s.split(/(?=[A-Z])/).join('-').downcase if value
|
76
127
|
end
|
77
128
|
end
|
78
129
|
|
@@ -94,16 +145,30 @@ class RHC::Commands::Base
|
|
94
145
|
@suppress_wizard
|
95
146
|
end
|
96
147
|
|
97
|
-
def self.alias_action(action)
|
98
|
-
|
148
|
+
def self.alias_action(action, options={})
|
149
|
+
# if it is a root_command we simply alias it to the passed in action
|
150
|
+
# if not we prepend the current resource to the action
|
151
|
+
# default == false
|
152
|
+
options[:root_command] ||= false
|
153
|
+
options[:action] = action
|
154
|
+
options[:deprecated] ||= false
|
155
|
+
aliases << options
|
99
156
|
end
|
100
157
|
|
101
|
-
def self.option(switches, description)
|
102
|
-
options_metadata <<
|
158
|
+
def self.option(switches, description, options={})
|
159
|
+
options_metadata << {:switches => switches,
|
160
|
+
:description => description,
|
161
|
+
:context_helper => options[:context],
|
162
|
+
:required => options[:required]
|
163
|
+
}
|
103
164
|
end
|
104
165
|
|
105
|
-
def self.argument(name, description, switches)
|
106
|
-
|
166
|
+
def self.argument(name, description, switches, options={})
|
167
|
+
arg_type = options[:arg_type]
|
168
|
+
raise ArgumentError("Only the last argument descriptor for an action can be a list") if arg_type == :list and list_argument_defined?
|
169
|
+
list_argument_defined true if arg_type == :list
|
170
|
+
|
171
|
+
args_metadata << {:name => name, :description => description, :switches => switches, :arg_type => arg_type}
|
107
172
|
end
|
108
173
|
|
109
174
|
def self.default_action(action)
|
@@ -111,6 +176,12 @@ class RHC::Commands::Base
|
|
111
176
|
end
|
112
177
|
|
113
178
|
private
|
179
|
+
def self.list_argument_defined(bool)
|
180
|
+
options[:list_argument_defined] = bool
|
181
|
+
end
|
182
|
+
def self.list_argument_defined?
|
183
|
+
options[:list_argument_defined]
|
184
|
+
end
|
114
185
|
def self.options_metadata
|
115
186
|
options[:options] ||= []
|
116
187
|
end
|
data/lib/rhc/commands/domain.rb
CHANGED
@@ -2,11 +2,11 @@ require 'rhc/commands/base'
|
|
2
2
|
|
3
3
|
module RHC::Commands
|
4
4
|
class Domain < Base
|
5
|
-
summary "Manage your
|
5
|
+
summary "Manage the domain and namespace for your applications."
|
6
6
|
syntax "<action>"
|
7
7
|
default_action :show
|
8
8
|
|
9
|
-
summary "
|
9
|
+
summary "Define a namespace for your applications to share."
|
10
10
|
syntax "<namespace> [--timeout timeout]"
|
11
11
|
argument :namespace, "Namespace for your application(s) (alphanumeric)", ["-n", "--namespace namespace"]
|
12
12
|
option ["--timeout timeout"], "Timeout, in seconds, for the session"
|
@@ -22,9 +22,9 @@ module RHC::Commands
|
|
22
22
|
0
|
23
23
|
end
|
24
24
|
|
25
|
-
summary "
|
25
|
+
summary "Change current namespace (will change application urls)"
|
26
26
|
syntax "<namespace> [--timeout timeout]"
|
27
|
-
argument :namespace, "Namespace
|
27
|
+
argument :namespace, "Namespace to change", ["-n", "--namespace namespace"]
|
28
28
|
option ["--timeout timeout"], "Timeout, in seconds, for the session"
|
29
29
|
alias_action :alter
|
30
30
|
def update(namespace)
|
@@ -33,9 +33,9 @@ module RHC::Commands
|
|
33
33
|
# but in the future this will be manditory if you have more than one
|
34
34
|
# domain. Figure out how to support overloading of commands
|
35
35
|
domain = rest_client.domains
|
36
|
-
raise RHC::DomainNotFoundException
|
36
|
+
raise RHC::DomainNotFoundException, "No domains are registered to the user #{config.username}. Please use 'rhc domain create' to create one." if domain.empty?
|
37
37
|
|
38
|
-
|
38
|
+
say "Changing namespace '#{domain[0].id}' to '#{namespace}'..."
|
39
39
|
|
40
40
|
domain[0].update(namespace)
|
41
41
|
|
@@ -47,57 +47,41 @@ module RHC::Commands
|
|
47
47
|
0
|
48
48
|
end
|
49
49
|
|
50
|
-
summary "
|
50
|
+
summary "Display the applications in your domain"
|
51
51
|
def show
|
52
|
-
|
53
|
-
paragraph do
|
54
|
-
say "User Info"
|
55
|
-
say "========="
|
56
|
-
if domains.length == 0
|
57
|
-
say "Namespace: No namespaces found. You can use 'rhc domain create <namespace>' to create a namespace for your applications."
|
58
|
-
elsif domains.length == 1
|
59
|
-
say "Namespace: #{domains[0].id}"
|
60
|
-
else
|
61
|
-
domains.each_with_index { |d, i| say "Namespace(#{i}): #{d.id}" }
|
62
|
-
end
|
63
|
-
end
|
52
|
+
domain = rest_client.domains.first
|
64
53
|
|
65
|
-
|
66
|
-
domains.each do |d|
|
54
|
+
if domain
|
67
55
|
paragraph do
|
68
|
-
|
69
|
-
|
70
|
-
say "=" * header.length
|
71
|
-
apps = d.applications
|
56
|
+
say "Applications in #{domain.id}:"
|
57
|
+
apps = domain.applications
|
72
58
|
if apps.length == 0
|
73
|
-
say "No applications
|
59
|
+
say "No applications. You can use 'rhc app create' to create new applications."
|
74
60
|
else
|
75
|
-
apps.
|
61
|
+
apps.each_with_index do |a,i|
|
76
62
|
carts = a.cartridges
|
77
|
-
|
78
|
-
|
79
|
-
say "
|
80
|
-
say "
|
81
|
-
say "
|
82
|
-
say "
|
83
|
-
|
84
|
-
|
85
|
-
say " Cartridges:"
|
86
|
-
if carts.length > 1
|
63
|
+
section(:top => (i == 0 ? 1 : 2)) do
|
64
|
+
header "%s @ %s" % [a.name, a.app_url]
|
65
|
+
say "Created: #{date(a.creation_time)}"
|
66
|
+
#say " UUID: #{a.uuid}"
|
67
|
+
say "Git URL: #{a.git_url}" if a.git_url
|
68
|
+
say "Aliases: #{a.aliases.join(', ')}" if a.aliases and not a.aliases.empty?
|
69
|
+
if carts.present?
|
70
|
+
say "\nCartridges:"
|
87
71
|
carts.each do |c|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
say " #{c.name}#{value}"
|
92
|
-
end
|
72
|
+
connection_url = c.property(:cart_data, :connection_url) || c.property(:cart_data, :job_url) || c.property(:cart_data, :monitoring_url)
|
73
|
+
value = connection_url ? " - #{connection_url['value']}" : ""
|
74
|
+
say " #{c.name}#{value}"
|
93
75
|
end
|
94
76
|
else
|
95
|
-
say "
|
77
|
+
say "Cartridges: none"
|
96
78
|
end
|
97
79
|
end
|
98
80
|
end
|
99
81
|
end
|
100
82
|
end
|
83
|
+
else
|
84
|
+
say "No domain exists. You can use 'rhc domain create' to create a namespace for applications." unless domain
|
101
85
|
end
|
102
86
|
0
|
103
87
|
end
|
@@ -123,15 +107,14 @@ module RHC::Commands
|
|
123
107
|
option ["--timeout timeout"], "Timeout, in seconds, for the session"
|
124
108
|
alias_action :destroy
|
125
109
|
def delete(namespace)
|
126
|
-
paragraph { say "Deleting domain '#{namespace}'" }
|
127
110
|
domain = rest_client.find_domain namespace
|
128
111
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
112
|
+
say "Deleting domain '#{namespace}'"
|
113
|
+
|
114
|
+
begin
|
115
|
+
domain.destroy
|
116
|
+
rescue RHC::Rest::ClientErrorException #FIXME: I am insufficiently specific
|
117
|
+
raise RHC::Exception.new("Domain contains applications. Delete applications first.", 128)
|
135
118
|
end
|
136
119
|
|
137
120
|
results { say "Success!" }
|