bosh_cli 1.3137.0 → 1.3138.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3cb756f67ef17fbf6a0faa8677978bf8e099bfda
4
- data.tar.gz: e1f95aaa0f1790e8b0153b6fd6478efe1ac0b60f
3
+ metadata.gz: cab55032d94ca82ccfcbabbccf72afae4dd11893
4
+ data.tar.gz: c8403927639e04ad6765c193d36ddbbcaaa23228
5
5
  SHA512:
6
- metadata.gz: 67f549d198df70676f76e74546a530c9c41f2e2dadecc503e0c4a279d5782a91f8004ffaa0bdbf543dc6a52c3bfac70c7b3e726e2c0ed5cbdfef9077861a3c7e
7
- data.tar.gz: f61374053e56373e734a10d6ce5c2f1c7a2e19ed6a02668f9424beb9e8b6539c67d455148fab0b3792505913ac7d4f3d848362ab8fb5714cfd8366aa3a5d8150
6
+ metadata.gz: 168282461378d2884f3dd028f4b1814a6b7f2f903d89987245ca42985a6da688c6e2b25b0f32f8563ecfabc4df98004f3bbde410ab03c64f89c5d202db1baa62
7
+ data.tar.gz: 0eb3d0bdcbd5cdde1c752873c3db06cba5c579e184c0457be96f080a22b94ada7b75b0b9e531a72fbeb2d132f707354f356086a51e74be4e60dd27d4ee7921a3
@@ -300,12 +300,12 @@ module Bosh
300
300
  end
301
301
 
302
302
  def change_job_state(deployment_name, manifest_yaml,
303
- job_name, index, new_state, options = {})
303
+ job, index, new_state, options = {})
304
304
  options = options.dup
305
305
 
306
306
  skip_drain = !!options.delete(:skip_drain)
307
307
 
308
- url = "/deployments/#{deployment_name}/jobs/#{job_name}"
308
+ url = "/deployments/#{deployment_name}/jobs/#{job}"
309
309
  url += "/#{index}" if index
310
310
  url += "?state=#{new_state}"
311
311
  url += "&skip_drain=true" if skip_drain
@@ -48,6 +48,8 @@ module Bosh::Cli::Command
48
48
 
49
49
  row_count = 0
50
50
  has_disk_cid = instances[0].has_key?('disk_cid')
51
+ has_uptime = instances[0]['processes'] && instances[0]['processes'].size > 0 && instances[0]['processes'][0].has_key?('uptime')
52
+ has_cpu = instances[0]['processes'] && instances[0]['processes'].size > 0 && instances[0]['processes'][0].has_key?('cpu')
51
53
 
52
54
  instances_table = table do |t|
53
55
  headings = ['Instance', 'State', 'Resource Pool', 'IPs']
@@ -58,16 +60,21 @@ module Bosh::Cli::Command
58
60
  headings += ['VM CID', 'Agent ID', 'Resurrection']
59
61
  end
60
62
  end
63
+
61
64
  if options[:dns]
62
65
  headings += ['DNS A records']
63
66
  end
67
+
64
68
  if options[:vitals]
69
+ headings += [{:value => "Uptime", :alignment => :center}] if options[:ps] && has_uptime
65
70
  headings += [{:value => "Load\n(avg01, avg05, avg15)", :alignment => :center}]
66
- headings += ["CPU\nUser", "CPU\nSys", "CPU\nWait"]
71
+ headings += [{:value => "CPU %\n(User, Sys, Wait)", :alignment => :center}]
72
+ headings += ["CPU %"] if options[:ps] && has_cpu
67
73
  headings += ['Memory Usage', 'Swap Usage']
68
74
  headings += ["System\nDisk Usage", "Ephemeral\nDisk Usage", "Persistent\nDisk Usage"]
69
75
  end
70
- t.headings = headings
76
+
77
+ last_job = ''
71
78
  sorted.each do |instance|
72
79
  if options[:failing]
73
80
  if options[:ps]
@@ -92,6 +99,7 @@ module Bosh::Cli::Command
92
99
  vitals = instance['vitals']
93
100
 
