bosh_cli 1.2905.0 → 1.2915.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: de2564930c27f2fd9d359408cf6db62f24b3fa4d
4
- data.tar.gz: ee4c60205ad3c57171787bd1d596c34a499875ba
3
+ metadata.gz: f02ca6ddc4de5ea51002e19c5314b45f662f3e2e
4
+ data.tar.gz: f3530d1248685f5a1bfb405fb54f1e13bcf83d6b
5
5
  SHA512:
6
- metadata.gz: 17e44063a1bf787858122d8631f2b3107e00b33cb6215adca4cb5fa1ef8db197c43e11ed6fecb9979867b8940c6580405e69474851ed885bc7bedb1dec1027d6
7
- data.tar.gz: cbc4ec1c66b8ff81d5abb5a21c316c7283935075d2647e4b387fbcb4c06534502d5100558e0dba5a1c62e0dc527356e6db3c893644e95bc079aff4ace556e4e3
6
+ metadata.gz: 27e826747db64b638d5b1d1552ee50b03673de1d26caf411c628bc5d2b38b72f98538965e9e6003ac76215bfc721e995aa9de26a073124577a674a12d1dd2b14
7
+ data.tar.gz: 31c09e5037914052a47a58b472e4b4005c9d982c165f1122a413b4108e0ffc78d361ab61dbf718888b9a1dc20899e52fcf6df24226eff4cd1b50b62d752921f9
@@ -1,6 +1,6 @@
1
- # Copyright (c) 2009-2012 VMware, Inc.
2
1
  require 'cli/core_ext'
3
2
  require 'cli/errors'
3
+ require 'cli/cloud_config'
4
4
 
5
5
  require 'json'
6
6
  require 'httpclient'
@@ -529,11 +529,6 @@ module Bosh
529
529
  get_json('/locks')
530
530
  end
531
531
 
532
- [:post, :put, :get, :delete].each do |method_name|
533
- define_method method_name do |*args|
534
- request(method_name, *args)
535
- end
536
- end
537
532
 
538
533
  # Perform director HTTP request and track director task (if request
539
534
  # started one).
@@ -578,6 +573,38 @@ module Bosh
578
573
  file.stop_progress_bar if file
579
574
  end
580
575
 
576
+ def get_cloud_config
577
+ _, cloud_configs = get_json_with_status('/cloud_configs?limit=1')
578
+ latest = cloud_configs.first
579
+
580
+ if !latest.nil?
581
+ Bosh::Cli::CloudConfig.new(
582
+ properties: latest["properties"],
583
+ created_at: latest["created_at"])
584
+ end
585
+ end
586
+
587
+ def update_cloud_config(cloud_config_yaml)
588
+ status, _ = post('/cloud_configs', 'text/yaml', cloud_config_yaml)
589
+ status == 201
590
+ end
591
+
592
+ def post(uri, content_type = nil, payload = nil, headers = {}, options = {})
593
+ request(:post, uri, content_type, payload, headers, options)
594
+ end
595
+
596
+ def put(uri, content_type = nil, payload = nil, headers = {}, options = {})
597
+ request(:put, uri, content_type, payload, headers, options)
598
+ end
599
+
600
+ def get(uri, content_type = nil, payload = nil, headers = {}, options = {})
601
+ request(:get, uri, content_type, payload, headers, options)
602
+ end
603
+
604
+ def delete(uri, content_type = nil, payload = nil, headers = {}, options = {})
605
+ request(:delete, uri, content_type, payload, headers, options)
606
+ end
607
+
581
608
  private
582
609
 
583
610
  def director_name
@@ -1,99 +1,38 @@
1
1
  require 'uaa'
2
2
  require 'uri'
3
+ require 'cli/client/uaa/client_token_issuer'
4
+ require 'cli/client/uaa/password_token_issuer'
5
+ require 'cli/client/uaa/token_decoder'
3
6
 
4
7
  module Bosh
5
8
  module Cli
6
9
  module Client
