bosh-director 1.2611.0 → 1.2619.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.
@@ -52,10 +52,9 @@ end
52
52
  Bosh::Director::App.new(config)
53
53
 
54
54
  resque_logging = config.hash.fetch('resque', {}).fetch('logging', {})
55
- resque_log_device = Logger::LogDevice.new(resque_logging.fetch('file', STDOUT))
56
55
  resque_logger_level = resque_logging.fetch('level', 'info').upcase
57
- Resque.logger = Logger.new(resque_log_device)
58
- Resque.logger.level = Logger.const_get(resque_logger_level)
56
+ Resque.logger = MonoLogger.new(resque_logging.fetch('file', STDOUT))
57
+ Resque.logger.level = MonoLogger.const_get(resque_logger_level)
59
58
 
60
59
  worker = nil
61
60
  queues = (ENV['QUEUES'] || ENV['QUEUE']).to_s.split(',')
data/lib/bosh/director.rb CHANGED
@@ -11,6 +11,7 @@ require 'fileutils'
11
11
  require 'forwardable'
12
12
  require 'logger'
13
13
  require 'monitor'
14
+ require 'mono_logger'
14
15
  require 'optparse'
15
16
  require 'ostruct'
16
17
  require 'pathname'
@@ -15,7 +15,7 @@ module Bosh::Director
15
15
  log_dir = File.join(Config.base_dir, "tasks", task.id.to_s)
16
16
  task_status_file = File.join(log_dir, "debug")
17
17
  FileUtils.mkdir_p(log_dir)
18
- logger = Logger.new(task_status_file)
18
+ logger = MonoLogger.new(task_status_file)
19
19
  logger.level = Config.logger.level
20
20
  logger.info("Director Version : #{Bosh::Director::VERSION}")
21
21
  logger.info("Enqueuing task: #{task.id}")
@@ -73,16 +73,16 @@ module Bosh::Director
73
73
  @task_checkpoint_interval = 30
74
74
 
75
75
  logging = config.fetch('logging', {})
76
- @log_device = Logger::LogDevice.new(logging.fetch('file', STDOUT))
77
- @logger = Logger.new(@log_device)
78
- @logger.level = Logger.const_get(logging.fetch('level', 'debug').upcase)
76
+ @log_device = MonoLogger::LocklessLogDevice.new(logging.fetch('file', STDOUT))
77
+ @logger = MonoLogger.new(@log_device)
78
+ @logger.level = MonoLogger.const_get(logging.fetch('level', 'debug').upcase)
79
79
  @logger.formatter = ThreadFormatter.new
80
80
 
81
81
  # use a separate logger for redis to make it stfu
82
- redis_logger = Logger.new(@log_device)
82
+ redis_logger = MonoLogger.new(@log_device)
83
83
  logging = config.fetch('redis', {}).fetch('logging', {})
84
84
  redis_logger_level = logging.fetch('level', 'info').upcase
85
- redis_logger.level = Logger.const_get(redis_logger_level)
85
+ redis_logger.level = MonoLogger.const_get(redis_logger_level)
86
86
 
87
87
  # Event logger supposed to be overridden per task,
88
88
  # the default one does nothing
@@ -51,24 +51,24 @@ module Bosh::Director
51
51
  def bind_existing_vm(vm, lock)
52
52
  state = get_state(vm)
53
53
  lock.synchronize do
54
- @logger.debug('Processing network reservations')
54
+ @logger.debug('Processing VM network reservations')
55
55
  reservations = get_network_reservations(state)
56
56
 
57
57
  instance = vm.instance
58
58
  if instance
59
59
  bind_instance(instance, state, reservations)
60
60
  else
61
- @logger.debug('Binding resource pool VM')
62
- resource_pool = @deployment_plan.resource_pool(
63
- state['resource_pool']['name'])
61
+ resource_pool_name = state['resource_pool']['name']
62
+ resource_pool = @deployment_plan.resource_pool(resource_pool_name)
64
63
  if resource_pool
