rhc 1.12.4 → 1.13.6
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.
- data/autocomplete/rhc_bash +161 -9
- data/bin/rhc +2 -2
- data/features/env.feature +0 -0
- data/features/step_definitions/env_steps.rb +1 -0
- data/features/support/platform_support.rb +5 -5
- data/lib/rhc/cartridge_helpers.rb +19 -3
- data/lib/rhc/command_runner.rb +1 -1
- data/lib/rhc/commands/app.rb +32 -17
- data/lib/rhc/commands/base.rb +15 -19
- data/lib/rhc/commands/cartridge.rb +14 -9
- data/lib/rhc/commands/env.rb +146 -0
- data/lib/rhc/commands.rb +19 -7
- data/lib/rhc/exceptions.rb +25 -1
- data/lib/rhc/help_formatter.rb +2 -2
- data/lib/rhc/helpers.rb +29 -2
- data/lib/rhc/output_helpers.rb +19 -2
- data/lib/rhc/rest/application.rb +49 -3
- data/lib/rhc/rest/cartridge.rb +4 -4
- data/lib/rhc/rest/client.rb +41 -6
- data/lib/rhc/rest/environment_variable.rb +15 -0
- data/lib/rhc/rest/mock.rb +52 -20
- data/lib/rhc/rest.rb +24 -23
- data/lib/rhc/usage_templates/help.erb +4 -4
- data/spec/rhc/assets/env_vars.txt +7 -0
- data/spec/rhc/assets/env_vars_2.txt +1 -0
- data/spec/rhc/commands/app_spec.rb +51 -10
- data/spec/rhc/commands/cartridge_spec.rb +61 -9
- data/spec/rhc/commands/env_spec.rb +493 -0
- data/spec/rhc/helpers_spec.rb +25 -5
- data/spec/rhc/rest_spec.rb +4 -3
- metadata +16 -4
data/lib/rhc/rest/mock.rb
CHANGED
@@ -64,7 +64,7 @@ module RHC::Rest::Mock
|
|
64
64
|
to_return({
|
65
65
|
:body => {
|
66
66
|
:data => mock_response_links(authorizations ? mock_api_with_authorizations : mock_real_client_links),
|
67
|
-
:supported_api_versions => [1.0, 1.1, 1.2, 1.3, 1.4, 1.5],
|
67
|
+
:supported_api_versions => [1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6],
|
68
68
|
}.to_json
|
69
69
|
})
|
70
70
|
end
|
@@ -357,17 +357,19 @@ module RHC::Rest::Mock
|
|
357
357
|
end
|
358
358
|
|
359
359
|
def mock_app_links(domain_id='test_domain',app_id='test_app')
|
360
|
-
[['ADD_CARTRIDGE',
|
361
|
-
['LIST_CARTRIDGES',
|
362
|
-
['GET_GEAR_GROUPS',
|
363
|
-
['START',
|
364
|
-
['STOP',
|
365
|
-
['RESTART',
|
366
|
-
['THREAD_DUMP',
|
367
|
-
['ADD_ALIAS',
|
368
|
-
['REMOVE_ALIAS',
|
369
|
-
['LIST_ALIASES',
|
370
|
-
['
|
360
|
+
[['ADD_CARTRIDGE', "domains/#{domain_id}/apps/#{app_id}/carts/add", 'post'],
|
361
|
+
['LIST_CARTRIDGES', "broker/rest/domains/#{domain_id}/applications/#{app_id}/cartridges", 'get' ],
|
362
|
+
['GET_GEAR_GROUPS', "domains/#{domain_id}/apps/#{app_id}/gear_groups", 'get' ],
|
363
|
+
['START', "domains/#{domain_id}/apps/#{app_id}/start", 'post'],
|
364
|
+
['STOP', "domains/#{domain_id}/apps/#{app_id}/stop", 'post'],
|
365
|
+
['RESTART', "domains/#{domain_id}/apps/#{app_id}/restart", 'post'],
|
366
|
+
['THREAD_DUMP', "domains/#{domain_id}/apps/#{app_id}/event", 'post'],
|
367
|
+
['ADD_ALIAS', "domains/#{domain_id}/apps/#{app_id}/event", 'post'],
|
368
|
+
['REMOVE_ALIAS', "domains/#{domain_id}/apps/#{app_id}/event", 'post'],
|
369
|
+
['LIST_ALIASES', "domains/#{domain_id}/apps/#{app_id}/aliases", 'get'],
|
370
|
+
['LIST_ENVIRONMENT_VARIABLES', "domains/#{domain_id}/apps/#{app_id}/event", 'post'],
|
371
|
+
['SET_UNSET_ENVIRONMENT_VARIABLES', "domains/#{domain_id}/apps/#{app_id}/event", 'post'],
|
372
|
+
['DELETE', "broker/rest/domains/#{domain_id}/applications/#{app_id}", 'DELETE']]
|
371
373
|
end
|
372
374
|
|
373
375
|
def mock_cart_links(domain_id='test_domain',app_id='test_app',cart_id='test_cart')
|
@@ -383,6 +385,7 @@ module RHC::Rest::Mock
|
|
383
385
|
['LIST_DOMAINS', 'domains/', 'get' ],
|
384
386
|
['LIST_CARTRIDGES', 'cartridges/', 'get' ]]
|
385
387
|
end
|
388
|
+
|
386
389
|
def mock_real_client_links
|
387
390
|
[['GET_USER', "broker/rest/user", 'GET'],
|
388
391
|
['LIST_DOMAINS', "broker/rest/domains", 'GET'],
|
@@ -390,6 +393,7 @@ module RHC::Rest::Mock
|
|
390
393
|
['LIST_CARTRIDGES', "broker/rest/cartridges", 'GET'],
|
391
394
|
]
|
392
395
|
end
|
396
|
+
|
393
397
|
def mock_api_with_authorizations
|
394
398
|
mock_real_client_links.concat([
|
395
399
|
['LIST_AUTHORIZATIONS', "broker/rest/user/authorizations", 'GET'],
|
@@ -517,10 +521,10 @@ module RHC::Rest::Mock
|
|
517
521
|
MockRestCartridge.new(self, "mock_standalone_cart-1", "standalone"),
|
518
522
|
MockRestCartridge.new(self, "mock_standalone_cart-2", "standalone"),
|
519
523
|
MockRestCartridge.new(self, "mock_unique_standalone_cart-1", "standalone"),
|
520
|
-
MockRestCartridge.new(self, "jenkins-1
|
524
|
+
MockRestCartridge.new(self, "jenkins-1", "standalone", nil, ['ci']),
|
521
525
|
MockRestCartridge.new(self, "mock_cart-2", "embedded"),
|
522
526
|
MockRestCartridge.new(self, "unique_mock_cart-1", "embedded"),
|
523
|
-
MockRestCartridge.new(self, "jenkins-client-1
|
527
|
+
MockRestCartridge.new(self, "jenkins-client-1", "embedded", nil, ['ci_builder']),
|
524
528
|
MockRestCartridge.new(self, "embcart-1", "embedded"),
|
525
529
|
MockRestCartridge.new(self, "embcart-2", "embedded"),
|
526
530
|
premium_embedded
|
@@ -645,7 +649,7 @@ module RHC::Rest::Mock
|
|
645
649
|
def initialize(client=nil, carts=['name' => 'fake_geargroup_cart-0.1'], count=1)
|
646
650
|
super({}, client)
|
647
651
|
@cartridges = carts
|
648
|
-
@gears = count.times.map do |i|
|
652
|
+
@gears = count.times.map do |i|
|
649
653
|
{'state' => 'started', 'id' => "fakegearid#{i}", 'ssh_url' => "ssh://fakegearid#{i}@fakesshurl.com"}
|
650
654
|
end
|
651
655
|
@gear_profile = 'small'
|
@@ -694,7 +698,7 @@ module RHC::Rest::Mock
|
|
694
698
|
"fakeuuidfortests#{@name}"
|
695
699
|
end
|
696
700
|
|
697
|
-
def initialize(client, name, type, domain, scale=nil, gear_profile='default', initial_git_url=nil)
|
701
|
+
def initialize(client, name, type, domain, scale=nil, gear_profile='default', initial_git_url=nil, environment_variables=nil)
|
698
702
|
super({}, client)
|
699
703
|
@name = name
|
700
704
|
@domain = domain
|
@@ -706,6 +710,7 @@ module RHC::Rest::Mock
|
|
706
710
|
@app_url = "https://#{@name}-#{@domain.id}.fake.foo/"
|
707
711
|
@ssh_url = "ssh://#{@uuid}@127.0.0.1"
|
708
712
|
@aliases = []
|
713
|
+
@environment_variables = environment_variables || []
|
709
714
|
@gear_profile = gear_profile
|
710
715
|
if scale
|
711
716
|
@scalable = true
|
@@ -730,8 +735,8 @@ module RHC::Rest::Mock
|
|
730
735
|
@domain.applications.delete self
|
731
736
|
end
|
732
737
|
|
733
|
-
def add_cartridge(cart, embedded=true)
|
734
|
-
name, url =
|
738
|
+
def add_cartridge(cart, embedded=true, environment_variables=nil)
|
739
|
+
name, url =
|
735
740
|
if cart.is_a? String
|
736
741
|
[cart, nil]
|
737
742
|
elsif cart.respond_to? :[]
|
@@ -742,10 +747,11 @@ module RHC::Rest::Mock
|
|
742
747
|
|
743
748
|
type = embedded ? "embedded" : "standalone"
|
744
749
|
c = MockRestCartridge.new(client, name, type, self)
|
745
|
-
if url
|
750
|
+
if url
|
746
751
|
c.url = url
|
747
752
|
c.name = c.url_basename
|
748
753
|
end
|
754
|
+
#set_environment_variables(environment_variables)
|
749
755
|
c.properties << {'name' => 'prop1', 'value' => 'value1', 'description' => 'description1' }
|
750
756
|
@cartridges << c
|
751
757
|
c.messages << "Cartridge added with properties"
|
@@ -798,6 +804,31 @@ module RHC::Rest::Mock
|
|
798
804
|
def aliases
|
799
805
|
@aliases
|
800
806
|
end
|
807
|
+
|
808
|
+
def environment_variables
|
809
|
+
if supports? "LIST_ENVIRONMENT_VARIABLES"
|
810
|
+
@environment_variables || []
|
811
|
+
else
|
812
|
+
raise RHC::EnvironmentVariablesNotSupportedException.new
|
813
|
+
end
|
814
|
+
end
|
815
|
+
|
816
|
+
def set_environment_variables(env_vars=[])
|
817
|
+
if supports? "SET_UNSET_ENVIRONMENT_VARIABLES"
|
818
|
+
environment_variables.concat env_vars
|
819
|
+
else
|
820
|
+
raise RHC::EnvironmentVariablesNotSupportedException.new
|
821
|
+
end
|
822
|
+
end
|
823
|
+
|
824
|
+
def unset_environment_variables(env_vars=[])
|
825
|
+
if supports? "SET_UNSET_ENVIRONMENT_VARIABLES"
|
826
|
+
env_vars.each { |item| environment_variables.delete_if { |env_var| env_var.name == item } }
|
827
|
+
else
|
828
|
+
raise RHC::EnvironmentVariablesNotSupportedException.new
|
829
|
+
end
|
830
|
+
end
|
831
|
+
|
801
832
|
end
|
802
833
|
|
803
834
|
class MockRestCartridge < RHC::Rest::Cartridge
|
@@ -805,11 +836,12 @@ module RHC::Rest::Mock
|
|
805
836
|
|
806
837
|
attr_accessor :usage_rate
|
807
838
|
|
808
|
-
def initialize(client, name, type, app=nil, properties=[{'type' => 'cart_data', 'name' => 'connection_url', 'value' => "http://fake.url" }])
|
839
|
+
def initialize(client, name, type, app=nil, tags=[], properties=[{'type' => 'cart_data', 'name' => 'connection_url', 'value' => "http://fake.url" }])
|
809
840
|
super({}, client)
|
810
841
|
@name = name
|
811
842
|
@type = type
|
812
843
|
@app = app
|
844
|
+
@tags = tags
|
813
845
|
@properties = properties.each(&:stringify_keys!)
|
814
846
|
@status_messages = [{"message" => "started", "gear_id" => "123"}]
|
815
847
|
@scales_from = 1
|
data/lib/rhc/rest.rb
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
module RHC
|
2
2
|
module Rest
|
3
3
|
|
4
|
-
autoload :Base,
|
5
|
-
autoload :Attributes,
|
6
|
-
|
7
|
-
autoload :HTTPClient,
|
8
|
-
|
9
|
-
autoload :
|
10
|
-
autoload :
|
11
|
-
autoload :
|
12
|
-
autoload :
|
13
|
-
autoload :
|
14
|
-
autoload :
|
15
|
-
autoload :
|
16
|
-
autoload :
|
17
|
-
autoload :GearGroup,
|
18
|
-
autoload :
|
4
|
+
autoload :Base, 'rhc/rest/base'
|
5
|
+
autoload :Attributes, 'rhc/rest/attributes'
|
6
|
+
|
7
|
+
autoload :HTTPClient, 'rhc/rest/httpclient'
|
8
|
+
|
9
|
+
autoload :Alias, 'rhc/rest/alias'
|
10
|
+
autoload :Api, 'rhc/rest/api'
|
11
|
+
autoload :Application, 'rhc/rest/application'
|
12
|
+
autoload :Authorization, 'rhc/rest/authorization'
|
13
|
+
autoload :Cartridge, 'rhc/rest/cartridge'
|
14
|
+
autoload :Client, 'rhc/rest/client'
|
15
|
+
autoload :Domain, 'rhc/rest/domain'
|
16
|
+
autoload :EnvironmentVariable, 'rhc/rest/environment_variable'
|
17
|
+
autoload :GearGroup, 'rhc/rest/gear_group'
|
18
|
+
autoload :Key, 'rhc/rest/key'
|
19
|
+
autoload :User, 'rhc/rest/user'
|
19
20
|
|
20
21
|
class Exception < RuntimeError
|
21
22
|
attr_reader :code
|
@@ -32,17 +33,17 @@ module RHC
|
|
32
33
|
#
|
33
34
|
#503 Service Unavailable
|
34
35
|
#
|
35
|
-
#The server is currently unable to handle the request due to a temporary
|
36
|
-
#overloading or maintenance of the server. The implication is that this
|
36
|
+
#The server is currently unable to handle the request due to a temporary
|
37
|
+
#overloading or maintenance of the server. The implication is that this
|
37
38
|
#is a temporary condition which will be alleviated after some delay.
|
38
39
|
class ServiceUnavailableException < ServerErrorException; end
|
39
40
|
|
40
|
-
#Exceptions thrown in case of an HTTP 4xx is received with the exception
|
41
|
+
#Exceptions thrown in case of an HTTP 4xx is received with the exception
|
41
42
|
#of 401, 403, 403 and 422 where a more sepcific exception is thrown
|
42
43
|
#
|
43
44
|
#HTTP Error Codes 4xx
|
44
45
|
#
|
45
|
-
#The 4xx class of status code is intended for cases in which the client
|
46
|
+
#The 4xx class of status code is intended for cases in which the client
|
46
47
|
#seems to have errored.
|
47
48
|
class ClientErrorException < Exception; end
|
48
49
|
|
@@ -81,16 +82,16 @@ module RHC
|
|
81
82
|
#403 Forbidden
|
82
83
|
#
|
83
84
|
#The server understood the request, but is refusing to fulfill it.
|
84
|
-
#Authorization will not help and the request SHOULD NOT be repeated.
|
85
|
+
#Authorization will not help and the request SHOULD NOT be repeated.
|
85
86
|
class RequestDeniedException < ClientErrorException; end
|
86
87
|
|
87
88
|
#Exceptions thrown in case of an HTTP 401 is received.
|
88
89
|
#
|
89
90
|
#401 Unauthorized
|
90
91
|
#
|
91
|
-
#The request requires user authentication. If the request already
|
92
|
-
#included Authorization credentials, then the 401 response indicates
|
93
|
-
#that authorization has been refused for those credentials.
|
92
|
+
#The request requires user authentication. If the request already
|
93
|
+
#included Authorization credentials, then the 401 response indicates
|
94
|
+
#that authorization has been refused for those credentials.
|
94
95
|
class UnAuthorizedException < ClientErrorException; end
|
95
96
|
class TokenExpiredOrInvalid < UnAuthorizedException; end
|
96
97
|
|
@@ -4,7 +4,7 @@ Usage: rhc [--help] [--version] [--debug] <command> [<args>]
|
|
4
4
|
|
5
5
|
<%
|
6
6
|
remaining = Hash[commands.dup.select{ |name, command| not command.summary.blank? }]
|
7
|
-
basic = remaining.slice!('setup', 'create-app', 'apps', 'cartridges', 'add-cartridge', '
|
7
|
+
basic = remaining.slice!('setup', 'create-app', 'apps', 'cartridges', 'add-cartridge', 'set-env', 'logout')
|
8
8
|
remaining.delete_if{ |name, command| alias?(name) }
|
9
9
|
begin -%>
|
10
10
|
Getting started:
|
@@ -18,14 +18,14 @@ Working with apps:
|
|
18
18
|
<%= table(debugging.map{ |arr| arr[1] = arr[1].summary || arr[1].description; arr }, table_args(' ', 18)).join("\n") %>
|
19
19
|
<% end unless debugging.empty? %>
|
20
20
|
Management commands:
|
21
|
-
<%= table(remaining.sort.select{ |arr| arr[1].root? and arr[1].summary.present? }.map do |arr|
|
21
|
+
<%= table(remaining.sort.select{ |arr| arr[1].root? and arr[1].summary.present? }.map do |arr|
|
22
22
|
arr[1] = arr[1].summary || arr[1].description
|
23
|
-
arr
|
23
|
+
arr
|
24
24
|
end, table_args(' ', 18)).join("\n") %>
|
25
25
|
|
26
26
|
Some management commands have nested actions - run 'rhc help <command>' for more info.
|
27
27
|
|
28
|
-
See '<%= Array(program :name).first %> help <command>' for more information on a specific command. You can see a list of all commands with 'rhc help commands'. See 'rhc help options' for a list of global command-line options and information about the config file.
|
28
|
+
See '<%= Array(program :name).first %> help <command>' for more information on a specific command. You can see a list of all commands with 'rhc help commands'. See 'rhc help options' for a list of global command-line options and information about the config file.
|
29
29
|
<% if program :help -%>
|
30
30
|
<% for title, body in program(:help) %>
|
31
31
|
<%= $terminal.color title.to_s.upcase, :bold %>:
|
@@ -0,0 +1 @@
|
|
1
|
+
AND=123
|
@@ -177,6 +177,7 @@ describe RHC::Commands::App do
|
|
177
177
|
it { expect { run }.to exit_with_code(0) }
|
178
178
|
it { run_output.should match("Success") }
|
179
179
|
it { run_output.should match("Cartridges: mock_standalone_cart-1\n") }
|
180
|
+
it { run_output.should_not match(/Environment Variables:/) }
|
180
181
|
end
|
181
182
|
|
182
183
|
context 'when Hosts resolver raises an Exception' do
|
@@ -196,6 +197,7 @@ describe RHC::Commands::App do
|
|
196
197
|
it { expect { run }.to exit_with_code(0) }
|
197
198
|
it { run_output.should match("Success") }
|
198
199
|
it { run_output.should match("Cartridges: mock_standalone_cart-1, mock_cart-1\n") }
|
200
|
+
it { run_output.should_not match(/Environment Variables:/) }
|
199
201
|
after{ rest_client.domains.first.applications.first.cartridges.find{ |c| c.name == 'mock_cart-1' }.should be_true }
|
200
202
|
end
|
201
203
|
|
@@ -204,6 +206,7 @@ describe RHC::Commands::App do
|
|
204
206
|
it { expect { run }.to exit_with_code(0) }
|
205
207
|
it { run_output.should match("Success") }
|
206
208
|
it { run_output.should match("Cartridges: http://foo.com, mock_cart-1\n") }
|
209
|
+
it { run_output.should_not match(/Environment Variables:/) }
|
207
210
|
after{ rest_client.domains.first.applications.first.cartridges.find{ |c| c.url == 'http://foo.com' }.should be_true }
|
208
211
|
end
|
209
212
|
|
@@ -267,12 +270,12 @@ describe RHC::Commands::App do
|
|
267
270
|
let(:arguments) { ['app', 'create', 'app1', 'http://foo.com', '--trace', '--noprompt'] }
|
268
271
|
it('tells me about custom carts') { run_output.should match("The cartridge 'http://foo.com' will be downloaded") }
|
269
272
|
it('lists the cart using the short_name') { run_output.should match(%r(Cartridges:\s+http://foo.com$)) }
|
270
|
-
end
|
273
|
+
end
|
271
274
|
context 'when I pick a custom URL cart and a web cart' do
|
272
275
|
let(:arguments) { ['app', 'create', 'app1', 'http://foo.com', 'embcart-1', '--trace', '--noprompt'] }
|
273
276
|
it('tells me about custom carts') { run_output.should match("The cartridge 'http://foo.com' will be downloaded") }
|
274
277
|
it('lists the carts using the short_name') { run_output.should match(%r(Cartridges:\s+http://foo.com, embcart-1$)) }
|
275
|
-
end
|
278
|
+
end
|
276
279
|
end
|
277
280
|
|
278
281
|
describe 'app create enable-jenkins' do
|
@@ -286,9 +289,9 @@ describe RHC::Commands::App do
|
|
286
289
|
#puts run_output
|
287
290
|
expect { run }.to exit_with_code(0)
|
288
291
|
jenkins_app = rest_client.find_application(@domain.id,"jenkins")
|
289
|
-
jenkins_app.cartridges[0].name.should == "jenkins-1
|
292
|
+
jenkins_app.cartridges[0].name.should == "jenkins-1"
|
290
293
|
app = rest_client.find_application(@domain.id,"app1")
|
291
|
-
app.find_cartridge("jenkins-client-1
|
294
|
+
app.find_cartridge("jenkins-client-1")
|
292
295
|
end
|
293
296
|
end
|
294
297
|
end
|
@@ -321,7 +324,7 @@ describe RHC::Commands::App do
|
|
321
324
|
context 'when run' do
|
322
325
|
before(:each) do
|
323
326
|
@domain = rest_client.add_domain("mockdomain")
|
324
|
-
@domain.add_application("jenkins", "jenkins-1
|
327
|
+
@domain.add_application("jenkins", "jenkins-1")
|
325
328
|
end
|
326
329
|
it "should use existing jenkins" do
|
327
330
|
expect { run }.to exit_with_code(0)
|
@@ -355,6 +358,15 @@ describe RHC::Commands::App do
|
|
355
358
|
run_output.should match("Jenkins client failed to install")
|
356
359
|
end
|
357
360
|
end
|
361
|
+
|
362
|
+
context 'when run without jenkins cartridge available on server' do
|
363
|
+
before(:each) do
|
364
|
+
@instance.stub(:all_cartridges) { rest_client.cartridges.delete_if { |item| item.name =~ /\Ajenkins/i } }
|
365
|
+
end
|
366
|
+
it "should exit with jenkins error" do
|
367
|
+
run_output.should match("There is no installed cartridge that exposes Jenkins")
|
368
|
+
end
|
369
|
+
end
|
358
370
|
end
|
359
371
|
|
360
372
|
describe 'app create jenkins install with retries' do
|
@@ -503,12 +515,12 @@ describe RHC::Commands::App do
|
|
503
515
|
let(:password){ 'password' }
|
504
516
|
let(:server){ mock_uri }
|
505
517
|
let(:arguments){ ['delete-app', 'foo', '--confirm', '--trace'] }
|
506
|
-
before do
|
518
|
+
before do
|
507
519
|
stub_api
|
508
520
|
challenge{ stub_one_domain('test') }
|
509
521
|
stub_one_application('test', 'foo')
|
510
522
|
end
|
511
|
-
before do
|
523
|
+
before do
|
512
524
|
stub_api_request(:delete, "broker/rest/domains/test/applications/foo").
|
513
525
|
to_return({
|
514
526
|
:body => {
|
@@ -568,7 +580,7 @@ describe RHC::Commands::App do
|
|
568
580
|
it { run_output.should match(/Gears:\s+Located with mock_type/) }
|
569
581
|
it { run_output.should match(/Gears:\s+1 small/) }
|
570
582
|
it { run_output.should match(%r(From:\s+ https://foo.bar.com)) }
|
571
|
-
end
|
583
|
+
end
|
572
584
|
end
|
573
585
|
|
574
586
|
describe 'app show' do
|
@@ -616,7 +628,7 @@ describe RHC::Commands::App do
|
|
616
628
|
before do
|
617
629
|
@domain = rest_client.add_domain("mockdomain")
|
618
630
|
@domain.add_application("app1", "mock_type", true)
|
619
|
-
expect_multi_ssh('echo "$(du -s 2>/dev/null | cut -f 1)"', 'fakegearid0@fakesshurl.com' => '
|
631
|
+
expect_multi_ssh('echo "$(du --block-size=1 -s 2>/dev/null | cut -f 1)"', 'fakegearid0@fakesshurl.com' => '1734334', 'fakegearid1@fakesshurl.com' => '1934348')
|
620
632
|
end
|
621
633
|
it { run_output.should match(/Gear.*Cartridges.*Used.*fakegearid0.*1\.7 MB.*1 GB.*fakegearid1.*1\.9 MB/m) }
|
622
634
|
it { expect{ run }.to exit_with_code(0) }
|
@@ -705,7 +717,36 @@ describe RHC::Commands::App do
|
|
705
717
|
subject.should_receive(:list_cartridges)
|
706
718
|
domain = double
|
707
719
|
domain.stub(:add_application).and_raise(RHC::Rest::ValidationException.new('Foo', :cartridges, 109))
|
708
|
-
expect{ subject.send(:create_app, 'name', 'jenkins-1
|
720
|
+
expect{ subject.send(:create_app, 'name', 'jenkins-1', domain) }.to raise_error(RHC::Rest::ValidationException)
|
709
721
|
end
|
710
722
|
end
|
723
|
+
|
724
|
+
describe 'create app with env vars' do
|
725
|
+
before{ rest_client.add_domain("mockdomain") }
|
726
|
+
|
727
|
+
[['app', 'create', 'app1', 'mock_standalone_cart-1', '-e', 'FOO=BAR', '--noprompt', '--timeout', '10', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'],
|
728
|
+
['app', 'create', 'app1', 'mock_standalone_cart-1', '--env', 'FOO=BAR', '--noprompt', '--timeout', '10', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password']
|
729
|
+
].each_with_index do |args, i|
|
730
|
+
context "when run with single env var #{i}" do
|
731
|
+
let(:arguments) { args }
|
732
|
+
it { expect { run }.to exit_with_code(0) }
|
733
|
+
it { run_output.should match("Success") }
|
734
|
+
it { run_output.should match(/Cartridges:\s+mock_standalone_cart-1\n/) }
|
735
|
+
it { run_output.should match(/Environment Variables:\s+FOO=BAR\n/) }
|
736
|
+
end
|
737
|
+
end
|
738
|
+
|
739
|
+
[['app', 'create', 'app1', 'mock_standalone_cart-1', '-e', 'VAR1=VAL1', '-e', 'VAR2=VAL2', '-e', 'VAR3=VAL3', '--noprompt', '--timeout', '10', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'],
|
740
|
+
['app', 'create', 'app1', 'mock_standalone_cart-1', '--env', 'VAR1=VAL1', '--env', 'VAR2=VAL2', '--env', 'VAR3=VAL3', '--noprompt', '--timeout', '10', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password']
|
741
|
+
].each_with_index do |args, i|
|
742
|
+
context "when run with multiple env vars #{i}" do
|
743
|
+
let(:arguments) { args }
|
744
|
+
it { expect { run }.to exit_with_code(0) }
|
745
|
+
it { run_output.should match("Success") }
|
746
|
+
it { run_output.should match(/Cartridges:\s+mock_standalone_cart-1\n/) }
|
747
|
+
it { run_output.should match(/Environment Variables:\s+VAR1=VAL1, VAR2=VAL2, VAR3=VAL3\n/) }
|
748
|
+
end
|
749
|
+
end
|
750
|
+
|
751
|
+
end
|
711
752
|
end
|
@@ -27,11 +27,11 @@ describe RHC::Commands::Cartridge do
|
|
27
27
|
describe 'run' do
|
28
28
|
let!(:rest_client){ MockRestClient.new }
|
29
29
|
context "with all arguments" do
|
30
|
-
let(:arguments) { ['
|
30
|
+
let(:arguments) { ['cartridges', '--trace', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'] }
|
31
31
|
it { succeed_with_message /mock_cart-1.*mock_cart-2.*unique_mock_cart-1/m }
|
32
32
|
end
|
33
33
|
context "without password" do
|
34
|
-
let(:arguments) { ['
|
34
|
+
let(:arguments) { ['cartridges', '--trace', '--noprompt', '--config', 'test.conf'] }
|
35
35
|
it { succeed_with_message /mock_cart-1.*mock_cart-2.*unique_mock_cart-1/m }
|
36
36
|
end
|
37
37
|
end
|
@@ -66,7 +66,7 @@ describe RHC::Commands::Cartridge do
|
|
66
66
|
|
67
67
|
describe 'alias app cartridge' do
|
68
68
|
let!(:rest_client){ MockRestClient.new }
|
69
|
-
let(:arguments) { ['app', 'cartridge', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'] }
|
69
|
+
let(:arguments) { ['app', 'cartridge', 'list', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'] }
|
70
70
|
|
71
71
|
context 'when run' do
|
72
72
|
it { succeed_with_message /mock_cart-1.*mock_cart-2.*unique_mock_cart-1/m }
|
@@ -86,6 +86,9 @@ describe RHC::Commands::Cartridge do
|
|
86
86
|
it { succeed_with_message /Connection URL:\s+http\:\/\/fake\.url/ }
|
87
87
|
it { succeed_with_message /Prop1:\s+value1/ }
|
88
88
|
it { succeed_with_message /Cartridge added with properties/ }
|
89
|
+
it "should not contain env var info" do
|
90
|
+
run_output.should_not match(/Environment Variables/)
|
91
|
+
end
|
89
92
|
end
|
90
93
|
end
|
91
94
|
|
@@ -215,15 +218,15 @@ describe RHC::Commands::Cartridge do
|
|
215
218
|
let(:username){ mock_user }
|
216
219
|
let(:password){ 'password' }
|
217
220
|
let(:server){ mock_uri }
|
218
|
-
let(:arguments){ ['remove-cartridge', 'jenkins-1
|
219
|
-
before do
|
221
|
+
let(:arguments){ ['remove-cartridge', 'jenkins-1', '-a', 'foo', '--confirm', '--trace'] }
|
222
|
+
before do
|
220
223
|
stub_api(false)
|
221
224
|
challenge{ stub_one_domain('test') }
|
222
225
|
stub_one_application('test', 'foo').with(:query => {:include => 'cartridges'})
|
223
|
-
stub_application_cartridges('test', 'foo', [{:name => 'php-5.3'}, {:name => 'jenkins-1
|
226
|
+
stub_application_cartridges('test', 'foo', [{:name => 'php-5.3'}, {:name => 'jenkins-1'}])
|
224
227
|
end
|
225
|
-
before do
|
226
|
-
stub_api_request(:delete, "broker/rest/domains/test/applications/foo/cartridges/jenkins-1
|
228
|
+
before do
|
229
|
+
stub_api_request(:delete, "broker/rest/domains/test/applications/foo/cartridges/jenkins-1").
|
227
230
|
to_return({
|
228
231
|
:body => {
|
229
232
|
:type => nil,
|
@@ -238,7 +241,7 @@ describe RHC::Commands::Cartridge do
|
|
238
241
|
end
|
239
242
|
|
240
243
|
it("should not display info returned by the server"){ run_output.should_not match "Removed Jenkins" }
|
241
|
-
it("should display prefix returned by the server"){ run_output.should match "Removing jenkins-1
|
244
|
+
it("should display prefix returned by the server"){ run_output.should match "Removing jenkins-1" }
|
242
245
|
it("should display results returned by the server"){ run_output.should match "Job URL changed" }
|
243
246
|
it('should exit successfully'){ expect{ run }.to exit_with_code(0) }
|
244
247
|
end
|
@@ -550,4 +553,53 @@ describe RHC::Commands::Cartridge do
|
|
550
553
|
|
551
554
|
end
|
552
555
|
end
|
556
|
+
|
557
|
+
describe 'cartridge add with env vars' do
|
558
|
+
let!(:rest_client){ MockRestClient.new }
|
559
|
+
|
560
|
+
[['app', 'cartridge', 'add', 'unique_mock_cart', '-e', 'FOO=BAR', '--app', 'app1', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'],
|
561
|
+
['app', 'cartridge', 'add', 'unique_mock_cart', '--env', 'FOO=BAR', '--app', 'app1', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password']
|
562
|
+
].each_with_index do |args, i|
|
563
|
+
context "when run with single env var #{i}" do
|
564
|
+
let(:arguments) { args }
|
565
|
+
before(:each) do
|
566
|
+
domain = rest_client.add_domain("mock_domain")
|
567
|
+
app = domain.add_application("app1", "mock_type")
|
568
|
+
end
|
569
|
+
it {
|
570
|
+
succeed_with_message(/Environment Variables:\s+FOO=BAR/)
|
571
|
+
}
|
572
|
+
end
|
573
|
+
end
|
574
|
+
|
575
|
+
[['app', 'cartridge', 'add', 'unique_mock_cart', '-e', 'FOO1=BAR1', '-e', 'FOO2=BAR2', '--app', 'app1', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'],
|
576
|
+
['app', 'cartridge', 'add', 'unique_mock_cart', '--env', 'FOO1=BAR1', '--env', 'FOO2=BAR2', '--app', 'app1', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password']
|
577
|
+
].each_with_index do |args, i|
|
578
|
+
context "when run with multiple env vars #{i}" do
|
579
|
+
let(:arguments) { args }
|
580
|
+
before(:each) do
|
581
|
+
domain = rest_client.add_domain("mock_domain")
|
582
|
+
app = domain.add_application("app1", "mock_type")
|
583
|
+
end
|
584
|
+
it {
|
585
|
+
succeed_with_message(/Environment Variables:\s+FOO1=BAR1, FOO2=BAR2/)
|
586
|
+
}
|
587
|
+
end
|
588
|
+
end
|
589
|
+
|
590
|
+
[['app', 'cartridge', 'add', 'unique_mock_cart', '-e', File.expand_path('../../assets/env_vars.txt', __FILE__), '--app', 'app1', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'],
|
591
|
+
['app', 'cartridge', 'add', 'unique_mock_cart', '--env', File.expand_path('../../assets/env_vars.txt', __FILE__), '--app', 'app1', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password']
|
592
|
+
].each_with_index do |args, i|
|
593
|
+
context "when run with env vars from files #{i}" do
|
594
|
+
let(:arguments) { args }
|
595
|
+
before(:each) do
|
596
|
+
domain = rest_client.add_domain("mock_domain")
|
597
|
+
app = domain.add_application("app1", "mock_type")
|
598
|
+
end
|
599
|
+
it {
|
600
|
+
succeed_with_message(/Environment Variables:\s+BAR=456, FOO=123, MY_EMPTY_ENV_VAR=, MY_OPENSHIFT_ENV_VAR=mongodb:\/\/user:pass@host:port\/\n/)
|
601
|
+
}
|
602
|
+
end
|
603
|
+
end
|
604
|
+
end
|
553
605
|
end
|