bosh-director 1.1761.0 → 1.1777.0

Sign up to get free protection for your applications and to get access to all the features.
data/bin/bosh-director CHANGED
@@ -5,8 +5,8 @@ require 'thin'
5
5
 
6
6
  config_file = nil
7
7
 
8
- opts = OptionParser.new do |opts|
9
- opts.on('-c', '--config [ARG]', 'Configuration File') do |opt|
8
+ opts = OptionParser.new do |op|
9
+ op.on('-c', '--config [ARG]', 'Configuration File') do |opt|
10
10
  config_file = opt
11
11
  end
12
12
  end
@@ -18,9 +18,9 @@ config = Bosh::Director::Config.load_file(config_file)
18
18
 
19
19
  Bosh::Director::App.new(config)
20
20
 
21
- thin_server = Thin::Server.new('127.0.0.1', config.hash['port'], :signals => false) do
21
+ thin_server = Thin::Server.new('127.0.0.1', config.hash['port'], signals: false) do
22
22
  use Rack::CommonLogger
23
- map "/" do
23
+ map '/' do
24
24
  run Bosh::Director::Api::Controller.new
25
25
  end
26
26
  end
@@ -1,17 +1,27 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- APP_DIR = File.expand_path(File.join("..", ".."), __FILE__)
3
+ APP_DIR = File.expand_path(File.join('..', '..'), __FILE__)
4
4
 
5
- DEFAULT_DIRECTOR_CONFIG = File.join(APP_DIR, "config", "bosh-director.yml")
6
-
7
- require 'bosh/director'
8
5
  require 'irb'
9
6
  require 'irb/completion'
7
+ require 'bosh/director'
10
8
  require 'rack/test'
11
9
 
10
+ options = {}
11
+
12
+ OptionParser.new do |opt|
13
+ opt.banner = 'Usage: director_console [options]'
14
+ opt.on('-c', '--config [ARG]', 'configuration file') { |v| options[:config] = v }
15
+ opt.parse!(ARGV)
16
+ end
17
+
18
+ config_file = File.join(APP_DIR, 'config', 'bosh-director.yml')
19
+ if options[:config]
20
+ config_file = File.expand_path(options[:config])
21
+ end
22
+
12
23
  module Bosh
13
24
  module Director
14
-
15
25
  class TestApplication
16
26
  include Rack::Test::Methods
17
27
 
@@ -21,45 +31,27 @@ module Bosh
21
31
  end
22
32
 
23
33
  class Console
24
- def self.start(context)
25
- new.start(context)
26
- end
27
-
28
- def start(context)
29
- options = {}
30
-
31
- OptionParser.new do |opt|
32
- opt.banner = "Usage: director_console [options]"
33
- opt.on('-c', '--config [ARG]', 'configuration file') { |v| options[:config] = v }
34
- opt.parse!(ARGV)
35
- end
36
-
37
- if options[:config]
38
- config_file = File.expand_path(options[:config])
39
- else
40
- config_file = DEFAULT_DIRECTOR_CONFIG
41
- end
42
-
34
+ def start(context, config_file)
43
35
  puts "=> Loading #{config_file}"
44
- Bosh::Director::App.new(Bosh::Director::Config.load_file(config_file))
45
-
46
- context.instance_eval do
47
- include BD::Models
48
- end
36
+ config = Bosh::Director::Config.load_file(config_file)
37
+ Bosh::Director::App.new(config)
49
38
 
50
- begin
51
- require 'ruby-debug'
52
- puts "=> Debugger enabled"
53
- rescue LoadError
54
- puts "=> ruby-debug not found, debugger disabled"
55
- end
39
+ context.instance_eval { include BD::Models }
40
+ require_ruby_debug
56
41
 
57
42
  puts "=> Welcome to BOSH Director console\n=> You can use 'app' to access REST API"
58
43
  puts "=> You can also use 'cloud', 'blobstore', 'nats' helpers to query these services"
59
-
60
44
  IRB.start
61
45
  end
62
46
 
47
+ private
48
+
49
+ def require_ruby_debug
50
+ require 'ruby-debug'
51
+ puts '=> Debugger enabled'
52
+ rescue LoadError
53
+ puts '=> ruby-debug not found, debugger disabled'
54
+ end
63
55
  end
64
56
  end
65
57
  end
@@ -80,5 +72,4 @@ end
80
72
  end
81
73
  end
82
74
 
83
- BD::Console.start(self)
84
-
75
+ BD::Console.new.start(self, config_file)
@@ -1,23 +1,23 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bosh/director"
3
+ require 'bosh/director'
4
4
 