7
- class Uaa
8
- class AccessInfo < Struct.new(:username, :token); end
9
-
10
- def initialize(options, ssl_ca_file)
11
- url = options.fetch('url')
12
- unless URI.parse(url).instance_of?(URI::HTTPS)
13
- err('Failed to connect to UAA, HTTPS protocol is required')
14
- end
15
- @ssl_ca_file = ssl_ca_file
16
-
17
- token_decoder = TokenDecoder.new
18
- if ENV['BOSH_CLIENT'] && ENV['BOSH_CLIENT_SECRET']
19
- @token_issuer = ClientTokenIssuer.new(url, ssl_ca_file, token_decoder)
20
- else
21
- @token_issuer = PasswordTokenIssuer.new(url, ssl_ca_file, token_decoder)
22
- end
23
- end
24
-
25
- def prompts
26
- @token_issuer.prompts
27
- rescue CF::UAA::SSLException => e
28
- raise e unless @ssl_ca_file.nil?
29
- err('Invalid SSL Cert. Use --ca-cert to specify SSL certificate')
30
- end
31
-
32
- def login(credentials)
33
- @token_issuer.access_info(credentials)
34
- rescue CF::UAA::TargetError => e
35
- err("Failed to log in: #{e.info['error_description']}")
36
- rescue CF::UAA::BadResponse
37
- nil
38
- end
39
-
40
- private
41
-
42
- class ClientTokenIssuer
43
- def initialize(url, ssl_ca_file, token_decoder)
44
- @token_issuer = CF::UAA::TokenIssuer.new(url, ENV['BOSH_CLIENT'], ENV['BOSH_CLIENT_SECRET'], {ssl_ca_file: ssl_ca_file})
45
- @token_decoder = token_decoder
46
- end
47
-
48
- def prompts
49
- {}
50
- end
51
-
52
- def access_info(_)
53
- token = @token_issuer.client_credentials_grant
54
- decoded = @token_decoder.decode(token)
55
-
56
- username = decoded['client_id'] if decoded
57
- AccessInfo.new(username, nil)
58
- end
59
- end
60
-
61
- class PasswordTokenIssuer
62
- def initialize(url, ssl_ca_file, token_decoder)
63
- @token_issuer = CF::UAA::TokenIssuer.new(url, 'bosh_cli', nil, {ssl_ca_file: ssl_ca_file})
64
- @token_decoder = token_decoder
65
- end
66
-
67
- def prompts
68
- @token_issuer.prompts.map do |field, (type, display_text)|
69
- Prompt.new(field, type, display_text)
10
+ module Uaa
11
+ class Client
12
+ def initialize(options)
13
+ token_decoder = TokenDecoder.new
14
+ if options.client_auth?
15
+ token_issuer = ClientTokenIssuer.new(options, token_decoder)
16
+ else
17
+ token_issuer = PasswordTokenIssuer.new(options, token_decoder)
70
18
  end
19
+ @ssl_ca_file = options.ssl_ca_file
20
+ @token_issuer = token_issuer
71
21
  end
72
22
 
73
- def access_info(credentials)
74
- credentials = credentials.select { |_, c| !c.empty? }
75
- token = @token_issuer.owner_password_credentials_grant(credentials)
76
- decoded = @token_decoder.decode(token)
77
-
78
- username = decoded['user_name'] if decoded
79
- access_token = "#{token.info['token_type']} #{token.info['access_token']}"
80
-
81
- AccessInfo.new(username, access_token)
82
- end
83
- end
84
-
85
- class Prompt < Struct.new(:field, :type, :display_text)
86
- def password?
87
- type == 'password'
88
- end
89
- end
90
-
91
- class TokenDecoder
92
- def decode(token)
93
- CF::UAA::TokenCoder.decode(
94
- token.info['access_token'],
95
- {verify: false}, # token signature not verified because CLI doesn't have the secret key
96
- nil, nil)
23
+ def prompts
24
+ @token_issuer.prompts
25
+ rescue CF::UAA::SSLException => e
26
+ raise e unless @ssl_ca_file.nil?
27
+ err('Invalid SSL Cert. Use --ca-cert to specify SSL certificate') #FIXME: the uaa client shouldn't know about 'err'
28
+ end
29
+
30
+ def login(credentials)
31
+ @token_issuer.access_info(credentials)
32
+ rescue CF::UAA::TargetError => e
33
+ err("Failed to log in: #{e.info['error_description']}") #FIXME: the uaa client shouldn't know about 'err'
34
+ rescue CF::UAA::BadResponse
35
+ nil
97
36
  end
