bosh_cli 1.0.3 → 1.5.0.pre.1113

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.
Files changed (144) hide show
  1. data/bin/bosh +0 -9
  2. data/lib/cli.rb +69 -64
  3. data/lib/cli/backup_destination_path.rb +33 -0
  4. data/lib/cli/base_command.rb +57 -56
  5. data/lib/cli/blob_manager.rb +12 -12
  6. data/lib/cli/changeset_helper.rb +6 -7
  7. data/lib/cli/client/director.rb +724 -0
  8. data/lib/cli/command_handler.rb +6 -7
  9. data/lib/cli/commands/backup.rb +39 -0
  10. data/lib/cli/commands/biff.rb +42 -21
  11. data/lib/cli/commands/blob_management.rb +1 -1
  12. data/lib/cli/commands/cloudcheck.rb +11 -13
  13. data/lib/cli/commands/deployment.rb +53 -37
  14. data/lib/cli/commands/help.rb +3 -2
  15. data/lib/cli/commands/job_management.rb +67 -103
  16. data/lib/cli/commands/job_rename.rb +6 -8
  17. data/lib/cli/commands/log_management.rb +78 -55
  18. data/lib/cli/commands/maintenance.rb +36 -30
  19. data/lib/cli/commands/misc.rb +72 -51
  20. data/lib/cli/commands/package.rb +2 -2
  21. data/lib/cli/commands/property_management.rb +10 -12
  22. data/lib/cli/commands/release.rb +236 -133
  23. data/lib/cli/commands/snapshot.rb +93 -0
  24. data/lib/cli/commands/ssh.rb +216 -213
  25. data/lib/cli/commands/stemcell.rb +46 -34
  26. data/lib/cli/commands/task.rb +2 -2
  27. data/lib/cli/commands/user.rb +27 -3
  28. data/lib/cli/commands/vm.rb +28 -0
  29. data/lib/cli/commands/vms.rb +81 -23
  30. data/lib/cli/config.rb +6 -2
  31. data/lib/cli/core_ext.rb +31 -30
  32. data/lib/cli/deployment_helper.rb +134 -159
  33. data/lib/cli/deployment_manifest.rb +66 -0
  34. data/lib/cli/deployment_manifest_compiler.rb +0 -3
  35. data/lib/cli/event_log_renderer.rb +10 -10
  36. data/lib/cli/file_with_progress_bar.rb +52 -0
  37. data/lib/cli/job_builder.rb +1 -1
  38. data/lib/cli/job_command_args.rb +23 -0
  39. data/lib/cli/job_property_collection.rb +4 -7
  40. data/lib/cli/job_property_validator.rb +22 -12
  41. data/lib/cli/job_state.rb +54 -0
  42. data/lib/cli/line_wrap.rb +54 -0
  43. data/lib/cli/packaging_helper.rb +10 -10
  44. data/lib/cli/release.rb +18 -15
  45. data/lib/cli/release_builder.rb +9 -4
  46. data/lib/cli/release_compiler.rb +9 -9
  47. data/lib/cli/release_tarball.rb +3 -6
  48. data/lib/cli/resurrection.rb +31 -0
  49. data/lib/cli/runner.rb +56 -30
  50. data/lib/cli/stemcell.rb +25 -10
  51. data/lib/cli/task_log_renderer.rb +1 -1
  52. data/lib/cli/task_tracker.rb +10 -9
  53. data/lib/cli/validation.rb +3 -1
  54. data/lib/cli/version.rb +1 -1
  55. data/lib/cli/version_calc.rb +5 -18
  56. data/lib/cli/versions_index.rb +1 -1
  57. data/lib/cli/vm_state.rb +43 -0
  58. data/lib/cli/yaml_helper.rb +26 -35
  59. metadata +75 -208
  60. data/Rakefile +0 -56
  61. data/lib/cli/director.rb +0 -628
  62. data/spec/assets/biff/bad_gateway_config.yml +0 -28
  63. data/spec/assets/biff/good_simple_config.yml +0 -63
  64. data/spec/assets/biff/good_simple_golden_config.yml +0 -63
  65. data/spec/assets/biff/good_simple_template.erb +0 -69
  66. data/spec/assets/biff/ip_out_of_range.yml +0 -63
  67. data/spec/assets/biff/multiple_subnets_config.yml +0 -40
  68. data/spec/assets/biff/network_only_template.erb +0 -34
  69. data/spec/assets/biff/no_cc_config.yml +0 -27
  70. data/spec/assets/biff/no_range_config.yml +0 -27
  71. data/spec/assets/biff/no_subnet_config.yml +0 -16
  72. data/spec/assets/biff/ok_network_config.yml +0 -30
  73. data/spec/assets/biff/properties_template.erb +0 -6
  74. data/spec/assets/config/atmos/config/final.yml +0 -6
  75. data/spec/assets/config/atmos/config/private.yml +0 -4
  76. data/spec/assets/config/bad-providers/config/final.yml +0 -5
  77. data/spec/assets/config/bad-providers/config/private.yml +0 -4
  78. data/spec/assets/config/deprecation/config/final.yml +0 -5
  79. data/spec/assets/config/deprecation/config/private.yml +0 -2
  80. data/spec/assets/config/local/config/final.yml +0 -5
  81. data/spec/assets/config/local/config/private.yml +0 -1
  82. data/spec/assets/config/s3/config/final.yml +0 -5
  83. data/spec/assets/config/s3/config/private.yml +0 -5
  84. data/spec/assets/config/swift-hp/config/final.yml +0 -6
  85. data/spec/assets/config/swift-hp/config/private.yml +0 -7
  86. data/spec/assets/config/swift-rackspace/config/final.yml +0 -6
  87. data/spec/assets/config/swift-rackspace/config/private.yml +0 -6
  88. data/spec/assets/deployment.MF +0 -0
  89. data/spec/assets/plugins/bosh/cli/commands/echo.rb +0 -43
  90. data/spec/assets/plugins/bosh/cli/commands/ruby.rb +0 -24
  91. data/spec/assets/release/jobs/cacher.tgz +0 -0
  92. data/spec/assets/release/jobs/cacher/config/file1.conf +0 -0
  93. data/spec/assets/release/jobs/cacher/config/file2.conf +0 -0
  94. data/spec/assets/release/jobs/cacher/job.MF +0 -6
  95. data/spec/assets/release/jobs/cacher/monit +0 -1
  96. data/spec/assets/release/jobs/cleaner.tgz +0 -0
  97. data/spec/assets/release/jobs/cleaner/job.MF +0 -4
  98. data/spec/assets/release/jobs/cleaner/monit +0 -1
  99. data/spec/assets/release/jobs/sweeper.tgz +0 -0
  100. data/spec/assets/release/jobs/sweeper/config/test.conf +0 -1
  101. data/spec/assets/release/jobs/sweeper/job.MF +0 -5
  102. data/spec/assets/release/jobs/sweeper/monit +0 -1
  103. data/spec/assets/release/packages/mutator.tar.gz +0 -0
  104. data/spec/assets/release/packages/stuff.tgz +0 -0
  105. data/spec/assets/release/release.MF +0 -17
  106. data/spec/assets/release_invalid_checksum.tgz +0 -0
  107. data/spec/assets/release_invalid_jobs.tgz +0 -0
  108. data/spec/assets/release_no_name.tgz +0 -0
  109. data/spec/assets/release_no_version.tgz +0 -0
  110. data/spec/assets/stemcell/image +0 -1
  111. data/spec/assets/stemcell/stemcell.MF +0 -6
  112. data/spec/assets/stemcell_invalid_mf.tgz +0 -0
  113. data/spec/assets/stemcell_no_image.tgz +0 -0
  114. data/spec/assets/valid_release.tgz +0 -0
  115. data/spec/assets/valid_stemcell.tgz +0 -0
  116. data/spec/spec_helper.rb +0 -28
  117. data/spec/unit/base_command_spec.rb +0 -87
  118. data/spec/unit/biff_spec.rb +0 -172
  119. data/spec/unit/blob_manager_spec.rb +0 -288
  120. data/spec/unit/cache_spec.rb +0 -36
  121. data/spec/unit/cli_commands_spec.rb +0 -356
  122. data/spec/unit/config_spec.rb +0 -125
  123. data/spec/unit/core_ext_spec.rb +0 -81
  124. data/spec/unit/dependency_helper_spec.rb +0 -52
  125. data/spec/unit/deployment_manifest_compiler_spec.rb +0 -63
  126. data/spec/unit/deployment_manifest_spec.rb +0 -153
  127. data/spec/unit/director_spec.rb +0 -471
  128. data/spec/unit/director_task_spec.rb +0 -48
  129. data/spec/unit/event_log_renderer_spec.rb +0 -171
  130. data/spec/unit/hash_changeset_spec.rb +0 -73
  131. data/spec/unit/job_builder_spec.rb +0 -455
  132. data/spec/unit/job_property_collection_spec.rb +0 -111
  133. data/spec/unit/job_property_validator_spec.rb +0 -7
  134. data/spec/unit/job_rename_spec.rb +0 -200
  135. data/spec/unit/package_builder_spec.rb +0 -593
  136. data/spec/unit/release_builder_spec.rb +0 -120
  137. data/spec/unit/release_spec.rb +0 -173
  138. data/spec/unit/release_tarball_spec.rb +0 -29
  139. data/spec/unit/runner_spec.rb +0 -7
  140. data/spec/unit/ssh_spec.rb +0 -84
  141. data/spec/unit/stemcell_spec.rb +0 -17
  142. data/spec/unit/task_tracker_spec.rb +0 -131
  143. data/spec/unit/version_calc_spec.rb +0 -27
  144. data/spec/unit/versions_index_spec.rb +0 -144
