bosh-director 1.2311.0 → 1.2334.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.
@@ -109,6 +109,11 @@ module Bosh::Director
109
109
  def changed?
110
110
  resource_pool_changed? || networks_changed?
111
111
  end
112
+
113
+ def clean_vm
114
+ self.vm = nil
115
+ self.current_state = nil
116
+ end
112
117
  end
113
118
  end
114
119
  end
@@ -121,6 +121,13 @@ module Bosh::Director
121
121
  allocated_vm
122
122
  end
123
123
 
124
+ def deallocate_vm(idle_vm_cid)
125
+ deallocated_vm = @allocated_vms.find { |idle_vm| idle_vm.vm.cid == idle_vm_cid }
126
+ @allocated_vms.delete(deallocated_vm)
127
+ @idle_vms << deallocated_vm
128
+ deallocated_vm
129
+ end
130
+
124
131
  # "Active" VM is a VM that is currently running a job
125
132
  # @return [void]
126
133
  def mark_active_vm
@@ -36,6 +36,19 @@ module Bosh::Director
36
36
  instance_deleter = InstanceDeleter.new(@deployment)
37
37
  instance_deleter.delete_instances(
38
38
  @job.instances.map(&:model), event_log_stage)
39
+
40
+ deallocate_vms
41
+ end
42
+
43
+ private
44
+
45
+ def deallocate_vms
46
+ instance_cids = @job.instances.map { |i| i.model.vm.cid }
47
+
48
+ instance_cids.each do |cid|
49
+ idle_vm = @job.resource_pool.deallocate_vm(cid)
50
+ idle_vm.clean_vm
51
+ end
39
52
  end
40
53
  end
41
54
  end
@@ -38,7 +38,7 @@ module Bosh::Director
38
38
 
39
39
  def warn_deprecated(message)
40
40
  log_entry(
41
- 'time' => 0,
41
+ 'time' => Time.now.to_i,
42
42
  'type' => 'deprecation',
43
43
  'message' => message,
44
44
  )
@@ -119,8 +119,7 @@ module Bosh::Director
119
119
  @logger.info("Deleting outdated VM: #{vm_cid}")
120
120
  @cloud.delete_vm(vm_cid)
121
121
  vm = idle_vm.vm
122
- idle_vm.vm = nil
123
- idle_vm.current_state = nil
122
+ idle_vm.clean_vm
124
123
  vm.destroy
125
124
  end
126
125
  end
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Director
3
- VERSION = '1.2311.0'
3
+ VERSION = '1.2334.0'
4
4
  end
5
5
  end
data/lib/cloud/dummy.rb CHANGED
@@ -8,12 +8,19 @@ module Bosh
8
8
  class NotImplemented < StandardError; end
9
9
 
10
10
  def initialize(options)
11
- if options['dir'].nil?
12
- raise ArgumentError, 'please provide base directory for dummy cloud'
13
- end
14
-
15
11
  @options = options
12
+
16
13
  @base_dir = options['dir']
14
+ if @base_dir.nil?
15
+ raise ArgumentError, 'Must specify dir'
16
+ end
17
+
18
+ @agent_type = options['agent']['type']
19
+ unless %w(ruby go).include?(@agent_type)
20
+ raise ArgumentError, 'Unknown agent type provided'
21
+ end
22
+
23
+ @running_vms_dir = File.join(@base_dir, 'running_vms')
17
24
 
18
25
  FileUtils.mkdir_p(@base_dir)
19
26
  rescue Errno::EACCES
@@ -45,12 +52,12 @@ module Bosh
45
52
  mbus: @options['nats'],
46
53
  })
47
54
 
48
- agent_cmd = agent_cmd(agent_id, root_dir, :ruby)
49
- agent_log = "#{@options['dir']}/agent.#{agent_id}.log"
55
+ agent_cmd = agent_cmd(agent_id, root_dir)
56
+ agent_log = "#{@base_dir}/agent.#{agent_id}.log"
50
57
  agent_pid = Process.spawn(*agent_cmd, chdir: agent_base_dir(agent_id), out: agent_log, err: agent_log)