64
+ @logger.debug("Binding VM to resource pool '#{resource_pool_name}'")
65
65
  bind_idle_vm(vm, resource_pool, state, reservations)
66
66
  else
67
- @logger.debug("Resource pool doesn't exist, marking for deletion")
67
+ @logger.debug("Resource pool '#{resource_pool_name}' does not exist, marking VM for deletion")
68
68
  @deployment_plan.delete_vm(vm)
69
69
  end
70
70
  end
71
- @logger.debug('Finished binding VM')
71
+ @logger.debug('Finished processing VM network reservations')
72
72
  end
73
73
  end
74
74
 
@@ -78,20 +78,29 @@ module Bosh::Director
78
78
  # @param [Hash] state VM state according to its agent
79
79
  # @param [Hash] reservations Network reservations
80
80
  def bind_idle_vm(vm, resource_pool, state, reservations)
81
- @logger.debug('Adding to resource pool')
81
+ if reservations.any? { |network_name, reservation| reservation.static? }
82
+ @logger.debug("Releasing all network reservations for VM `#{vm.cid}'")
83
+ reservations.each do |network_name, reservation|
84
+ @logger.debug("Releasing #{reservation.type} network reservation `#{network_name}' for VM `#{vm.cid}'")
85
+ resource_pool.network.release(reservation)
86
+ end
87
+
88
+ @logger.debug("Deleting VM `#{vm.cid}' with static network reservation")
89
+ @deployment_plan.delete_vm(vm)
90
+ return
91
+ end
92
+
93
+ @logger.debug("Adding VM `#{vm.cid}' to resource pool `#{resource_pool.name}'")
82
94
  idle_vm = resource_pool.add_idle_vm
83
95
  idle_vm.vm = vm
84
96
  idle_vm.current_state = state
85
97
 
86
- reservation = reservations[resource_pool.network.name]
98
+ network_name = resource_pool.network.name
99
+ reservation = reservations[network_name]
87
100
  if reservation
88
- if reservation.static?
89
- @logger.debug('Releasing static network reservation for ' +
90
- "resource pool VM `#{vm.cid}'")
91
- resource_pool.network.release(reservation)
92
- else
93
- idle_vm.use_reservation(reservation)
94
- end
101
+ @logger.debug("Using existing `#{reservation.type}' " +
102
+ "network reservation of `#{reservation.ip}' for VM `#{vm.cid}'")
103
+ idle_vm.use_reservation(reservation)
95
104
  else
96
105
  @logger.debug("No network reservation for VM `#{vm.cid}'")
97
106
  end
@@ -118,26 +127,26 @@ module Bosh::Director
118
127
 
119
128
  job = @deployment_plan.job(instance_model.job)
120
129
  unless job
121
- @logger.debug("Job '#{instance_model.job}' not found, marking for deletion")
130
+ @logger.debug("Job `#{instance_model.job}' not found, marking for deletion")
122
131
  @deployment_plan.delete_instance(instance_model)
123
132
  return
124
133
  end
125
134
 
126
135
  instance = job.instance(instance_model.index)
127
136
  unless instance
128
- @logger.debug("Job instance #{instance_name} not found, marking for deletion")
137
+ @logger.debug("Job instance `#{instance_name}' not found, marking for deletion")
129
138
  @deployment_plan.delete_instance(instance_model)
130
139
  return
131
140
  end
132
141
 
133
- @logger.debug("Found job instance #{instance_name}")
142
+ @logger.debug("Found job instance `#{instance_name}'")
134
143
  instance.use_model(instance_model)
135
144
  instance.current_state = state
136
145
 
137
- @logger.debug("Copying job instance #{instance_name} network reservations")
146
+ @logger.debug("Copying job instance `#{instance_name}' network reservations")
138
147
  instance.take_network_reservations(reservations)
139
148
 