data/bin/bosh CHANGED
@@ -1,14 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- gemfile = File.expand_path("../../Gemfile", __FILE__)
4
-
5
- if File.exists?(gemfile)
6
- ENV["BUNDLE_GEMFILE"] = gemfile
7
- require "rubygems"
8
- require "bundler/setup"
9
- end
10
-
11
- $:.unshift(File.expand_path("../../lib", __FILE__))
12
3
  require "cli"
13
4
 
14
5
  begin
data/lib/cli.rb CHANGED
@@ -2,88 +2,93 @@
2
2
 
3
3
  module Bosh
4
4
  module Cli
5
- DEFAULT_CONFIG_PATH = File.expand_path("~/.bosh_config")
6
- DEFAULT_CACHE_DIR = File.expand_path("~/.bosh_cache")
5
+ DEFAULT_CONFIG_PATH = File.expand_path('~/.bosh_config')
6
+ DEFAULT_CACHE_DIR = File.expand_path('~/.bosh_cache')
7
7
  end
8
8
  end
9
9
 
10
- autoload :HTTPClient, "httpclient"
11
- Bosh.autoload :Blobstore, "blobstore_client"
10
+ autoload :HTTPClient, 'httpclient'
12
11
 
13
- require "base64"
14
- require "digest/sha1"
15
- require "fileutils"
16
- require "highline/import"
17
- require "json"
18
- require "monitor"
19
- require "optparse"
20
- require "ostruct"
21
- require "pathname"
22
- require "progressbar"
23
- require "set"
24
- require "tempfile"
25
- require "terminal-table/import"
26
- require "time"
27
- require "timeout"
28
- require "tmpdir"
29
- require "uri"
30
- require "yaml"
31
- require "netaddr"
12
+ require 'blobstore_client'
13
+ require 'base64'
14
+ require 'digest/sha1'
15
+ require 'fileutils'
16
+ require 'highline/import'
17
+ require 'json'
18
+ require 'monitor'
19
+ require 'optparse'
20
+ require 'ostruct'
21
+ require 'pathname'
22
+ require 'progressbar'
23
+ require 'resolv'
24
+ require 'set'
25
+ require 'tempfile'
26
+ require 'terminal-table/import'
27
+ require 'time'
28
+ require 'timeout'
29
+ require 'tmpdir'
30
+ require 'uri'
31
+ require 'yaml'
32
+ require 'netaddr'
33
+ require 'zlib'
34
+ require 'archive/tar/minitar'
35
+ include Archive::Tar
32
36
 
