bosh_cli 1.3215.4.0 → 1.3232.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.rb +1 -0
- data/lib/cli/base_command.rb +1 -1
- data/lib/cli/basic_login_strategy.rb +3 -3
- data/lib/cli/blob_manager.rb +14 -14
- data/lib/cli/client/director.rb +16 -5
- data/lib/cli/commands/backup.rb +2 -2
- data/lib/cli/commands/cloudcheck.rb +2 -2
- data/lib/cli/commands/deployment.rb +22 -22
- data/lib/cli/commands/deployment_diff.rb +7 -3
- data/lib/cli/commands/disks.rb +1 -1
- data/lib/cli/commands/errand.rb +2 -2
- data/lib/cli/commands/events.rb +55 -0
- data/lib/cli/commands/help.rb +1 -1
- data/lib/cli/commands/job.rb +3 -3
- data/lib/cli/commands/job_management.rb +1 -1
- data/lib/cli/commands/locks.rb +6 -4
- data/lib/cli/commands/login.rb +1 -1
- data/lib/cli/commands/misc.rb +4 -4
- data/lib/cli/commands/package.rb +3 -3
- data/lib/cli/commands/property_management.rb +8 -8
- data/lib/cli/commands/release/delete_release.rb +3 -3
- data/lib/cli/commands/release/export_release.rb +2 -2
- data/lib/cli/commands/release/finalize_release.rb +26 -12
- data/lib/cli/commands/release/upload_release.rb +2 -2
- data/lib/cli/commands/release/verify_release.rb +2 -2
- data/lib/cli/commands/restore.rb +3 -3
- data/lib/cli/commands/snapshot.rb +5 -5
- data/lib/cli/commands/ssh.rb +2 -2
- data/lib/cli/commands/stemcell.rb +8 -8
- data/lib/cli/commands/task.rb +4 -4
- data/lib/cli/commands/user.rb +3 -3
- data/lib/cli/commands/vms.rb +1 -1
- data/lib/cli/config.rb +1 -1
- data/lib/cli/core_ext.rb +4 -4
- data/lib/cli/deployment_manifest_compiler.rb +1 -1
- data/lib/cli/file_with_progress_bar.rb +2 -0
- data/lib/cli/job_property_collection.rb +2 -2
- data/lib/cli/job_state.rb +2 -2
- data/lib/cli/logs_downloader.rb +1 -1
- data/lib/cli/manifest.rb +3 -3
- data/lib/cli/public_stemcell_presenter.rb +3 -3
- data/lib/cli/release.rb +3 -3
- data/lib/cli/release_compiler.rb +2 -2
- data/lib/cli/release_tarball.rb +2 -1
- data/lib/cli/runner.rb +1 -1
- data/lib/cli/sorted_release_archiver.rb +1 -12
- data/lib/cli/uaa_login_strategy.rb +1 -1
- data/lib/cli/version.rb +1 -1
- data/lib/cli/versions/local_artifact_storage.rb +2 -2
- data/lib/cli/versions/releases_dir_migrator.rb +3 -3
- data/lib/cli/versions/version_file_resolver.rb +1 -1
- data/lib/cli/versions/versions_index.rb +10 -11
- metadata +9 -8
data/lib/cli/commands/ssh.rb
CHANGED
@@ -31,7 +31,7 @@ module Bosh::Cli
|
|
31
31
|
if command.empty?
|
32
32
|
setup_interactive_shell(manifest.name, job, id)
|
33
33
|
else
|
34
|
-
say("Executing
|
34
|
+
say("Executing '#{command.join(' ')}' on #{job}/#{id}")
|
35
35
|
perform_operation(:exec, manifest.name, job, id, command)
|
36
36
|
end
|
37
37
|
end
|
@@ -107,7 +107,7 @@ module Bosh::Cli
|
|
107
107
|
# @param [optional,String] password
|
108
108
|
def setup_ssh(deployment_name, job, id, password)
|
109
109
|
|
110
|
-
say("Target deployment is
|
110
|
+
say("Target deployment is '#{deployment_name}'")
|
111
111
|
nl
|
112
112
|
say('Setting up ssh artifacts')
|
113
113
|
|
@@ -16,13 +16,13 @@ module Bosh::Cli
|
|
16
16
|
nl
|
17
17
|
|
18
18
|
if stemcell.valid?
|
19
|
-
say("
|
19
|
+
say("'#{tarball_path}' is a valid stemcell".make_green)
|
20
20
|
else
|
21
21
|
say('Validation errors:'.make_red)
|
22
22
|
stemcell.errors.each do |error|
|
23
23
|
say('- %s' % [error])
|
24
24
|
end
|
25
|
-
err("
|
25
|
+
err("'#{tarball_path}' is not a valid stemcell")
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -72,10 +72,10 @@ If --name & --version are provided, they will be used for checking if stemcell e
|
|
72
72
|
|
73
73
|
if !options[:fix] && exists?(name, version)
|
74
74
|
if options[:skip_if_exists]
|
75
|
-
say("Stemcell
|
75
|
+
say("Stemcell '#{name}/#{version}' already exists. Skipping upload.")
|
76
76
|
return
|
77
77
|
else
|
78
|
-
err("Stemcell
|
78
|
+
err("Stemcell '#{name}/#{version}' already exists. Increment the version if it has changed.")
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
@@ -86,7 +86,7 @@ If --name & --version are provided, they will be used for checking if stemcell e
|
|
86
86
|
nl
|
87
87
|
else
|
88
88
|
nl
|
89
|
-
say("Using remote stemcell
|
89
|
+
say("Using remote stemcell '#{stemcell_location}'")
|
90
90
|
end
|
91
91
|
|
92
92
|
selected_options = {}
|
@@ -161,9 +161,9 @@ If --name & --version are provided, they will be used for checking if stemcell e
|
|
161
161
|
|
162
162
|
force = !!options[:force]
|
163
163
|
|
164
|
-
err("Stemcell
|
164
|
+
err("Stemcell '#{name}/#{version}' does not exist") unless exists?(name, version)
|
165
165
|
|
166
|
-
say("You are going to delete stemcell
|
166
|
+
say("You are going to delete stemcell '#{name}/#{version}'".make_red)
|
167
167
|
|
168
168
|
unless confirmed?
|
169
169
|
say('Canceled deleting stemcell'.make_green)
|
@@ -172,7 +172,7 @@ If --name & --version are provided, they will be used for checking if stemcell e
|
|
172
172
|
|
173
173
|
status, task_id = director.delete_stemcell(name, version, :force => force)
|
174
174
|
|
175
|
-
task_report(status, task_id, "Deleted stemcell
|
175
|
+
task_report(status, task_id, "Deleted stemcell '#{name}/#{version}'")
|
176
176
|
end
|
177
177
|
|
178
178
|
private
|
data/lib/cli/commands/task.rb
CHANGED
@@ -119,16 +119,16 @@ module Bosh::Cli::Command
|
|
119
119
|
def show_tasks_table(tasks)
|
120
120
|
return if tasks.empty?
|
121
121
|
tasks_table = table do |t|
|
122
|
-
t.headings = "#", "State", "
|
122
|
+
t.headings = "#", "State", "Started", "Last Activity", "User", "Deployment", "Description", "Result"
|
123
123
|
tasks.map do |task|
|
124
|
-
t << [task["id"], task["state"], Time.at(task["timestamp"]).utc, task["user"], task["deployment"],
|
124
|
+
t << [task["id"], task["state"], task["started_at"] ? Time.at(task["started_at"]).utc : '-', Time.at(task["timestamp"]).utc, task["user"], task["deployment"],
|
125
125
|
task["description"].to_s, task["result"].to_s.truncate(80)]
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
|
-
|
129
|
+
nl
|
130
130
|
say(tasks_table)
|
131
|
-
|
131
|
+
nl
|
132
132
|
end
|
133
133
|
|
134
134
|
# Returns the verbose level for the given no_filter flag
|
data/lib/cli/commands/user.rb
CHANGED
@@ -25,7 +25,7 @@ module Bosh::Cli::Command
|
|
25
25
|
end
|
26
26
|
|
27
27
|
if director.create_user(username, password)
|
28
|
-
say("User
|
28
|
+
say("User '#{username}' has been created".make_green)
|
29
29
|
else
|
30
30
|
err("Error creating user")
|
31
31
|
end
|
@@ -45,9 +45,9 @@ module Bosh::Cli::Command
|
|
45
45
|
err("Please provide a username to delete")
|
46
46
|
end
|
47
47
|
|
48
|
-
if confirmed?("Are you sure you would like to delete the user
|
48
|
+
if confirmed?("Are you sure you would like to delete the user '#{username}'?")
|
49
49
|
if director.delete_user(username)
|
50
|
-
say("User
|
50
|
+
say("User '#{username}' has been deleted".make_green)
|
51
51
|
else
|
52
52
|
err("Unable to delete user")
|
53
53
|
end
|
data/lib/cli/commands/vms.rb
CHANGED
@@ -16,7 +16,7 @@ module Bosh::Cli::Command
|
|
16
16
|
deps = director.list_deployments
|
17
17
|
err('No deployments') if deps.empty?
|
18
18
|
deps.each do |dep|
|
19
|
-
say("Deployment
|
19
|
+
say("Deployment '#{dep['name'].make_green}'")
|
20
20
|
show_deployment(dep['name'], options)
|
21
21
|
end
|
22
22
|
else
|
data/lib/cli/config.rb
CHANGED
@@ -34,7 +34,7 @@ module Bosh::Cli
|
|
34
34
|
# @return [void]
|
35
35
|
def self.register_command(command)
|
36
36
|
if @commands.has_key?(command.usage)
|
37
|
-
raise CliError, "Duplicate command
|
37
|
+
raise CliError, "Duplicate command '#{command.usage}'"
|
38
38
|
end
|
39
39
|
@commands[command.usage] = command
|
40
40
|
end
|
data/lib/cli/core_ext.rb
CHANGED
@@ -74,25 +74,25 @@ module BoshExtensions
|
|
74
74
|
|
75
75
|
yaml = Psych::load(yaml_str)
|
76
76
|
if expected_type && !yaml.is_a?(expected_type)
|
77
|
-
err("Incorrect YAML structure in
|
77
|
+
err("Incorrect YAML structure in '#{path}': expected #{expected_type} at the root".make_red)
|
78
78
|
end
|
79
79
|
|
80
80
|
yaml
|
81
81
|
end
|
82
82
|
|
83
83
|
def read_yaml_file(path)
|
84
|
-
err("Cannot find file
|
84
|
+
err("Cannot find file '#{path}'".make_red) unless File.exist?(path)
|
85
85
|
|
86
86
|
begin
|
87
87
|
yaml_str = ERB.new(File.read(path)).result
|
88
88
|
rescue SystemCallError => e
|
89
|
-
err("Cannot load YAML file at
|
89
|
+
err("Cannot load YAML file at '#{path}': #{e}".make_red)
|
90
90
|
end
|
91
91
|
|
92
92
|
begin
|
93
93
|
Bosh::Cli::YamlHelper.check_duplicate_keys(yaml_str)
|
94
94
|
rescue Exception => e # on ruby 1.9.3 Psych::SyntaxError isn't a StandardError
|
95
|
-
err("Incorrect YAML structure in
|
95
|
+
err("Incorrect YAML structure in '#{path}': #{e}".make_red)
|
96
96
|
end
|
97
97
|
yaml_str
|
98
98
|
end
|
@@ -32,6 +32,7 @@ module Bosh
|
|
32
32
|
if result && result.size > 0
|
33
33
|
progress_bar.inc(result.size)
|
34
34
|
else
|
35
|
+
progress_bar.set(size)
|
35
36
|
progress_bar.finish
|
36
37
|
end
|
37
38
|
|
@@ -43,6 +44,7 @@ module Bosh
|
|
43
44
|
if count
|
44
45
|
progress_bar.inc(count)
|
45
46
|
else
|
47
|
+
progress_bar.set(size)
|
46
48
|
progress_bar.finish
|
47
49
|
end
|
48
50
|
count
|
@@ -42,8 +42,8 @@ module Bosh::Cli
|
|
42
42
|
|
43
43
|
if resolved.nil?
|
44
44
|
raise InvalidPropertyMapping,
|
45
|
-
"Cannot satisfy property mapping
|
46
|
-
"as
|
45
|
+
"Cannot satisfy property mapping '#{to}: #{from}', " +
|
46
|
+
"as '#{from}' is not in deployment properties"
|
47
47
|
end
|
48
48
|
|
49
49
|
@job_properties[to] = resolved
|
data/lib/cli/job_state.rb
CHANGED
@@ -52,7 +52,7 @@ module Bosh::Cli
|
|
52
52
|
end
|
53
53
|
|
54
54
|
@command.nl
|
55
|
-
@command.say("Performing
|
55
|
+
@command.say("Performing '#{operation_desc}'...")
|
56
56
|
@command.director.change_job_state(@manifest.name, @manifest.yaml, job, index_or_id, new_state, @options)
|
57
57
|
end
|
58
58
|
|
@@ -61,7 +61,7 @@ module Bosh::Cli
|
|
61
61
|
other_changes_present = @command.inspect_deployment_changes(@manifest, show_empty_changeset: false)
|
62
62
|
|
63
63
|
if other_changes_present && !force
|
64
|
-
@command.err("Cannot perform job management when other deployment changes are present. Please use
|
64
|
+
@command.err("Cannot perform job management when other deployment changes are present. Please use '--force' to override.")
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
data/lib/cli/logs_downloader.rb
CHANGED
data/lib/cli/manifest.rb
CHANGED
@@ -13,7 +13,7 @@ module Bosh::Cli
|
|
13
13
|
|
14
14
|
def load
|
15
15
|
unless File.exists?(@deployment_file)
|
16
|
-
err("Cannot find deployment manifest in
|
16
|
+
err("Cannot find deployment manifest in '#{@deployment_file}'")
|
17
17
|
end
|
18
18
|
|
19
19
|
@hash = load_yaml_file(@deployment_file)
|
@@ -49,7 +49,7 @@ module Bosh::Cli
|
|
49
49
|
end
|
50
50
|
|
51
51
|
if name.blank? || @hash['director_uuid'].blank?
|
52
|
-
err("Invalid manifest
|
52
|
+
err("Invalid manifest '#{File.basename(@deployment_file)}': " +
|
53
53
|
'name and director UUID are required')
|
54
54
|
end
|
55
55
|
|
@@ -84,7 +84,7 @@ module Bosh::Cli
|
|
84
84
|
if stemcell['version'] == 'latest'
|
85
85
|
latest_version = latest_stemcells[stemcell['name']]
|
86
86
|
if latest_version.nil?
|
87
|
-
err("Latest version for stemcell
|
87
|
+
err("Latest version for stemcell '#{stemcell['name']}' is unknown")
|
88
88
|
end
|
89
89
|
stemcell['version'] = latest_version
|
90
90
|
end
|
@@ -18,7 +18,7 @@ module Bosh::Cli
|
|
18
18
|
end
|
19
19
|
|
20
20
|
@ui.say(stemcells_table.render)
|
21
|
-
@ui.say(
|
21
|
+
@ui.say('To download use `bosh download public stemcell <stemcell_name>`. For full url use --full.')
|
22
22
|
end
|
23
23
|
|
24
24
|
def download(stemcell_name)
|
@@ -26,8 +26,8 @@ module Bosh::Cli
|
|
26
26
|
@ui.err("'#{stemcell_name}' not found.")
|
27
27
|
end
|
28
28
|
|
29
|
-
if File.exists?(stemcell_name) && !@ui.confirmed?("Overwrite existing file
|
30
|
-
@ui.err("File
|
29
|
+
if File.exists?(stemcell_name) && !@ui.confirmed?("Overwrite existing file '#{stemcell_name}'?")
|
30
|
+
@ui.err("File '#{stemcell_name}' already exists")
|
31
31
|
end
|
32
32
|
|
33
33
|
stemcell = @public_stemcells.find(stemcell_name)
|
data/lib/cli/release.rb
CHANGED
@@ -18,11 +18,11 @@ module Bosh::Cli
|
|
18
18
|
@private_config_file = File.join(config_dir, "private.yml")
|
19
19
|
|
20
20
|
unless File.directory?(dir)
|
21
|
-
err("Cannot find release directory
|
21
|
+
err("Cannot find release directory '#{dir}'")
|
22
22
|
end
|
23
23
|
|
24
24
|
unless File.directory?(config_dir)
|
25
|
-
err("Cannot find release config directory
|
25
|
+
err("Cannot find release config directory '#{config_dir}'")
|
26
26
|
end
|
27
27
|
|
28
28
|
@final_config = load_config(@final_config_file)
|
@@ -159,7 +159,7 @@ module Bosh::Cli
|
|
159
159
|
# to migrate while the old one tells you to upgrade.
|
160
160
|
if @dev_config.has_key?("blobstore_options") &&
|
161
161
|
@dev_config["blobstore_options"] != "deprecated"
|
162
|
-
say("Found legacy dev config file
|
162
|
+
say("Found legacy dev config file '#{@dev_config_file}'".make_yellow)
|
163
163
|
|
164
164
|
new_dev_config = {
|
165
165
|
"dev_name" => @dev_config["name"],
|
data/lib/cli/release_compiler.rb
CHANGED
@@ -47,7 +47,7 @@ module Bosh::Cli
|
|
47
47
|
|
48
48
|
def compile
|
49
49
|
if exists?
|
50
|
-
quit("You already have this version in
|
50
|
+
quit("You already have this version in '#{tarball_path.make_green}'")
|
51
51
|
end
|
52
52
|
|
53
53
|
packages = @packages
|
@@ -114,7 +114,7 @@ module Bosh::Cli
|
|
114
114
|
|
115
115
|
if found_build.nil?
|
116
116
|
say("MISSING".make_red)
|
117
|
-
err("Cannot find #{build_type} with checksum
|
117
|
+
err("Cannot find #{build_type} with checksum '#{build.sha1}'")
|
118
118
|
end
|
119
119
|
|
120
120
|
sha1 = found_build["sha1"]
|
data/lib/cli/release_tarball.rb
CHANGED
@@ -35,6 +35,7 @@ module Bosh::Cli
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def unpack_license
|
38
|
+
return false if manifest_yaml['license'].nil?
|
38
39
|
return @unpacked_license unless @unpacked_license.nil?
|
39
40
|
exit_success = safe_fast_unpack('./license.tgz')
|
40
41
|
@unpacked_license = !!exit_success
|
@@ -179,7 +180,7 @@ module Bosh::Cli
|
|
179
180
|
|
180
181
|
def upload_packages?(package_matches = [])
|
181
182
|
return true if package_matches.nil?
|
182
|
-
package_matches.size != manifest_yaml[@packages_folder].size
|
183
|
+
package_matches.uniq.size != manifest_yaml[@packages_folder].map { |p| p['version'] }.uniq.size
|
183
184
|
end
|
184
185
|
|
185
186
|
# Repacks tarball according to the structure of remote release
|
data/lib/cli/runner.rb
CHANGED
@@ -204,7 +204,7 @@ module Bosh::Cli
|
|
204
204
|
}.flatten.uniq
|
205
205
|
rescue
|
206
206
|
err('Cannot load plugins, '.make_yellow +
|
207
|
-
"please run `gem update --system
|
207
|
+
"please run `gem update --system` to ".make_yellow +
|
208
208
|
'update your RubyGems'.make_yellow)
|
209
209
|
end
|
210
210
|
|
@@ -6,23 +6,12 @@ module Bosh::Cli
|
|
6
6
|
|
7
7
|
def archive(destination_file)
|
8
8
|
Dir.chdir(@dir) do
|
9
|
+
ordered_release_files = Bosh::Common::Release::ReleaseDirectory.new('.').ordered_release_files
|
9
10
|
success = Kernel.system('tar', '-C', @dir, '-pczf', destination_file, *ordered_release_files, out: '/dev/null', err: '/dev/null')
|
10
11
|
if !success
|
11
12
|
raise InvalidRelease, 'Cannot create release tarball'
|
12
13
|
end
|
13
14
|
end
|
14
15
|
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
def ordered_release_files
|
19
|
-
ordered_release_files = ['./release.MF']
|
20
|
-
license_files = (Dir.entries('.') & ['LICENSE', 'NOTICE']).sort
|
21
|
-
unless license_files.empty?
|
22
|
-
ordered_release_files += license_files.map { |filename| "./#{filename}" }
|
23
|
-
end
|
24
|
-
ordered_release_files += ['./jobs', './packages']
|
25
|
-
ordered_release_files
|
26
|
-
end
|
27
16
|
end
|
28
17
|
end
|
data/lib/cli/version.rb
CHANGED
@@ -12,7 +12,7 @@ module Bosh::Cli::Versions
|
|
12
12
|
def put_file(sha, origin_file_path)
|
13
13
|
destination = file_path(sha)
|
14
14
|
unless File.exist?(origin_file_path)
|
15
|
-
raise "Trying to store non-existant file
|
15
|
+
raise "Trying to store non-existant file '#{origin_file_path}' with sha '#{sha}'"
|
16
16
|
end
|
17
17
|
FileUtils.mkdir_p(File.dirname(destination))
|
18
18
|
FileUtils.cp(origin_file_path, destination, :preserve => true)
|
@@ -23,7 +23,7 @@ module Bosh::Cli::Versions
|
|
23
23
|
def get_file(sha)
|
24
24
|
destination = file_path(sha)
|
25
25
|
unless File.exist?(destination)
|
26
|
-
raise "Trying to retrieve non-existant file
|
26
|
+
raise "Trying to retrieve non-existant file '#{destination}' with sha '#{sha}'"
|
27
27
|
end
|
28
28
|
|
29
29
|
File.expand_path(destination)
|
@@ -20,8 +20,8 @@ module Bosh::Cli::Versions
|
|
20
20
|
begin
|
21
21
|
SemiSemantic::Version.parse(format_version_string) < VersionsIndex::CURRENT_INDEX_VERSION
|
22
22
|
rescue ArgumentError, SemiSemantic::ParseError
|
23
|
-
raise InvalidIndex, "Invalid versions index version in
|
24
|
-
"
|
23
|
+
raise InvalidIndex, "Invalid versions index version in '#{index_path}', " +
|
24
|
+
"'#{format_version_string}' given, SemiSemantic version expected"
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -29,7 +29,7 @@ module Bosh::Cli::Versions
|
|
29
29
|
return false unless needs_migration?
|
30
30
|
|
31
31
|
unless Dir.exist?(@releases_path)
|
32
|
-
raise "Releases path
|
32
|
+
raise "Releases path '#{@releases_path}' does not exist"
|
33
33
|
end
|
34
34
|
|
35
35
|
@ui.header("Migrating #{@release_type_name} releases".make_green)
|
@@ -14,7 +14,7 @@ module Bosh::Cli::Versions
|
|
14
14
|
if file_sha1 == sha1
|
15
15
|
return file_path
|
16
16
|
end
|
17
|
-
say("SHA1
|
17
|
+
say("SHA1 '#{file_sha1}' of #{desc} does not match expected SHA1 '#{sha1}'".make_red)
|
18
18
|
end
|
19
19
|
|
20
20
|
if blobstore_id.nil?
|