140
- @logger.debug("Copying job instance #{instance_name} resource pool reservation")
149
+ @logger.debug("Copying job instance `#{instance_name}' resource pool reservation")
141
150
  job.resource_pool.mark_active_vm
142
151
  end
143
152
 
@@ -6,8 +6,9 @@ module Bosh::Director
6
6
  include DnsHelper
7
7
  include ValidationHelper
8
8
 
9
- def initialize(event_log)
9
+ def initialize(event_log, logger)
10
10
  @event_log = event_log
11
+ @logger = logger
11
12
  end
12
13
 
13
14
  # @param [Hash] manifest Raw deployment manifest
@@ -102,7 +103,7 @@ module Bosh::Director
102
103
  def parse_resource_pools
103
104
  resource_pools = safe_property(@manifest, 'resource_pools', :class => Array)
104
105
  resource_pools.each do |rp_spec|
105
- @deployment.add_resource_pool(ResourcePool.new(@deployment, rp_spec))
106
+ @deployment.add_resource_pool(ResourcePool.new(@deployment, rp_spec, @logger))
106
107
  end
107
108
 
108
109
  # Uncomment when integration test fixed
@@ -31,8 +31,12 @@ module Bosh::Director
31
31
  # All jobs in the deployment
32
32
  attr_reader :jobs
33
33
 
34
+ # Job instances from the old manifest that are not in the new manifest
34
35
  attr_accessor :unneeded_instances
36
+
37
+ # VMs from the old manifest that are not in the new manifest
35
38
  attr_accessor :unneeded_vms
39
+
36
40
  attr_accessor :dns_domain
37
41
 
38
42
  attr_reader :job_rename
@@ -41,13 +45,15 @@ module Bosh::Director
41
45
  attr_reader :recreate
42
46
 
43
47
  # @param [Hash] manifest Raw deployment manifest
44
- # @param [Bosh::Director::EventLog::Log]
45
- # event_log Event log for recording deprecations
46
48
  # @param [Hash] options Additional options for deployment
47
49
  # (e.g. job_states, job_rename)
50
+ # @param [Bosh::Director::EventLog::Log]
51
+ # event_log Event log for recording deprecations
52
+ # @param [Logger]
53
+ # logger Log for director logging
48
54
  # @return [Bosh::Director::DeploymentPlan::Planner]
49
- def self.parse(manifest, event_log, options)
50
- parser = DeploymentSpecParser.new(event_log)
55
+ def self.parse(manifest, options, event_log, logger)
56
+ parser = DeploymentSpecParser.new(event_log, logger)
51
57
  parser.parse(manifest, options)
52
58
  end
53
59
 
@@ -40,11 +40,14 @@ module Bosh::Director
40
40
 
41
41
  # @param [DeploymentPlan] deployment_plan Deployment plan
42
42
  # @param [Hash] spec Raw resource pool spec from the deployment manifest
43
- def initialize(deployment_plan, spec)
43
+ # @param [Logger] logger Director logger
44
+ def initialize(deployment_plan, spec, logger)
44
45
  @deployment_plan = deployment_plan
45
46
 
47
+ @logger = logger
48
+
46
49
  @name = safe_property(spec, "name", :class => String)
47
- @size = safe_property(spec, "size", :class => Integer)
50
+ @size = safe_property(spec, "size", :class => Integer, :optional => true)
48
51
 
49
52
  @cloud_properties =
50
53
  safe_property(spec, "cloud_properties", :class => Hash)
@@ -112,6 +115,14 @@ module Bosh::Director
112
115
  end
113
116
 
114
117
  def allocate_vm
118
+ if @idle_vms.empty?
119
+ if dynamically_sized?
120
+ add_idle_vm
121
+ else
122
+ raise ResourcePoolNotEnoughCapacity,
123
+ "Resource pool `#{@name}' has no more VMs to allocate"
124
+ end
125
+ end
115
126
  allocated_vm = @idle_vms.pop