94
101
  row = [job, instance['job_state'], instance['resource_pool'], ips]
102
+ t << :separator if row_count.between?(2, instance_count) && (options[:ps] || last_job != '' && instance['job_name'] != last_job)
95
103
 
96
104
  if options[:details]
97
105
  if has_disk_cid
@@ -112,10 +120,10 @@ module Bosh::Cli::Command
112
120
  swap = vitals['swap']
113
121
  disk = vitals['disk']
114
122
 
123
+ row << '' if options[:ps] && has_uptime && instance['processes'].size > 0
115
124
  row << vitals['load'].join(', ')
116
- row << "#{cpu['user']}%"
117
- row << "#{cpu['sys']}%"
118
- row << "#{cpu['wait']}%"
125
+ row << "#{cpu['user']}%, #{cpu['sys']}%, #{cpu['wait']}%"
126
+ row << '' if options[:ps] && has_cpu && instance['processes'].size > 0
119
127
  row << "#{mem['percent']}% (#{pretty_size(mem['kb'].to_i * 1024)})"
120
128
  row << "#{swap['percent']}% (#{pretty_size(swap['kb'].to_i * 1024)})"
121
129
  row << "#{disk['system']['percent']}%"
@@ -132,21 +140,54 @@ module Bosh::Cli::Command
132
140
  else
133
141
  9.times { row << 'n/a' }
134
142
  end
135
- end
136
-
137
- t << row
138
- if options[:ps] && instance['processes']
139
- instance['processes'].each do |process|
140
- name = process['name']
141
- state = process['state']
142
- process_row = [" #{name}", "#{state}"]
143
- (headings.size - 2).times { process_row << '' }
144
- t << process_row
143
+ t << row
144
+
145
+ if options[:ps] && instance['processes']
146
+ instance['processes'].each do |process|
147
+ prow = [' ' + process['name'], process['state'], '', '']
148
+ if options[:details]
149
+ prow += ['','','']
150
+ prow << '' if has_disk_cid
151
+ end
152
+ if has_uptime
153
+ if process['uptime']
154
+ uptime = Integer(process['uptime']['secs'])
155
+ days = uptime/60/60/24
156
+ hours = uptime/60/60%24
157
+ minutes = uptime/60%60
158
+ seconds = uptime%60
159
+ prow << "#{days}d #{hours}h #{minutes}m #{seconds}s"
160
+ else
161
+ prow << ''
162
+ end
163
+ end
164
+ prow += ['','']
165
+ prow << (process['cpu'] ? "#{process['cpu']['total']}%":'') if has_cpu
166
+ prow << (process['mem'] ? "#{process['mem']['percent']}% (#{pretty_size(process['mem']['kb'].to_i * 1024)})":'')
167
+ 4.times { prow << '' }
168
+ t << prow
169
+ end
170
+ end
171
+ else
172
+ t << row
173
+ if options[:ps] && instance['processes']
174
+ instance['processes'].each do |process|
175
+ name = process['name']
176
+ state = process['state']
177
+ process_row = [" #{name}", "#{state}"]
178
+ (headings.size - 2).times { process_row << '' }
179
+ t << process_row
180
+ end
145
181
  end
182
+ end
146
183
 
147
- t << :separator if row_count < instance_count
184
+ last_job = instance['job_name'] || 'unknown'
185
+ if instance['processes'].size == 0 && instance_count == 1
186
+ headings.delete_at(4)
187
+ headings.delete_at(6)
148
188
  end
149
189
  end
190
+ t.headings = headings
150
191
  end
151
192
 
152
193
  if options[:failing] && row_count == 0
@@ -1,6 +1,5 @@
1
1
  # Copyright (c) 2009-2012 VMware, Inc.
2
2
  require 'cli/job_state'
3
- require 'cli/vm_state'
4
3
 
5
4
  module Bosh::Cli
6
5
  module Command
@@ -18,12 +17,12 @@ module Bosh::Cli
18
17
 
19
18
  # bosh stop
20
19
  usage 'stop'
21
- desc 'Stop job/instance'
20
+ desc 'Stop all jobs/job/instance'
22
21
  option '--soft', 'Stop process only'
