bosh-director 1.3232.24.0 → 1.3262.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 (118) hide show
  1. checksums.yaml +4 -4
  2. data/db/migrations/director/20160414183654_set_teams_on_task.rb +7 -0
  3. data/db/migrations/director/20160427164345_add_teams.rb +48 -0
  4. data/db/migrations/director/20160511191928_ephemeral_blobs.rb +10 -0
  5. data/db/migrations/director/20160513102035_add_tracking_to_instance.rb +7 -0
  6. data/db/migrations/director/20160531164756_add_local_dns_blobs.rb +14 -0
  7. data/lib/bosh/director.rb +5 -1
  8. data/lib/bosh/director/api.rb +1 -0
  9. data/lib/bosh/director/api/api_helper.rb +2 -2
  10. data/lib/bosh/director/api/controllers/cleanup_controller.rb +1 -1
  11. data/lib/bosh/director/api/controllers/deployments_controller.rb +39 -25
  12. data/lib/bosh/director/api/controllers/disks_controller.rb +2 -1
  13. data/lib/bosh/director/api/controllers/events_controller.rb +34 -0
  14. data/lib/bosh/director/api/controllers/releases_controller.rb +1 -1
  15. data/lib/bosh/director/api/controllers/resurrection_controller.rb +1 -1
  16. data/lib/bosh/director/api/controllers/stemcells_controller.rb +1 -1
  17. data/lib/bosh/director/api/controllers/tasks_controller.rb +31 -46
  18. data/lib/bosh/director/api/controllers/users_controller.rb +2 -2
  19. data/lib/bosh/director/api/controllers/vms_controller.rb +18 -0
  20. data/lib/bosh/director/api/deployment_manager.rb +3 -3
  21. data/lib/bosh/director/api/instance_ignore_manager.rb +11 -0
  22. data/lib/bosh/director/api/instance_manager.rb +3 -3
  23. data/lib/bosh/director/api/local_identity_provider.rb +1 -1
  24. data/lib/bosh/director/api/problem_manager.rb +3 -3
  25. data/lib/bosh/director/api/release_manager.rb +9 -4
  26. data/lib/bosh/director/api/resurrector_manager.rb +13 -1
  27. data/lib/bosh/director/api/route_configuration.rb +1 -0
  28. data/lib/bosh/director/api/snapshot_manager.rb +2 -2
  29. data/lib/bosh/director/api/stemcell_manager.rb +29 -9
  30. data/lib/bosh/director/api/task_helper.rb +4 -3
  31. data/lib/bosh/director/api/uaa_identity_provider.rb +9 -3
  32. data/lib/bosh/director/api/user/config_user_manager.rb +1 -1
  33. data/lib/bosh/director/api/user/database_user_manager.rb +2 -2
  34. data/lib/bosh/director/cidr_range_combiner.rb +51 -0
  35. data/lib/bosh/director/cloudcheck_helper.rb +17 -6
  36. data/lib/bosh/director/config.rb +27 -1
  37. data/lib/bosh/director/db_backup/adapter/postgres.rb +0 -1
  38. data/lib/bosh/director/deployment_plan.rb +1 -1
  39. data/lib/bosh/director/deployment_plan/assembler.rb +8 -5
  40. data/lib/bosh/director/deployment_plan/deployment_repo.rb +10 -3
  41. data/lib/bosh/director/deployment_plan/deployment_spec_parser.rb +17 -6
  42. data/lib/bosh/director/deployment_plan/global_network_resolver.rb +44 -23
  43. data/lib/bosh/director/deployment_plan/instance.rb +2 -2
  44. data/lib/bosh/director/deployment_plan/{job.rb → instance_group.rb} +5 -5
  45. data/lib/bosh/director/deployment_plan/{job_spec_parser.rb → instance_group_spec_parser.rb} +17 -15
  46. data/lib/bosh/director/deployment_plan/instance_plan.rb +14 -10
  47. data/lib/bosh/director/deployment_plan/instance_planner.rb +22 -0
  48. data/lib/bosh/director/deployment_plan/job_migrator.rb +2 -2
  49. data/lib/bosh/director/deployment_plan/links/link_lookup.rb +3 -3
  50. data/lib/bosh/director/deployment_plan/links/link_path.rb +2 -2
  51. data/lib/bosh/director/deployment_plan/links/links_resolver.rb +1 -1
  52. data/lib/bosh/director/deployment_plan/manual_network.rb +1 -1
  53. data/lib/bosh/director/deployment_plan/manual_network_subnet.rb +1 -1
  54. data/lib/bosh/director/deployment_plan/placement_planner/availability_zone_picker.rb +53 -1
  55. data/lib/bosh/director/deployment_plan/placement_planner/static_ips_availability_zone_picker.rb +39 -1
  56. data/lib/bosh/director/deployment_plan/placement_planner/unplaced_existing_instances.rb +4 -0
  57. data/lib/bosh/director/deployment_plan/planner.rb +37 -31
  58. data/lib/bosh/director/deployment_plan/planner_factory.rb +26 -11
  59. data/lib/bosh/director/deployment_plan/runtime_manifest_parser.rb +15 -6
  60. data/lib/bosh/director/deployment_plan/steps/update_step.rb +1 -1
  61. data/lib/bosh/director/deployment_plan/template.rb +14 -1
  62. data/lib/bosh/director/dns/blobstore_dns_publisher.rb +35 -0
  63. data/lib/bosh/director/dns/dns_manager.rb +37 -74
  64. data/lib/bosh/director/errand/job_manager.rb +1 -1
  65. data/lib/bosh/director/error_ignorer.rb +1 -2
  66. data/lib/bosh/director/errors.rb +4 -0
  67. data/lib/bosh/director/event_log.rb +10 -2
  68. data/lib/bosh/director/instance_deleter.rb +11 -2
  69. data/lib/bosh/director/instance_updater.rb +21 -25
  70. data/lib/bosh/director/instance_updater/instance_state.rb +24 -2
  71. data/lib/bosh/director/instance_updater/state_applier.rb +4 -4
  72. data/lib/bosh/director/job_queue.rb +2 -2
  73. data/lib/bosh/director/job_updater.rb +3 -1
  74. data/lib/bosh/director/jobs/attach_disk.rb +7 -2
  75. data/lib/bosh/director/jobs/cleanup_artifacts.rb +15 -5
  76. data/lib/bosh/director/jobs/cloud_check/apply_resolutions.rb +2 -0
  77. data/lib/bosh/director/jobs/cloud_check/scan_and_fix.rb +5 -5
  78. data/lib/bosh/director/jobs/db_job.rb +10 -13
  79. data/lib/bosh/director/jobs/delete_deployment.rb +13 -1
  80. data/lib/bosh/director/jobs/delete_vm.rb +58 -0
  81. data/lib/bosh/director/jobs/export_release.rb +11 -4
  82. data/lib/bosh/director/jobs/helpers.rb +2 -0
  83. data/lib/bosh/director/jobs/helpers/config_parser.rb +66 -0
  84. data/lib/bosh/director/jobs/helpers/deep_hash_replacement.rb +38 -0
  85. data/lib/bosh/director/jobs/run_errand.rb +1 -1
  86. data/lib/bosh/director/jobs/ssh.rb +3 -2
  87. data/lib/bosh/director/jobs/update_deployment.rb +73 -14
  88. data/lib/bosh/director/jobs/update_release.rb +3 -1
  89. data/lib/bosh/director/jobs/update_stemcell.rb +1 -0
  90. data/lib/bosh/director/jobs/vm_state.rb +4 -3
  91. data/lib/bosh/director/legacy_deployment_helper.rb +7 -0
  92. data/lib/bosh/director/manifest/diff_lines.rb +4 -0
  93. data/lib/bosh/director/manifest/manifest.rb +18 -6
  94. data/lib/bosh/director/models.rb +3 -0
  95. data/lib/bosh/director/models/deployment.rb +17 -8
  96. data/lib/bosh/director/models/deployment_problem.rb +2 -2
  97. data/lib/bosh/director/models/ephemeral_blob.rb +11 -0
  98. data/lib/bosh/director/models/event.rb +2 -2
  99. data/lib/bosh/director/models/instance.rb +35 -5
  100. data/lib/bosh/director/models/local_dns_blob.rb +4 -0
  101. data/lib/bosh/director/models/orphan_disk.rb +2 -2
  102. data/lib/bosh/director/models/package.rb +2 -2
  103. data/lib/bosh/director/models/persistent_disk.rb +2 -2
  104. data/lib/bosh/director/models/task.rb +15 -0
  105. data/lib/bosh/director/models/team.rb +35 -0
  106. data/lib/bosh/director/models/template.rb +6 -2
  107. data/lib/bosh/director/nats_rpc.rb +3 -3
  108. data/lib/bosh/director/permission_authorizer.rb +14 -4
  109. data/lib/bosh/director/post_deployment_script_runner.rb +5 -4
  110. data/lib/bosh/director/problem_handlers/missing_vm.rb +7 -2
  111. data/lib/bosh/director/problem_handlers/unresponsive_agent.rb +11 -1
  112. data/lib/bosh/director/problem_resolver.rb +1 -1
  113. data/lib/bosh/director/problem_scanner/disk_scan_stage.rb +1 -1
  114. data/lib/bosh/director/problem_scanner/vm_scan_stage.rb +5 -1
  115. data/lib/bosh/director/version.rb +1 -1
  116. data/lib/bosh/director/vm_deleter.rb +8 -7
  117. data/lib/bosh/director/worker.rb +1 -0
  118. metadata +36 -34
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 16c44a4ba321cd6f42757087c868401728f78195
4
- data.tar.gz: 39c92fd8253fa376bee4ac3dead05a58d93dde2c
3
+ metadata.gz: 576adc0d9f6febe9f333d2f9323ae9d8c7a31f87
4
+ data.tar.gz: 01311d5a771cd111a100a5866d7cd38007dde982
5
5
  SHA512:
