rhc 1.35.4 → 1.36.4

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.
@@ -101,6 +101,12 @@ module RHC::Commands
101
101
  end.join(', ')
102
102
 
103
103
  env = collect_env_vars(arg_envs.concat(Array(options.env)))
104
+ if options.env && env.empty?
105
+ raise RHC::EnvironmentVariableNotProvidedException.new(
106
+ "Environment variable(s) not provided.\n" +
107
+ "Please provide at least one environment variable using the syntax VARIABLE=VALUE. VARIABLE can only contain letters, digits and underscore ('_') and can't begin with a digit.")
108
+ end
109
+
104
110
  if env.present? && !rest_domain.supports_add_application_with_env_vars?
105
111
  env = []
106
112
  warn "Server does not support environment variables."
@@ -179,7 +185,7 @@ module RHC::Commands
179
185
  warn "not complete"
180
186
  add_issue("Jenkins failed to install - #{e}",
181
187
  "Installing jenkins and jenkins-client",
182
- "rhc create-app jenkins",
188
+ "rhc create-app jenkins jenkins-1",
183
189
  "rhc add-cartridge jenkins-client -a #{rest_app.name}")
184
190
  end
185
191
  end
@@ -432,10 +438,16 @@ module RHC::Commands
432
438
  domain, app = discover_domain_and_app
433
439
  gear_info = rest_client.find_application_gear_groups_endpoints(domain, app).map do |group|
434
440
  group.gears.map do |gear|
441
+ color_cart = if gear['endpoints'].present?
442
+ e = gear['endpoints'].collect{ |c| c['cartridge_name'] }.uniq
443
+ lambda { |c| e.include?(c) ? color(c, :green) : c }
444
+ else
445
+ lambda { |c| c }
446
+ end
435
447
  [
436
448
  gear['id'],
437
449
  gear['state'] == 'started' ? color(gear['state'], :green) : color(gear['state'], :yellow),
438
- (gear['endpoints'].blank? ? group.cartridges : gear['endpoints']).collect{ |c| c['cartridge_name'] || c['name'] }.join(' '),
450
+ group.cartridges.collect{ |c| color_cart.call(c['name']) }.join(' '),
439
451
  group.gear_profile,
440
452
  gear['region'],
441
453
  gear['zone'],
@@ -71,6 +71,7 @@ module RHC::Commands
71
71
  syntax "<application>"
72
72
  takes_application :argument => true
73
73
  option ["-g", "--gear ID"], "Gear ID you are port forwarding to (optional)"
74
+ option ["-s", "--service [SERVICE,]"], "A CSV list of services to port forward (optional)"
74
75
  def run(app)
75
76
  rest_app = find_app
76
77
  ssh_uri = URI.parse(options.gear ? rest_app.gear_ssh_url(options.gear) : rest_app.ssh_url)
@@ -95,7 +96,7 @@ module RHC::Commands
95
96
  raise RHC::PermissionDeniedException.new "Permission denied." if line =~ /permission denied/i
96
97
  # ...and also which services are available for the application
97
98
  # for us to forward ports for.
98
- if line =~ /\A\s*(\S+) -> #{HOST_AND_PORT}\z/
99
+ if line =~ /\A\s*(\S+) -> #{HOST_AND_PORT}\z/ and (options.service.nil? or options.service.empty? or options.service.split(',').include? $1)
99
100
  debug fs = ForwardingSpec.new($1, $2, $3.to_i)
100
101
  forwarding_specs << fs
101
102
  else
@@ -436,7 +436,7 @@ module RHC
436
436
  handle_error!(e.res, args[1], client)
437
437
  end
438
438
  raise ConnectionException.new(
439
- "An unexpected error occured when connecting to the server: #{e.message}")
439
+ "An unexpected error occurred when connecting to the server: #{e.message}")
440
440
  rescue HTTPClient::TimeoutError => e
