bosh-director 1.2992.0 → 1.2999.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.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/db/migrations/director/20150619135210_add_os_name_and_version_to_stemcells.rb +7 -0
  3. data/lib/bosh/director.rb +1 -0
  4. data/lib/bosh/director/agent_client.rb +19 -11
  5. data/lib/bosh/director/api.rb +3 -1
  6. data/lib/bosh/director/api/controllers/base_controller.rb +0 -1
  7. data/lib/bosh/director/api/controllers/cloud_configs_controller.rb +1 -1
  8. data/lib/bosh/director/api/controllers/deployments_controller.rb +4 -4
  9. data/lib/bosh/director/api/controllers/info_controller.rb +1 -1
  10. data/lib/bosh/director/api/controllers/locks_controller.rb +1 -1
  11. data/lib/bosh/director/api/controllers/releases_controller.rb +2 -2
  12. data/lib/bosh/director/api/controllers/stemcells_controller.rb +2 -1
  13. data/lib/bosh/director/api/controllers/tasks_controller.rb +3 -3
  14. data/lib/bosh/director/api/controllers/users_controller.rb +22 -5
  15. data/lib/bosh/director/api/director_uuid_provider.rb +15 -0
  16. data/lib/bosh/director/api/extensions/scoping.rb +21 -3
  17. data/lib/bosh/director/api/local_identity_provider.rb +10 -2
  18. data/lib/bosh/director/api/uaa_identity_provider.rb +9 -5
  19. data/lib/bosh/director/api/user/config_user_manager.rb +60 -0
  20. data/lib/bosh/director/api/{user_manager.rb → user/database_user_manager.rb} +7 -3
  21. data/lib/bosh/director/api/user/user_manager_provider.rb +13 -0
  22. data/lib/bosh/director/config.rb +1 -1
  23. data/lib/bosh/director/errors.rb +1 -0
  24. data/lib/bosh/director/jobs/update_stemcell.rb +2 -0
  25. data/lib/bosh/director/jobs/vm_state.rb +2 -2
  26. data/lib/bosh/director/version.rb +1 -1
  27. metadata +26 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 77b59d978580198275ba946df8f880fcaa6e28b0
4
- data.tar.gz: 51860050f654ff925193f6a37034a900cd58eb61
3
+ metadata.gz: 314dd17fbbb059aaaae50d56efba07c3b0893445
4
+ data.tar.gz: 89dd10046a5b22f8e1424878c432cfc69f6d51da
5
5
  SHA512:
6
- metadata.gz: e02624596050a9fc81ecb3dcbbf35f908b20446556967b564211d5f1cdebd0ca7d98372fdd0a1ea04d38a5b074e0adad8cdaebacffb218dfd0ec622c934b7b35
7
- data.tar.gz: bc13e1aeb80ea0f6cf1e3d4212891a8db9990c8618a65bcf2267c46eba5fb3a614a367a14bcd2818f5b0aa52bb5a46225466cbec39d617d8aefd796e79e64fb8
6
+ metadata.gz: 6477ca1a6659b9661203e54493c553fd1e4c61a18f28431b8ccb373273d136c8a967891f86437795bb94555af1d7c80eb9d7eb5faa9a5db52b1e9547c2c708fd
7
+ data.tar.gz: d492ee6cc46b18579cd1f0094e5b5f35e82b4a986badab2a5b5b7768011c3338c5c424cb60c849a179006087cea79b851dbf32d268f6840696a900870edbc246
@@ -0,0 +1,7 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:stemcells) do
4
+ add_column :operating_system, String
5
+ end
6
+ end
7
+ end
data/lib/bosh/director.rb CHANGED
@@ -127,6 +127,7 @@ require 'bosh/director/models/helpers/model_helper'
127
127
 
128
128
  require 'bosh/director/db_backup'
129
129
  require 'bosh/director/blobstores'
130
+ require 'bosh/director/api/director_uuid_provider'
130
131
  require 'bosh/director/api/local_identity_provider'