23
22
  option '--hard', 'Power off VM'
24
23
  option '--force', FORCE
25
24
  option '--skip-drain', SKIP_DRAIN
26
- def stop_job(job, index = nil)
25
+ def stop_job(job = '*', index = nil)
27
26
  if hard?
28
27
  change_job_state(:detach, job, index)
29
28
  else
@@ -53,12 +52,13 @@ module Bosh::Cli
53
52
 
54
53
  def change_job_state(state, job, index = nil)
55
54
  auth_required
56
- manifest = parse_manifest(state, job)
57
-
58
- index = valid_index_for(manifest.hash, job, index)
59
- vm_state = VmState.new(self, manifest, force?)
60
- job_state = JobState.new(self, vm_state, skip_drain: skip_drain?)
61
- status, task_id, completion_desc = job_state.change(state, job, index)
55
+ manifest = parse_manifest(state)
56
+ unless job == '*'
57
+ job_must_exist_in_deployment(manifest.hash, job)
58
+ index = valid_index_for(manifest.hash, job, index) unless state == :stop || state == :detach
59
+ end
60
+ job_state = JobState.new(self, manifest, skip_drain: skip_drain?)
61
+ status, task_id, completion_desc = job_state.change(state, job, index, force?)
62
62
  task_report(status, task_id, completion_desc)
63
63
  end
64
64
 
@@ -78,9 +78,8 @@ module Bosh::Cli
78
78
  !!options[:skip_drain]
79
79
  end
80
80
 
81
- def parse_manifest(operation, job)
81
+ def parse_manifest(operation)
82
82
  manifest = prepare_deployment_manifest(show_state: true)
83
- job_must_exist_in_deployment(manifest.hash, job)
84
83
 
85
84
  if hard? && soft?
86
85
  err('Cannot handle both --hard and --soft options, please choose one')
@@ -3,7 +3,7 @@ module Bosh::Cli
3
3
  OPERATION_DESCRIPTIONS = {
4
4
  start: 'start %s',
5
5
  stop: 'stop %s',
6
- detach: 'stop %s and power off its VM(s)',
6
+ detach: 'stop %s and delete its VM(s)',
7
7
  restart: 'restart %s',
8
8
  recreate: 'recreate %s'
9
9
  }
@@ -17,39 +17,57 @@ module Bosh::Cli
17
17
  }
18
18
 
19
19
  COMPLETION_DESCRIPTIONS = {
20
- start: '%s has been started',
21
- stop: '%s has been stopped, VM(s) still running',
22
- detach: '%s has been detached, VM(s) powered off',
23
- restart: '%s has been restarted',
24
- recreate: '%s has been recreated'
20
+ start: '%s started',
21
+ stop: '%s stopped, VM(s) still running',
22
+ detach: '%s detached, VM(s) deleted',
23
+ restart: '%s restarted',
24
+ recreate: '%s recreated'
25
25
  }
26
26
 
27
- def initialize(command, vm_state, options)
27
+ def initialize(command, manifest, options)
28
28
  @command = command
29
- @vm_state = vm_state
29
+ @manifest = manifest
30
30
  @options = options
31
31
  end
32
32
 
33
- def change(state, job, index)
34
- job_desc = job_description(job, index)
35
- op_desc = OPERATION_DESCRIPTIONS.fetch(state) % job_desc
33
+ def change(state, job, index, force)
34
+ description = job_description(job, index)
35
+ op_desc = OPERATION_DESCRIPTIONS.fetch(state) % description
36
36
  new_state = NEW_STATES.fetch(state)
37
- completion_desc = COMPLETION_DESCRIPTIONS.fetch(state) % job_desc.make_green
38
-
39
- status, task_id = perform_vm_state_change(job, index, new_state, op_desc)
37
+ completion_desc = COMPLETION_DESCRIPTIONS.fetch(state) % description.make_green
38
+ status, task_id = change_job_state(new_state, job, index, op_desc, force)
40
39
 
41
40
  [status, task_id, completion_desc]
42
41
  end
43
42
 
44
43
  private
45
- attr_reader :command, :vm_state
46
44
 
