bosh-director 1.3232.24.0 → 1.3262.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/db/migrations/director/20160414183654_set_teams_on_task.rb +7 -0
- data/db/migrations/director/20160427164345_add_teams.rb +48 -0
- data/db/migrations/director/20160511191928_ephemeral_blobs.rb +10 -0
- data/db/migrations/director/20160513102035_add_tracking_to_instance.rb +7 -0
- data/db/migrations/director/20160531164756_add_local_dns_blobs.rb +14 -0
- data/lib/bosh/director.rb +5 -1
- data/lib/bosh/director/api.rb +1 -0
- data/lib/bosh/director/api/api_helper.rb +2 -2
- data/lib/bosh/director/api/controllers/cleanup_controller.rb +1 -1
- data/lib/bosh/director/api/controllers/deployments_controller.rb +39 -25
- data/lib/bosh/director/api/controllers/disks_controller.rb +2 -1
- data/lib/bosh/director/api/controllers/events_controller.rb +34 -0
- data/lib/bosh/director/api/controllers/releases_controller.rb +1 -1
- data/lib/bosh/director/api/controllers/resurrection_controller.rb +1 -1
- data/lib/bosh/director/api/controllers/stemcells_controller.rb +1 -1
- data/lib/bosh/director/api/controllers/tasks_controller.rb +31 -46
- data/lib/bosh/director/api/controllers/users_controller.rb +2 -2
- data/lib/bosh/director/api/controllers/vms_controller.rb +18 -0
- data/lib/bosh/director/api/deployment_manager.rb +3 -3
- data/lib/bosh/director/api/instance_ignore_manager.rb +11 -0
- data/lib/bosh/director/api/instance_manager.rb +3 -3
- data/lib/bosh/director/api/local_identity_provider.rb +1 -1
- data/lib/bosh/director/api/problem_manager.rb +3 -3
- data/lib/bosh/director/api/release_manager.rb +9 -4
- data/lib/bosh/director/api/resurrector_manager.rb +13 -1
- data/lib/bosh/director/api/route_configuration.rb +1 -0
- data/lib/bosh/director/api/snapshot_manager.rb +2 -2
- data/lib/bosh/director/api/stemcell_manager.rb +29 -9
- data/lib/bosh/director/api/task_helper.rb +4 -3
- data/lib/bosh/director/api/uaa_identity_provider.rb +9 -3
- data/lib/bosh/director/api/user/config_user_manager.rb +1 -1
- data/lib/bosh/director/api/user/database_user_manager.rb +2 -2
- data/lib/bosh/director/cidr_range_combiner.rb +51 -0
- data/lib/bosh/director/cloudcheck_helper.rb +17 -6
- data/lib/bosh/director/config.rb +27 -1
- data/lib/bosh/director/db_backup/adapter/postgres.rb +0 -1
- data/lib/bosh/director/deployment_plan.rb +1 -1
- data/lib/bosh/director/deployment_plan/assembler.rb +8 -5
- data/lib/bosh/director/deployment_plan/deployment_repo.rb +10 -3
- data/lib/bosh/director/deployment_plan/deployment_spec_parser.rb +17 -6
- data/lib/bosh/director/deployment_plan/global_network_resolver.rb +44 -23
- data/lib/bosh/director/deployment_plan/instance.rb +2 -2
- data/lib/bosh/director/deployment_plan/{job.rb → instance_group.rb} +5 -5
- data/lib/bosh/director/deployment_plan/{job_spec_parser.rb → instance_group_spec_parser.rb} +17 -15
- data/lib/bosh/director/deployment_plan/instance_plan.rb +14 -10
- data/lib/bosh/director/deployment_plan/instance_planner.rb +22 -0
- data/lib/bosh/director/deployment_plan/job_migrator.rb +2 -2
- data/lib/bosh/director/deployment_plan/links/link_lookup.rb +3 -3
- data/lib/bosh/director/deployment_plan/links/link_path.rb +2 -2
- data/lib/bosh/director/deployment_plan/links/links_resolver.rb +1 -1
- data/lib/bosh/director/deployment_plan/manual_network.rb +1 -1
- data/lib/bosh/director/deployment_plan/manual_network_subnet.rb +1 -1
- data/lib/bosh/director/deployment_plan/placement_planner/availability_zone_picker.rb +53 -1
- data/lib/bosh/director/deployment_plan/placement_planner/static_ips_availability_zone_picker.rb +39 -1
- data/lib/bosh/director/deployment_plan/placement_planner/unplaced_existing_instances.rb +4 -0
- data/lib/bosh/director/deployment_plan/planner.rb +37 -31
- data/lib/bosh/director/deployment_plan/planner_factory.rb +26 -11
- data/lib/bosh/director/deployment_plan/runtime_manifest_parser.rb +15 -6
- data/lib/bosh/director/deployment_plan/steps/update_step.rb +1 -1
- data/lib/bosh/director/deployment_plan/template.rb +14 -1
- data/lib/bosh/director/dns/blobstore_dns_publisher.rb +35 -0
- data/lib/bosh/director/dns/dns_manager.rb +37 -74
- data/lib/bosh/director/errand/job_manager.rb +1 -1
- data/lib/bosh/director/error_ignorer.rb +1 -2
- data/lib/bosh/director/errors.rb +4 -0
- data/lib/bosh/director/event_log.rb +10 -2
- data/lib/bosh/director/instance_deleter.rb +11 -2
- data/lib/bosh/director/instance_updater.rb +21 -25
- data/lib/bosh/director/instance_updater/instance_state.rb +24 -2
- data/lib/bosh/director/instance_updater/state_applier.rb +4 -4
- data/lib/bosh/director/job_queue.rb +2 -2
- data/lib/bosh/director/job_updater.rb +3 -1
- data/lib/bosh/director/jobs/attach_disk.rb +7 -2
- data/lib/bosh/director/jobs/cleanup_artifacts.rb +15 -5
- data/lib/bosh/director/jobs/cloud_check/apply_resolutions.rb +2 -0
- data/lib/bosh/director/jobs/cloud_check/scan_and_fix.rb +5 -5
- data/lib/bosh/director/jobs/db_job.rb +10 -13
- data/lib/bosh/director/jobs/delete_deployment.rb +13 -1
- data/lib/bosh/director/jobs/delete_vm.rb +58 -0
- data/lib/bosh/director/jobs/export_release.rb +11 -4
- data/lib/bosh/director/jobs/helpers.rb +2 -0
- data/lib/bosh/director/jobs/helpers/config_parser.rb +66 -0
- data/lib/bosh/director/jobs/helpers/deep_hash_replacement.rb +38 -0
- data/lib/bosh/director/jobs/run_errand.rb +1 -1
- data/lib/bosh/director/jobs/ssh.rb +3 -2
- data/lib/bosh/director/jobs/update_deployment.rb +73 -14
- data/lib/bosh/director/jobs/update_release.rb +3 -1
- data/lib/bosh/director/jobs/update_stemcell.rb +1 -0
- data/lib/bosh/director/jobs/vm_state.rb +4 -3
- data/lib/bosh/director/legacy_deployment_helper.rb +7 -0
- data/lib/bosh/director/manifest/diff_lines.rb +4 -0
- data/lib/bosh/director/manifest/manifest.rb +18 -6
- data/lib/bosh/director/models.rb +3 -0
- data/lib/bosh/director/models/deployment.rb +17 -8
- data/lib/bosh/director/models/deployment_problem.rb +2 -2
- data/lib/bosh/director/models/ephemeral_blob.rb +11 -0
- data/lib/bosh/director/models/event.rb +2 -2
- data/lib/bosh/director/models/instance.rb +35 -5
- data/lib/bosh/director/models/local_dns_blob.rb +4 -0
- data/lib/bosh/director/models/orphan_disk.rb +2 -2
- data/lib/bosh/director/models/package.rb +2 -2
- data/lib/bosh/director/models/persistent_disk.rb +2 -2
- data/lib/bosh/director/models/task.rb +15 -0
- data/lib/bosh/director/models/team.rb +35 -0
- data/lib/bosh/director/models/template.rb +6 -2
- data/lib/bosh/director/nats_rpc.rb +3 -3
- data/lib/bosh/director/permission_authorizer.rb +14 -4
- data/lib/bosh/director/post_deployment_script_runner.rb +5 -4
- data/lib/bosh/director/problem_handlers/missing_vm.rb +7 -2
- data/lib/bosh/director/problem_handlers/unresponsive_agent.rb +11 -1
- data/lib/bosh/director/problem_resolver.rb +1 -1
- data/lib/bosh/director/problem_scanner/disk_scan_stage.rb +1 -1
- data/lib/bosh/director/problem_scanner/vm_scan_stage.rb +5 -1
- data/lib/bosh/director/version.rb +1 -1
- data/lib/bosh/director/vm_deleter.rb +8 -7
- data/lib/bosh/director/worker.rb +1 -0
- metadata +36 -34
@@ -4,7 +4,7 @@ module Bosh::Director
|
|
4
4
|
module Api::Controllers
|
5
5
|
class ReleasesController < BaseController
|
6
6
|
post '/', :consumes => :json do
|
7
|
-
payload = json_decode(request.body)
|
7
|
+
payload = json_decode(request.body.read)
|
8
8
|
options = {
|
9
9
|
rebase: params['rebase'] == 'true',
|
10
10
|
fix: params['fix'] == 'true',
|
@@ -4,7 +4,7 @@ module Bosh::Director
|
|
4
4
|
module Api::Controllers
|
5
5
|
class ResurrectionController < BaseController
|
6
6
|
put '/', consumes: :json do
|
7
|
-
payload = json_decode(request.body)
|
7
|
+
payload = json_decode(request.body.read)
|
8
8
|
|
9
9
|
@resurrector_manager.set_pause_for_all(payload['resurrection_paused'])
|
10
10
|
status(200)
|
@@ -4,7 +4,7 @@ module Bosh::Director
|
|
4
4
|
module Api::Controllers
|
5
5
|
class StemcellsController < BaseController
|
6
6
|
post '/', :consumes => :json do
|
7
|
-
payload = json_decode(request.body)
|
7
|
+
payload = json_decode(request.body.read)
|
8
8
|
options = {
|
9
9
|
fix: params['fix'] == 'true',
|
10
10
|
sha1: payload['sha1']
|
@@ -16,9 +16,9 @@ module Bosh::Director
|
|
16
16
|
type = params[:type]
|
17
17
|
task = @task_manager.find_task(params[:id])
|
18
18
|
if type == 'debug' || type == 'cpi' || !type
|
19
|
-
|
19
|
+
@permission_authorizer.granted_or_raise(task, :admin, token_scopes)
|
20
20
|
elsif type == 'event' || type == 'result' || type == 'none'
|
21
|
-
|
21
|
+
@permission_authorizer.granted_or_raise(task, :read, token_scopes)
|
22
22
|
else
|
23
23
|
raise UnauthorizedToAccessDeployment, "Unknown type #{type}"
|
24
24
|
end
|
@@ -28,12 +28,6 @@ module Bosh::Director
|
|
28
28
|
get '/', scope: :list_tasks do
|
29
29
|
dataset = Models::Task.dataset
|
30
30
|
|
31
|
-
if limit = params['limit']
|
32
|
-
limit = limit.to_i
|
33
|
-
limit = 1 if limit < 1
|
34
|
-
dataset = dataset.limit(limit)
|
35
|
-
end
|
36
|
-
|
37
31
|
states = params['state'].to_s.split(',')
|
38
32
|
if states.size > 0
|
39
33
|
dataset = dataset.filter(:state => states)
|
@@ -56,27 +50,21 @@ module Bosh::Director
|
|
56
50
|
])
|
57
51
|
end
|
58
52
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
deployment = @deployment_manager.find_by_name(deployment)
|
63
|
-
@permission_authorizer.granted_or_raise(deployment, :read, token_scopes)
|
53
|
+
if limit = params['limit']
|
54
|
+
limit = limit.to_i
|
55
|
+
limit = 1 if limit < 1
|
64
56
|
end
|
65
57
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
tasks = tasks.select do |task|
|
74
|
-
next false unless task.deployment_name
|
75
|
-
permitted_deployments.include?(task.deployment_name)
|
76
|
-
end
|
58
|
+
if @permission_authorizer.is_granted?(:director, :read, token_scopes) ||
|
59
|
+
@permission_authorizer.is_granted?(:director, :admin, token_scopes)
|
60
|
+
tasks = filter_task_by_deployment_and_teams(dataset, params['deployment'], nil, limit)
|
61
|
+
permitted_tasks = Set.new(tasks)
|
62
|
+
else
|
63
|
+
tasks = filter_task_by_deployment_and_teams(dataset, params['deployment'], token_scopes, limit)
|
64
|
+
permitted_tasks = Set.new(tasks)
|
77
65
|
end
|
78
66
|
|
79
|
-
tasks =
|
67
|
+
tasks = permitted_tasks.map do |task|
|
80
68
|
if task_timeout?(task)
|
81
69
|
task.state = :timeout
|
82
70
|
task.save
|
@@ -84,15 +72,29 @@ module Bosh::Director
|
|
84
72
|
@task_manager.task_to_hash(task)
|
85
73
|
end
|
86
74
|
content_type(:json)
|
75
|
+
|
76
|
+
|
87
77
|
json_encode(tasks)
|
88
78
|
end
|
89
79
|
|
80
|
+
def filter_task_by_deployment_and_teams(dataset, deployment, token_scopes, limit)
|
81
|
+
if deployment
|
82
|
+
dataset = dataset.where(deployment_name: deployment)
|
83
|
+
end
|
84
|
+
if token_scopes
|
85
|
+
teams = Models::Team.transform_admin_team_scope_to_teams(token_scopes)
|
86
|
+
dataset = dataset.where(teams: teams)
|
87
|
+
end
|
88
|
+
if limit
|
89
|
+
dataset = dataset.limit(limit)
|
90
|
+
end
|
91
|
+
dataset.order_by(Sequel.desc(:timestamp)).all
|
92
|
+
end
|
93
|
+
|
94
|
+
|
90
95
|
get '/:id', scope: :list_tasks do
|
91
96
|
task = @task_manager.find_task(params[:id])
|
92
|
-
|
93
|
-
if deployment_name
|
94
|
-
check_access_to_deployment(deployment_name, :read)
|
95
|
-
elsif !@permission_authorizer.is_granted?(:director, :read, token_scopes)
|
97
|
+
if !@permission_authorizer.is_granted?(task, :read, token_scopes)
|
96
98
|
raise UnauthorizedToAccessDeployment,
|
97
99
|
'One of the following scopes is required to access this task: ' +
|
98
100
|
@permission_authorizer.list_expected_scope(:director, :read, token_scopes).join(', ')
|
@@ -134,23 +136,6 @@ module Bosh::Director
|
|
134
136
|
|
135
137
|
private
|
136
138
|
|
137
|
-
def check_access_to_task(task, scope)
|
138
|
-
if task.deployment_name
|
139
|
-
check_access_to_deployment(task.deployment_name, scope)
|
140
|
-
else
|
141
|
-
@permission_authorizer.granted_or_raise(:director, scope, token_scopes)
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
def check_access_to_deployment(deployment_name, scope)
|
146
|
-
begin
|
147
|
-
deployment = @deployment_manager.find_by_name(deployment_name)
|
148
|
-
@permission_authorizer.granted_or_raise(deployment, scope, token_scopes)
|
149
|
-
rescue DeploymentNotFound
|
150
|
-
@permission_authorizer.granted_or_raise(:director, :admin, token_scopes)
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
139
|
def task_timeout?(task)
|
155
140
|
# Some of the old task entries might not have the checkpoint_time
|
156
141
|
unless task.checkpoint_time
|
@@ -11,7 +11,7 @@ module Bosh::Director
|
|
11
11
|
post '/', :consumes => [:json] do
|
12
12
|
validate_user_management_support
|
13
13
|
|
14
|
-
user = @identity_provider.
|
14
|
+
user = @identity_provider.get_user_from_json(request.body.read)
|
15
15
|
@identity_provider.create_user(user)
|
16
16
|
status(204)
|
17
17
|
nil
|
@@ -20,7 +20,7 @@ module Bosh::Director
|
|
20
20
|
put '/:username', :consumes => [:json] do
|
21
21
|
validate_user_management_support
|
22
22
|
|
23
|
-
user = @identity_provider.
|
23
|
+
user = @identity_provider.get_user_from_json(request.body.read)
|
24
24
|
if user.username != params[:username]
|
25
25
|
raise UserImmutableUsername, 'The username is immutable'
|
26
26
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'bosh/director/api/controllers/base_controller'
|
2
|
+
|
3
|
+
module Bosh::Director
|
4
|
+
module Api::Controllers
|
5
|
+
class VmsController < BaseController
|
6
|
+
delete '/:vm_cid' do
|
7
|
+
vm_cid = params[:vm_cid]
|
8
|
+
task = JobQueue.new.enqueue(
|
9
|
+
current_user,
|
10
|
+
Jobs::DeleteVm,
|
11
|
+
"delete vm #{vm_cid}",
|
12
|
+
[vm_cid]
|
13
|
+
)
|
14
|
+
redirect "/tasks/#{task.id}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -15,14 +15,14 @@ module Bosh::Director
|
|
15
15
|
Bosh::Director::Models::Deployment.order_by(Sequel.asc(:name)).all
|
16
16
|
end
|
17
17
|
|
18
|
-
def create_deployment(username, deployment_manifest_file_path, cloud_config, runtime_config,
|
18
|
+
def create_deployment(username, deployment_manifest_file_path, cloud_config, runtime_config, deployment, options = {})
|
19
19
|
cloud_config_id = cloud_config.nil? ? nil : cloud_config.id
|
20
20
|
runtime_config_id = runtime_config.nil? ? nil : runtime_config.id
|
21
|
-
JobQueue.new.enqueue(username, Jobs::UpdateDeployment, 'create deployment', [deployment_manifest_file_path, cloud_config_id, runtime_config_id, options],
|
21
|
+
JobQueue.new.enqueue(username, Jobs::UpdateDeployment, 'create deployment', [deployment_manifest_file_path, cloud_config_id, runtime_config_id, options], deployment)
|
22
22
|
end
|
23
23
|
|
24
24
|
def delete_deployment(username, deployment, options = {})
|
25
|
-
JobQueue.new.enqueue(username, Jobs::DeleteDeployment, "delete deployment #{deployment.name}", [deployment.name, options], deployment
|
25
|
+
JobQueue.new.enqueue(username, Jobs::DeleteDeployment, "delete deployment #{deployment.name}", [deployment.name, options], deployment)
|
26
26
|
end
|
27
27
|
|
28
28
|
def deployment_instances_with_vms(deployment)
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Bosh::Director
|
2
|
+
module Api
|
3
|
+
class InstanceIgnoreManager
|
4
|
+
def set_ignore_state_for_instance(deployment, instance_group_name, instance_group_id, state)
|
5
|
+
instance = InstanceLookup.new.by_uuid(deployment, instance_group_name, instance_group_id)
|
6
|
+
instance.ignore = state
|
7
|
+
instance.save
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -61,15 +61,15 @@ module Bosh::Director
|
|
61
61
|
instance = filter_by(deployment, uuid: index_or_id).first
|
62
62
|
end
|
63
63
|
|
64
|
-
JobQueue.new.enqueue(username, Jobs::FetchLogs, 'fetch logs', [instance.id, options], deployment
|
64
|
+
JobQueue.new.enqueue(username, Jobs::FetchLogs, 'fetch logs', [instance.id, options], deployment)
|
65
65
|
end
|
66
66
|
|
67
67
|
def fetch_instances(username, deployment, format)
|
68
|
-
JobQueue.new.enqueue(username, Jobs::VmState, 'retrieve vm-stats', [deployment.id, format, true], deployment
|
68
|
+
JobQueue.new.enqueue(username, Jobs::VmState, 'retrieve vm-stats', [deployment.id, format, true], deployment)
|
69
69
|
end
|
70
70
|
|
71
71
|
def fetch_instances_with_vm(username, deployment, format)
|
72
|
-
JobQueue.new.enqueue(username, Jobs::VmState, 'retrieve vm-stats', [deployment.id, format], deployment
|
72
|
+
JobQueue.new.enqueue(username, Jobs::VmState, 'retrieve vm-stats', [deployment.id, format], deployment)
|
73
73
|
end
|
74
74
|
|
75
75
|
def ssh(username, deployment, options)
|
@@ -12,7 +12,7 @@ module Bosh
|
|
12
12
|
end
|
13
13
|
|
14
14
|
# User management is supported for backwards compatibility
|
15
|
-
def_delegators :@user_manager, :supports_api_update?, :create_user, :update_user, :delete_user, :
|
15
|
+
def_delegators :@user_manager, :supports_api_update?, :create_user, :update_user, :delete_user, :get_user_from_json
|
16
16
|
|
17
17
|
def client_info
|
18
18
|
{'type' => 'basic', 'options' => {}}
|
@@ -2,7 +2,7 @@ module Bosh::Director
|
|
2
2
|
module Api
|
3
3
|
class ProblemManager
|
4
4
|
def perform_scan(username, deployment)
|
5
|
-
JobQueue.new.enqueue(username, Jobs::CloudCheck::Scan, 'scan cloud', [deployment.name], deployment
|
5
|
+
JobQueue.new.enqueue(username, Jobs::CloudCheck::Scan, 'scan cloud', [deployment.name], deployment)
|
6
6
|
end
|
7
7
|
|
8
8
|
def get_problems(deployment)
|
@@ -15,11 +15,11 @@ module Bosh::Director
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def apply_resolutions(username, deployment, resolutions)
|
18
|
-
JobQueue.new.enqueue(username, Jobs::CloudCheck::ApplyResolutions, 'apply resolutions', [deployment.name, resolutions], deployment
|
18
|
+
JobQueue.new.enqueue(username, Jobs::CloudCheck::ApplyResolutions, 'apply resolutions', [deployment.name, resolutions], deployment)
|
19
19
|
end
|
20
20
|
|
21
21
|
def scan_and_fix(username, deployment, jobs)
|
22
|
-
JobQueue.new.enqueue(username, Jobs::CloudCheck::ScanAndFix, 'scan and fix', [deployment.name, jobs, Bosh::Director::Config.fix_stateful_nodes], deployment
|
22
|
+
JobQueue.new.enqueue(username, Jobs::CloudCheck::ScanAndFix, 'scan and fix', [deployment.name, jobs, Bosh::Director::Config.fix_stateful_nodes], deployment)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -15,14 +15,21 @@ module Bosh::Director
|
|
15
15
|
releases
|
16
16
|
end
|
17
17
|
|
18
|
-
def sorted_release_versions(release)
|
18
|
+
def sorted_release_versions(release, prefix = nil)
|
19
19
|
sorted_version_tuples = release.versions_dataset.all.map do |version|
|
20
20
|
{
|
21
21
|
provided: version,
|
22
22
|
parsed: Bosh::Common::Version::ReleaseVersion.parse(version.values[:version])
|
23
23
|
}
|
24
24
|
end.sort_by { |rv| rv[:parsed] }
|
25
|
-
|
25
|
+
|
26
|
+
unless prefix.nil?
|
27
|
+
sorted_version_tuples = sorted_version_tuples.select do |version_tuple|
|
28
|
+
/^#{prefix}([\.\-\+]|$)/.match(version_tuple[:provided].version.to_s)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
sorted_version_tuples.map do |version|
|
26
33
|
provided = version[:provided]
|
27
34
|
{
|
28
35
|
'version' => provided.version.to_s,
|
@@ -32,8 +39,6 @@ module Bosh::Director
|
|
32
39
|
'job_names' => provided.templates.map(&:name),
|
33
40
|
}
|
34
41
|
end
|
35
|
-
|
36
|
-
release_versions
|
37
42
|
end
|
38
43
|
|
39
44
|
def find_by_name(name)
|
@@ -15,7 +15,19 @@ module Bosh::Director
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def set_pause_for_all(desired_state)
|
18
|
-
Models::
|
18
|
+
Models::DirectorAttribute.create(name: 'resurrection_paused', value: desired_state.to_s)
|
19
|
+
rescue Sequel::ValidationFailed, Sequel::DatabaseError => e
|
20
|
+
error_message = e.message.downcase
|
21
|
+
if error_message.include?('unique') || error_message.include?('duplicate')
|
22
|
+
Models::DirectorAttribute.where(name: 'resurrection_paused').update(value: desired_state.to_s)
|
23
|
+
else
|
24
|
+
raise e
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def pause_for_all?
|
29
|
+
record = Models::DirectorAttribute.first(name: 'resurrection_paused')
|
30
|
+
record.nil? || record.value == "false" ? false : true
|
19
31
|
end
|
20
32
|
end
|
21
33
|
end
|
@@ -31,6 +31,7 @@ module Bosh
|
|
31
31
|
controllers['/tasks'] = Bosh::Director::Api::Controllers::TasksController.new(@config)
|
32
32
|
controllers['/users'] = Bosh::Director::Api::Controllers::UsersController.new(@config)
|
33
33
|
controllers['/events'] = Bosh::Director::Api::Controllers::EventsController.new(@config)
|
34
|
+
controllers['/vms'] = Bosh::Director::Api::Controllers::VmsController.new(@config)
|
34
35
|
controllers
|
35
36
|
end
|
36
37
|
end
|
@@ -2,7 +2,7 @@ module Bosh::Director
|
|
2
2
|
module Api
|
3
3
|
class SnapshotManager
|
4
4
|
def create_deployment_snapshot_task(username, deployment, options = {})
|
5
|
-
JobQueue.new.enqueue(username, Jobs::SnapshotDeployment, 'snapshot deployment', [deployment.name, options], deployment
|
5
|
+
JobQueue.new.enqueue(username, Jobs::SnapshotDeployment, 'snapshot deployment', [deployment.name, options], deployment)
|
6
6
|
end
|
7
7
|
|
8
8
|
def create_snapshot_task(username, instance, options)
|
@@ -10,7 +10,7 @@ module Bosh::Director
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def delete_deployment_snapshots_task(username, deployment)
|
13
|
-
JobQueue.new.enqueue(username, Jobs::DeleteDeploymentSnapshots, 'delete deployment snapshots', [deployment.name], deployment
|
13
|
+
JobQueue.new.enqueue(username, Jobs::DeleteDeploymentSnapshots, 'delete deployment snapshots', [deployment.name], deployment)
|
14
14
|
end
|
15
15
|
|
16
16
|
def delete_snapshots_task(username, snapshot_cids)
|
@@ -27,26 +27,40 @@ module Bosh::Director
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
def latest_by_os(os)
|
31
|
-
stemcells = Bosh::Director::Models::Stemcell.where(:operating_system => os)
|
30
|
+
def latest_by_os(os, prefix = nil)
|
31
|
+
stemcells = Bosh::Director::Models::Stemcell.where(:operating_system => os).all
|
32
32
|
|
33
|
-
if stemcells.
|
33
|
+
if stemcells.empty?
|
34
34
|
raise StemcellNotFound,
|
35
35
|
"Stemcell with Operating System '#{os}' doesn't exist"
|
36
36
|
end
|
37
37
|
|
38
|
-
find_latest(stemcells)
|
38
|
+
latest = find_latest(stemcells, prefix)
|
39
|
+
|
40
|
+
if latest.nil?
|
41
|
+
raise StemcellNotFound,
|
42
|
+
"Stemcell with Operating System '#{os}' exists, but version with prefix '#{prefix}' not found."
|
43
|
+
end
|
44
|
+
|
45
|
+
latest
|
39
46
|
end
|
40
47
|
|
41
|
-
def latest_by_name(name)
|
42
|
-
stemcells = Bosh::Director::Models::Stemcell.where(:name => name)
|
48
|
+
def latest_by_name(name, prefix = nil)
|
49
|
+
stemcells = Bosh::Director::Models::Stemcell.where(:name => name).all
|
43
50
|
|
44
|
-
if stemcells.
|
51
|
+
if stemcells.empty?
|
45
52
|
raise StemcellNotFound,
|
46
53
|
"Stemcell '#{name}' doesn't exist"
|
47
54
|
end
|
48
55
|
|
49
|
-
find_latest(stemcells)
|
56
|
+
latest = find_latest(stemcells, prefix)
|
57
|
+
|
58
|
+
if latest.nil?
|
59
|
+
raise StemcellNotFound,
|
60
|
+
"Stemcell '#{name}' exists, but version with prefix '#{prefix}' not found."
|
61
|
+
end
|
62
|
+
|
63
|
+
latest
|
50
64
|
end
|
51
65
|
|
52
66
|
def find_by_os_and_version(os, version)
|
@@ -87,7 +101,13 @@ module Bosh::Director
|
|
87
101
|
|
88
102
|
private
|
89
103
|
|
90
|
-
def find_latest(stemcells)
|
104
|
+
def find_latest(stemcells, prefix = nil)
|
105
|
+
unless prefix.nil?
|
106
|
+
stemcells = stemcells.select do |stemcell|
|
107
|
+
stemcell.version =~ /^#{prefix}([\.\-\+]|$)/
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
91
111
|
versions = stemcells.map(&:version)
|
92
112
|
|
93
113
|
latest_version = Bosh::Common::Version::StemcellVersionList.parse(versions).latest.to_s
|
@@ -3,13 +3,14 @@ require 'bosh/director/api/task_remover'
|
|
3
3
|
module Bosh::Director
|
4
4
|
module Api
|
5
5
|
class TaskHelper
|
6
|
-
def create_task(username, type, description,
|
7
|
-
task = Models::Task.
|
6
|
+
def create_task(username, type, description, deployment)
|
7
|
+
task = Models::Task.create_with_teams(:username => username,
|
8
8
|
:type => type,
|
9
9
|
:description => description,
|
10
10
|
:state => :queued,
|
11
|
-
:deployment_name =>
|
11
|
+
:deployment_name => deployment ? deployment.name : nil,
|
12
12
|
:timestamp => Time.now,
|
13
|
+
:teams => deployment ? deployment.teams : nil,
|
13
14
|
:checkpoint_time => Time.now)
|
14
15
|
log_dir = File.join(Config.base_dir, 'tasks', task.id.to_s)
|
15
16
|
task_status_file = File.join(log_dir, 'debug')
|
@@ -7,8 +7,13 @@ module Bosh
|
|
7
7
|
MAX_TOKEN_EXTENSION_TIME_IN_SECONDS = 3600
|
8
8
|
|
9
9
|
def initialize(options)
|
10
|
-
|
11
|
-
|
10
|
+
raise ValidationExtraField if options.has_key?('url') && options.has_key?('urls')
|
11
|
+
if options.has_key?('url')
|
12
|
+
@urls = [options.fetch('url')]
|
13
|
+
else
|
14
|
+
@urls = options.fetch('urls')
|
15
|
+
end
|
16
|
+
Config.logger.debug "Initializing UAA Identity provider with urls #{@urls}"
|
12
17
|
@token_coder = CF::UAA::TokenCoder.new(skey: options.fetch('symmetric_key', nil), pkey: options.fetch('public_key', nil), scope: [])
|
13
18
|
end
|
14
19
|
|
@@ -20,7 +25,8 @@ module Bosh
|
|
20
25
|
{
|
21
26
|
'type' => 'uaa',
|
22
27
|
'options' => {
|
23
|
-
'url' => @
|
28
|
+
'url' => @urls.first,
|
29
|
+
'urls' => @urls
|
24
30
|
}
|
25
31
|
}
|
26
32
|
end
|