33
37
  unless defined?(Bosh::Cli::VERSION)
34
- require "cli/version"
38
+ require 'cli/version'
35
39
  end
36
40
 
37
- require "common/common"
41
+ require 'common/common'
42
+ require 'common/exec'
38
43
 
39
- require "cli/config"
40
- require "cli/core_ext"
41
- require "cli/errors"
42
- require "cli/yaml_helper"
43
- require "cli/version_calc"
44
- require "cli/dependency_helper"
45
- require "cli/deployment_helper"
46
- require "cli/validation"
47
- require "cli/cache"
48
- require "cli/stemcell"
49
- require "cli/director"
50
- require "cli/director_task"
44
+ require 'cli/config'
45
+ require 'cli/core_ext'
46
+ require 'cli/errors'
47
+ require 'cli/yaml_helper'
48
+ require 'cli/version_calc'
49
+ require 'cli/dependency_helper'
50
+ require 'cli/deployment_manifest'
51
+ require 'cli/deployment_helper'
52
+ require 'cli/validation'
53
+ require 'cli/cache'
54
+ require 'cli/stemcell'
55
+ require 'cli/client/director'
56
+ require 'cli/director_task'
51
57
 
52
- require "cli/versions_index"
53
- require "cli/packaging_helper"
54
- require "cli/package_builder"
55
- require "cli/job_builder"
56
- require "cli/changeset_helper"
57
- require "cli/task_tracker"
58
- require "cli/task_log_renderer"
59
- require "cli/event_log_renderer"
60
- require "cli/null_renderer"
61
- require "cli/deployment_manifest_compiler"
58
+ require 'cli/line_wrap'
59
+ require 'cli/backup_destination_path'
62
60
 