116
127
  @allocated_vms << allocated_vm
117
128
  allocated_vm
@@ -119,9 +130,16 @@ module Bosh::Director
119
130
 
120
131
  def deallocate_vm(idle_vm_cid)
121
132
  deallocated_vm = @allocated_vms.find { |idle_vm| idle_vm.vm.cid == idle_vm_cid }
133
+ if deallocated_vm.nil?
134
+ raise DirectorError, "Resource pool `#{@name}' does not contain an allocated VM with the cid `#{idle_vm_cid}'"
135
+ end
136
+
137
+ @logger.info("Deallocating VM: #{deallocated_vm.vm.cid}")
122
138
  @allocated_vms.delete(deallocated_vm)
123
- @idle_vms << deallocated_vm
124
- deallocated_vm
139
+
140
+ add_idle_vm unless dynamically_sized? # don't refill if dynamically sized
141
+
142
+ nil
125
143
  end
126
144
 
127
145
  # "Active" VM is a VM that is currently running a job
@@ -136,7 +154,7 @@ module Bosh::Director
136
154
  # @return [void]
137
155
  def reserve_capacity(n)
138
156
  needed = @reserved_capacity + n
139
- if needed > @size
157
+ if !dynamically_sized? && needed > @size
140
158
  raise ResourcePoolNotEnoughCapacity,
141
159
  "Resource pool `#{@name}' is not big enough: " +
142
160
  "#{needed} VMs needed, capacity is #{@size}"
@@ -159,12 +177,17 @@ module Bosh::Director
159
177
  end
160
178
  end
161
179
 
180
+ def dynamically_sized?
181
+ @size.nil?
182
+ end
183
+
162
184
  private
163
185
 
164
186
  # Returns a number of VMs that need to be created in order to bring
165
187
  # this resource pool to a desired size
166
188
  # @return [Integer]
167
189
  def missing_vm_count
190
+ return 0 if dynamically_sized?
168
191
  @size - @active_vm_count - @idle_vms.size
169
192
  end
170
193
  end
@@ -17,6 +17,12 @@ module Bosh::Director
17
17
  @assembler.bind_dns
18
18
  end
19
19
 
20
+ @logger.info('Deleting no longer needed VMs')
21
+ @assembler.delete_unneeded_vms
22
+
23
+ @logger.info('Deleting no longer needed instances')
24
+ @assembler.delete_unneeded_instances
25
+
20
26
  @logger.info('Updating resource pools')
21
27
  @resource_pools.update
22
28
  @base_job.task_checkpoint
@@ -29,12 +35,6 @@ module Bosh::Director
29
35
  @assembler.bind_configuration
30
36
  end
31
37
 
32
- @logger.info('Deleting no longer needed VMs')
33
- @assembler.delete_unneeded_vms
34
-
35
- @logger.info('Deleting no longer needed instances')
36
- @assembler.delete_unneeded_instances
37
-
38
38
  @logger.info('Updating jobs')
