rhc 1.18.2 → 1.19.5

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.
@@ -10,9 +10,9 @@ _rhc()
10
10
  if [[ "$cur" == -* ]]; then
11
11
  opts="--always-prefix --clean --config --debug --insecure --limit --mock --noprompt --password --raw --rhlogin --server --ssl-ca-file --ssl-client-cert-file --ssl-version --timeout --token"
12
12
  elif [ -z $cur ]; then
13
- opts="account alias alias-add alias-delete-cert alias-list alias-remove alias-update-cert app app-configure app-create app-delete app-deploy app-force-stop app-reload app-restart app-show app-start app-stop app-tidy apps authorization authorization-add authorization-delete authorization-delete-all authorization-list cartridge cartridge-add cartridge-list cartridge-reload cartridge-remove cartridge-restart cartridge-scale cartridge-show cartridge-start cartridge-status cartridge-stop cartridge-storage deployment-activate deployment-list deployment-show domain domain-configure domain-create domain-delete domain-leave domain-list domain-rename domain-show env env-list env-set env-show env-unset git-clone logout member member-add member-list member-remove port-forward server setup snapshot snapshot-restore snapshot-save ssh sshkey sshkey-add sshkey-list sshkey-remove sshkey-show tail threaddump"
13
+ opts="account alias alias-add alias-delete-cert alias-list alias-remove alias-update-cert app app-configure app-create app-delete app-deploy app-force-stop app-reload app-restart app-scale-down app-scale-up app-show app-start app-stop app-tidy apps authorization authorization-add authorization-delete authorization-delete-all authorization-list cartridge cartridge-add cartridge-list cartridge-reload cartridge-remove cartridge-restart cartridge-scale cartridge-show cartridge-start cartridge-status cartridge-stop cartridge-storage deployment deployment-activate deployment-list deployment-show domain domain-configure domain-create domain-delete domain-leave domain-list domain-rename domain-show env env-list env-set env-show env-unset git-clone logout member member-add member-list member-remove port-forward server setup snapshot snapshot-restore snapshot-save ssh sshkey sshkey-add sshkey-list sshkey-remove sshkey-show tail threaddump"
14
14
  else
15
- opts="account account-logout activate-deployment add-alias add-authorization add-cartridge add-member add-sshkey alias alias-add alias-delete-cert alias-list alias-remove alias-update-cert aliases app app-configure app-create app-delete app-deploy app-env app-force-stop app-reload app-restart app-show app-snapshot app-ssh app-start app-stop app-tidy apps authorization authorization-add authorization-delete authorization-delete-all authorization-list authorizations cartridge cartridge-add cartridge-list cartridge-reload cartridge-remove cartridge-restart cartridge-scale cartridge-show cartridge-start cartridge-status cartridge-stop cartridge-storage cartridges configure-app configure-domain create-app create-domain delete-all-authorization delete-app delete-authorization delete-cert-alias delete-domain deploy deploy-app deployment deployment-activate deployment-list deployment-show deployments domain domain-configure domain-create domain-delete domain-leave domain-list domain-rename domain-show domains env env-add env-list env-remove env-set env-show env-unset force-stop-app git-clone leave-domain list-alias list-authorization list-cartridge list-deployment list-domain list-env list-member list-sshkey logout member member-add member-list member-remove members port-forward reload-app reload-cartridge remove-alias remove-cartridge remove-member remove-sshkey rename-domain restart-app restart-cartridge restore-snapshot save-snapshot scale-cartridge server set-env setup show-app show-cartridge show-deployment show-domain show-env show-sshkey snapshot snapshot-restore snapshot-save ssh sshkey sshkey-add sshkey-list sshkey-remove sshkey-show start-app start-cartridge status-cartridge stop-app stop-cartridge storage-cartridge tail threaddump tidy-app unset-env update-cert-alias"
15
+ opts="account account-logout activate-deployment add-alias add-authorization add-cartridge add-member add-sshkey alias alias-add alias-delete-cert alias-list alias-remove alias-update-cert aliases app app-configure app-create app-delete app-deploy app-env app-force-stop app-reload app-restart app-scale-down app-scale-up app-show app-snapshot app-ssh app-start app-stop app-tidy apps authorization authorization-add authorization-delete authorization-delete-all authorization-list authorizations cartridge cartridge-add cartridge-list cartridge-reload cartridge-remove cartridge-restart cartridge-scale cartridge-show cartridge-start cartridge-status cartridge-stop cartridge-storage cartridges configure-app configure-domain create-app create-domain delete-all-authorization delete-app delete-authorization delete-cert-alias delete-domain deploy deploy-app deployment deployment-activate deployment-list deployment-show deployments domain domain-configure domain-create domain-delete domain-leave domain-list domain-rename domain-show domains env env-add env-list env-remove env-set env-show env-unset force-stop-app git-clone leave-domain list-alias list-authorization list-cartridge list-deployment list-domain list-env list-member list-sshkey logout member member-add member-list member-remove members port-forward reload-app reload-cartridge remove-alias remove-cartridge remove-member remove-sshkey rename-domain restart-app restart-cartridge restore-snapshot save-snapshot scale-cartridge scale-down-app scale-up-app server set-env setup show-app show-cartridge show-deployment show-domain show-env show-sshkey snapshot snapshot-restore snapshot-save ssh sshkey sshkey-add sshkey-list sshkey-remove sshkey-show start-app start-cartridge status-cartridge stop-app stop-cartridge storage-cartridge tail threaddump tidy-app unset-env update-cert-alias"
16
16
  fi
17
17
  else
18
18
  prev="${COMP_WORDS[@]:0:COMP_CWORD}"
@@ -70,7 +70,7 @@ _rhc()
70
70
 
71
71
  "rhc add-cartridge")
72
72
  if [[ "$cur" == -* ]]; then
73
- opts="--app --application-id --cartridge --env --namespace"
73
+ opts="--app --application-id --cartridge --env --gear-size --namespace"
74
74
  else
75
75
  opts=""
76
76
  fi
@@ -86,7 +86,7 @@ _rhc()
86
86
 
87
87
  "rhc add-sshkey")
88
88
  if [[ "$cur" == -* ]]; then
89
- opts="--confirm"
89
+ opts="--confirm --content --type"
90
90
  else
91
91
  opts=""