98
37
  end
99
38
  end
@@ -0,0 +1,9 @@
1
+ module Bosh
2
+ module Cli
3
+ module Client
4
+ module Uaa
5
+ class AccessInfo < Struct.new(:username, :token); end
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,26 @@
1
+ module Bosh
2
+ module Cli
3
+ module Client
4
+ module Uaa
5
+ class ClientTokenIssuer
6
+ def initialize(options, token_decoder)
7
+ @token_issuer = CF::UAA::TokenIssuer.new(options.url, options.client_id, options.client_secret, {ssl_ca_file: options.ssl_ca_file})
8
+ @token_decoder = token_decoder
9
+ end
10
+
11
+ def prompts
12
+ {}
13
+ end
14
+
15
+ def access_info(_)
16
+ token = @token_issuer.client_credentials_grant
17
+ decoded = @token_decoder.decode(token)
18
+
19
+ username = decoded['client_id'] if decoded
20
+ AccessInfo.new(username, nil)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,34 @@
1
+ require 'cli/errors'
2
+
3
+ module Bosh
4
+ module Cli
5
+ module Client
6
+ module Uaa
7
+ class Options < Struct.new(:url, :ssl_ca_file, :client_id, :client_secret)
8
+ class ValidationError < Bosh::Cli::CliError; end
9
+
10
+ def self.parse(cli_options, auth_options, env)
11
+ url = auth_options.fetch('url')
12
+ ssl_ca_file = cli_options[:ca_cert]
13
+ client_id, client_secret = env['BOSH_CLIENT'], env['BOSH_CLIENT_SECRET']
14
+
15
+ options = new(url, ssl_ca_file, client_id, client_secret)
16
+ options.validate!
17
+ options
18
+ end
19
+
20
+ def client_auth?
21
+ !client_id.nil? && !client_secret.nil?
22
+ end
23
+
24
+ def validate!
25
+ unless URI.parse(url).instance_of?(URI::HTTPS)
26
+ raise ValidationError.new('HTTPS protocol is required')
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+
@@ -0,0 +1,35 @@
1
+ require 'uaa'
2
+ require 'cli/client/uaa/prompt'
3
+ require 'cli/client/uaa/access_info'
4
+
5
+ module Bosh
6
+ module Cli
7
+ module Client
8
+ module Uaa
9
+ class PasswordTokenIssuer
10
+ def initialize(options, token_decoder)
11
+ @token_issuer = CF::UAA::TokenIssuer.new(options.url, 'bosh_cli', nil, {ssl_ca_file: options.ssl_ca_file})
12
+ @token_decoder = token_decoder
13
+ end
14
+
15
+ def prompts
16
+ @token_issuer.prompts.map do |field, (type, display_text)|
17
+ Prompt.new(field, type, display_text)
18
+ end
19
+ end
20
+
21
+ def access_info(credentials)
22
+ credentials = credentials.select { |_, c| !c.empty? }
23
+ token = @token_issuer.owner_password_credentials_grant(credentials)
24
+ decoded = @token_decoder.decode(token)
25
+
26
+ username = decoded['user_name'] if decoded
27
+ access_token = "#{token.info['token_type']} #{token.info['access_token']}"
28
+
29
+ AccessInfo.new(username, access_token)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,13 @@
1
+ module Bosh
2
+ module Cli
3
+ module Client
4
+ module Uaa
5
+ class Prompt < Struct.new(:field, :type, :display_text)
6
+ def password?
7
+ type == 'password'
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module Bosh
2
+ module Cli
3
+ module Client
4
+ module Uaa
5
+ class TokenDecoder
6
+ def decode(token)
7
+ CF::UAA::TokenCoder.decode(
8
+ token.info['access_token'],
9
+ {verify: false}, # token signature not verified because CLI doesn't have the secret key
10
+ nil, nil)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,10 @@
1
+ module Bosh
2
+ module Cli
3
+ class CloudConfig < Struct.new(:properties, :created_at)
4
+ def initialize(attrs)
5
+ self.properties = attrs.fetch(:properties)
6
+ self.created_at = attrs.fetch(:created_at)
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,32 @@
1
+ require 'cli/core_ext'
2
+
3
+ module Bosh::Cli::Command
4
+ class CloudConfig < Base
5
+ usage 'cloud-config'
6
+ desc 'Download the current cloud config for the director'
7
+
8
+ def show
9
+ auth_required
10
+
11
+ config = director.get_cloud_config
12
+ if !config.nil?
13
+ say(config.properties)
14
+ end
15
+ end
16
+
17
+ usage 'update cloud-config'
18
+ desc 'Update the current cloud config for the director'
19
+
20
+ def update(cloud_config_path)
21
+ auth_required
22
+
23
+ cloud_config_yaml = read_yaml_file(cloud_config_path)
24
+
25
+ if director.update_cloud_config(cloud_config_yaml)
26
+ say("Successfully updated cloud config")
27
+ else
28
+ err("Failed to update cloud config")
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,6 +1,7 @@
1
1
  require 'cli/basic_login_strategy'