39
39
  @multi_job_updater.run(
40
40
  @base_job,
@@ -4,14 +4,16 @@ module Bosh::Director
4
4
  # @param [Bosh::Director::DeploymentPlan::Job] job
5
5
  # @param [Bosh::Blobstore::Client] blobstore
6
6
  # @param [Bosh::Director::EventLog::Log] event_log
7
- def initialize(deployment, job, blobstore, event_log)
7
+ # @param [Logger] logger
8
+ def initialize(deployment, job, blobstore, event_log, logger)
8
9
  @deployment = deployment
9
10
  @job = job
10
11
  @blobstore = blobstore
11
12
  @event_log = event_log
13
+ @logger = logger
12
14
  end
13
15
 
14
- # Creates/updates all job instances
16
+ # Creates/updates all errand job instances
15
17
  # @return [void]
16
18
  def update_instances
17
19
  dns_binder = DeploymentPlan::DnsBinder.new(@deployment)
@@ -27,15 +29,17 @@ module Bosh::Director
27
29
  job_updater.update
28
30
  end
29
31
 
30
- # Deletes created all job instances
32
+ # Deletes all errand job instances
31
33
  # @return [void]
32
34
  def delete_instances
33
35
  instances = @job.instances.map(&:model).compact
34
- return if instances.empty?
35
-
36
- event_log_stage = @event_log.begin_stage(
37
- 'Deleting instances', instances.size, [@job.name])
36
+ if instances.empty?
37
+ @logger.info('No errand instances to delete')
38
+ return
39
+ end
38
40
 
41
+ @logger.info('Deleting errand instances')
42
+ event_log_stage = @event_log.begin_stage('Deleting errand instances', instances.size, [@job.name])
39
43
  instance_deleter = InstanceDeleter.new(@deployment)
40
44
  instance_deleter.delete_instances(instances, event_log_stage)
41
45
 
@@ -44,13 +48,12 @@ module Bosh::Director
44
48
 
45
49
  private
46
50
 
51
+ # Deallocates all errand VMs
52
+ # @return [void]
47
53
  def deallocate_vms
48
- instance_cids = @job.instances.map { |i| i.model.vm.cid }
49
-
50
- instance_cids.each do |cid|
51
- idle_vm = @job.resource_pool.deallocate_vm(cid)
52
- idle_vm.clean_vm
53
- end
54
+ @logger.info('Deallocating errand VMs')
55
+ instance_vm_cids = @job.instances.map { |i| i.model.vm.cid }
56
+ instance_vm_cids.each { |cid| @job.resource_pool.deallocate_vm(cid) }
54
57
  end
55
58
  end
56
59
  end
@@ -53,7 +53,7 @@ module Bosh::Director
53
53
  event_log = File.join(log_dir, 'event')
54
54
  result_log = File.join(log_dir, 'result')
55
55
 
56
- @task_logger = Logger.new(debug_log)
56
+ @task_logger = MonoLogger.new(debug_log)
57
57
  @task_logger.level = Config.logger.level
58
58
  @task_logger.formatter = ThreadFormatter.new
59
59
 
@@ -24,7 +24,7 @@ module Bosh::Director
24
24
  def perform
25
25
  deployment_model = @deployment_manager.find_by_name(@deployment_name)
26
26
  manifest = Psych.load(deployment_model.manifest)
27
- deployment = DeploymentPlan::Planner.parse(manifest, event_log, {})
27
+ deployment = DeploymentPlan::Planner.parse(manifest, {}, event_log, logger)
28
28
 
29
29
  job = deployment.job(@errand_name)
30
30
  if job.nil?
@@ -70,38 +70,38 @@ module Bosh::Director
70
70
  deployment_preparer = Errand::DeploymentPreparer.new(deployment, job, event_log, self)
71
71
 
72
72
  rp_updaters = [ResourcePoolUpdater.new(job.resource_pool)]
73
- rp_manager = DeploymentPlan::ResourcePools.new(event_log, rp_updaters)
73
+ resource_pools = DeploymentPlan::ResourcePools.new(event_log, rp_updaters)
74
74
 
75
- job_manager = Errand::JobManager.new(deployment, job, @blobstore, event_log)
75
+ job_manager = Errand::JobManager.new(deployment, job, @blobstore, event_log, logger)
76
76
 
77
77
  begin
78
- update_instances(deployment_preparer, rp_manager, job_manager)
78
+ update_instances(deployment_preparer, resource_pools, job_manager)
79
79
  blk.call
80
80
  ensure
81
- delete_instances(rp_manager, job_manager)
81
+ delete_instances(resource_pools, job_manager)
82
82
  end
83
83
  end
84
84
 
85
- def update_instances(deployment_preparer, rp_manager, job_manager)
85
+ def update_instances(deployment_preparer, resource_pools, job_manager)
86
86
  logger.info('Starting to prepare for deployment')
87
87
  deployment_preparer.prepare_deployment
88
88
  deployment_preparer.prepare_job
89
89
 
90
90
  logger.info('Starting to update resource pool')
91
- rp_manager.update
91
+ resource_pools.update
92
92
 
93
93
  logger.info('Starting to update job instances')
94
94
  job_manager.update_instances
95
95
  end
96
96
 
97
- def delete_instances(rp_manager, job_manager)
97
+ def delete_instances(resource_pools, job_manager)
98
98
  @ignore_cancellation = true
99
99
 
100
100
  logger.info('Starting to delete job instances')
101
101
  job_manager.delete_instances
102
102
 
103
103
  logger.info('Starting to refill resource pool')
104
- rp_manager.refill
104
+ resource_pools.refill
105
105
 
106
106
  @ignore_cancellation = false
107
107
  end
@@ -29,7 +29,7 @@ module Bosh::Director
29
29
  }
