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.
- checksums.yaml +4 -4
- data/db/migrations/director/20150619135210_add_os_name_and_version_to_stemcells.rb +7 -0
- data/lib/bosh/director.rb +1 -0
- data/lib/bosh/director/agent_client.rb +19 -11
- data/lib/bosh/director/api.rb +3 -1
- data/lib/bosh/director/api/controllers/base_controller.rb +0 -1
- data/lib/bosh/director/api/controllers/cloud_configs_controller.rb +1 -1
- data/lib/bosh/director/api/controllers/deployments_controller.rb +4 -4
- data/lib/bosh/director/api/controllers/info_controller.rb +1 -1
- data/lib/bosh/director/api/controllers/locks_controller.rb +1 -1
- data/lib/bosh/director/api/controllers/releases_controller.rb +2 -2
- data/lib/bosh/director/api/controllers/stemcells_controller.rb +2 -1
- data/lib/bosh/director/api/controllers/tasks_controller.rb +3 -3
- data/lib/bosh/director/api/controllers/users_controller.rb +22 -5
- data/lib/bosh/director/api/director_uuid_provider.rb +15 -0
- data/lib/bosh/director/api/extensions/scoping.rb +21 -3
- data/lib/bosh/director/api/local_identity_provider.rb +10 -2
- data/lib/bosh/director/api/uaa_identity_provider.rb +9 -5
- data/lib/bosh/director/api/user/config_user_manager.rb +60 -0
- data/lib/bosh/director/api/{user_manager.rb → user/database_user_manager.rb} +7 -3
- data/lib/bosh/director/api/user/user_manager_provider.rb +13 -0
- data/lib/bosh/director/config.rb +1 -1
- data/lib/bosh/director/errors.rb +1 -0
- data/lib/bosh/director/jobs/update_stemcell.rb +2 -0
- data/lib/bosh/director/jobs/vm_state.rb +2 -2
- data/lib/bosh/director/version.rb +1 -1
- metadata +26 -22
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 314dd17fbbb059aaaae50d56efba07c3b0893445
|
|
4
|
+
data.tar.gz: 89dd10046a5b22f8e1424878c432cfc69f6d51da
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6477ca1a6659b9661203e54493c553fd1e4c61a18f28431b8ccb373273d136c8a967891f86437795bb94555af1d7c80eb9d7eb5faa9a5db52b1e9547c2c708fd
|
|
7
|
+
data.tar.gz: d492ee6cc46b18579cd1f0094e5b5f35e82b4a986badab2a5b5b7768011c3338c5c424cb60c849a179006087cea79b851dbf32d268f6840696a900870edbc246
|
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
|
-
|
|
13
|
-
|
|
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 =
|
|
32
|
+
credentials = vm.credentials
|
|
25
33
|
defaults.merge!(credentials: credentials) if credentials
|
|
26
34
|
|
|
27
|
-
self.new('agent',
|
|
35
|
+
self.new('agent', vm.agent_id, defaults.merge(options))
|
|
28
36
|
end
|
|
29
37
|
|
|
30
38
|
def initialize(service_name, client_id, options = {})
|
data/lib/bosh/director/api.rb
CHANGED
|
@@ -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/
|
|
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'
|
|
@@ -137,7 +137,7 @@ module Bosh::Director
|
|
|
137
137
|
redirect "/tasks/#{task.id}"
|
|
138
138
|
end
|
|
139
139
|
|
|
140
|
-
get '/', scope:
|
|
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:
|
|
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:
|
|
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:
|
|
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?)
|
|
@@ -21,7 +21,7 @@ module Bosh::Director
|
|
|
21
21
|
redirect "/tasks/#{task.id}"
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
get '/', scope:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
8
|
-
|
|
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
|
-
|
|
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
|
-
@
|
|
27
|
+
@identity_provider.update_user(user)
|
|
19
28
|
status(204)
|
|
20
29
|
nil
|
|
21
30
|
end
|
|
22
31
|
|
|
23
32
|
delete '/:username' do
|
|
24
|
-
|
|
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
|
|
@@ -13,9 +13,15 @@ module Bosh::Director
|
|
|
13
13
|
app.helpers(Helpers)
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
def scope(
|
|
16
|
+
def scope(allowed_scope)
|
|
17
17
|
condition do
|
|
18
|
-
|
|
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,
|
|
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
|
-
|
|
6
|
-
|
|
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,
|
|
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
|
-
@
|
|
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
|
|
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.#{@
|
|
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.#{@
|
|
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
|
|
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
|
-
|
|
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
|
data/lib/bosh/director/config.rb
CHANGED
|
@@ -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[
|
|
391
|
+
provider_class.new(user_management[provider_name] || {}, Bosh::Director::Api::DirectorUUIDProvider.new(Config))
|
|
392
392
|
end
|
|
393
393
|
end
|
|
394
394
|
|
data/lib/bosh/director/errors.rb
CHANGED
|
@@ -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.
|
|
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"]
|
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.
|
|
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-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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/
|
|
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
|