92
92
  fi
@@ -192,7 +192,7 @@ _rhc()
192
192
  if [[ "$cur" == -* ]]; then
193
193
  opts=""
194
194
  else
195
- opts="create delete start stop force-stop restart reload tidy show deploy configure env snapshot"
195
+ opts="env snapshot create delete start stop scale-up scale-down force-stop restart reload tidy show deploy configure"
196
196
  fi
197
197
  ;;
198
198
 
@@ -206,7 +206,7 @@ _rhc()
206
206
 
207
207
  "rhc app create")
208
208
  if [[ "$cur" == -* ]]; then
209
- opts="--app --auto-deploy --deployment-branch --dns --enable-jenkins --env --from-code --gear-size --git --keep-deployments --namespace --no-auto-deploy --no-dns --no-git --no-keys --repo --scaling --type"
209
+ opts="--app --dns --enable-jenkins --env --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --repo --scaling --type"
210
210
  else
211
211
  opts=""
212
212
  fi
@@ -260,6 +260,22 @@ _rhc()
260
260
  fi
261
261
  ;;
262
262
 
263
+ "rhc app scale-down")
264
+ if [[ "$cur" == -* ]]; then
265
+ opts="--app --application-id --namespace"
266
+ else
267
+ opts=""
268
+ fi
269
+ ;;
270
+
271
+ "rhc app scale-up")
272
+ if [[ "$cur" == -* ]]; then
273
+ opts="--app --application-id --namespace"
274
+ else
275
+ opts=""
276
+ fi
277
+ ;;
278
+
263
279
  "rhc app show")
264
280
  if [[ "$cur" == -* ]]; then
265
281
  opts="--app --application-id --configuration --gears --namespace --state"
@@ -318,7 +334,7 @@ _rhc()
318
334
 
319
335
  "rhc app-create")
320
336
  if [[ "$cur" == -* ]]; then
321
- opts="--app --auto-deploy --deployment-branch --dns --enable-jenkins --env --from-code --gear-size --git --keep-deployments --namespace --no-auto-deploy --no-dns --no-git --no-keys --repo --scaling --type"
337
+ opts="--app --dns --enable-jenkins --env --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --repo --scaling --type"
322
338
  else
323
339
  opts=""
324
340
  fi
@@ -372,6 +388,22 @@ _rhc()
372
388
  fi
373
389
  ;;
374
390
 
391
+ "rhc app-scale-down")
392
+ if [[ "$cur" == -* ]]; then
393
+ opts="--app --application-id --namespace"
394
+ else
395
+ opts=""
396
+ fi
397
+ ;;
398
+
399
+ "rhc app-scale-up")
400
+ if [[ "$cur" == -* ]]; then
401
+ opts="--app --application-id --namespace"
402
+ else
403
+ opts=""
404
+ fi
405
+ ;;
406
+
375
407
  "rhc app-show")
376
408
  if [[ "$cur" == -* ]]; then
377
409
  opts="--app --application-id --configuration --gears --namespace --state"
@@ -518,7 +550,7 @@ _rhc()
518
550
 
519
551
  "rhc cartridge add")
520
552
  if [[ "$cur" == -* ]]; then
521
- opts="--app --application-id --cartridge --env --namespace"
553
+ opts="--app --application-id --cartridge --env --gear-size --namespace"
522
554
  else
523
555
  opts=""
524
556
  fi
@@ -606,7 +638,7 @@ _rhc()
606
638
 
607
639
  "rhc cartridge-add")
608
640
  if [[ "$cur" == -* ]]; then
609
- opts="--app --application-id --cartridge --env --namespace"
641
+ opts="--app --application-id --cartridge --env --gear-size --namespace"
610
642
  else
611
643
  opts=""
612
644
  fi
@@ -718,7 +750,7 @@ _rhc()
718
750
 
719
751
  "rhc create-app")
720
752
  if [[ "$cur" == -* ]]; then
721
- opts="--app --auto-deploy --deployment-branch --dns --enable-jenkins --env --from-code --gear-size --git --keep-deployments --namespace --no-auto-deploy --no-dns --no-git --no-keys --repo --scaling --type"
753
+ opts="--app --dns --enable-jenkins --env --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --repo --scaling --type"
722
754
  else
723
755
  opts=""
724
756
  fi
@@ -766,7 +798,7 @@ _rhc()
766
798
 
767
799
  "rhc delete-domain")
768
800
  if [[ "$cur" == -* ]]; then
769
- opts="--namespace"
801
+ opts="--force --namespace"
770
802
  else
771
803
  opts=""
772
804
  fi
@@ -878,7 +910,7 @@ _rhc()
878
910
 
879
911
  "rhc domain delete")
880
912
  if [[ "$cur" == -* ]]; then
881
- opts="--namespace"
913
+ opts="--force --namespace"
882
914
  else
883
915
  opts=""
884
916
  fi
@@ -934,7 +966,7 @@ _rhc()
934
966
 
935
967
  "rhc domain-delete")
936
968
  if [[ "$cur" == -* ]]; then
937
- opts="--namespace"
969
+ opts="--force --namespace"
938
970
  else
939
971
  opts=""
940
972
  fi
@@ -1348,6 +1380,22 @@ _rhc()
1348
1380
  fi
1349
1381
  ;;
1350
1382
 
1383
+ "rhc scale-down-app")
1384
+ if [[ "$cur" == -* ]]; then
1385
+ opts="--app --application-id --namespace"
1386
+ else
1387
+ opts=""
1388
+ fi
1389
+ ;;
1390
+
1391
+ "rhc scale-up-app")
1392
+ if [[ "$cur" == -* ]]; then
1393
+ opts="--app --application-id --namespace"
1394
+ else
1395
+ opts=""
1396
+ fi
1397
+ ;;
1398
+
1351
1399
  "rhc server")
1352
1400
  if [[ "$cur" == -* ]]; then
1353
1401
  opts=""
@@ -1478,7 +1526,7 @@ _rhc()
1478
1526
 
1479
1527
  "rhc sshkey add")
1480
1528
  if [[ "$cur" == -* ]]; then
1481
- opts="--confirm"
1529
+ opts="--confirm --content --type"
1482
1530
  else
1483
1531
  opts=""
1484
1532
  fi