51
58
  Process.detach(agent_pid)
52
59
 
53
- FileUtils.mkdir_p(File.join(@base_dir, 'running_vms'))
60
+ FileUtils.mkdir_p(@running_vms_dir)
54
61
  File.write(vm_file(agent_pid), agent_id)
55
62
 
56
63
  agent_pid.to_s
@@ -126,6 +133,23 @@ module Bosh
126
133
  raise NotImplemented, 'Dummy CPI does not implement validate_deployment'
127
134
  end
128
135
 
136
+ # Additional Dummy test helpers
137
+
138
+ def vm_cids
139
+ Dir.glob(File.join(@running_vms_dir, '*')).map { |vm| File.basename(vm) }
140
+ end
141
+
142
+ def kill_agents
143
+ vm_cids.each do |agent_pid|
144
+ begin
145
+ Process.kill('INT', agent_pid.to_i)
146
+ # rubocop:disable HandleExceptions
147
+ rescue Errno::ESRCH
148
+ # rubocop:enable HandleExceptions
149
+ end
150
+ end
151
+ end
152
+
129
153
  private
130
154
 
131
155
  def agent_id_for_vm_id(vm_id)
@@ -133,11 +157,14 @@ module Bosh
133
157
  end
134
158
 
135
159
  def agent_settings_file(agent_id)
136
- File.join(agent_base_dir(agent_id), 'bosh', 'settings.json')
160
+ # Even though dummy CPI has complete access to agent execution file system
161
+ # it should never write directly to settings.json because
162
+ # the agent is responsible for retrieving the settings from the CPI.
163
+ File.join(agent_base_dir(agent_id), 'bosh', 'dummy-cpi-agent-env.json')
137
164
  end
138
165
 
139
166
  def agent_base_dir(agent_id)
140
- "#{@options['dir']}/agent-base-dir-#{agent_id}"
167
+ "#{@base_dir}/agent-base-dir-#{agent_id}"
141
168
  end
142
169
 
143
170
  def write_agent_settings(agent_id, settings)
@@ -145,12 +172,12 @@ module Bosh
145
172
  File.write(agent_settings_file(agent_id), JSON.generate(settings))
146
173
  end
147
174
 
148
- def agent_cmd(agent_id, root_dir, agent_type)
175
+ def agent_cmd(agent_id, root_dir)
149
176
  go_agent_exe = File.absolute_path('bosh/go_agent/out/bosh-agent')