30
30
 
31
31
  manifest_as_hash = Psych.load(@manifest)
32
- @deployment_plan = DeploymentPlan::Planner.parse(manifest_as_hash, event_log, plan_options)
32
+ @deployment_plan = DeploymentPlan::Planner.parse(manifest_as_hash, plan_options, event_log, logger)
33
33
  logger.info('Created deployment plan')
34
34
 
35
35
  resource_pools = @deployment_plan.resource_pools
@@ -176,6 +176,7 @@ module Bosh::Director
176
176
  end
177
177
 
178
178
  def extra_vm_count
179
+ return 0 if @resource_pool.dynamically_sized?
179
180
  @resource_pool.active_vm_count +
180
181
  @resource_pool.idle_vms.size +
181
182
  @resource_pool.allocated_vms.size -
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Director
3
- VERSION = '1.2611.0'
3
+ VERSION = '1.2619.0'
4
4
  end
5
5
  end
data/lib/cloud/dummy.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'digest/sha1'
2
2
  require 'fileutils'
3
3
  require 'securerandom'
4
- require 'logger'
4
+ require 'mono_logger'
5
5
 
6
6
  module Bosh
7
7
  module Clouds
@@ -25,7 +25,7 @@ module Bosh
25
25
 
26
26
  @running_vms_dir = File.join(@base_dir, 'running_vms')
27
27
 
28
- @logger = Logger.new(options['log_device'] || STDOUT)
28
+ @logger = MonoLogger.new(options['log_device'] || STDOUT)
29
29
 
30
30
  @commands = CommandTransport.new(@base_dir, @logger)
31
31
 
@@ -91,8 +91,13 @@ module Bosh
91
91
 
92
92
  def configure_networks(vm_id, networks)
93
93
  cmd = commands.next_configure_networks_cmd(vm_id)
94
- raise NotSupported, 'Dummy CPI was configured to return NotSupported' if cmd.not_supported
95
- raise NotImplemented, 'Dummy CPI does not implement configure_networks'
94
+
95
+ # The only configure_networks test so far only tests the negative case.
96
+ # If a positive case is added, the agent will need to be re-started.
97
+ # Normally runit would handle that.
98
+ if cmd.not_supported || true
99
+ raise NotSupported, 'Dummy CPI was configured to return NotSupported'
100
+ end
96
101
  end
97
102
 
98
103
  def attach_disk(vm_id, disk_id)
@@ -278,12 +283,12 @@ module Bosh
278
283
  @logger.info('Reading create_vm configuration')
279
284
  always_path = File.join(@cpi_commands, 'create_vm', 'always')
280
285
  ip_address = File.read(always_path) if File.exists?(always_path)
281
- CreareVmCommand.new(ip_address)
286
+ CreateVmCommand.new(ip_address)
282
287
  end
283
288
  end
284
289
 
285
290
  class ConfigureNetworksCommand < Struct.new(:not_supported); end
286
- class CreareVmCommand < Struct.new(:ip_address); end
291
+ class CreateVmCommand < Struct.new(:ip_address); end
287
292
  end