@@ -1510,7 +1558,7 @@ _rhc()
1510
1558
 
1511
1559
  "rhc sshkey-add")
1512
1560
  if [[ "$cur" == -* ]]; then
1513
- opts="--confirm"
1561
+ opts="--confirm --content --type"
1514
1562
  else
1515
1563
  opts=""
1516
1564
  fi
@@ -5,4 +5,4 @@ libra_server = 'openshift.redhat.com'
5
5
  debug = 'false'
6
6
 
7
7
  # Timeout
8
- #timeout = '10'
8
+ #timeout = '10'
@@ -37,9 +37,13 @@ describe "rhc core scenarios" do
37
37
  r.stdout.should match 'SSL Certificates'
38
38
  end
39
39
 
40
- it "starts the wizard on default invocation" do
40
+ it "displays help on default invocation" do
41
41
  r = rhc
42
- r.stdout.should match "OpenShift Client Tools"
42
+ r.status.should == 0
43
+ r.stdout.should match "Command line interface for OpenShift"
44
+ r.stdout.should match "Usage: rhc"
45
+ r.stdout.should match "Getting started"
46
+ r.stdout.should match "See 'rhc help options' for a list"
43
47
  end
44
48
  end
45
49
 
@@ -114,6 +118,7 @@ describe "rhc core scenarios" do
114
118
  Dir.chdir @app.name
115
119
  end
116
120
  let(:git_config){ `git config --list` }
121
+ let(:git_remotes){ `git remote -v` }
117
122
 
118
123
  it "will set Git config values" do
119
124
  git_config.should match "rhc.app-id=#{app.id}"
@@ -121,6 +126,11 @@ describe "rhc core scenarios" do
121
126
  git_config.should match "rhc.domain-name=#{app.domain_name}"
122
127
  end
123
128
 
129
+ it "will set remote branches correctly" do
130
+ git_remotes.should match "origin"
131
+ git_remotes.should_not match "upstream"
132
+ end
133
+
124
134
  it "will infer the current app from the git repository" do
125
135
  r = rhc 'show-app'
126
136
  r.stdout.should match app.name
@@ -98,6 +98,8 @@ describe "rhc deployment scenarios" do
98
98
  FileUtils.rm_rf git_directory
99
99
  git_clone
100
100
  Dir.chdir git_directory
101
+ `git config user.email "you@example.com"`
102
+ `git config user.name "Your Name"`
101
103
  `sed -i "s/Welcome to OpenShift/#{content}/" php/index.php`
102
104
  `git commit -a -m "Commit from Feature Tests"`
103
105
  `git push origin master`
@@ -7,7 +7,7 @@ module RHC
7
7
  from = opts[:from] || all_cartridges
8
8
 
9
9
  cartridge_names.map do |name|