5
5
  config_file = nil
6
6
  report = false
7
7
  active_worker = 1
8
8
 
9
- opts = OptionParser.new do |opts|
10
- opts.on("-c", "--config [ARG]", "Configuration File") do |opt|
9
+ opts = OptionParser.new do |op|
10
+ op.on('-c', '--config [ARG]', 'Configuration File') do |opt|
11
11
  config_file = opt
12
12
  end
13
- opts.on("-r", "--report", "Report 1 if any active worker, 0 otherwise") do |opt|
13
+ op.on('-r', '--report', 'Report 1 if any active worker, 0 otherwise') do
14
14
  report = true
15
15
  end
16
16
  end
17
17
 
18
18
  opts.parse!(ARGV.dup)
19
19
 
20
- config_file ||= ::File.expand_path("../../config/bosh-director.yml", __FILE__)
20
+ config_file ||= ::File.expand_path('../../config/bosh-director.yml', __FILE__)
21
21
  config = Bosh::Director::Config.load_file(config_file)
22
22
 
23
23
  Bosh::Director::App.new(config)
@@ -25,16 +25,17 @@ Bosh::Director::App.new(config)
25
25
  logger = Bosh::Director::Config.logger
26
26
 
27
27
  loop do
28
- logger.info("Checking for any workers that are still processing..")
29
- worker = Resque::Worker.all.find { |worker| worker.working? }
28
+ logger.info('Checking for any workers that are still processing..')
29
+
30
+ worker = Resque::Worker.all.find(&:working?)
30
31
  if worker.nil?
31
32
  active_worker = 0
32
- logger.info("All workers are idle")
33
- break
34
- end
35
- if report
33
+ logger.info('All workers are idle')
36
34
  break
37
35
  end
36
+
37
+ break if report
38
+
38
39
  logger.info("Found worker: #{worker}, sleeping for 60 seconds.")
39
40
  sleep 60
40
41
  end
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "logger"
4
- require "sequel"
5
- require "bosh/director"
6
- require "optparse"
3
+ require 'logger'
4
+ require 'sequel'
5
+ require 'bosh/director'
6
+ require 'optparse'
7
7
 
8
8
  config_file = nil
9
9
 
10
- opts = OptionParser.new do |opts|
11
- opts.on("-c", "--config FILE", "configuration file") do |opt|
10
+ opts = OptionParser.new do |op|
11
+ op.on('-c', '--config FILE', 'configuration file') do |opt|
12
12
  config_file = opt
13
13
  end
14
14
  end
@@ -21,11 +21,11 @@ if config_file.nil?
21
21
  end
22
22
 
23
23
  config = Psych.load_file(config_file)
24
- unless config["db"] && config["db"]["database"]
25
- abort ("Director database config missing from config file")
24
+ unless config['db'] && config['db']['database']
25
+ abort ('Director database config missing from config file')
26
26
  end
27
27
 
28
- db = Bosh::Director::Config.configure_db(config["db"])
28
+ db = Bosh::Director::Config.configure_db(config['db'])
29
29
 
30
30
  def migrate(database, schema_table, dir, target = nil)
31
31
  options = {}
@@ -36,21 +36,20 @@ def migrate(database, schema_table, dir, target = nil)
36
36
  Sequel::TimestampMigrator.new(database, dir, options).run
37
37
  end
38
38
 
39
- migrations_dir = File.expand_path("../../db/migrations/director", __FILE__)
39
+ migrations_dir = File.expand_path('../../db/migrations/director', __FILE__)
40
40
 
41
41
  migrate(db, nil, migrations_dir)
42
42
 
43
- if config["dns"] && config["dns"]["db"]
44
- dns_migrations_dir = File.expand_path("../../db/migrations/dns", __FILE__)
45
- dns_db = Bosh::Director::Config.configure_db(config["dns"]["db"])
46
- migrate(dns_db, "dns_schema",
47
- dns_migrations_dir)
43
+ if config['dns'] && config['dns']['db']
44
+ dns_migrations_dir = File.expand_path('../../db/migrations/dns', __FILE__)
45
+ dns_db = Bosh::Director::Config.configure_db(config['dns']['db'])
46
+ migrate(dns_db, 'dns_schema', dns_migrations_dir)
48
47
  end
49
48
 
50
- cpi = config["cloud"]["plugin"]
51
- require_path = File.join("cloud", cpi)
49
+ cpi = config['cloud']['plugin']
50
+ require_path = File.join('cloud', cpi)
52
51
  cpi_path = $LOAD_PATH.find { |p| File.exist?(File.join(p, require_path)) }