150
177
  {
151
- ruby: %W[bosh_agent -b #{agent_base_dir(agent_id)} -I dummy -r #{root_dir} --no-alerts],
152
- go: %W[#{go_agent_exe} -b #{agent_base_dir(agent_id)} -I dummy -P dummy -M dummy],
153
- }[agent_type]
178
+ 'ruby' => %W[bosh_agent -b #{agent_base_dir(agent_id)} -I dummy -r #{root_dir} --no-alerts],
179
+ 'go' => %W[#{go_agent_exe} -b #{agent_base_dir(agent_id)} -I dummy -P dummy -M dummy],
180
+ }[@agent_type.to_s]
154
181
  end
155
182
 
156
183
  def read_agent_settings(agent_id)
@@ -162,7 +189,7 @@ module Bosh
162
189
  end
163
190
 
164
191
  def vm_file(vm_id)
165
- File.join(@base_dir, 'running_vms', vm_id.to_s)
192
+ File.join(@running_vms_dir, vm_id.to_s)
166
193
  end
167
194
 
168
195
  def disk_file(disk_id)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-director
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2311.0
4
+ version: 1.2334.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-03-28 00:00:00.000000000 Z
12
+ date: 2014-04-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bcrypt-ruby
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 1.2311.0
37
+ version: 1.2334.0
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 1.2311.0
45
+ version: 1.2334.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: bosh-core
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: 1.2311.0
53
+ version: 1.2334.0
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -58,7 +58,7 @@ dependencies:
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 1.2311.0
61
+ version: 1.2334.0
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: bosh-director-core
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +66,7 @@ dependencies:
66
66
  requirements:
67
67
  - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 1.2311.0
69
+ version: 1.2334.0
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,7 +74,7 @@ dependencies:
74
74
  requirements:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: 1.2311.0
77
+ version: 1.2334.0
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: bosh_common
80
80
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +82,7 @@ dependencies:
82
82
  requirements:
83
83
  - - ~>
84
84
  - !ruby/object:Gem::Version
85
- version: 1.2311.0
85
+ version: 1.2334.0
86
86
  type: :runtime
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +90,7 @@ dependencies:
90
90
  requirements:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
- version: 1.2311.0
93
+ version: 1.2334.0
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: bosh_cpi
96
96
  requirement: !ruby/object:Gem::Requirement
@@ -98,7 +98,7 @@ dependencies:
98
98
  requirements:
99
99
  - - ~>
100
100
  - !ruby/object:Gem::Version
101
- version: 1.2311.0
101
+ version: 1.2334.0
102
102
  type: :runtime
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
@@ -106,7 +106,7 @@ dependencies:
106
106
  requirements:
107
107
  - - ~>
108
108
  - !ruby/object:Gem::Version
109
- version: 1.2311.0
109
+ version: 1.2334.0
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: bosh_openstack_cpi
112
112
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +114,7 @@ dependencies:
114
114
  requirements:
115
115
  - - ~>
116
116
  - !ruby/object:Gem::Version
117
- version: 1.2311.0
117
+ version: 1.2334.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
@@ -122,7 +122,7 @@ dependencies:
122
122
  requirements:
123
123
  - - ~>
124
124
  - !ruby/object:Gem::Version
125
- version: 1.2311.0
125
+ version: 1.2334.0
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: bosh_aws_cpi
128
128
  requirement: !ruby/object:Gem::Requirement
@@ -130,7 +130,7 @@ dependencies:
130
130
  requirements:
131
131
  - - ~>
132
132
  - !ruby/object:Gem::Version
133
- version: 1.2311.0
133
+ version: 1.2334.0
134
134
  type: :runtime
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
@@ -138,7 +138,7 @@ dependencies:
138
138
  requirements:
139
139
  - - ~>
140
140
  - !ruby/object:Gem::Version
141
- version: 1.2311.0
141
+ version: 1.2334.0
142
142
  - !ruby/object:Gem::Dependency
143
143
  name: bosh_vsphere_cpi
144
144
  requirement: !ruby/object:Gem::Requirement
@@ -146,7 +146,7 @@ dependencies:
146
146
  requirements:
147
147
  - - ~>
148
148
  - !ruby/object:Gem::Version
149
- version: 1.2311.0
149
+ version: 1.2334.0
150
150
  type: :runtime
151
151
  prerelease: false
152
152
  version_requirements: !ruby/object:Gem::Requirement
@@ -154,7 +154,7 @@ dependencies:
154
154
  requirements:
155
155
  - - ~>
156
156
  - !ruby/object:Gem::Version
157
- version: 1.2311.0
157
+ version: 1.2334.0
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: bosh_vcloud_cpi
160
160
  requirement: !ruby/object:Gem::Requirement
@@ -493,7 +493,7 @@ dependencies:
493
493
  version: '1.0'
494
494
  description: ! 'BOSH Director
495
495
 
496
- 7df356'
496
+ 839055'
497
497
  email: support@cloudfoundry.com
498
498
  executables:
499
499
  - bosh-director
@@ -748,7 +748,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
748
748
  version: '0'
749
749
  segments:
750
750
  - 0
751
- hash: -2628192170011962430
751
+ hash: -1978715679933352968
752
752
  requirements: []
753
753
  rubyforge_project:
754
754
  rubygems_version: 1.8.23