2
2
  require 'cli/uaa_login_strategy'
3
3
  require 'cli/client/uaa'
4
+ require 'cli/client/uaa/options'
4
5
  require 'cli/terminal'
5
6
 
6
7
  module Bosh::Cli::Command
@@ -41,11 +42,15 @@ module Bosh::Cli::Command
41
42
  auth_info = director_info.fetch('user_authentication', {})
42
43
 
43
44
  if auth_info['type'] == 'uaa'
44
- uaa = Bosh::Cli::Client::Uaa.new(auth_info['options'], options[:ca_cert])
45
+ client_options = Bosh::Cli::Client::Uaa::Options.parse(options, auth_info['options'], ENV)
46
+ uaa = Bosh::Cli::Client::Uaa::Client.new(client_options)
45
47
  Bosh::Cli::UaaLoginStrategy.new(terminal, uaa, config, interactive?)
46
48
  else
47
49
  Bosh::Cli::BasicLoginStrategy.new(terminal, director, config, interactive?)
48
50
  end
51
+
52
+ rescue Bosh::Cli::Client::Uaa::Options::ValidationError => e
53
+ err("Failed to connect to UAA: #{e.message}")
49
54
  end
50
55
  end
51
56
  end
@@ -9,12 +9,15 @@ module Bosh::Cli::Command
9
9
  # bosh cleanup
10
10
  usage 'cleanup'
11
11
  desc 'Cleanup releases and stemcells'
12
+ option '--all', 'Remove all unused releases and stemcells'
12
13
  def cleanup
13
14
  target_required
14
15
  auth_required
15
16
 
16
- releases_to_keep = RELEASES_TO_KEEP
17
- stemcells_to_keep = STEMCELLS_TO_KEEP
17
+ remove_all = !!options[:all]
18
+
19
+ releases_to_keep = remove_all ? 0 : RELEASES_TO_KEEP
20
+ stemcells_to_keep = remove_all ? 0 : STEMCELLS_TO_KEEP
18
21
 
19
22
  release_wording = pluralize(releases_to_keep, 'latest version')
20
23
  stemcell_wording = pluralize(stemcells_to_keep, 'latest version')
@@ -62,20 +65,18 @@ module Bosh::Cli::Command
62
65
  Bosh::Common::Version::StemcellVersion.parse(sc1['version']) <=> Bosh::Common::Version::StemcellVersion.parse(sc2['version'])
63
66
  end
64
67
 