441
441
  raise TimeoutException.new(
442
442
  "Connection to server timed out. "\
@@ -493,7 +493,7 @@ module RHC
493
493
  raise
494
494
  rescue => e
495
495
  debug_error(e)
496
- raise ConnectionException, "An unexpected error occured: #{e.message}", e.backtrace
496
+ raise ConnectionException, "An unexpected error occurred: #{e.message}", e.backtrace
497
497
  end
498
498
  end
499
499
  end
@@ -775,27 +775,43 @@ describe RHC::Commands::App do
775
775
  end
776
776
 
777
777
  describe 'app show --gears' do
778
- let(:arguments) { ['app', 'show', 'app1', '--gears', '--raw'] }
778
+ context do
779
+ let(:arguments) { ['app', 'show', 'app1', '--gears', '--raw'] }
779
780
 
780
- context 'when run' do
781
- before do
782
- @domain = rest_client.add_domain("mockdomain")
783
- @domain.add_application("app1", "mock_type")
781
+ context 'when run' do
782
+ before do
783
+ @domain = rest_client.add_domain("mockdomain")
784
+ @domain.add_application("app1", "mock_type")
785
+ end
786
+ it { run_output.should match(/ID\s+State\s+Cartridges\s+Size\s+SSH URL/) }
787
+ it { run_output.should match("fakegearid0 started mock_type small fakegearid0@fakesshurl.com") }
788
+ it { expect{ run }.to exit_with_code(0) }
789
+ end
790
+
791
+ context 'with regions and zones' do
792
+ before do
793
+ @domain = rest_client.add_domain("mockdomain")
794
+ @app = @domain.add_application("app1", "mock_type")
795
+ @app.gears.each{|g| g['region'] = 'south'; g['zone'] = 'west'}
796
+ end
797
+ it { run_output.should match(/ID\s+State\s+Cartridges\s+Size\s+Region\s+Zone\s+SSH URL/) }
798
+ it { run_output.should match(/fakegearid0\s+started\s+mock_type\s+small\s+south\s+west\s+fakegearid0@fakesshurl.com/) }
799
+ it { expect{ run }.to exit_with_code(0) }
784
800
  end
785
- it { run_output.should match(/ID\s+State\s+Cartridges\s+Size\s+SSH URL/) }
786
- it { run_output.should match("fakegearid0 started mock_type small fakegearid0@fakesshurl.com") }
787
- it { expect{ run }.to exit_with_code(0) }
788
801
  end
789
802
 
790
- context 'with regions and zones' do
791
- before do
792
- @domain = rest_client.add_domain("mockdomain")
793
- @app = @domain.add_application("app1", "mock_type")
794
- @app.gears.each{|g| g['region'] = 'south'; g['zone'] = 'west'}
803
+ context do
804
+ let(:arguments) { ['app', 'show', 'app1', '--gears'] }
805
+
806
+ context 'with cartridge that exposes an endpoint' do
807
+ before do
808
+ @domain = rest_client.add_domain("mockdomain")
809
+ # An application has to be scalable to expose an endpoint.
810
+ @app = @domain.add_application("app1", "mock_type", true)
811
+ @app.gears.first['endpoints'] = [{ 'cartridge_name' => 'mock_cart-1' }]
812
+ end
813
+ it { (run_output.match(/fakegearid0\s+([^\s]+)\s+small\s+fakegearid0@fakesshurl\.com/)[1]).should be_colorized("started", :green) }
795
814
  end
796
- it { run_output.should match(/ID\s+State\s+Cartridges\s+Size\s+Region\s+Zone\s+SSH URL/) }
797
- it { run_output.should match(/fakegearid0\s+started\s+mock_type\s+small\s+south\s+west\s+fakegearid0@fakesshurl.com/) }
798
- it { expect{ run }.to exit_with_code(0) }
799
815
  end
800
816
  end
801
817
 
@@ -974,5 +990,16 @@ describe RHC::Commands::App do
974
990
  end
975
991
  end
976
992
 
993
+ [['app', 'create', 'app1', 'mock_standalone_cart-1', '-e', 'FOOBAR'],
994
+ ['app', 'create', 'app1', 'mock_standalone_cart-1', '--env', 'FOOBAR'],
995
+ ['app', 'create', 'app1', 'mock_standalone_cart-1', '-eFOOBAR']
996
+ ].each_with_index do |args, i|
997
+ context "when run with syntactically incorrect env vars #{i}" do
998
+ let(:arguments) { args }
999
+ it { expect { run }.to exit_with_code(159) }
1000
+ it { run_output.should match(/Environment variable\(s\) not provided.\nPlease provide at least one environment variable using the syntax VARIABLE=VALUE\. VARIABLE can only contain letters, digits and underscore \('_'\) and can't begin with a digit\./) }
1001
+ end
1002
+ end
1003
+
977
1004
  end
978
1005
  end
@@ -60,7 +60,7 @@ describe AllRhcHelpers do
60
60
  it("should be colorized") do
61
61
  message = "this is #{_color} -"
62
62
  output = capture{ subject.send(method,message) }
63
- output.should be_colorized(message,_color)
63
+ output.chomp.should be_colorized(message,_color)
64
64
  end
65
65
  it("should return true"){ subject.send(method,'anything').should be_true }
66
66
  end
@@ -71,7 +71,7 @@ module RHC
71
71
  context "against an endpoint that has a generic error" do
72
72
  let(:endpoint){ mock_href('other_error') }
73
73
  it "raises a generic error for any other error condition" do
74
- expect{ client.api }.to raise_error(RHC::Rest::ConnectionException, "An unexpected error occured: Other Error")
74
+ expect{ client.api }.to raise_error(RHC::Rest::ConnectionException, "An unexpected error occurred: Other Error")
75
75
  end
76
76
  end
77
77
  end
@@ -368,7 +368,7 @@ module RHC
368
368
  stub_request(:get, mock_href).to_return(return_data)
369
369
  end
370
370
  it "throws an error" do
371
- response.should raise_error(RHC::Rest::ConnectionException, 'An unexpected error occured: unexpected nil')
371
+ response.should raise_error(RHC::Rest::ConnectionException, 'An unexpected error occurred: unexpected nil')
372
372
  end
373
373
  end
374
374
 
@@ -496,7 +496,7 @@ module RHC
496
496
 
497
497
  context "with a generic exception error" do
498
498
  before{ stub_request(:get, mock_href).to_raise(Exception.new('Generic Error')) }
499
- it{ response.should raise_error(RHC::Rest::ConnectionException, "An unexpected error occured: Generic Error") }
499
+ it{ response.should raise_error(RHC::Rest::ConnectionException, "An unexpected error occurred: Generic Error") }
500
500
  end
501
501
 
502
502
  context "with an unauthorized request" do
@@ -567,8 +567,7 @@ module ColorMatchers
567
567
  [
568
568
  ansi_code(color),
569
569
  msg,
570
- ansi_code(:clear),
571
- "\n"
570
+ ansi_code(:clear)
572
571
  ].join('')
573
572
  end
574
573
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 147
4
+ hash: 143
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 35
8
+ - 36
9
9
  - 4
10
- version: 1.35.4
10
+ version: 1.36.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Red Hat
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2015-06-10 00:00:00 Z
18
+ date: 2015-07-02 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: net-ssh