63
- require "cli/release"
64
- require "cli/release_builder"
65
- require "cli/release_compiler"
66
- require "cli/release_tarball"
61
+ require 'cli/versions_index'
62
+ require 'cli/packaging_helper'
63
+ require 'cli/package_builder'
64
+ require 'cli/job_builder'
65
+ require 'cli/changeset_helper'
66
+ require 'cli/task_tracker'
67
+ require 'cli/task_log_renderer'
68
+ require 'cli/event_log_renderer'
69
+ require 'cli/null_renderer'
70
+ require 'cli/deployment_manifest_compiler'
67
71
 
68
- require "cli/blob_manager"
72
+ require 'cli/release'
73
+ require 'cli/release_builder'
74
+ require 'cli/release_compiler'
75
+ require 'cli/release_tarball'
69
76
 
70
- require "common/properties"
71
- require "cli/job_property_collection"
72
- require "cli/job_property_validator"
77
+ require 'cli/blob_manager'
73
78
 
74
- require "cli/command_discovery"
75
- require "cli/command_handler"
76
- require "cli/runner"
77
- require "cli/base_command"
79
+ require 'common/properties'
80
+ require 'cli/job_property_collection'
81
+ require 'cli/job_property_validator'
78
82
 
79
- if defined?(YAML::ENGINE.yamler)
80
- YAML::ENGINE.yamler = "syck"
81
- end
83
+ require 'cli/command_discovery'
84
+ require 'cli/command_handler'
85
+ require 'cli/runner'
86
+ require 'cli/base_command'
82
87
 
83
88
  tmpdir = Dir.mktmpdir
84
89
  at_exit { FileUtils.rm_rf(tmpdir) }
85
- ENV["TMPDIR"] = tmpdir
90
+ ENV['TMPDIR'] = tmpdir
86
91
 
87
- Dir[File.dirname(__FILE__) + "/cli/commands/*.rb"].each do |file|
92
+ Dir[File.dirname(__FILE__) + '/cli/commands/*.rb'].each do |file|
88
93
  require file
89
94
  end
@@ -0,0 +1,33 @@
1
+ # encoding: UTF-8
2
+
3
+ module Bosh::Cli
4
+ class BackupDestinationPath
5
+ def initialize(director)
6
+ @director = director
7
+ end
8
+
9
+ def create_from_path(dest_path = nil)
10
+ dest_path ||= Dir.pwd
11
+
12
+ if File.directory?(dest_path)
13
+ File.join(dest_path, default_backup_name)
14
+ else
15
+ is_tar_path?(dest_path) ? dest_path : "#{dest_path}.tgz"
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def default_backup_name
22
+ "bosh_backup_#{bosh_director_name}_#{Time.now.to_i}.tgz"
23
+ end
24
+
25
+ def bosh_director_name
26
+ @director.get_status['name']
27
+ end
28
+
29
+ def is_tar_path?(path)
30
+ path.end_with?('.tar.gz') || path.end_with?('.tgz')
31
+ end
32
+ end
33
+ end
@@ -4,21 +4,17 @@ module Bosh::Cli
4
4
  module Command