65
- delete_list += sorted_stemcells[0...(-n_to_keep)]
68
+ delete_list = trim_array(sorted_stemcells, n_to_keep)
66
69
  end
67
70
 
68
- if delete_list.size > 0
69
- delete_list.each do |stemcell|
70
- name, version = stemcell['name'], stemcell['version']
71
- desc = "#{name}/#{version}"
72
- perform(desc) do
73
- director.delete_stemcell(name, version, :quiet => true)
74
- end
71
+ delete_list.each do |stemcell|
72
+ name, version = stemcell['name'], stemcell['version']
73
+ desc = "#{name}/#{version}"
74
+ perform(desc) do
75
+ director.delete_stemcell(name, version, :quiet => true)
75
76
  end
76
- else
77
- say(' none found'.make_yellow)
78
77
  end
78
+
79
+ say(' none found'.make_yellow) if delete_list.size == 0
79
80
  end
80
81
 
81
82
  def cleanup_releases(n_to_keep)
@@ -103,22 +104,24 @@ module Bosh::Cli::Command
103
104
  end
104
105
  versions = version_tuples.sort_by { |v| v[:parsed] }.map { |v| v[:provided] }
105
106
 
106
- versions[0...(-n_to_keep)].each do |version|
107
+ trim_array(versions, n_to_keep).each do |version|
107
108
  delete_list << [name, version] unless currently_deployed.include?(version)
108
109
  end
109
110
  end
110
111
 
111
- if delete_list.size > 0
112
- delete_list.each do |name, version|
113
- desc = "#{name}/#{version}"
114
- perform(desc) do
115
- director.delete_release(name, :force => false,
116
- :version => version, :quiet => true)
117
- end
112
+ delete_list.each do |name, version|
113
+ desc = "#{name}/#{version}"
114
+ perform(desc) do
115
+ director.delete_release(name, :force => false,
116
+ :version => version, :quiet => true)
118
117
  end
119
- else
120
- say(' none found'.make_yellow)
121
118
  end
119
+
120
+ say(' none found'.make_yellow) if delete_list.size == 0
121
+ end
122
+
123
+ def trim_array(array, n_to_keep)
124
+ n_to_keep > 0 ? array[0...(-n_to_keep)] : array
122
125
  end
123
126
 
124
127
  def refresh(message)
@@ -148,6 +151,5 @@ module Bosh::Cli::Command
148
151
 
149
152
  status == :done
150
153
  end
151
-
152
154
  end
153
155
  end
@@ -25,7 +25,7 @@ module Bosh::Cli
25
25
  end
26
26
 
27
27
  @commands = {}
28
- @colorize = true
28
+ @colorize = nil
29
29
  @output = nil
30
30
  @interactive = false
31
31
 
@@ -66,6 +66,17 @@ module BoshExtensions
66
66
  end
67
67
 
68
68
  def load_yaml_file(path, expected_type = Hash)
69
+ yaml_str = read_yaml_file(path)
70
+
71
+ yaml = Psych::load(yaml_str)
72
+ if expected_type && !yaml.is_a?(expected_type)
73
+ err("Incorrect YAML structure in `#{path}': expected #{expected_type} at the root".make_red)
74
+ end
75
+
76
+ yaml
77
+ end
78
+
79
+ def read_yaml_file(path)
69
80
  err("Cannot find file `#{path}'".make_red) unless File.exist?(path)
70
81
 
71
82
  begin
@@ -76,16 +87,10 @@ module BoshExtensions
76
87
 
77
88
  begin
78
89
  Bosh::Cli::YamlHelper.check_duplicate_keys(yaml_str)
79
- rescue => e
90
+ rescue Exception => e # on ruby 1.9.3 Psych::SyntaxError isn't a StandardError
80
91
  err("Incorrect YAML structure in `#{path}': #{e}".make_red)
81
92
  end
82
-
83
- yaml = Psych::load(yaml_str)
84
- if expected_type && !yaml.is_a?(expected_type)
85
- err("Incorrect YAML structure in `#{path}': expected #{expected_type} at the root".make_red)
86
- end
87
-
88
- yaml
93
+ yaml_str
89
94
  end