288
293
  end
289
294
  end
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.2611.0
4
+ version: 1.2619.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-06-18 00:00:00.000000000 Z
12
+ date: 2014-06-26 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.2611.0
37
+ version: 1.2619.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.2611.0
45
+ version: 1.2619.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.2611.0
53
+ version: 1.2619.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.2611.0
61
+ version: 1.2619.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.2611.0
69
+ version: 1.2619.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.2611.0
77
+ version: 1.2619.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.2611.0
85
+ version: 1.2619.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.2611.0
93
+ version: 1.2619.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.2611.0
101
+ version: 1.2619.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.2611.0
109
+ version: 1.2619.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.2611.0
117
+ version: 1.2619.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.2611.0
125
+ version: 1.2619.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.2611.0
133
+ version: 1.2619.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.2611.0
141
+ version: 1.2619.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.2611.0
149
+ version: 1.2619.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.2611.0
157
+ version: 1.2619.0
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: bosh_warden_cpi
160
160
  requirement: !ruby/object:Gem::Requirement
@@ -162,7 +162,7 @@ dependencies:
162
162
  requirements:
163
163
  - - ~>
164
164
  - !ruby/object:Gem::Version
165
- version: 1.2611.0
165
+ version: 1.2619.0
166
166
  type: :runtime
167
167
  prerelease: false
168
168
  version_requirements: !ruby/object:Gem::Requirement
@@ -170,7 +170,7 @@ dependencies:
170
170
  requirements:
171
171
  - - ~>
172
172
  - !ruby/object:Gem::Version
173
- version: 1.2611.0
173
+ version: 1.2619.0
174
174
  - !ruby/object:Gem::Dependency
175
175
  name: bosh_vcloud_cpi
176
176
  requirement: !ruby/object:Gem::Requirement
@@ -235,6 +235,22 @@ dependencies:
235
235
  - - '='
236
236
  - !ruby/object:Gem::Version
237
237
  version: 2.2.4
238
+ - !ruby/object:Gem::Dependency
239
+ name: mono_logger
240
+ requirement: !ruby/object:Gem::Requirement
241
+ none: false
242
+ requirements:
243
+ - - ~>
244
+ - !ruby/object:Gem::Version
245
+ version: 1.1.0
246
+ type: :runtime
247
+ prerelease: false
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - ~>
252
+ - !ruby/object:Gem::Version
253
+ version: 1.1.0
238
254
  - !ruby/object:Gem::Dependency
239
255
  name: nats
240
256
  requirement: !ruby/object:Gem::Requirement
@@ -322,7 +338,7 @@ dependencies:
322
338
  requirements:
323
339
  - - ~>
324
340
  - !ruby/object:Gem::Version
325
- version: 1.23.0
341
+ version: 1.25.0
326
342
  type: :runtime
327
343
  prerelease: false
328
344
  version_requirements: !ruby/object:Gem::Requirement
@@ -330,7 +346,7 @@ dependencies:
330
346
  requirements:
331
347
  - - ~>
332
348
  - !ruby/object:Gem::Version
333
- version: 1.23.0
349
+ version: 1.25.0
334
350
  - !ruby/object:Gem::Dependency
335
351
  name: resque-backtrace
336
352
  requirement: !ruby/object:Gem::Requirement
@@ -493,7 +509,7 @@ dependencies:
493
509
  version: '0'
494
510
  description: ! 'BOSH Director
495
511
 
496
- 6129ec'
512
+ a38edb'
497
513
  email: support@cloudfoundry.com
498
514
  executables:
499
515
  - bosh-director
@@ -754,7 +770,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
754
770
  version: '0'
755
771
  segments:
756
772
  - 0
757
- hash: -4501133307616993299
773
+ hash: -2708480471074860052
758
774
  requirements: []
759
775
  rubyforge_project:
760
776
  rubygems_version: 1.8.23.2