5
5
  class Base
6
6
  extend Bosh::Cli::CommandDiscovery
7
+ include Bosh::Cli::DeploymentHelper
7
8
 
8
- attr_reader :options
9
- attr_reader :work_dir
10
- attr_reader :runner
11
-
12
- attr_accessor :out
13
-
14
- # @return [Array] Arguments passed to command handler
15
- attr_accessor :args
9
+ attr_accessor :options, :out, :args
10
+ attr_reader :work_dir, :exit_code, :runner
16
11
 
17
12
  DEFAULT_DIRECTOR_PORT = 25555
18
13
 
19
14
  # @param [Bosh::Cli::Runner] runner
20
- def initialize(runner = nil)
15
+ def initialize(runner = nil, director = nil)
21
16
  @runner = runner
17
+ @director = director
22
18
  @options = {}
23
19
  @work_dir = Dir.pwd
24
20
  @exit_code = 0
@@ -34,7 +30,9 @@ module Bosh::Cli
34
30
  # @return [Bosh::Cli::Config] Current configuration
35
31
  def config
36
32
  @config ||= begin
37
- config_file = options[:config] || Bosh::Cli::DEFAULT_CONFIG_PATH
33
+ # Handle the environment variable being set to the empty string.
34
+ env_bosh_config = ENV['BOSH_CONFIG'].to_s.empty? ? nil : ENV['BOSH_CONFIG']
35
+ config_file = options[:config] || env_bosh_config || Bosh::Cli::DEFAULT_CONFIG_PATH
38
36
  Bosh::Cli::Config.new(config_file)
39
37
  end
40
38
  end
@@ -48,8 +46,8 @@ module Bosh::Cli
48
46
  end
49
47
 
50
48
  def director
51
- @director ||= Bosh::Cli::Director.new(
52
- target, username, password, @options.select {|k,v| k == :no_track})
49
+ @director ||= Bosh::Cli::Client::Director.new(
50
+ target, username, password, @options.select { |k, _| k == :no_track })
53
51
  end
54
52
 
55
53
  def release
@@ -86,9 +84,9 @@ module Bosh::Cli
86
84
  Bosh::Cli::Runner.new(args, @options).run
87
85
  end
88
86
 
89
- def confirmed?(question = "Are you sure?")
87
+ def confirmed?(question = 'Are you sure?')
90
88
  return true if non_interactive?
91
- ask("#{question} (type 'yes' to continue): ") == "yes"
89
+ ask("#{question} (type 'yes' to continue): ") == 'yes'
92
90
  end
93
91
 
94
92
  # @return [String] Target director URL
@@ -106,28 +104,19 @@ module Bosh::Cli
106
104
 
107
105
  # @return [String] Director username
108
106
  def username
109
- options[:username] || ENV["BOSH_USER"] || config.username(target)
107
+ options[:username] || ENV['BOSH_USER'] || config.username(target)
110
108
  end
111
109
 
112
110
  # @return [String] Director password
113
111
  def password
114
- options[:password] || ENV["BOSH_PASSWORD"] || config.password(target)
112
+ options[:password] || ENV['BOSH_PASSWORD'] || config.password(target)
115
113
  end
116
114
 
117
115
  def target_name
118
- config.target_name || target_url
116
+ options[:target] || config.target_name || target_url
119
117
  end
120
118
 
121
- # Sets or returns command exit code
122
- # @param [optional,Integer] code If param is given, sets exit code. If
123
- # it's nil, returns previously set exit_code
124
- def exit_code(code = nil)
125
- if code
126
- @exit_code = code
127
- else
128
- @exit_code
129
- end
130
- end
119
+ protected
131
120
 
132
121
  # Prints director task completion report. Note that event log usually
133
122
  # contains pretty detailed error report and other UI niceties, so most
@@ -137,11 +126,11 @@ module Bosh::Cli
137
126
  def task_report(status, task_id, success_msg = nil, error_msg = nil)
138
127
  case status
139
128
  when :non_trackable
140
- report = "Can't track director task".red
129
+ report = "Can't track director task".make_red
141
130
  when :track_timeout
