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 +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
|