47
- def job_description(job, index)
48
- index ? "#{job}/#{index}" : "#{job}"
45
+ def change_job_state(new_state, job, index, operation_desc, force)
46
+ @command.say("You are about to #{operation_desc.make_green}")
47
+
48
+ check_if_manifest_changed(@manifest.hash, force)
49
+ unless @command.confirmed?("#{operation_desc.capitalize}?")
50
+ @command.cancel_deployment
51
+ end
52
+
53
+ @command.nl
54
+ @command.say("Performing `#{operation_desc}'...")
55
+ @command.director.change_job_state(@manifest.name, @manifest.yaml, job, index, new_state, @options)
56
+ end
57
+
58
+
59
+ def check_if_manifest_changed(manifest_hash, force)
60
+ other_changes_present = @command.inspect_deployment_changes(manifest_hash, show_empty_changeset: false)
61
+
62
+ if other_changes_present && !force
63
+ @command.err("Cannot perform job management when other deployment changes are present. Please use `--force' to override.")
64
+ end
49
65
  end
50
66
 
51
- def perform_vm_state_change(job, index, new_state, operation_desc)
52
- vm_state.change(job, index, new_state, operation_desc, @options)
67
+ def job_description(job, index)
68
+ return 'all jobs' if job == '*'
69
+ index ? "#{job}/#{index}" : "#{job}/*"
53
70
  end
71
+
54
72
  end
55
73
  end
@@ -19,8 +19,8 @@ module Bosh::Cli::Resources
19
19
 
20
20
  def spec
21
21
  @spec ||= load_yaml_file(job_base.join('spec'))
22
- rescue
23
- raise Bosh::Cli::InvalidJob, 'Job spec is missing'
22
+ rescue Exception => e
23
+ raise Bosh::Cli::InvalidJob, "Job spec is missing or invalid: #{e.message}"
24
24
  end
25
25
 
26
26
  def name
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Cli
3
- VERSION = '1.3137.0'
3
+ VERSION = '1.3138.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.3137.0
4
+ version: 1.3138.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-13 00:00:00.000000000 Z
11
+ date: 2015-11-16 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.3137.0
19
+ version: 1.3138.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.3137.0
26
+ version: 1.3138.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.3137.0
33
+ version: 1.3138.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.3137.0
40
+ version: 1.3138.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.3137.0
131
+ version: 1.3138.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.3137.0
138
+ version: 1.3138.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: net-ssh
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -447,7 +447,6 @@ files:
447
447
  - lib/cli/versions/releases_dir_migrator.rb
448
448
  - lib/cli/versions/version_file_resolver.rb
449
449
  - lib/cli/versions/versions_index.rb
450
- - lib/cli/vm_state.rb
451
450
  - lib/cli/yaml_helper.rb
452
451
  homepage: https://github.com/cloudfoundry/bosh
453
452
  licenses:
@@ -1,45 +0,0 @@
1
- module Bosh::Cli
2
- class VmState
3
- def initialize(command, manifest, force)
4
- @command = command
5
- @manifest = manifest
6
- @force = force
7
- end
8
-
9
- def change(job, index, new_state, operation_desc, options = {})
10
- command.say("You are about to #{operation_desc.make_green}")
11
-
12
- check_if_manifest_changed(@manifest.hash)
13
-
14
- unless command.confirmed?("#{operation_desc.capitalize}?")
15
- command.cancel_deployment
16
- end
17
-
18
- command.nl
19
- command.say("Performing `#{operation_desc}'...")
20
- command.director.change_job_state(
21
- @manifest.name,
22
- @manifest.yaml,
23
- job,
24
- index,
25
- new_state,
26
- options
27
- )
28
- end
29
-
30
- private
31
- attr_reader :command
32
-
33
- def force?
34
- !!@force
35
- end
36
-
37
- def check_if_manifest_changed(manifest_hash)
38
- other_changes_present = command.inspect_deployment_changes(manifest_hash, show_empty_changeset: false)
39
-
40
- if other_changes_present && !force?
41
- command.err("Cannot perform job management when other deployment changes are present. Please use `--force' to override.")
42
- end
43
- end
44
- end
45
- end