53
- migrations = File.expand_path("../db/migrations", cpi_path)
52
+ migrations = File.expand_path('../db/migrations', cpi_path)
54
53
 
55
54
  if File.directory?(migrations)
56
55
  migrate(db, "#{cpi}_cpi_schema", migrations)
@@ -5,8 +5,8 @@ require 'bosh/director/scheduler'
5
5
 
6
6
  config_file = ::File.expand_path('../../config/bosh-director.yml', __FILE__)
7
7
 
8
- opts = OptionParser.new do |opts|
9
- opts.on('-c', '--config [ARG]', 'Configuration File') do |opt|
8
+ opts = OptionParser.new do |op|
9
+ op.on('-c', '--config [ARG]', 'Configuration File') do |opt|
10
10
  config_file = opt
11
11
  end
12
12
  end
@@ -1,29 +1,29 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "erb"
4
- require "bosh/director"
3
+ require 'erb'
4
+ require 'bosh/director'
5
5
 
6
6
  config_file = nil
7
7
  index = nil
8
8
  erb = false
9
9
 
10
- opts = OptionParser.new do |opts|
11
- opts.on("-c", "--config [ARG]", "Configuration File") do |opt|
10
+ opts = OptionParser.new do |op|
11
+ op.on('-c', '--config [ARG]', 'Configuration File') do |opt|
12
12
  config_file = opt
13
13
  end
14
14
 
15
- opts.on("-i", "--index [ARG]", Integer, "Worker Index") do |opt|
15
+ op.on('-i', '--index [ARG]', Integer, 'Worker Index') do |opt|
16
16
  index = opt
17
17
  end
18
18
 
19
- opts.on("-e", "--[no-]erb", "Treat Configuration as ERB Template") do |opt|
19
+ op.on('-e', '--[no-]erb', 'Treat Configuration as ERB Template') do |opt|
20
20
  erb = opt
21
21
  end
22
22
  end
23
23
 
24
24
  opts.parse!(ARGV.dup)
25
25
 
26
- config_file ||= ::File.expand_path("../../config/bosh-director.yml", __FILE__)
26
+ config_file ||= ::File.expand_path('../../config/bosh-director.yml', __FILE__)
27
27
  config = nil
28
28
 
29
29
  # Is this code even used anymore?
@@ -40,7 +40,7 @@ if erb
40
40
  end
41
41
  end
42
42
 
43
- template = ERB.new(File.read(config_file), 0, "%<>-")
43
+ template = ERB.new(File.read(config_file), 0, '%<>-')
44
44
  contents = template.result(ConfigBindingHelper.new(index).get_binding)
45
45
  config_hash = Psych.load(contents)
46
46
  config = Bosh::Director::Config.load_hash(config_hash)
@@ -63,11 +63,11 @@ begin
63
63
  worker = Resque::Worker.new(*queues)
64
64
  worker.term_child = true
65
65
  rescue Resque::NoQueueError
66
- abort "set QUEUE env var, e.g. $ QUEUE=critical,high rake resque:work"
66
+ abort 'set QUEUE env var, e.g. $ QUEUE=critical,high rake resque:work'
67
67
  end
68
68
 
69
69
  Resque.after_fork do
70
- EM.error_handler{ |e| puts "Error raised during event loop: #{e.message}" }
70
+ EM.error_handler { |e| puts "Error raised during event loop: #{e.message}" }
71
71
  Thread.new { EM.run }
72
72
  end
73
73
 
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Director
3
- VERSION = '1.1761.0'
3
+ VERSION = '1.1777.0'
4
4
  end
5
5
  end
data/lib/cloud/dummy.rb CHANGED
@@ -8,12 +8,12 @@ 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"
11
+ if options['dir'].nil?
12
+ raise ArgumentError, 'please provide base directory for dummy cloud'
13
13
  end
14
14
 
15
15
  @options = options
16
- @base_dir = options["dir"]
16
+ @base_dir = options['dir']
17
17
 
18
18
  FileUtils.mkdir_p(@base_dir)
19
19
  rescue Errno::EACCES
@@ -30,64 +30,44 @@ module Bosh
30
30
  FileUtils.rm(stemcell_file(stemcell_cid))
31
31
  end
32
32
 
33
- def blobstore
34
- @options['agent']['blobstore']
35
- end
36
-
37
- def nats_uri
38
- @options['nats']
39
- end
40
-
33
+ # rubocop:disable ParameterLists
41
34
  def create_vm(agent_id, stemcell, resource_pool, networks, disk_locality = nil, env = nil)