142
- report = "Task tracking timeout".red
131
+ report = 'Task tracking timeout'.make_red
143
132
  when :running
144
- report = "Director task #{task_id.yellow} is running"
133
+ report = "Task #{task_id.make_yellow} running"
145
134
  when :error
146
135
  report = error_msg
147
136
  when :done
@@ -150,70 +139,82 @@ module Bosh::Cli
150
139
  report = nil
151
140
  end
152
141
 
153
- if status != :done
154
- exit_code(1)
142
+ unless [:running, :done].include?(status)
143
+ @exit_code = 1
155
144
  end
156
145
 
157
146
  say("\n#{report}") if report
147
+ say("\nFor a more detailed error report, run: bosh task #{task_id} --debug") if status == :error
158
148
  end
159
149
 
160
- protected
161
-
162
150
  def auth_required
163
151
  target_required
164
- err("Please log in first") unless logged_in?
152
+ err('Please log in first') unless logged_in?
165
153
  end
166
154
 
167
155
  def target_required
168
- err("Please choose target first") if target.nil?
156
+ err('Please choose target first') if target.nil?
169
157
  end
170
158
 
171
159
  def deployment_required
172
- err("Please choose deployment first") if deployment.nil?
160
+ err('Please choose deployment first') if deployment.nil?
161
+ end
162
+
163
+ def show_deployment
164
+ say("Current deployment is #{deployment.make_green}")
173
165
  end
174
166
 
175
167
  def no_track_unsupported
176
168
  if @options.delete(:no_track)
177
- say("Ignoring `" + "--no-track".yellow + "' option")
169
+ say('Ignoring `' + '--no-track'.make_yellow + "' option")
178
170
  end
179
171
  end
180
172
 
181
173
  def check_if_release_dir
182
174
  unless in_release_dir?
183
- err("Sorry, your current directory doesn't look " +
184
- "like release directory")
175
+ err("Sorry, your current directory doesn't look like release directory")
185
176
  end
186
177
  end
187
178
 
188
- def check_if_dirty_state
189
- if dirty_state?
190
- say("\n%s\n" % [`git status`])
191
- err("Your current directory has some local modifications, " +
192
- "please discard or commit them first.\n\n" +
193
- "Use the --force option to skip this check.")
194
- end
179
+ def raise_dirty_state_error
180
+ say("\n%s\n" % [`git status`])
181
+ err('Your current directory has some local modifications, ' +
182
+ "please discard or commit them first.\n\n" +
183
+ 'Use the --force option to skip this check.')
195
184
  end
196
185
 
197
186
  def in_release_dir?
198
- File.directory?("packages") &&
199
- File.directory?("jobs") &&
200
- File.directory?("src")
187
+ File.directory?('packages') &&
188
+ File.directory?('jobs') &&
189
+ File.directory?('src')
201
190
  end
202
191
 
203
192
  def dirty_state?
204
- `which git`
205
- return false unless $? == 0
206
- File.directory?(".git") && `git status --porcelain | wc -l`.to_i > 0
193
+ git_status = `git status 2>&1`
194
+ case $?.exitstatus
195
+ when 128 # Not in a git repo
196
+ false
197
+ when 127 # git command not found
198
+ false
199
+ else
200
+ !git_status.lines.to_a.last.include?('nothing to commit')
201
+ end
202
+ end
203
+
204
+ def valid_index_for(job, index, options = {})
205
+ index = '0' if job_unique_in_deployment?(job)
206
+ err('You should specify the job index. There is more than one instance of this job type.') if index.nil?
207
+ index = index.to_i if options[:integer_index]
208
+ index
207
209
  end
208
210
 
209
211
  def normalize_url(url)
210
212
  had_port = url.to_s =~ /:\d+$/
211
- url = "http://#{url}" unless url.match(/^https?/)
213
+ url = "https://#{url}" unless url.match(/^http:?/)
212
214
  uri = URI.parse(url)
213
215
  uri.port = DEFAULT_DIRECTOR_PORT unless had_port
214
- uri.to_s.strip.gsub(/\/$/, "")
216
+ uri.to_s.strip.gsub(/\/$/, '')
215
217
  end
216
-
217
218
  end
218
219
  end
219
220
  end