131
132
  require 'bosh/director/api/uaa_identity_provider'
132
133
  require 'bosh/director/app'
@@ -4,27 +4,35 @@ module Bosh::Director
4
4
  class AgentClient
5
5
  DEFAULT_POLL_INTERVAL = 1.0
6
6
 
7
+ # in case of timeout errors
8
+ GET_TASK_MAX_RETRIES = 2
9
+
10
+ # get_task should retry at least once because some long running tasks
11
+ # (e.g. configure_networks) will restart the agent (current implementation)
12
+ # which most likely will result in first get_task message being lost
13
+ # because agent was not listening on NATS and second retry message
14
+ # will probably be received because agent came back up.
15
+ GET_STATE_MAX_RETRIES = 2
16
+
7
17
  attr_accessor :id
8
18
 
9
19
  def self.with_defaults(id, options = {})
20
+ vm = Bosh::Director::Models::Vm.find(:agent_id => id)
21
+ with_vm(vm, options)
22
+ end
23
+
24
+ def self.with_vm(vm, options = {})
10
25
  defaults = {
11
26
  retry_methods: {
12
- # in case of timeout errors
13
- get_state: 2,
14
-
15
- # get_task should retry at least once because some long running tasks
16
- # (e.g. configure_networks) will restart the agent (current implementation)
17
- # which most likely will result in first get_task message being lost
18
- # because agent was not listening on NATS and second retry message
19
- # will probably be received because agent came back up.
20
- get_task: 2,
27
+ get_state: GET_STATE_MAX_RETRIES,
28
+ get_task: GET_TASK_MAX_RETRIES,
21
29
  }
22
30
  }
23
31
 
24
- credentials = Bosh::Director::Models::Vm.find(:agent_id => id).credentials
32
+ credentials = vm.credentials
25
33
  defaults.merge!(credentials: credentials) if credentials
26
34
 
27
- self.new('agent', id, defaults.merge(options))
35
+ self.new('agent', vm.agent_id, defaults.merge(options))
28
36
  end
29
37
 
30
38
  def initialize(service_name, client_id, options = {})
@@ -21,7 +21,9 @@ require 'bosh/director/api/snapshot_manager'
21
21
  require 'bosh/director/api/stemcell_manager'
22
22
  require 'bosh/director/api/compiled_package_group_manager'
23
23
  require 'bosh/director/api/task_manager'
24
- require 'bosh/director/api/user_manager'
24
+ require 'bosh/director/api/user/config_user_manager'
25
+ require 'bosh/director/api/user/database_user_manager'
26
+ require 'bosh/director/api/user/user_manager_provider'
25
27
  require 'bosh/director/api/vm_state_manager'
26
28
  require 'bosh/director/api/backup_manager'
27
29
  require 'bosh/director/api/resurrector_manager'
@@ -20,7 +20,6 @@ module Bosh::Director
20
20
  @snapshot_manager = SnapshotManager.new
21
21
  @stemcell_manager = StemcellManager.new
22
22
  @task_manager = TaskManager.new
23
- @user_manager = UserManager.new
24
23
  @vm_state_manager = VmStateManager.new
25
24
  @logger = Config.logger
26
25
  end
@@ -10,7 +10,7 @@ module Bosh::Director
10
10
  status(201)
11
11
  end
12
12
 
13
- get '/', scope: [:read] do
13
+ get '/', scope: :read do
14
14
  if params['limit'].nil? || params['limit'].empty?
15
15
  status(400)
16
16
  body("limit is required")
@@ -137,7 +137,7 @@ module Bosh::Director
137
137
  redirect "/tasks/#{task.id}"
138
138
  end
139
139
 
140
- get '/', scope: [:read] do
140
+ get '/', scope: :read do
141
141
  latest_cloud_config = Api::CloudConfigManager.new.latest
142
142
  deployments = Models::Deployment.order_by(:name.asc).map do |deployment|
143
143
  cloud_config = if deployment.cloud_config.nil?