10
- next use_cart(RHC::Rest::Cartridge.for_url(name), name) if name =~ %r(\Ahttps?://)i
10
+ next from.find{ |c| c.url.present? && c.url.downcase == name} || use_cart(RHC::Rest::Cartridge.for_url(name), name) if name =~ %r(\Ahttps?://)i
11
11
 
12
12
  name = name.downcase
13
13
  from.find{ |c| c.name.downcase == name } ||
@@ -14,7 +14,7 @@ module RHC
14
14
  extend Commander::Delegates
15
15
 
16
16
  def self.set_terminal
17
- $terminal.wrap_at = HighLine::SystemExtensions.terminal_size.first rescue 80 if $stdin.tty?
17
+ $terminal.wrap_at = HighLine::SystemExtensions.terminal_size.first rescue 80 if $stdout.tty?
18
18
  $terminal.wrap_at = nil if $terminal.wrap_at == 0
19
19
  #$terminal.page_at = :auto if $stdin.tty? and $stdout.tty?
20
20
  # FIXME: ANSI terminals are not default on windows but we may just be
@@ -72,7 +72,6 @@ module RHC
72
72
  begin
73
73
  run_active_command
74
74
  rescue InvalidCommandError => e
75
- return RHC::Wizard.new.run unless RHC::Wizard.has_configuration? || provided_arguments.present?
76
75
  run_help(provided_arguments)
77
76
  rescue \
78
77
  OptionParser::InvalidOption => e
@@ -244,6 +244,26 @@ module RHC::Commands
244
244
  0
245
245
  end
246
246
 
247
+ summary "Scale up the application's web cartridge"
248
+ syntax "<app> [--namespace NAME]"
249
+ takes_application :argument => true
250
+ def scale_up(app)
251
+ app_action :scale_up
252
+
253
+ results { say "#{app} scaled up" }
254
+ 0
255
+ end
256
+
257
+ summary "Scale down the application's web cartridge"
258
+ syntax "<app> [--namespace NAME]"
259
+ takes_application :argument => true
260
+ def scale_down(app)
261
+ app_action :scale_down
262
+
263
+ results { say "#{app} scaled down" }
264
+ 0
265
+ end
266
+
247
267
  summary "Stops all application processes"
248
268
  syntax "<app> [--namespace NAME]"
249
269
  takes_application :argument => true
@@ -1,9 +1,28 @@
1
1
  module RHC::Commands
2
2
  class Authorization < Base
3
3
 
4
+ summary "Manage your authorization tokens"
5
+ syntax "<action>"
6
+ description <<-DESC
7
+ An authorization token grants access to the OpenShift REST API with a
8
+ set of privileges called 'scopes' for a limited time. You can add an
9
+ optional note to each authorization token to assist you in remembering
10
+ why it was created.
11
+
12
+ To see all your authorizations, run 'rhc authorizations'.
13
+
14
+ To view the list of scopes supported by this server, run the
15
+ 'rhc add-authorization' command with no arguments.
16
+
17
+ These commands manage your authorization tokens on the server - if you
18
+ want to clear your authorization tokens from the current machine use
19
+ 'rhc logout'
20
+ DESC
21
+ default_action :help
22
+
4
23
  summary "Show the authorization tokens for your account"
5
24
  description <<-DESC
6
- Shows the full list of authorization tokens on your account. You
25
+ Shows the full list of authorization tokens on your account. You
7
26
  can add, edit, or delete authorizations with subcommands.
8
27
 
9
28
  An authorization token grants access to the OpenShift REST API with
@@ -12,7 +31,6 @@ module RHC::Commands
12
31
  remembering what is available.
13
32
  DESC
14
33
  alias_action 'authorizations', :root_command => true
15
- default_action :list
16
34
  def list
17
35
  rest_client.authorizations.each{ |auth| paragraph{ display_authorization(auth, token_for_user) } } or info "No authorizations"
18
36
 
@@ -98,7 +98,7 @@ module RHC::Commands
98
98
  warn "In order to deploy applications, you must create a domain with 'rhc setup' or 'rhc create-domain'." and return 1 unless domain
99
99
 
100
100
  applications = domain.applications(:include => :cartridges)
101
- display_domain(domain, applications)
101
+ display_domain(domain, applications, true)
102
102
 
103
103
  if applications.present?
104
104
  success "You have #{pluralize(applications.length, 'application')} in your domain."
@@ -111,15 +111,16 @@ module RHC::Commands
111
111
 
112
112
  summary "Display all domains you have access to"
113
113
  option ['--mine'], "Display only domains you own"
114
- option ['--ids'], "Display the unique id of the domain (not supported by all servers)"
114
+ option ['--ids'], "Display the unique id of the domain (deprecated, domain IDs are now displayed by default)"
115
115
  alias_action :domains, :root_command => true
116
116
  def list
117
117
  domains = rest_client.send(options.mine ? :owned_domains : :domains)
118
118
 
119
119
  warn "In order to deploy applications, you must create a domain with 'rhc setup' or 'rhc create-domain'." and return 1 unless domains.present?
120
+ warn "The --ids option is deprecated. Domain IDs are displayed by default." if options.ids
120
121
 
121
122
  domains.each do |d|
122
- display_domain(d, nil, options.ids)
123
+ display_domain(d, nil, true)
123
124
  end
124
125
 
125
126
  success "You have access to #{pluralize(domains.length, 'domain')}."
@@ -95,7 +95,7 @@ module RHC
95
95
  say "Activating deployment '#{deployment_id}' on application #{rest_app.name} ..."
96
96
 
97
97
  ssh_url = URI(rest_app.ssh_url)
98
- remote_cmd = "gear activate #{deployment_id}"
98
+ remote_cmd = "gear activate --all #{deployment_id}"
99
99
 
100
100
  begin
101
101
  ssh_ruby(ssh_url.host, ssh_url.user, remote_cmd)
@@ -41,6 +41,8 @@ module RHC
41
41
  git_config_set "rhc.app-id", app.id
42
42
  git_config_set "rhc.app-name", app.name
43
43
  git_config_set "rhc.domain-name", app.domain_id
44
+
45
+ git_remote_add("upstream", app.initial_git_url) if app.initial_git_url.present?
44
46
  end
45
47
 
46
48
  git_clone_deploy_hooks(repo_dir)
@@ -48,6 +50,13 @@ module RHC
48
50
  dir
49
51
  end
50
52
 
53
+ def git_remote_add(remote_name, remote_url)
54
+ cmd = "#{git_cmd} remote add upstream \"#{remote_url}\""
55
+ debug "Running #{cmd} 2>&1"
56
+ output = %x[#{cmd} 2>&1]
57
+ raise RHC::GitException, "Error while adding upstream remote - #{output}" unless output.empty?
58
+ end
59
+
51
60
  # :nocov: These all call external binaries so test them in cucumber
52
61
  def git_config_get(key)
53
62
  return nil unless has_git?
@@ -95,7 +95,7 @@ module RHC
95
95
  #
96
96
 
97
97
  def user_agent
98
- "rhc/#{RHC::VERSION::STRING} (ruby #{RUBY_VERSION}; #{RUBY_PLATFORM})#{" (API #{RHC::Rest::API_VERSION})" rescue ''}"
98
+ "rhc/#{RHC::VERSION::STRING} (ruby #{RUBY_VERSION}; #{RUBY_PLATFORM})#{" (API #{RHC::Rest::Client::CLIENT_API_VERSIONS})"}"
99
99
  end
100
100
 
101
101
  #
@@ -21,6 +21,14 @@ module RHC
21
21
  attributes['id'] || uuid
22
22
  end
23
23
 
24
+ def uuid
25
+ if (client.api_version_negotiated >= 1.6)
26
+ attributes['id']
27
+ else
28
+ attributes['uuid']
29
+ end
30
+ end
31
+
24
32
  def domain
25
33
  domain_id
26
34
  end
@@ -97,6 +105,14 @@ module RHC
97
105
  rest_method 'TIDY', :event => "tidy"
98
106
  end
99
107
 
108
+ def scale_up
109
+ rest_method 'SCALE_UP', :event => "scale-up"
110
+ end
111
+
112
+ def scale_down
113
+ rest_method 'SCALE_DOWN', :event => "scale-down"
114
+ end
115
+
100
116
  def start
101
117
  debug "Starting application #{name}"
102
118
  rest_method 'START', :event => "start"
@@ -214,7 +214,7 @@ module RHC
214
214
  # The list may not necessarily be sorted; we will select the last
215
215
  # matching one supported by the server.
216
216
  # See #api_version_negotiated
217
- CLIENT_API_VERSIONS = [1.1, 1.2, 1.3, 1.4, 1.5]
217
+ CLIENT_API_VERSIONS = [1.1, 1.2, 1.3, 1.4, 1.5, 1.6]
218
218
  MAX_RETRIES = 5
219
219
 
220
220
  def initialize(*args)
@@ -395,6 +395,8 @@ module RHC::Rest::Mock
395
395
  ['START', "domains/#{domain_id}/apps/#{app_id}/start", 'post'],
396
396
  ['STOP', "domains/#{domain_id}/apps/#{app_id}/stop", 'post'],
397
397
  ['RESTART', "domains/#{domain_id}/apps/#{app_id}/restart", 'post'],
398
+ ['SCALE_UP', "broker/rest/application/#{app_id}/events", 'scale-up'],
399
+ ['SCALE_DOWN', "broker/rest/application/#{app_id}/events", 'scale-down'],
398
400
  ['THREAD_DUMP', "domains/#{domain_id}/apps/#{app_id}/event", 'post'],
399
401
  ['ADD_ALIAS', "domains/#{domain_id}/apps/#{app_id}/event", 'post'],
400
402
  ['REMOVE_ALIAS', "domains/#{domain_id}/apps/#{app_id}/event", 'post'],
@@ -854,6 +856,14 @@ module RHC::Rest::Mock
854
856
  @app
855
857
  end
856
858
 
859
+ def scale_up
860
+ @app
861
+ end
862
+
863
+ def scale_down
864
+ @app
865
+ end
866
+
857
867
  def add_alias(app_alias)
858
868
  @aliases << MockRestAlias.new(@client, app_alias)
859
869
  end
@@ -370,7 +370,7 @@ module RHC
370
370
  def ssh_add
371
371
  if exe?('ssh-add')
372
372
  #:nocov:
373
- `ssh-add 2&>1`
373
+ `ssh-add 2>&1`
374
374
  #:nocov:
375
375
  end
376
376
  end
@@ -13,7 +13,7 @@ module RHC
13
13
  return false if ! (File.file? filename and File.basename(filename).downcase =~ /.\.t(ar\.)?gz$/i)
14
14
 
15
15
  regex = Regexp.new search
16
- if RHC::Helpers.windows? or force_ruby
16
+ if RHC::Helpers.windows? or RHC::Helpers.mac? or force_ruby
17
17
  begin
18
18
  zlib::GzipReader.open(filename) do |gz|
19
19
  Minitar::Reader.open gz do |tar|
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'rest_spec_helper'
2
3
  require 'rhc/wizard'
3
4
 
4
5
  describe RHC::CLI do
@@ -81,8 +82,7 @@ describe RHC::CLI do
81
82
  it_should_behave_like 'a global help page'
82
83
 
83
84
  context "without a config file" do
84
- before{ RHC::Wizard.stub(:has_configuration?).and_return(false) }
85
- it_should_behave_like 'a first run wizard'
85
+ it_should_behave_like 'a global help page'
86
86
  end
87
87
  end
88
88
 
@@ -174,13 +174,12 @@ describe RHC::CLI do
174
174
  describe '#set_terminal' do
175
175
  before(:each) { mock_terminal }
176
176
  it('should update $terminal.wrap_at') do
177
- $stdin.should_receive(:tty?).once.and_return(true)
177
+ $stdout.should_receive(:tty?).twice.and_return(true)
178
178
  HighLine::SystemExtensions.should_receive(:terminal_size).and_return([5])
179
179
  expect { RHC::CLI.set_terminal }.to change($terminal, :wrap_at)
180
180
  end
181
181
  it('should not update $terminal.page_at') do
182
- $stdin.should_receive(:tty?).once.and_return(true)
183
- $stdout.should_receive(:tty?).once.and_return(true)
182
+ $stdout.should_receive(:tty?).twice.and_return(true)
184
183
  expect { RHC::CLI.set_terminal }.to_not change($terminal, :page_at)
185
184
  end
186
185
  end
@@ -669,6 +669,18 @@ describe RHC::Commands::App do
669
669
  it { expect{ run }.to exit_with_code(0) }
670
670
  end
671
671
 
672
+ context 'app scale-up' do
673
+ let(:arguments) { ['app', 'scale-up', '-a', 'app1'] }
674
+ it { run_output.should match('scaled up') }
675
+ it { expect{ run }.to exit_with_code(0) }
676
+ end
677
+
678
+ context 'app scale-down' do
679
+ let(:arguments) { ['app', 'scale-down', '-a', 'app1'] }
680
+ it { run_output.should match('scaled down') }
681
+ it { expect{ run }.to exit_with_code(0) }
682
+ end
683
+
672
684
  context 'app stop' do
673
685
  let(:arguments) { ['app', 'stop', 'app1'] }
674
686
 
@@ -28,7 +28,7 @@ describe RHC::Commands::Authorization do
28
28
  end
29
29
 
30
30
  describe '#run' do
31
- let(:arguments) { ['authorization'] }
31
+ let(:arguments) { ['authorizations'] }
32
32
  context "with authorizations" do
33
33
  with_authorization
34
34
  before{ challenge{ stub_authorizations } }
@@ -42,12 +42,13 @@ describe RHC::Commands::Authorization do
42
42
 
43
43
  expect_an_unsupported_message
44
44
  end
45
-
45
+
46
46
  describe '#run' do
47
- let(:arguments) { ['authorization', '--h']}
48
- context 'given --h' do
49
- it 'should not raise' do
50
- expect{ run }.to_not raise_error
47
+ let(:arguments) { ['authorization']}
48
+ context 'given no arguments' do
49
+ it('should display help'){ run_output.should =~ /An authorization token grants access to the OpenShift REST API.*To see all your authorizations/m }
50
+ it 'should ask for an argument' do
51
+ expect{ run }.to exit_with_code(1)
51
52
  end
52
53
  end
53
54
  end
@@ -256,6 +256,21 @@ describe RHC::Commands::Cartridge do
256
256
  end
257
257
  end
258
258
 
259
+ context 'when run with custom cart url' do
260
+ let(:arguments) { ['cartridge', 'remove', 'https://foo.bar.com', '--confirm', '-a', 'app1'] }
261
+ before do
262
+ @domain = rest_client.add_domain("mockdomain")
263
+ @app = @domain.add_application("app1", "mock_type")
264
+ cart1 = @app.add_cartridge('mock_cart-1')
265
+ cart1.url = 'https://foo.bar.com'
266
+ end
267
+ it "should remove cartridge" do
268
+ expect { run }.to exit_with_code(0)
269
+ # framework cart should be the only one listed
270
+ @app.cartridges.length.should == 1
271
+ end
272
+ end
273
+
259
274
  context "against a 1.5 server" do
260
275
  let!(:rest_client){ nil }
261
276
  let(:username){ mock_user }
@@ -53,6 +53,19 @@ describe RHC::Commands::GitClone do
53
53
 
54
54
  it { expect { run }.to exit_with_code(0) }
55
55
  it { run_output.should match("Cloned") }
56
+
57
+ context 'when app has an initial git url' do
58
+ before do
59
+ @app2 = @domain.add_application("app2", "mock_unique_standalone_cart", nil, "default", "git://test")
60
+ @instance.stub(:git_remote_add) do |remote_name, remote_url|
61
+ say "Added remote #{remote_name} pointing to #{remote_url}"
62
+ true
63
+ end
64
+ end
65
+ let(:arguments) { ['git-clone', 'app2'] }
66
+ it { run_output.should match("Added remote upstream pointing to git://test") }
67
+ end
68
+
56
69
  end
57
70
 
58
71
  context "testing git_clone_deploy_hooks" do
@@ -242,6 +242,16 @@ module RHC
242
242
  let(:control_data) { { :method => :destroy, :event => 'delete', :link => 'delete', :payload => false } }
243
243
  it_should_behave_like "a control method"
244
244
  end
245
+
246
+ context "#scale_up" do
247
+ let(:control_data) { { :method => :scale_up, :event => 'scale-up', :link => 'scale_up', :payload => false } }
248
+ it_should_behave_like "a control method"
249
+ end
250
+
251
+ context "#scale_down" do
252
+ let(:control_data) { { :method => :scale_down, :event => 'scale-down', :link => 'scale_down', :payload => false } }
253
+ it_should_behave_like "a control method"
254
+ end
245
255
  end
246
256
  end
247
257
  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: 91
4
+ hash: 81
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 18
9
- - 2
10
- version: 1.18.2
8
+ - 19
9
+ - 5
10
+ version: 1.19.5
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: 2013-12-11 00:00:00 Z
18
+ date: 2014-01-28 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: net-ssh
@@ -237,82 +237,82 @@ extensions: []
237
237
  extra_rdoc_files: []
238
238
 
239
239
  files:
240
- - lib/rhc/command_runner.rb
240
+ - lib/rhc.rb
241
+ - lib/rhc/auth.rb
241
242
  - lib/rhc/version.rb
242
- - lib/rhc/cartridge_helpers.rb
243
- - lib/rhc/auth/basic.rb
244
- - lib/rhc/auth/token_store.rb
245
- - lib/rhc/auth/token.rb
246
- - lib/rhc/output_helpers.rb
243
+ - lib/rhc/core_ext.rb
244
+ - lib/rhc/json.rb
247
245
  - lib/rhc/wizard.rb
248
- - lib/rhc/help_formatter.rb
249
- - lib/rhc/commands.rb
250
- - lib/rhc/context_helper.rb
251
246
  - lib/rhc/rest.rb
252
- - lib/rhc/ssh_helpers.rb
253
- - lib/rhc/helpers.rb
254
- - lib/rhc/coverage_helper.rb
255
- - lib/rhc/json.rb
256
- - lib/rhc/deployment_helpers.rb
257
- - lib/rhc/git_helpers.rb
258
- - lib/rhc/auth.rb
259
- - lib/rhc/exceptions.rb
260
247
  - lib/rhc/autocomplete.rb
248
+ - lib/rhc/git_helpers.rb
249
+ - lib/rhc/command_runner.rb
250
+ - lib/rhc/context_helper.rb
261
251
  - lib/rhc/config.rb
262
- - lib/rhc/commands/setup.rb
263
- - lib/rhc/commands/account.rb
252
+ - lib/rhc/exceptions.rb
253
+ - lib/rhc/commands/threaddump.rb
254
+ - lib/rhc/commands/cartridge.rb
255
+ - lib/rhc/commands/base.rb
264
256
  - lib/rhc/commands/port_forward.rb
257
+ - lib/rhc/commands/logout.rb
258
+ - lib/rhc/commands/setup.rb
259
+ - lib/rhc/commands/deployment.rb
265
260
  - lib/rhc/commands/tail.rb
266
- - lib/rhc/commands/alias.rb
267
- - lib/rhc/commands/git_clone.rb
261
+ - lib/rhc/commands/server.rb
268
262
  - lib/rhc/commands/ssh.rb
269
- - lib/rhc/commands/domain.rb
270
- - lib/rhc/commands/cartridge.rb
263
+ - lib/rhc/commands/apps.rb
264
+ - lib/rhc/commands/alias.rb
271
265
  - lib/rhc/commands/authorization.rb
272
- - lib/rhc/commands/member.rb
273
266
  - lib/rhc/commands/sshkey.rb
274
- - lib/rhc/commands/deployment.rb
275
- - lib/rhc/commands/snapshot.rb
276
- - lib/rhc/commands/server.rb
277
267
  - lib/rhc/commands/app.rb
278
- - lib/rhc/commands/logout.rb
268
+ - lib/rhc/commands/member.rb
269
+ - lib/rhc/commands/domain.rb
279
270
  - lib/rhc/commands/env.rb
280
- - lib/rhc/commands/apps.rb
281
- - lib/rhc/commands/threaddump.rb
282
- - lib/rhc/commands/base.rb
283
- - lib/rhc/tar_gz.rb
271
+ - lib/rhc/commands/account.rb
272
+ - lib/rhc/commands/git_clone.rb
273
+ - lib/rhc/commands/snapshot.rb
284
274
  - lib/rhc/highline_extensions.rb
285
- - lib/rhc/cli.rb
286
- - lib/rhc/core_ext.rb
287
- - lib/rhc/vendor/parseconfig.rb
288
- - lib/rhc/vendor/zliby.rb
289
- - lib/rhc/vendor/okjson.rb
290
- - lib/rhc/vendor/sshkey.rb
291
- - lib/rhc/rest/user.rb
292
- - lib/rhc/rest/attributes.rb
293
- - lib/rhc/rest/environment_variable.rb
294
- - lib/rhc/rest/activation.rb
295
- - lib/rhc/rest/api.rb
296
- - lib/rhc/rest/alias.rb
297
- - lib/rhc/rest/domain.rb
275
+ - lib/rhc/tar_gz.rb
276
+ - lib/rhc/commands.rb
277
+ - lib/rhc/ssh_helpers.rb
278
+ - lib/rhc/output_helpers.rb
279
+ - lib/rhc/coverage_helper.rb
280
+ - lib/rhc/help_formatter.rb
298
281
  - lib/rhc/rest/key.rb
299
282
  - lib/rhc/rest/cartridge.rb
300
- - lib/rhc/rest/membership.rb
301
- - lib/rhc/rest/authorization.rb
283
+ - lib/rhc/rest/base.rb
284
+ - lib/rhc/rest/activation.rb
302
285
  - lib/rhc/rest/deployment.rb
303
286
  - lib/rhc/rest/gear_group.rb
304
- - lib/rhc/rest/mock.rb
305
- - lib/rhc/rest/client.rb
287
+ - lib/rhc/rest/environment_variable.rb
288
+ - lib/rhc/rest/membership.rb
289
+ - lib/rhc/rest/user.rb
306
290
  - lib/rhc/rest/application.rb
307
- - lib/rhc/rest/base.rb
291
+ - lib/rhc/rest/api.rb
292
+ - lib/rhc/rest/client.rb
293
+ - lib/rhc/rest/alias.rb
294
+ - lib/rhc/rest/authorization.rb
295
+ - lib/rhc/rest/mock.rb
308
296
  - lib/rhc/rest/httpclient.rb
309
- - lib/rhc.rb
297
+ - lib/rhc/rest/attributes.rb
298
+ - lib/rhc/rest/domain.rb
299
+ - lib/rhc/vendor/okjson.rb
300
+ - lib/rhc/vendor/parseconfig.rb
301
+ - lib/rhc/vendor/zliby.rb
302
+ - lib/rhc/vendor/sshkey.rb
303
+ - lib/rhc/auth/token.rb
304
+ - lib/rhc/auth/basic.rb
305
+ - lib/rhc/auth/token_store.rb
306
+ - lib/rhc/helpers.rb
307
+ - lib/rhc/cli.rb
308
+ - lib/rhc/deployment_helpers.rb
309
+ - lib/rhc/cartridge_helpers.rb
310
310
  - lib/rhc/autocomplete_templates/bash.erb
311
+ - lib/rhc/usage_templates/help.erb
311
312
  - lib/rhc/usage_templates/command_syntax_help.erb
313
+ - lib/rhc/usage_templates/options_help.erb
312
314
  - lib/rhc/usage_templates/missing_help.erb
313
315
  - lib/rhc/usage_templates/command_help.erb
314
- - lib/rhc/usage_templates/options_help.erb
315
- - lib/rhc/usage_templates/help.erb
316
316
  - conf/express.conf
317
317
  - autocomplete/rhc_bash
318
318
  - LICENSE
@@ -320,59 +320,59 @@ files:
320
320
  - README.md
321
321
  - Rakefile
322
322
  - spec/rest_spec_helper.rb
323
+ - spec/keys/server.pem
324
+ - spec/keys/example_private.pem
325
+ - spec/keys/example.pem
326
+ - spec/spec_helper.rb
327
+ - spec/direct_execution_helper.rb
328
+ - spec/coverage_helper.rb
323
329
  - spec/wizard_spec_helper.rb
324
- - spec/rhc/targz_spec.rb
325
- - spec/rhc/config_spec.rb
326
- - spec/rhc/helpers_spec.rb
327
- - spec/rhc/rest_spec.rb
328
- - spec/rhc/auth_spec.rb
329
- - spec/rhc/rest_client_spec.rb
330
- - spec/rhc/assets/empty.txt
331
- - spec/rhc/assets/env_vars_2.txt
332
- - spec/rhc/assets/cert_key_rsa
333
- - spec/rhc/assets/targz_sample.tar.gz
334
- - spec/rhc/assets/env_vars.txt
335
- - spec/rhc/assets/targz_corrupted.tar.gz
336
- - spec/rhc/assets/cert.crt
337
- - spec/rhc/assets/foo.txt
338
330
  - spec/rhc/highline_extensions_spec.rb
339
- - spec/rhc/command_spec.rb
340
331
  - spec/rhc/cli_spec.rb
341
- - spec/rhc/commands/setup_spec.rb
342
- - spec/rhc/commands/tail_spec.rb
343
- - spec/rhc/commands/port_forward_spec.rb
344
- - spec/rhc/commands/app_spec.rb
345
- - spec/rhc/commands/deployment_spec.rb
346
- - spec/rhc/commands/domain_spec.rb
332
+ - spec/rhc/rest_spec.rb
333
+ - spec/rhc/targz_spec.rb
334
+ - spec/rhc/wizard_spec.rb
335
+ - spec/rhc/rest_client_spec.rb
347
336
  - spec/rhc/commands/sshkey_spec.rb
348
- - spec/rhc/commands/threaddump_spec.rb
349
- - spec/rhc/commands/server_spec.rb
350
- - spec/rhc/commands/ssh_spec.rb
351
- - spec/rhc/commands/logout_spec.rb
352
- - spec/rhc/commands/member_spec.rb
353
- - spec/rhc/commands/alias_spec.rb
354
- - spec/rhc/commands/authorization_spec.rb
337
+ - spec/rhc/commands/apps_spec.rb
355
338
  - spec/rhc/commands/account_spec.rb
339
+ - spec/rhc/commands/domain_spec.rb
356
340
  - spec/rhc/commands/cartridge_spec.rb
357
- - spec/rhc/commands/env_spec.rb
341
+ - spec/rhc/commands/app_spec.rb
358
342
  - spec/rhc/commands/snapshot_spec.rb
343
+ - spec/rhc/commands/ssh_spec.rb
344
+ - spec/rhc/commands/tail_spec.rb
345
+ - spec/rhc/commands/setup_spec.rb
346
+ - spec/rhc/commands/alias_spec.rb
347
+ - spec/rhc/commands/env_spec.rb
348
+ - spec/rhc/commands/port_forward_spec.rb
359
349
  - spec/rhc/commands/git_clone_spec.rb
360
- - spec/rhc/commands/apps_spec.rb
350
+ - spec/rhc/commands/authorization_spec.rb
351
+ - spec/rhc/commands/member_spec.rb
352
+ - spec/rhc/commands/threaddump_spec.rb
353
+ - spec/rhc/commands/server_spec.rb
354
+ - spec/rhc/commands/deployment_spec.rb
355
+ - spec/rhc/commands/logout_spec.rb
356
+ - spec/rhc/assets/targz_sample.tar.gz
357
+ - spec/rhc/assets/env_vars_2.txt
358
+ - spec/rhc/assets/cert_key_rsa
359
+ - spec/rhc/assets/targz_corrupted.tar.gz
360
+ - spec/rhc/assets/cert.crt
361
+ - spec/rhc/assets/env_vars.txt
362
+ - spec/rhc/assets/empty.txt
363
+ - spec/rhc/assets/foo.txt
361
364
  - spec/rhc/json_spec.rb
362
- - spec/rhc/wizard_spec.rb
365
+ - spec/rhc/auth_spec.rb
366
+ - spec/rhc/config_spec.rb
367
+ - spec/rhc/helpers_spec.rb
363
368
  - spec/rhc/rest_application_spec.rb
364
- - spec/spec_helper.rb
365
- - spec/coverage_helper.rb
366
- - spec/direct_execution_helper.rb
367
- - spec/keys/server.pem
368
- - spec/keys/example.pem
369
- - spec/keys/example_private.pem
370
- - features/core_feature.rb
369
+ - spec/rhc/command_spec.rb
370
+ - features/members_feature.rb
371
371
  - features/assets/deploy.tar.gz
372
+ - features/deployments_feature.rb
373
+ - features/core_feature.rb
372
374
  - features/keys_feature.rb
373
375
  - features/domains_feature.rb
374
- - features/members_feature.rb
375
- - features/deployments_feature.rb
376
376
  - bin/rhc
377
377
  homepage: https://github.com/openshift/rhc
378
378
  licenses: []
@@ -414,56 +414,56 @@ specification_version: 3
414
414
  summary: OpenShift Client Tools
415
415
  test_files:
416
416
  - spec/rest_spec_helper.rb
417
+ - spec/keys/server.pem
418
+ - spec/keys/example_private.pem
419
+ - spec/keys/example.pem
420
+ - spec/spec_helper.rb
421
+ - spec/direct_execution_helper.rb
422
+ - spec/coverage_helper.rb
417
423
  - spec/wizard_spec_helper.rb
418
- - spec/rhc/targz_spec.rb
419
- - spec/rhc/config_spec.rb
420
- - spec/rhc/helpers_spec.rb
421
- - spec/rhc/rest_spec.rb
422
- - spec/rhc/auth_spec.rb
423
- - spec/rhc/rest_client_spec.rb
424
- - spec/rhc/assets/empty.txt
425
- - spec/rhc/assets/env_vars_2.txt
426
- - spec/rhc/assets/cert_key_rsa
427
- - spec/rhc/assets/targz_sample.tar.gz
428
- - spec/rhc/assets/env_vars.txt
429
- - spec/rhc/assets/targz_corrupted.tar.gz
430
- - spec/rhc/assets/cert.crt
431
- - spec/rhc/assets/foo.txt
432
424
  - spec/rhc/highline_extensions_spec.rb
433
- - spec/rhc/command_spec.rb
434
425
  - spec/rhc/cli_spec.rb
435
- - spec/rhc/commands/setup_spec.rb
436
- - spec/rhc/commands/tail_spec.rb
437
- - spec/rhc/commands/port_forward_spec.rb
438
- - spec/rhc/commands/app_spec.rb
439
- - spec/rhc/commands/deployment_spec.rb
440
- - spec/rhc/commands/domain_spec.rb
426
+ - spec/rhc/rest_spec.rb
427
+ - spec/rhc/targz_spec.rb
428
+ - spec/rhc/wizard_spec.rb
429
+ - spec/rhc/rest_client_spec.rb
441
430
  - spec/rhc/commands/sshkey_spec.rb
442
- - spec/rhc/commands/threaddump_spec.rb
443
- - spec/rhc/commands/server_spec.rb
444
- - spec/rhc/commands/ssh_spec.rb
445
- - spec/rhc/commands/logout_spec.rb
446
- - spec/rhc/commands/member_spec.rb
447
- - spec/rhc/commands/alias_spec.rb
448
- - spec/rhc/commands/authorization_spec.rb
431
+ - spec/rhc/commands/apps_spec.rb
449
432
  - spec/rhc/commands/account_spec.rb
433
+ - spec/rhc/commands/domain_spec.rb
450
434
  - spec/rhc/commands/cartridge_spec.rb
451
- - spec/rhc/commands/env_spec.rb
435
+ - spec/rhc/commands/app_spec.rb
452
436
  - spec/rhc/commands/snapshot_spec.rb
437
+ - spec/rhc/commands/ssh_spec.rb
438
+ - spec/rhc/commands/tail_spec.rb
439
+ - spec/rhc/commands/setup_spec.rb
440
+ - spec/rhc/commands/alias_spec.rb
441
+ - spec/rhc/commands/env_spec.rb
442
+ - spec/rhc/commands/port_forward_spec.rb
453
443
  - spec/rhc/commands/git_clone_spec.rb
454
- - spec/rhc/commands/apps_spec.rb
444
+ - spec/rhc/commands/authorization_spec.rb
445
+ - spec/rhc/commands/member_spec.rb
446
+ - spec/rhc/commands/threaddump_spec.rb
447
+ - spec/rhc/commands/server_spec.rb
448
+ - spec/rhc/commands/deployment_spec.rb
449
+ - spec/rhc/commands/logout_spec.rb
450
+ - spec/rhc/assets/targz_sample.tar.gz
451
+ - spec/rhc/assets/env_vars_2.txt
452
+ - spec/rhc/assets/cert_key_rsa
453
+ - spec/rhc/assets/targz_corrupted.tar.gz
454
+ - spec/rhc/assets/cert.crt
455
+ - spec/rhc/assets/env_vars.txt
456
+ - spec/rhc/assets/empty.txt
457
+ - spec/rhc/assets/foo.txt
455
458
  - spec/rhc/json_spec.rb
456
- - spec/rhc/wizard_spec.rb
459
+ - spec/rhc/auth_spec.rb
460
+ - spec/rhc/config_spec.rb
461
+ - spec/rhc/helpers_spec.rb
457
462
  - spec/rhc/rest_application_spec.rb
458
- - spec/spec_helper.rb
459
- - spec/coverage_helper.rb
460
- - spec/direct_execution_helper.rb
461
- - spec/keys/server.pem
462
- - spec/keys/example.pem
463
- - spec/keys/example_private.pem
464
- - features/core_feature.rb
463
+ - spec/rhc/command_spec.rb
464
+ - features/members_feature.rb
465
465
  - features/assets/deploy.tar.gz
466
+ - features/deployments_feature.rb
467
+ - features/core_feature.rb
466
468
  - features/keys_feature.rb
467
469
  - features/domains_feature.rb
468
- - features/members_feature.rb
469
- - features/deployments_feature.rb