42
- agent_base_dir = "#{@options['dir']}/agent-base-dir-#{agent_id}"
43
-
44
- root_dir = File.join(agent_base_dir, 'root_dir')
35
+ # rubocop:enable ParameterLists
36
+ root_dir = File.join(agent_base_dir(agent_id), 'root_dir')
45
37
  FileUtils.mkdir_p(File.join(root_dir, 'etc', 'logrotate.d'))
46
38
 
47
- # FIXME: if there is a need to start this dummy cloud agent with alerts turned on
48
- # then port should be overriden for each agent, otherwise all but first won't start
49
- # (won't be able to bind to port)
50
- write_agent_settings(agent_base_dir, agent_id, nats_uri)
51
- agent_cmd = %W[bosh_agent -b #{agent_base_dir} -r #{root_dir} --no-alerts -I dummy]
52
- agent_log = "#{@options['dir']}/agent.#{agent_id}.log"
53
- agent_pid = Process.spawn(*agent_cmd, chdir: agent_base_dir, out: agent_log, err: agent_log)
39
+ write_agent_settings(agent_id, {
40
+ agent_id: agent_id,
41
+ blobstore: @options['agent']['blobstore'],
42
+ ntp: [],
43
+ disks: { persistent: {} },
44
+ vm: { name: "vm-#{agent_id}" },
45
+ mbus: @options['nats'],
46
+ })
54
47
 
48
+ agent_cmd = agent_cmd(agent_id, root_dir, :ruby)
49
+ agent_log = "#{@options['dir']}/agent.#{agent_id}.log"
50
+ agent_pid = Process.spawn(*agent_cmd, chdir: agent_base_dir(agent_id), out: agent_log, err: agent_log)
55
51
  Process.detach(agent_pid)
56
52
 
57
- FileUtils.mkdir_p(File.join(@base_dir, "running_vms"))
58
- FileUtils.touch(vm_file(agent_pid))
53
+ FileUtils.mkdir_p(File.join(@base_dir, 'running_vms'))
54
+ File.write(vm_file(agent_pid), agent_id)
59
55
 
60
56
  agent_pid.to_s
61
57
  end
62
58
 
63
- def write_agent_settings(agent_base_dir, agent_id, nats_uri)
64
- FileUtils.mkdir_p(File.join(agent_base_dir, 'bosh'))
65
- settings = {
66
- agent_id: agent_id,
67
- blobstore: @options['agent']['blobstore'],
68
- ntp: [],
69
- disks: {
70
- persistent: {},
71
- },
72
- vm: {
73
- name: "vm-#{agent_id}"
74
- },
75
- mbus: nats_uri,
76
- }
77
- File.write(File.join(agent_base_dir, 'bosh', 'settings.json'), JSON.generate(settings))
78
- end
79
-
80
59
  def delete_vm(vm_name)
81
60
  agent_pid = vm_name.to_i
82
- Process.kill("INT", agent_pid)
61
+ Process.kill('INT', agent_pid)
62
+ # rubocop:disable HandleExceptions
83
63
  rescue Errno::ESRCH
84
- # don't care :)
64
+ # rubocop:enable HandleExceptions
85
65
  ensure
86
- FileUtils.rm_rf(File.join(@base_dir, "running_vms", vm_name))
66
+ FileUtils.rm_rf(File.join(@base_dir, 'running_vms', vm_name))
87
67
  end
88
68
 
89
69
  def reboot_vm(vm)
90
- raise NotImplemented, "Dummy CPI does not implement reboot_vm"
70
+ raise NotImplemented, 'Dummy CPI does not implement reboot_vm'
91
71
  end
92
72
 
93
73
  def has_vm?(vm_id)
@@ -95,17 +75,27 @@ module Bosh
95
75
  end
96
76
 
97
77
  def configure_networks(vm, networks)
98
- raise NotImplemented, "Dummy CPI does not implement configure_networks"
78
+ raise NotImplemented, 'Dummy CPI does not implement configure_networks'
99
79
  end
100
80
 
101
81
  def attach_disk(vm_id, disk_id)
102
82
  file = attachment_file(vm_id, disk_id)
103
83
  FileUtils.mkdir_p(File.dirname(file))
104
84
  FileUtils.touch(file)
85
+
86
+ agent_id = agent_id_for_vm_id(vm_id)
87
+ settings = read_agent_settings(agent_id)
88
+ settings['disks']['persistent'][disk_id] = 'attached'
89
+ write_agent_settings(agent_id, settings)
105
90
  end
106
91
 
107
92
  def detach_disk(vm_id, disk_id)
108
93
  FileUtils.rm(attachment_file(vm_id, disk_id))
94
+
95
+ agent_id = agent_id_for_vm_id(vm_id)
96
+ settings = read_agent_settings(agent_id)
97
+ settings['disks']['persistent'].delete(disk_id)
98
+ write_agent_settings(agent_id, settings)
109
99
  end
110
100
 
111
101
  def create_disk(size, vm_locality = nil)
@@ -133,29 +123,58 @@ module Bosh
133
123
  end
134
124
 
135
125
  def validate_deployment(old_manifest, new_manifest)
136
- raise NotImplemented, "Dummy CPI does not implement validate_deployment"
126
+ raise NotImplemented, 'Dummy CPI does not implement validate_deployment'
137
127
  end
138
128
 
139
129
  private
140
130
 
131
+ def agent_id_for_vm_id(vm_id)
132
+ File.read(vm_file(vm_id))
133
+ end
134
+
135
+ def agent_settings_file(agent_id)
136
+ File.join(agent_base_dir(agent_id), 'bosh', 'settings.json')
137
+ end
138
+
139
+ def agent_base_dir(agent_id)
140
+ "#{@options['dir']}/agent-base-dir-#{agent_id}"
141
+ end
142
+
143
+ def write_agent_settings(agent_id, settings)
144
+ FileUtils.mkdir_p(File.dirname(agent_settings_file(agent_id)))
145
+ File.write(agent_settings_file(agent_id), JSON.generate(settings))
146
+ end
147
+
148
+ def agent_cmd(agent_id, root_dir, agent_type)
149
+ go_agent_exe = File.absolute_path('bosh/go_agent/out/bosh-agent')
150
+ {
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]
154
+ end
155
+
156
+ def read_agent_settings(agent_id)
157
+ JSON.parse(File.read(agent_settings_file(agent_id)))
158
+ end
159
+
141
160
  def stemcell_file(stemcell_id)
142
161
  File.join(@base_dir, "stemcell_#{stemcell_id}")
143
162
  end
144
163
 
145
164
  def vm_file(vm_id)
146
- File.join(@base_dir, "running_vms", vm_id.to_s)
165
+ File.join(@base_dir, 'running_vms', vm_id.to_s)
147
166
  end
148
167
 
149
168
  def disk_file(disk_id)
150
- File.join(@base_dir, "disks", disk_id)
169
+ File.join(@base_dir, 'disks', disk_id)
151
170
  end
152
171
 
153
172
  def attachment_file(vm_id, disk_id)
154
- File.join(@base_dir, "attachments", vm_id, disk_id)
173
+ File.join(@base_dir, 'attachments', vm_id, disk_id)
155
174
  end
156
175
 
157
176
  def snapshot_file(snapshot_id)
158
- File.join(@base_dir, "snapshots", snapshot_id)
177
+ File.join(@base_dir, 'snapshots', snapshot_id)
159
178
  end
160
179
  end
161
180
  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.1761.0
4
+ version: 1.1777.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-01-10 00:00:00.000000000 Z
12
+ date: 2014-01-15 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.1761.0
37
+ version: 1.1777.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.1761.0
45
+ version: 1.1777.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.1761.0
53
+ version: 1.1777.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.1761.0
61
+ version: 1.1777.0
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: bosh_common
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.1761.0
69
+ version: 1.1777.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.1761.0
77
+ version: 1.1777.0
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: bosh_cpi
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.1761.0
85
+ version: 1.1777.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.1761.0
93
+ version: 1.1777.0
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: bosh_openstack_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.1761.0
101
+ version: 1.1777.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.1761.0
109
+ version: 1.1777.0
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: bosh_aws_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.1761.0
117
+ version: 1.1777.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.1761.0
125
+ version: 1.1777.0
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: bosh_vsphere_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.1761.0
133
+ version: 1.1777.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.1761.0
141
+ version: 1.1777.0
142
142
  - !ruby/object:Gem::Dependency
143
143
  name: eventmachine
144
144
  requirement: !ruby/object:Gem::Requirement
@@ -461,7 +461,7 @@ dependencies:
461
461
  version: '1.0'
462
462
  description: ! 'BOSH Director
463
463
 
464
- 826c69'
464
+ 0308a9'
465
465
  email: support@cloudfoundry.com
466
466
  executables:
467
467
  - bosh-director
@@ -713,7 +713,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
713
713
  version: '0'
714
714
  segments:
715
715
  - 0
716
- hash: 857401901605478284
716
+ hash: -2902799239834298514
717
717
  requirements: []
718
718
  rubyforge_project:
719
719
  rubygems_version: 1.8.23