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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 576adc0d9f6febe9f333d2f9323ae9d8c7a31f87
|
4
|
+
data.tar.gz: 01311d5a771cd111a100a5866d7cd38007dde982
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: addb243b3fe331ae2783f7799af05991645e5529b205bf968756f2bc4dd1e7d41d797c0130657706d8f98b86366d344f874156d0fdf25e38e88fb3d2f65f93b9
|
7
|
+
data.tar.gz: 0f4ca4cd3d286d8a904202380647faa9e5f4e62de7b1abab550a615a69311a14ae38ca2eaa957874b794357d6b862c080140471300d55d461078a219b15ce5d3
|
@@ -0,0 +1,48 @@
|
|
1
|
+
Sequel.migration do
|
2
|
+
up do
|
3
|
+
create_table :teams do
|
4
|
+
primary_key :id
|
5
|
+
String :name, :unique => true, :null => false
|
6
|
+
end
|
7
|
+
|
8
|
+
create_table :deployments_teams do
|
9
|
+
foreign_key :deployment_id, :deployments, :null => false, :on_delete => :cascade
|
10
|
+
foreign_key :team_id, :teams, :null => false, :on_delete => :cascade
|
11
|
+
unique [:deployment_id, :team_id]
|
12
|
+
end
|
13
|
+
|
14
|
+
deployments_with_teams = self[:deployments].reject { |d| d[:teams].nil? }
|
15
|
+
team_names = deployments_with_teams
|
16
|
+
.map { |d| d[:teams].split(',') }
|
17
|
+
.flatten
|
18
|
+
.uniq
|
19
|
+
.map { |team| [team] }
|
20
|
+
|
21
|
+
self[:teams].import([:name], team_names)
|
22
|
+
|
23
|
+
deployments_with_teams.each do |d|
|
24
|
+
deployment_teams = d[:teams]
|
25
|
+
.split(',')
|
26
|
+
.map do |team_name|
|
27
|
+
team = self[:teams].filter({name: team_name}).first
|
28
|
+
[d[:id], team[:id]]
|
29
|
+
end
|
30
|
+
|
31
|
+
self[:deployments_teams].import([:deployment_id, :team_id], deployment_teams)
|
32
|
+
end
|
33
|
+
|
34
|
+
alter_table(:deployments) do
|
35
|
+
drop_column :teams
|
36
|
+
end
|
37
|
+
|
38
|
+
create_table :tasks_teams do
|
39
|
+
foreign_key :task_id, :tasks, :null => false, :on_delete => :cascade
|
40
|
+
foreign_key :team_id, :teams, :null => false, :on_delete => :cascade
|
41
|
+
unique [:task_id, :team_id]
|
42
|
+
end
|
43
|
+
|
44
|
+
alter_table(:tasks) do
|
45
|
+
drop_column :teams
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Sequel.migration do
|
2
|
+
up do
|
3
|
+
create_table :local_dns_blobs do
|
4
|
+
primary_key :id
|
5
|
+
String :blobstore_id, :null => false
|
6
|
+
String :sha1, :null => false
|
7
|
+
Time :created_at, null: false
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
down do
|
12
|
+
drop_table :local_dns_blobs
|
13
|
+
end
|
14
|
+
end
|
data/lib/bosh/director.rb
CHANGED
@@ -32,7 +32,6 @@ require 'delayed_job'
|
|
32
32
|
require 'sequel'
|
33
33
|
require 'sinatra/base'
|
34
34
|
require 'securerandom'
|
35
|
-
require 'yajl'
|
36
35
|
require 'nats/client'
|
37
36
|
require 'securerandom'
|
38
37
|
require 'delayed_job_sequel'
|
@@ -40,16 +39,19 @@ require 'delayed_job_sequel'
|
|
40
39
|
require 'common/thread_formatter'
|
41
40
|
require 'bosh/core/encryption_handler'
|
42
41
|
require 'bosh/director/api'
|
42
|
+
require 'bosh/director/dns/blobstore_dns_publisher'
|
43
43
|
require 'bosh/director/dns/canonicalizer'
|
44
44
|
require 'bosh/director/dns/dns_manager'
|
45
45
|
require 'bosh/director/dns/local_dns_repo'
|
46
46
|
require 'bosh/director/errors'
|
47
47
|
require 'bosh/director/ext'
|
48
48
|
require 'bosh/director/ip_util'
|
49
|
+
require 'bosh/director/cidr_range_combiner'
|
49
50
|
require 'bosh/director/lock_helper'
|
50
51
|
require 'bosh/director/validation_helper'
|
51
52
|
require 'bosh/director/download_helper'
|
52
53
|
require 'bosh/director/tagged_logger'
|
54
|
+
require 'bosh/director/legacy_deployment_helper'
|
53
55
|
|
54
56
|
require 'bosh/director/version'
|
55
57
|
require 'bosh/director/config'
|
@@ -148,6 +150,7 @@ require 'bosh/director/jobs/cloud_check/apply_resolutions'
|
|
148
150
|
require 'bosh/director/jobs/release/release_job'
|
149
151
|
require 'bosh/director/jobs/ssh'
|
150
152
|
require 'bosh/director/jobs/attach_disk'
|
153
|
+
require 'bosh/director/jobs/delete_vm'
|
151
154
|
require 'bosh/director/jobs/helpers'
|
152
155
|
require 'bosh/director/jobs/db_job'
|
153
156
|
|
@@ -186,4 +189,5 @@ require 'bosh/director/api/controllers/runtime_configs_controller'
|
|
186
189
|
require 'bosh/director/api/controllers/locks_controller'
|
187
190
|
require 'bosh/director/api/controllers/restore_controller'
|
188
191
|
require 'bosh/director/api/controllers/events_controller'
|
192
|
+
require 'bosh/director/api/controllers/vms_controller'
|
189
193
|
require 'bosh/director/api/route_configuration'
|
data/lib/bosh/director/api.rb
CHANGED
@@ -27,6 +27,7 @@ require 'bosh/director/api/resurrector_manager'
|
|
27
27
|
require 'bosh/director/api/restore_manager'
|
28
28
|
require 'bosh/director/api/cloud_config_manager'
|
29
29
|
require 'bosh/director/api/runtime_config_manager'
|
30
|
+
require 'bosh/director/api/instance_ignore_manager'
|
30
31
|
|
31
32
|
require 'bosh/director/api/instance_lookup'
|
32
33
|
require 'bosh/director/api/deployment_lookup'
|
@@ -5,7 +5,7 @@ module Bosh::Director
|
|
5
5
|
class CleanupController < BaseController
|
6
6
|
post '/', :consumes => :json do
|
7
7
|
job_queue = JobQueue.new
|
8
|
-
payload = json_decode(request.body)
|
8
|
+
payload = json_decode(request.body.read)
|
9
9
|
task = Bosh::Director::Jobs::CleanupArtifacts.enqueue(current_user, payload['config'], job_queue)
|
10
10
|
|
11
11
|
redirect "/tasks/#{task.id}"
|
@@ -38,6 +38,7 @@ module Bosh::Director
|
|
38
38
|
|
39
39
|
class DeploymentsController < BaseController
|
40
40
|
register DeploymentsSecurity
|
41
|
+
include LegacyDeploymentHelper
|
41
42
|
|
42
43
|
def initialize(config)
|
43
44
|
super(config)
|
@@ -46,6 +47,7 @@ module Bosh::Director
|
|
46
47
|
@property_manager = Api::PropertyManager.new
|
47
48
|
@instance_manager = Api::InstanceManager.new
|
48
49
|
@deployments_repo = DeploymentPlan::DeploymentRepo.new
|
50
|
+
@instance_ignore_manager = Api::InstanceIgnoreManager.new
|
49
51
|
end
|
50
52
|
|
51
53
|
get '/:deployment/jobs/:job/:index_or_id' do
|
@@ -73,7 +75,10 @@ module Bosh::Director
|
|
73
75
|
}
|
74
76
|
}
|
75
77
|
}
|
78
|
+
|
76
79
|
options['skip_drain'] = params[:job] if params['skip_drain'] == 'true'
|
80
|
+
options['canaries'] = params[:canaries] if !!params['canaries']
|
81
|
+
options['max_in_flight'] = params[:max_in_flight] if !!params['max_in_flight']
|
77
82
|
|
78
83
|
if (request.content_length.nil? || request.content_length.to_i == 0) && (params['state'])
|
79
84
|
manifest_file_path = prepare_yml_file(StringIO.new(deployment.manifest), 'deployment', true)
|
@@ -83,7 +88,7 @@ module Bosh::Director
|
|
83
88
|
|
84
89
|
latest_cloud_config = Bosh::Director::Api::CloudConfigManager.new.latest
|
85
90
|
latest_runtime_config = Bosh::Director::Api::RuntimeConfigManager.new.latest
|
86
|
-
task = @deployment_manager.create_deployment(current_user, manifest_file_path, latest_cloud_config, latest_runtime_config, deployment
|
91
|
+
task = @deployment_manager.create_deployment(current_user, manifest_file_path, latest_cloud_config, latest_runtime_config, deployment, options)
|
87
92
|
redirect "/tasks/#{task.id}"
|
88
93
|
end
|
89
94
|
|
@@ -113,7 +118,7 @@ module Bosh::Director
|
|
113
118
|
|
114
119
|
latest_cloud_config = Bosh::Director::Api::CloudConfigManager.new.latest
|
115
120
|
latest_runtime_config = Bosh::Director::Api::RuntimeConfigManager.new.latest
|
116
|
-
task = @deployment_manager.create_deployment(current_user, manifest_file_path, latest_cloud_config, latest_runtime_config, deployment
|
121
|
+
task = @deployment_manager.create_deployment(current_user, manifest_file_path, latest_cloud_config, latest_runtime_config, deployment, options)
|
117
122
|
redirect "/tasks/#{task.id}"
|
118
123
|
end
|
119
124
|
|
@@ -149,10 +154,15 @@ module Bosh::Director
|
|
149
154
|
|
150
155
|
put '/:deployment/jobs/:job/:index_or_id/resurrection', consumes: :json do
|
151
156
|
|
152
|
-
payload = json_decode(request.body)
|
157
|
+
payload = json_decode(request.body.read)
|
153
158
|
@resurrector_manager.set_pause_for_instance(deployment, params[:job], params[:index_or_id], payload['resurrection_paused'])
|
154
159
|
end
|
155
160
|
|
161
|
+
put '/:deployment/instance_groups/:instancegroup/:id/ignore', consumes: :json do
|
162
|
+
payload = json_decode(request.body.read)
|
163
|
+
@instance_ignore_manager.set_ignore_state_for_instance(deployment, params[:instancegroup], params[:id], payload['ignore'])
|
164
|
+
end
|
165
|
+
|
156
166
|
post '/:deployment/jobs/:job/:index_or_id/snapshots' do
|
157
167
|
if params[:index_or_id].to_s =~ /^\d+$/
|
158
168
|
instance = @instance_manager.find_by_name(deployment, params[:job], params[:index_or_id])
|
@@ -213,7 +223,7 @@ module Bosh::Director
|
|
213
223
|
end
|
214
224
|
|
215
225
|
get '/:deployment', authorization: :read do
|
216
|
-
|
226
|
+
JSON.generate({'manifest' => deployment.manifest})
|
217
227
|
end
|
218
228
|
|
219
229
|
get '/:deployment/vms', authorization: :read do
|
@@ -223,7 +233,7 @@ module Bosh::Director
|
|
223
233
|
redirect "/tasks/#{task.id}"
|
224
234
|
else
|
225
235
|
instances = @deployment_manager.deployment_instances_with_vms(deployment)
|
226
|
-
|
236
|
+
JSON.generate(create_instances_response(instances))
|
227
237
|
end
|
228
238
|
end
|
229
239
|
|
@@ -234,7 +244,7 @@ module Bosh::Director
|
|
234
244
|
redirect "/tasks/#{task.id}"
|
235
245
|
else
|
236
246
|
instances = @instance_manager.find_instances_by_deployment(deployment)
|
237
|
-
|
247
|
+
JSON.generate(create_instances_response(instances))
|
238
248
|
end
|
239
249
|
end
|
240
250
|
|
@@ -247,7 +257,7 @@ module Bosh::Director
|
|
247
257
|
end
|
248
258
|
|
249
259
|
post '/:deployment/ssh', :consumes => [:json] do
|
250
|
-
payload = json_decode(request.body)
|
260
|
+
payload = json_decode(request.body.read)
|
251
261
|
task = @instance_manager.ssh(current_user, deployment, payload)
|
252
262
|
redirect "/tasks/#{task.id}"
|
253
263
|
end
|
@@ -266,13 +276,13 @@ module Bosh::Director
|
|
266
276
|
end
|
267
277
|
|
268
278
|
post '/:deployment/properties', :consumes => [:json] do
|
269
|
-
payload = json_decode(request.body)
|
279
|
+
payload = json_decode(request.body.read)
|
270
280
|
@property_manager.create_property(deployment, payload['name'], payload['value'])
|
271
281
|
status(204)
|
272
282
|
end
|
273
283
|
|
274
284
|
put '/:deployment/properties/:property', :consumes => [:json] do
|
275
|
-
payload = json_decode(request.body)
|
285
|
+
payload = json_decode(request.body.read)
|
276
286
|
@property_manager.update_property(deployment, params[:property], payload['value'])
|
277
287
|
status(204)
|
278
288
|
end
|
@@ -305,12 +315,12 @@ module Bosh::Director
|
|
305
315
|
end
|
306
316
|
|
307
317
|
put '/:deployment/problems', :consumes => [:json] do
|
308
|
-
payload = json_decode(request.body)
|
318
|
+
payload = json_decode(request.body.read)
|
309
319
|
start_task { @problem_manager.apply_resolutions(current_user, deployment, payload['resolutions']) }
|
310
320
|
end
|
311
321
|
|
312
322
|
put '/:deployment/scan_and_fix', :consumes => :json do
|
313
|
-
jobs_json = json_decode(request.body)['jobs']
|
323
|
+
jobs_json = json_decode(request.body.read)['jobs']
|
314
324
|
payload = convert_job_instance_hash(jobs_json)
|
315
325
|
if deployment_has_instance_to_resurrect?(deployment)
|
316
326
|
start_task { @problem_manager.scan_and_fix(current_user, deployment, payload) }
|
@@ -340,33 +350,36 @@ module Bosh::Director
|
|
340
350
|
if deployment
|
341
351
|
deployment_name = deployment['name']
|
342
352
|
if deployment_name
|
343
|
-
|
353
|
+
options['new'] = Models::Deployment[name: deployment_name].nil? ? true : false
|
354
|
+
deployment_model = @deployments_repo.find_or_create_by_name(deployment_name, options)
|
344
355
|
end
|
345
356
|
end
|
346
357
|
|
347
|
-
task = @deployment_manager.create_deployment(current_user, manifest_file_path, cloud_config, runtime_config,
|
358
|
+
task = @deployment_manager.create_deployment(current_user, manifest_file_path, cloud_config, runtime_config, deployment_model, options)
|
348
359
|
|
349
360
|
redirect "/tasks/#{task.id}"
|
350
361
|
end
|
351
362
|
|
352
363
|
post '/:deployment/diff', authorization: :diff, :consumes => :yaml do
|
364
|
+
|
353
365
|
manifest_text = request.body.read
|
354
366
|
validate_manifest_yml(manifest_text)
|
355
367
|
|
368
|
+
manifest_hash = Psych.load(manifest_text)
|
369
|
+
|
370
|
+
ignore_cc = ignore_cloud_config?(manifest_hash)
|
371
|
+
|
356
372
|
if deployment
|
357
|
-
before_manifest = Manifest.load_from_text(deployment.manifest, deployment.cloud_config, deployment.runtime_config)
|
373
|
+
before_manifest = Manifest.load_from_text(deployment.manifest, ignore_cc ? nil : deployment.cloud_config, deployment.runtime_config)
|
358
374
|
before_manifest.resolve_aliases
|
359
375
|
else
|
360
376
|
before_manifest = Manifest.load_from_text(nil, nil, nil)
|
361
377
|
end
|
362
378
|
|
363
|
-
after_cloud_config = Bosh::Director::Api::CloudConfigManager.new.latest
|
379
|
+
after_cloud_config = ignore_cc ? nil : Bosh::Director::Api::CloudConfigManager.new.latest
|
364
380
|
after_runtime_config = Bosh::Director::Api::RuntimeConfigManager.new.latest
|
365
|
-
|
366
|
-
|
367
|
-
after_cloud_config,
|
368
|
-
after_runtime_config
|
369
|
-
)
|
381
|
+
|
382
|
+
after_manifest = Manifest.load_from_hash(manifest_hash, after_cloud_config, after_runtime_config)
|
370
383
|
after_manifest.resolve_aliases
|
371
384
|
|
372
385
|
redact = params['redact'] != 'false'
|
@@ -391,14 +404,14 @@ module Bosh::Director
|
|
391
404
|
|
392
405
|
post '/:deployment/errands/:errand_name/runs' do
|
393
406
|
errand_name = params[:errand_name]
|
394
|
-
keep_alive = json_decode(request.body)['keep-alive'] || FALSE
|
407
|
+
keep_alive = json_decode(request.body.read)['keep-alive'] || FALSE
|
395
408
|
|
396
409
|
task = JobQueue.new.enqueue(
|
397
410
|
current_user,
|
398
411
|
Jobs::RunErrand,
|
399
412
|
"run errand #{errand_name} from deployment #{deployment.name}",
|
400
413
|
[deployment.name, errand_name, keep_alive],
|
401
|
-
deployment
|
414
|
+
deployment
|
402
415
|
)
|
403
416
|
|
404
417
|
redirect "/tasks/#{task.id}"
|
@@ -407,7 +420,7 @@ module Bosh::Director
|
|
407
420
|
get '/:deployment/errands', authorization: :read do
|
408
421
|
deployment_plan = load_deployment_plan
|
409
422
|
|
410
|
-
errands = deployment_plan.
|
423
|
+
errands = deployment_plan.instance_groups.select(&:is_errand?)
|
411
424
|
|
412
425
|
errand_data = errands.map do |errand|
|
413
426
|
{"name" => errand.name}
|
@@ -433,8 +446,9 @@ module Bosh::Director
|
|
433
446
|
end
|
434
447
|
|
435
448
|
def deployment_has_instance_to_resurrect?(deployment)
|
436
|
-
false if deployment.nil?
|
437
|
-
|
449
|
+
return false if deployment.nil?
|
450
|
+
return false if @resurrector_manager.pause_for_all?
|
451
|
+
instances = @instance_manager.filter_by(deployment, resurrection_paused: false, ignore: false)
|
438
452
|
instances.any?
|
439
453
|
end
|
440
454
|
|
@@ -11,8 +11,9 @@ module Bosh::Director
|
|
11
11
|
|
12
12
|
# PUT /disks/disk_cid/attachments?deployment=foo&job=dea&instance_id=17f01a35-bf9c-4949-bcf2-c07a95e4df33
|
13
13
|
put '/:disk_cid/attachments' do
|
14
|
+
deployment = Api::DeploymentManager.new.find_by_name(params[:deployment])
|
14
15
|
job_queue = JobQueue.new
|
15
|
-
task = Bosh::Director::Jobs::AttachDisk.enqueue(current_user,
|
16
|
+
task = Bosh::Director::Jobs::AttachDisk.enqueue(current_user, deployment, params[:job], params[:instance_id], params[:disk_cid], job_queue)
|
16
17
|
|
17
18
|
redirect "/tasks/#{task.id}"
|
18
19
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'bosh/director/api/controllers/base_controller'
|
2
|
+
require 'time'
|
2
3
|
|
3
4
|
module Bosh::Director
|
4
5
|
module Api::Controllers
|
@@ -15,6 +16,28 @@ module Bosh::Director
|
|
15
16
|
events = events.filter("id < ?", before_id)
|
16
17
|
end
|
17
18
|
|
19
|
+
if params['before_time']
|
20
|
+
begin
|
21
|
+
before_datetime = timestamp_filter_value(params['before_time'])
|
22
|
+
rescue ArgumentError
|
23
|
+
status(400)
|
24
|
+
body("Invalid before parameter: '#{params['before_time']}' ")
|
25
|
+
return
|
26
|
+
end
|
27
|
+
events = events.filter("timestamp < ?", before_datetime)
|
28
|
+
end
|
29
|
+
|
30
|
+
if params['after_time']
|
31
|
+
begin
|
32
|
+
after_datetime = timestamp_filter_value(params['after_time']) + 1
|
33
|
+
rescue ArgumentError
|
34
|
+
status(400)
|
35
|
+
body("Invalid after parameter: '#{params['after_time']}' ")
|
36
|
+
return
|
37
|
+
end
|
38
|
+
events = events.filter("timestamp >= ?", after_datetime)
|
39
|
+
end
|
40
|
+
|
18
41
|
if params['task']
|
19
42
|
events = events.where(task: params['task'])
|
20
43
|
end
|
@@ -32,6 +55,17 @@ module Bosh::Director
|
|
32
55
|
end
|
33
56
|
json_encode(events)
|
34
57
|
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def timestamp_filter_value(value)
|
62
|
+
return Time.at(value.to_i).utc if integer?(value)
|
63
|
+
Time.parse(value)
|
64
|
+
end
|
65
|
+
|
66
|
+
def integer?(string)
|
67
|
+
string =~ /\A[-+]?\d+\z/
|
68
|
+
end
|
35
69
|
end
|
36
70
|
end
|
37
71
|
end
|