90
95
 
91
96
  def write_yaml(manifest, path)
@@ -125,11 +130,17 @@ module BoshStringExtensions
125
130
  end
126
131
 
127
132
  def make_color(color_code)
128
- if Bosh::Cli::Config.output &&
129
- Bosh::Cli::Config.output.tty? &&
130
- Bosh::Cli::Config.colorize &&
131
- COLOR_CODES[color_code]
133
+ # invalid color
134
+ return self if !COLOR_CODES[color_code]
135
+
136
+ # output disabled
137
+ return self if !Bosh::Cli::Config.output
138
+
139
+ # colorization explicitly disabled
140
+ return self if Bosh::Cli::Config.colorize == false
132
141
 
142
+ # colorization explicitly enabled, or output is tty
143
+ if Bosh::Cli::Config.colorize || Bosh::Cli::Config.output.tty?
133
144
  "#{COLOR_CODES[color_code]}#{self}\e[0m"
134
145
  else
135
146
  self
@@ -31,8 +31,6 @@ module Bosh::Cli
31
31
 
32
32
  @version = options.fetch(:version, nil)
33
33
 
34
- raise ReleaseVersionError.new('Version numbers cannot be specified for dev releases') if (@version && !@final)
35
-
36
34
  @final_index = Versions::VersionsIndex.new(final_releases_dir)
37
35
  @dev_index = Versions::VersionsIndex.new(dev_releases_dir)
38
36
  @index = @final ? @final_index : @dev_index
@@ -24,7 +24,7 @@ module Bosh::Cli
24
24
  banner = "Usage: bosh [<options>] <command> [<args>]"
25
25
  @option_parser = OptionParser.new(banner)
26
26
 
27
- Config.colorize = true
27
+ Config.colorize = nil
28
28
  Config.output ||= STDOUT
29
29
 
30
30
  parse_global_options
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Cli
3
- VERSION = '1.2905.0'
3
+ VERSION = '1.2915.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2905.0
4
+ version: 1.2915.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - VMware
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-27 00:00:00.000000000 Z
11
+ date: 2015-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bosh_common
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.2905.0
19
+ version: 1.2915.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.2905.0
26
+ version: 1.2915.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bosh-template
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.2905.0
33
+ version: 1.2915.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.2905.0
40
+ version: 1.2915.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: cf-uaa-lib
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 1.2905.0
131
+ version: 1.2915.0
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 1.2905.0
138
+ version: 1.2915.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: net-ssh
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -306,7 +306,7 @@ dependencies:
306
306
  version: '0'
307
307
  description: |-
308
308
  BOSH CLI
309
- 327a58
309
+ 5653ce
310
310
  email: support@cloudfoundry.com
311
311
  executables:
312
312
  - bosh
@@ -329,11 +329,19 @@ files:
329
329
  - lib/cli/client/director.rb
330
330
  - lib/cli/client/errands_client.rb
331
331
  - lib/cli/client/uaa.rb
332
+ - lib/cli/client/uaa/access_info.rb
333
+ - lib/cli/client/uaa/client_token_issuer.rb
334
+ - lib/cli/client/uaa/options.rb
335
+ - lib/cli/client/uaa/password_token_issuer.rb
336
+ - lib/cli/client/uaa/prompt.rb
337
+ - lib/cli/client/uaa/token_decoder.rb
338
+ - lib/cli/cloud_config.rb
332
339
  - lib/cli/command_discovery.rb
333
340
  - lib/cli/command_handler.rb
334
341
  - lib/cli/commands/backup.rb
335
342
  - lib/cli/commands/biff.rb
336
343
  - lib/cli/commands/blob_management.rb
344
+ - lib/cli/commands/cloud_config.rb
337
345
  - lib/cli/commands/cloudcheck.rb
338
346
  - lib/cli/commands/complete.rb
339
347
  - lib/cli/commands/deployment.rb