6
- metadata.gz: 4104f9bfd037b661b69a8a379368978fa023b7a1356bfbe6dac4aac82d87e335801dca5eda2d45a632ab9b1c6e688bf89c7b7bb2752756c7f87b145fb5ac80a2
7
- data.tar.gz: 136679263e45817087f19658bc5093583c726b4163ea881b0c8cafd8b209fc12c91a4e0a7a12ceaaaa4e3fcd60dad5de9fbd0445b0119877da95bbdb1829b0b8
6
+ metadata.gz: addb243b3fe331ae2783f7799af05991645e5529b205bf968756f2bc4dd1e7d41d797c0130657706d8f98b86366d344f874156d0fdf25e38e88fb3d2f65f93b9
7
+ data.tar.gz: 0f4ca4cd3d286d8a904202380647faa9e5f4e62de7b1abab550a615a69311a14ae38ca2eaa957874b794357d6b862c080140471300d55d461078a219b15ce5d3
@@ -0,0 +1,7 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:tasks) do
4
+ add_column(:teams, String)
5
+ end
6
+ end
7
+ end
@@ -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,10 @@
1
+ Sequel.migration do
2
+ change do
3
+ create_table :ephemeral_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
+ end
@@ -0,0 +1,7 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:instances) do
4
+ add_column(:ignore, TrueClass, :default => false)
5
+ end
6
+ end
7
+ 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
@@ -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'
@@ -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'
@@ -43,11 +43,11 @@ module Bosh::Director
43
43
  end
44
44
 
45
45
  def json_encode(payload)
46
- Yajl::Encoder.encode(payload)
46
+ JSON.generate(payload)
47
47
  end
48
48
 
49
49
  def json_decode(payload)
50
- Yajl::Parser.parse(payload)
50
+ JSON.parse(payload)
51
51
  end
52
52
 
53
53
  def start_task
@@ -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.name, options)
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.name, options)
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
- Yajl::Encoder.encode({'manifest' => deployment.manifest})
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
- Yajl::Encoder.encode(create_instances_response(instances))
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
- Yajl::Encoder.encode(create_instances_response(instances))
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
- @deployments_repo.find_or_create_by_name(deployment_name, options)
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, deployment_name, options)
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
- after_manifest = Manifest.load_from_text(
366
- manifest_text,
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.name
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.jobs.select(&:is_errand?)
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
- instances = @instance_manager.filter_by(deployment, resurrection_paused: false)
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, params[:deployment], params[:job], params[:instance_id], params[:disk_cid], job_queue)
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