bosh_cli 1.2905.0 → 1.2915.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/cli/client/director.rb +33 -6
- data/lib/cli/client/uaa.rb +26 -87
- data/lib/cli/client/uaa/access_info.rb +9 -0
- data/lib/cli/client/uaa/client_token_issuer.rb +26 -0
- data/lib/cli/client/uaa/options.rb +34 -0
- data/lib/cli/client/uaa/password_token_issuer.rb +35 -0
- data/lib/cli/client/uaa/prompt.rb +13 -0
- data/lib/cli/client/uaa/token_decoder.rb +16 -0
- data/lib/cli/cloud_config.rb +10 -0
- data/lib/cli/commands/cloud_config.rb +32 -0
- data/lib/cli/commands/login.rb +6 -1
- data/lib/cli/commands/maintenance.rb +25 -23
- data/lib/cli/config.rb +1 -1
- data/lib/cli/core_ext.rb +23 -12
- data/lib/cli/release_builder.rb +0 -2
- data/lib/cli/runner.rb +1 -1
- data/lib/cli/version.rb +1 -1
- metadata +17 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f02ca6ddc4de5ea51002e19c5314b45f662f3e2e
|
4
|
+
data.tar.gz: f3530d1248685f5a1bfb405fb54f1e13bcf83d6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27e826747db64b638d5b1d1552ee50b03673de1d26caf411c628bc5d2b38b72f98538965e9e6003ac76215bfc721e995aa9de26a073124577a674a12d1dd2b14
|
7
|
+
data.tar.gz: 31c09e5037914052a47a58b472e4b4005c9d982c165f1122a413b4108e0ffc78d361ab61dbf718888b9a1dc20899e52fcf6df24226eff4cd1b50b62d752921f9
|
data/lib/cli/client/director.rb
CHANGED
@@ -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
|
data/lib/cli/client/uaa.rb
CHANGED
@@ -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
|
-
|
8
|
-
class
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
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,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,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,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
|
data/lib/cli/commands/login.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
17
|
-
|
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
|
68
|
+
delete_list = trim_array(sorted_stemcells, n_to_keep)
|
66
69
|
end
|
67
70
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
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
|
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
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
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
|
data/lib/cli/config.rb
CHANGED
data/lib/cli/core_ext.rb
CHANGED
@@ -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
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
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
|
data/lib/cli/release_builder.rb
CHANGED
@@ -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
|
data/lib/cli/runner.rb
CHANGED
data/lib/cli/version.rb
CHANGED
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.
|
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-
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|
-
|
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
|