@@ -77,7 +77,7 @@ module Bosh::Cli
77
77
  process_blobs_directory
78
78
 
79
79
  unless dirty?
80
- say("No blobs to upload".green)
80
+ say("No blobs to upload".make_green)
81
81
  return
82
82
  end
83
83
 
@@ -85,16 +85,16 @@ module Bosh::Cli
85
85
  say("You have some blobs that need to be uploaded:")
86
86
  @new_blobs.each do |blob|
87
87
  size = File.size(File.join(@blobs_dir, blob))
88
- say("%s\t%s\t%s" % ["new".green, blob, pretty_size(size)])
88
+ say("%s\t%s\t%s" % ["new".make_green, blob, pretty_size(size)])
89
89
  end
90
90
 
91
91
  @updated_blobs.each do |blob|
92
92
  size = File.size(File.join(@blobs_dir, blob))
93
- say("%s\t%s\t%s" % ["new version".yellow, blob, pretty_size(size)])
93
+ say("%s\t%s\t%s" % ["new version".make_yellow, blob, pretty_size(size)])
94
94
  end
95
95
 
96
96
  nl
97
- say("When ready please run `#{"bosh upload blobs".green}'")
97
+ say("When ready please run `#{"bosh upload blobs".make_green}'")
98
98
  end
99
99
 
100
100
  # Registers a file as BOSH blob
@@ -137,13 +137,13 @@ module Bosh::Cli
137
137
  FileUtils.cp(local_path, blob_dst, :preserve => true)
138
138
  FileUtils.chmod(0644, blob_dst)
139
139
  if update
140
- say("Updated #{blob_path.yellow}")
140
+ say("Updated #{blob_path.make_yellow}")
141
141
  else
142
- say("Added #{blob_path.yellow}")
142
+ say("Added #{blob_path.make_yellow}")
143
143
  end
144
144
 
145
145
  say("When you are done testing the new blob, please run\n" +
146
- "`#{"bosh upload blobs".green}' and commit changes.")
146
+ "`#{"bosh upload blobs".make_green}' and commit changes.")
147
147
  end
148
148
 
149
149
  # Synchronizes the contents of blobs directory with blobs index.
@@ -222,7 +222,7 @@ module Bosh::Cli
222
222
  if checksum == entry["sha"]
223
223
  need_download = false
224
224
  else
225
- progress(path, "checksum mismatch, re-downloading...\n".red)
225
+ progress(path, "checksum mismatch, re-downloading...\n".make_red)
226
226
  end
227
227
  end
228
228
 
@@ -251,7 +251,7 @@ module Bosh::Cli
251
251
 
252
252
  progress(path, "uploading...")
253
253
  object_id = @blobstore.create(File.open(blob_path, "r"))
254
- progress(path, "uploaded\n".green)
254
+ progress(path, "uploaded\n".make_green)
255
255
 
256
256
  @index[path] = {
257
257
  "object_id" => object_id,
@@ -295,7 +295,7 @@ module Bosh::Cli
295
295
  @blobstore.get(blob["object_id"], tmp_file)
296
296
  tmp_file.close
297
297
  progress_bar.kill
298
- progress(path, "downloaded\n".green)
298
+ progress(path, "downloaded\n".make_green)
299
299
 
300
300
  if file_checksum(tmp_file.path) != blob["sha"]
301
301
  err("Checksum mismatch for downloaded blob `#{path}'")
@@ -311,7 +311,7 @@ module Bosh::Cli
311
311
  # @param [String] label Operation happening to a blob
312
312
  def progress(path, label)
313
313
  say("\r", " " * 80)
314
- say("\r#{path.truncate(40).yellow} #{label}", "")
314
+ say("\r#{path.truncate(40).make_yellow} #{label}", "")
315
315
  Bosh::Cli::Config.output.flush # Ruby 1.8 compatibility
316
316
  end
317
317
 
@@ -352,7 +352,7 @@ module Bosh::Cli
352
352
 
353
353
  # Updates blobs index
354
354
  def update_index
355
- yaml = YAML.dump(@index).gsub(/\s*$/, "")
355
+ yaml = Psych.dump(@index).gsub(/\s*$/, "")
356
356
 
357
357
  index_file = Tempfile.new("blob_index")
358
358
  index_file.puts(yaml)