@@ -169,12 +169,12 @@ module Bosh::Director
169
169
  json_encode(deployments)
170
170
  end
171
171
 
172
- get '/:name', scope: [:read] do
172
+ get '/:name', scope: :read do
173
173
  deployment = @deployment_manager.find_by_name(params[:name])
174
174
  @deployment_manager.deployment_to_json(deployment)
175
175
  end
176
176
 
177
- get '/:name/vms', scope: [:read] do
177
+ get '/:name/vms', scope: :read do
178
178
  deployment = @deployment_manager.find_by_name(params[:name])
179
179
 
180
180
  format = params[:format]
@@ -290,7 +290,7 @@ module Bosh::Director
290
290
  redirect "/tasks/#{task.id}"
291
291
  end
292
292
 
293
- get '/:deployment_name/errands', scope: [:read] do
293
+ get '/:deployment_name/errands', scope: :read do
294
294
  deployment_plan = load_deployment_plan_without_binding
295
295
 
296
296
  errands = deployment_plan.jobs.select(&:can_run_as_errand?)
@@ -7,7 +7,7 @@ module Bosh::Director
7
7
  false
8
8
  end
9
9
 
10
- get '/', scope: [:read] do
10
+ get '/', scope: :read do
11
11
  status = {
12
12
  'name' => Config.name,
13
13
  'uuid' => Config.uuid,
@@ -1,7 +1,7 @@
1
1
  module Bosh::Director
2
2
  module Api::Controllers
3
3
  class LocksController < BaseController
4
- get '/', scope: [:read] do
4
+ get '/', scope: :read do
5
5
  redis = Config.redis
6
6
 
7
7
  locks = []
@@ -21,7 +21,7 @@ module Bosh::Director
21
21
  redirect "/tasks/#{task.id}"
22
22
  end
23
23
 
24
- get '/', scope: [:read] do
24
+ get '/', scope: :read do
25
25
  releases = Models::Release.order_by(:name.asc).map do |release|
26
26
  release_versions = release.versions_dataset.order_by(:version.asc).map do |rv|
27
27
  {
@@ -42,7 +42,7 @@ module Bosh::Director
42
42
  json_encode(releases)
43
43
  end
44
44
 
45
- get '/:name', scope: [:read] do
45
+ get '/:name', scope: :read do
46
46
  name = params[:name].to_s.strip
47
47
  release = @release_manager.find_by_name(name)
48
48
 
@@ -14,10 +14,11 @@ module Bosh::Director
14
14
  redirect "/tasks/#{task.id}"
15
15
  end
16
16
 
17
- get '/', scope: [:read] do
17
+ get '/', scope: :read do
18
18
  stemcells = Models::Stemcell.order_by(:name.asc).map do |stemcell|
19
19
  {
20
20
  'name' => stemcell.name,
21
+ 'operating_system' => stemcell.operating_system,
21
22
  'version' => stemcell.version,
22
23
  'cid' => stemcell.cid,
23
24
  'deployments' => stemcell.deployments.map { |d| { name: d.name } }
@@ -3,7 +3,7 @@ require 'bosh/director/api/controllers/base_controller'
3
3
  module Bosh::Director
4
4
  module Api::Controllers
5
5
  class TasksController < BaseController
6
- get '/' do
6
+ get '/', scope: :read do
7
7
  dataset = Models::Task.dataset
8
8
 
9
9
  if limit = params['limit']
@@ -45,7 +45,7 @@ module Bosh::Director
45
45
  json_encode(tasks)
46
46
  end
47
47
 
48
- get '/:id' do
48
+ get '/:id', scope: :read do
49
49
  task = @task_manager.find_task(params[:id])
50
50
  if task_timeout?(task)
51
51
  task.state = :timeout
@@ -59,7 +59,7 @@ module Bosh::Director
59
59
  # Sends back output of given task id and params[:type]
60
60
  # Example: `get /tasks/5/output?type=event` will send back the file
61
61
  # at /var/vcap/store/director/tasks/5/event
62
- get '/:id/output' do
62
+ get '/:id/output', scope: Api::Extensions::Scoping::ParamsScope.new(:type, {event: :read}) do
63
63
  log_type = params[:type] || 'debug'
64
64
  task = @task_manager.find_task(params[:id])
65
65
 
@@ -3,28 +3,45 @@ require 'bosh/director/api/controllers/base_controller'
3
3
  module Bosh::Director
4
4
  module Api::Controllers
5
5
  class UsersController < BaseController
6
+ def initialize(config)
7
+ super(config)
8
+ @identity_provider = config.identity_provider
9
+ end
10
+
6
11
  post '/', :consumes => [:json] do
7
- user = @user_manager.get_user_from_request(request)
8
- @user_manager.create_user(user)
12
+ validate_user_management_support
13
+
14
+ user = @identity_provider.get_user_from_request(request)
15
+ @identity_provider.create_user(user)
9
16
  status(204)
10
17
  nil
11
18
  end
12
19
 
13
20
  put '/:username', :consumes => [:json] do
14
- user = @user_manager.get_user_from_request(request)
21
+ validate_user_management_support
22
+
23
+ user = @identity_provider.get_user_from_request(request)
15
24
  if user.username != params[:username]
16
25
  raise UserImmutableUsername, 'The username is immutable'
17
26
  end
18
- @user_manager.update_user(user)
27
+ @identity_provider.update_user(user)
19
28
  status(204)
20
29
  nil
21
30
  end
22
31
 
23
32
  delete '/:username' do
24
- @user_manager.delete_user(params[:username])
33
+ validate_user_management_support
34
+
35
+ @identity_provider.delete_user(params[:username])
25
36
  status(204)
26
37
  nil
27
38
  end
39
+
40
+ def validate_user_management_support
41
+ unless @identity_provider.supports_api_update?
42
+ raise UserManagementNotSupported, 'User management is not supported via API'
43
+ end
44
+ end
28
45
  end
29
46
  end
30
47
  end
@@ -0,0 +1,15 @@
1
+ module Bosh
2
+ module Director
3
+ module Api
4
+ class DirectorUUIDProvider
5
+ def initialize(config)
6
+ @config = config
7
+ end
8
+
9
+ def uuid
10
+ @config.uuid
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -13,9 +13,15 @@ module Bosh::Director
13
13
  app.helpers(Helpers)
14
14
  end
15
15
 
16
- def scope(*roles)
16
+ def scope(allowed_scope)
17
17
  condition do
18
- roles = [settings.default_scope] if roles == [:default]
18
+ if allowed_scope == :default
19
+ scope = settings.default_scope
20
+ elsif allowed_scope.kind_of?(ParamsScope)
21
+ scope = allowed_scope.scope(params, settings.default_scope)
22
+ else
23
+ scope = allowed_scope
24
+ end
19
25
 
20
26
  auth_provided = %w(HTTP_AUTHORIZATION X-HTTP_AUTHORIZATION X_HTTP_AUTHORIZATION).detect do |key|
21
27
  request.env.has_key?(key)
@@ -23,7 +29,7 @@ module Bosh::Director
23
29
 
24
30
  if auth_provided
25
31
  begin
26
- @user = identity_provider.corroborate_user(request.env, roles)
32
+ @user = identity_provider.corroborate_user(request.env, scope)
27
33
  rescue AuthenticationError
28
34
  end
29
35
  end
@@ -39,6 +45,18 @@ module Bosh::Director
39
45
  options[:scope] ||= :default
40
46
  super(verb, path, options, &block)
41
47
  end
48
+
49
+ class ParamsScope
50
+ def initialize(name, scope)
51
+ @name = name.to_s
52
+ @scope = scope
53
+ end
54
+
55
+ def scope(params, default_scope)
56
+ scope_name = params.fetch(@name, :default).to_sym
57
+ @scope.fetch(scope_name, default_scope)
58
+ end
59
+ end
42
60
  end
43
61
  end
44
62
  end
@@ -1,11 +1,19 @@
1
+ require 'forwardable'
2
+
1
3
  module Bosh
2
4
  module Director
3
5
  module Api
4
6
  class LocalIdentityProvider
5
- def initialize(*_)
6
- @user_manager = Bosh::Director::Api::UserManager.new
7
+ extend Forwardable
8
+
9
+ def initialize(options, _)
10
+ users = options.fetch('users', [])
11
+ @user_manager = Bosh::Director::Api::UserManagerProvider.new.user_manager(users)
7
12
  end
8
13
 
14
+ # User management is supported for backwards compatibility
15
+ def_delegators :@user_manager, :supports_api_update?, :create_user, :update_user, :delete_user, :get_user_from_request
16
+
9
17
  def client_info
10
18
  {'type' => 'basic', 'options' => {}}
11
19
  end
@@ -4,13 +4,17 @@ module Bosh
4
4
  module Director
5
5
  module Api
6
6
  class UAAIdentityProvider
7
- def initialize(options, director_uuid)
7
+ def initialize(options, director_uuid_provider)
8
8
  @url = options.fetch('url')
9
9
  Config.logger.debug "Initializing UAA Identity provider with url #{@url}"
10
- @director_uuid = director_uuid
10
+ @director_uuid_provider = director_uuid_provider
11
11
  @token_coder = CF::UAA::TokenCoder.new(skey: options.fetch('symmetric_key', nil), pkey: options.fetch('public_key', nil), scope: [])
12
12
  end
13
13
 
14
+ def supports_api_update?
15
+ false
16
+ end
17
+
14
18
  def client_info
15
19
  {
16
20
  'type' => 'uaa',
@@ -38,7 +42,7 @@ module Bosh
38
42
  return
39
43
  end
40
44
 
41
- if requested_access.include?(:read) && token_has_read_scope?(token['scope'])
45
+ if requested_access == :read && token_has_read_scope?(token['scope'])
42
46
  return
43
47
  end
44
48
  end
@@ -47,11 +51,11 @@ module Bosh
47
51
  end
48
52
 
49
53
  def token_has_read_scope?(token_scope)
50
- token_scope.include?('bosh.read') || token_scope.include?("bosh.#{@director_uuid}.read")
54
+ token_scope.include?('bosh.read') || token_scope.include?("bosh.#{@director_uuid_provider.uuid}.read")
51
55
  end
52
56
 
53
57
  def token_has_admin_scope?(token_scope)
54
- token_scope.include?('bosh.admin') || token_scope.include?("bosh.#{@director_uuid}.admin")
58
+ token_scope.include?('bosh.admin') || token_scope.include?("bosh.#{@director_uuid_provider.uuid}.admin")
55
59
  end
56
60
  end
57
61
  end
@@ -0,0 +1,60 @@
1
+ # Copyright (c) 2009-2012 VMware, Inc.
2
+
3
+ module Bosh::Director
4
+ module Api
5
+ class ConfigUserManager
6
+ def initialize(users)
7
+ @users = users
8
+ end
9
+
10
+ def supports_api_update?
11
+ false
12
+ end
13
+
14
+ # @param [String] name User name
15
+ def find_by_name(name)
16
+ user = @users.find { |u| u['name'] == name }
17
+ if user.nil?
18
+ raise UserNotFound, "User `#{name}' doesn't exist"
19
+ end
20
+ User.new(user)
21
+ end
22
+
23
+ def authenticate(username, password)
24
+ return false if username.empty? || password.empty?
25
+
26
+ user = find_by_name(username)
27
+ user.password == password
28
+ rescue UserNotFound
29
+ false
30
+ end
31
+
32
+ def delete_user(_)
33
+ raise NotSupported
34
+ end
35
+
36
+ def create_user(_)
37
+ raise NotSupported
38
+ end
39
+
40
+ def update_user(_)
41
+ raise NotSupported
42
+ end
43
+
44
+ def get_user_from_request(_)
45
+ raise NotSupported
46
+ end
47
+ end
48
+
49
+ private
50
+
51
+ class User
52
+ attr_reader :username, :password
53
+
54
+ def initialize(options)
55
+ @username = options.fetch('name')
56
+ @password = options.fetch('password')
57
+ end
58
+ end
59
+ end
60
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Bosh::Director
4
4
  module Api
5
- class UserManager
5
+ class DatabaseUserManager
6
6
 
7
7
  # @param [String] name User name
8
8
  # @return [Models::User] User
@@ -14,6 +14,10 @@ module Bosh::Director
14
14
  user
15
15
  end
16
16
 
17
+ def supports_api_update?
18
+ true
19
+ end
20
+
17
21
  def authenticate(username, password)
18
22
  # This is a dev-mode shortcut
19
23
  if Models::User.count == 0
@@ -50,7 +54,7 @@ module Bosh::Director
50
54
  def get_user_from_request(request)
51
55
  hash = Yajl::Parser.new.parse(request.body)
52
56
  Models::User.new(:username => hash["username"],
53
- :password => hash["password"])
57
+ :password => hash["password"])
54
58
  end
55
59
 
56
60
  private
@@ -69,4 +73,4 @@ module Bosh::Director
69
73
  end
70
74
  end
71
75
  end
72
- end
76
+ end
@@ -0,0 +1,13 @@
1
+ module Bosh::Director
2
+ module Api
3
+ class UserManagerProvider
4
+ def user_manager(config_users)
5
+ if config_users.nil? || config_users.empty?
6
+ DatabaseUserManager.new
7
+ else
8
+ ConfigUserManager.new(config_users)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -388,7 +388,7 @@ module Bosh::Director
388
388
  end
389
389
 
390
390
  Config.logger.debug("Director configured with '#{provider_name}' user management provider")
391
- provider_class.new(user_management['options'] || {}, @uuid)
391
+ provider_class.new(user_management[provider_name] || {}, Bosh::Director::Api::DirectorUUIDProvider.new(Config))
392
392
  end
393
393
  end
394
394
 
@@ -60,6 +60,7 @@ module Bosh::Director
60
60
  UserImmutableUsername = err(20001)
61
61
  UserInvalid = err(20002)
62
62
  UserNameTaken = err(20003)
63
+ UserManagementNotSupported = err(20004)
63
64
 
64
65
  ReleaseAlreadyExists = err(30000)
65
66
  ReleaseExistingPackageHashMismatch = err(30001)
@@ -54,6 +54,7 @@ module Bosh::Director
54
54
  stemcell_manifest = Psych.load_file(stemcell_manifest_file)
55
55
 
56
56
  @name = safe_property(stemcell_manifest, "name", :class => String)
57
+ @operating_system = safe_property(stemcell_manifest, "operating_system", :class => String, :optional => true)
57
58
  @version = safe_property(stemcell_manifest, "version", :class => String)
58
59
  @cloud_properties = safe_property(stemcell_manifest, "cloud_properties", :class => Hash, :optional => true)
59
60
  @sha1 = safe_property(stemcell_manifest, "sha1", :class => String)
@@ -77,6 +78,7 @@ module Bosh::Director
77
78
 
78
79
  stemcell = Models::Stemcell.new
79
80
  stemcell.name = @name
81
+ stemcell.operating_system = @operating_system
80
82
  stemcell.version = @version
81
83
  stemcell.sha1 = @sha1
82
84
 
@@ -19,7 +19,7 @@ module Bosh::Director
19
19
 
20
20
  def perform
21
21
  @domain = Models::Dns::Domain.find(name: Config.dns_domain_name, type: "NATIVE") if Config.dns_enabled?
22
-
22
+
23
23
  vms = Models::Vm.filter(:deployment_id => @deployment_id)
24
24
  ThreadPool.new(:max_threads => Config.max_threads).wrap do |pool|
25
25
  vms.each do |vm|
@@ -44,7 +44,7 @@ module Bosh::Director
44
44
  job_index = nil
45
45
 
46
46
  begin
47
- agent = AgentClient.with_defaults(vm.agent_id, :timeout => TIMEOUT)
47
+ agent = AgentClient.with_vm(vm, :timeout => TIMEOUT)
48
48
  agent_state = agent.get_state(@format)
49
49
  agent_state["networks"].each_value do |network|
50
50
  ips << network["ip"]
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Director
3
- VERSION = '1.2992.0'
3
+ VERSION = '1.2999.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-director
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2992.0
4
+ version: 1.2999.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-06-18 00:00:00.000000000 Z
11
+ date: 2015-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bcrypt-ruby
@@ -30,126 +30,126 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.2992.0
33
+ version: 1.2999.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.2992.0
40
+ version: 1.2999.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bosh-core
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.2992.0
47
+ version: 1.2999.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.2992.0
54
+ version: 1.2999.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bosh-director-core
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.2992.0
61
+ version: 1.2999.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.2992.0
68
+ version: 1.2999.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bosh_common
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.2992.0
75
+ version: 1.2999.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 1.2992.0
82
+ version: 1.2999.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bosh-template
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.2992.0
89
+ version: 1.2999.0
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.2992.0
96
+ version: 1.2999.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: bosh_cpi
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 1.2992.0
103
+ version: 1.2999.0
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 1.2992.0
110
+ version: 1.2999.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: bosh_openstack_cpi
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 1.2992.0
117
+ version: 1.2999.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 1.2992.0
124
+ version: 1.2999.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: bosh_aws_cpi
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 1.2992.0
131
+ version: 1.2999.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.2992.0
138
+ version: 1.2999.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: bosh_vsphere_cpi
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 1.2992.0
145
+ version: 1.2999.0
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 1.2992.0
152
+ version: 1.2999.0
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: bosh_vcloud_cpi
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -572,7 +572,7 @@ dependencies:
572
572
  version: '0'
573
573
  description: |-
574
574
  BOSH Director
575
- 2996bb
575
+ 321dd5
576
576
  email: support@cloudfoundry.com
577
577
  executables:
578
578
  - bosh-director
@@ -628,6 +628,7 @@ files:
628
628
  - db/migrations/director/20150331002413_add_cloud_configs.rb
629
629
  - db/migrations/director/20150401184803_add_cloud_config_to_deployments.rb
630
630
  - db/migrations/director/20150611193110_add_trusted_certs_sha1_to_vms.rb
631
+ - db/migrations/director/20150619135210_add_os_name_and_version_to_stemcells.rb
631
632
  - db/migrations/dns/20120123234908_initial.rb
632
633
  - lib/bosh/director.rb
633
634
  - lib/bosh/director/agent_client.rb
@@ -654,6 +655,7 @@ files:
654
655
  - lib/bosh/director/api/controllers/users_controller.rb
655
656
  - lib/bosh/director/api/deployment_lookup.rb
656
657
  - lib/bosh/director/api/deployment_manager.rb
658
+ - lib/bosh/director/api/director_uuid_provider.rb
657
659
  - lib/bosh/director/api/extensions/scoping.rb
658
660
  - lib/bosh/director/api/http_constants.rb
659
661
  - lib/bosh/director/api/instance_lookup.rb
@@ -671,7 +673,9 @@ files:
671
673
  - lib/bosh/director/api/task_manager.rb
672
674
  - lib/bosh/director/api/task_remover.rb
673
675
  - lib/bosh/director/api/uaa_identity_provider.rb
674
- - lib/bosh/director/api/user_manager.rb
676
+ - lib/bosh/director/api/user/config_user_manager.rb
677
+ - lib/bosh/director/api/user/database_user_manager.rb
678
+ - lib/bosh/director/api/user/user_manager_provider.rb
675
679
  - lib/bosh/director/api/vm_state_manager.rb
676
680
  - lib/bosh/director/app.rb
677
681
  - lib/bosh/director/blob_util.rb