bosh-director 1.3169.0 → 1.3173.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2f50618663a0ca2e0709f9398f3081822fb89cd6
4
- data.tar.gz: dbba3cb88e28c2165053b6d129348785c84272cb
3
+ metadata.gz: 6d4567ce799c76f18ac7476b9b1e15b2a2894921
4
+ data.tar.gz: 7f0bd2519325e7456084327985f5f6c2b9866603
5
5
  SHA512:
6
- metadata.gz: f26778065b84c3e23443540a6055735634e692e39d55d4bcf99148db7c894bebd78be090d1b8a23c598cff7348e22bc42d655e9c8cbe5201adb5b232f6c88a08
7
- data.tar.gz: 95e027b181a955e673ae093e7a4263b8ecb8c3afd8d0c184745eb590daa129bba462e45c3e3196ada8707c0e7e39e284458e1b9f6d90cda51caf7b919480248d
6
+ metadata.gz: a2592d11e754ce910e9ee1a454041d590f3a5d94057fadea2d765e16f6a3d9e9f8ef34a1d16cfb11fa11d67f20fbb4861b14c77b8c47a569d2af6d68c6448ce4
7
+ data.tar.gz: 5e601ad6cb42e5e6e2b3b6eb158e033bb8ddea9b6e6fa617be2518f1f6862b38c16024a100416a50c35166f89e801ad55968adfb2762b91e0034634f8d13f4bb
data/lib/bosh/director.rb CHANGED
@@ -163,4 +163,5 @@ require 'bosh/director/api/controllers/task_controller'
163
163
  require 'bosh/director/api/controllers/users_controller'
164
164
  require 'bosh/director/api/controllers/cloud_configs_controller'
165
165
  require 'bosh/director/api/controllers/locks_controller'
166
+ require 'bosh/director/api/controllers/restore_controller'
166
167
  require 'bosh/director/api/route_configuration'
@@ -19,7 +19,7 @@ module Bosh::Director
19
19
 
20
20
  attr_accessor :id
21
21
 
22
- def self.with_vm(vm, options = {})
22
+ def self.with_vm_credentials_and_agent_id(vm_credentials, agent_id, options = {})
23
23
  defaults = {
24
24
  retry_methods: {
25
25
  get_state: GET_STATE_MAX_RETRIES,
@@ -27,10 +27,9 @@ module Bosh::Director
27
27
  }
28
28
  }
29
29
 
30
- credentials = vm.credentials
31
- defaults.merge!(credentials: credentials) if credentials
30
+ defaults.merge!(credentials: vm_credentials) if vm_credentials
32
31
 
33
- self.new('agent', vm.agent_id, defaults.merge(options))
32
+ self.new('agent', agent_id, defaults.merge(options))
34
33
  end
35
34
 
36
35
  def initialize(service_name, client_id, options = {})
@@ -26,6 +26,7 @@ require 'bosh/director/api/user/user_manager_provider'
26
26
  require 'bosh/director/api/vm_state_manager'
27
27
  require 'bosh/director/api/backup_manager'
28
28
  require 'bosh/director/api/resurrector_manager'
29
+ require 'bosh/director/api/restore_manager'
29
30
  require 'bosh/director/api/cloud_config_manager'
30
31
 
31
32
  require 'bosh/director/api/instance_lookup'
@@ -12,6 +12,7 @@ module Bosh::Director
12
12
  @identity_provider = config.identity_provider
13
13
  @deployment_manager = DeploymentManager.new
14
14
  @backup_manager = BackupManager.new
15
+ @restore_manager = RestoreManager.new
15
16
  @instance_manager = InstanceManager.new
16
17
  @resurrector_manager = ResurrectorManager.new
17
18
  @problem_manager = ProblemManager.new(@deployment_manager)
@@ -18,6 +18,8 @@ module Bosh::Director
18
18
  json_encode(response)
19
19
  end
20
20
 
21
+ # PUT /deployments/foo/jobs/dea?new_name=dea_new or
22
+ # PUT /deployments/foo/jobs/dea?state={started,stopped,detached,restart,recreate}&skip_drain=true
21
23
  put '/:deployment/jobs/:job', :consumes => :yaml do
22
24
  options = {
23
25
  'job_states' => {
@@ -26,6 +28,7 @@ module Bosh::Director
26
28
  }
27
29
  }
28
30
  }
31
+ options['skip_drain'] = params[:job] if params['skip_drain'] == 'true'
29
32
 
30
33
  deployment = @deployment_manager.find_by_name(params[:deployment])
31
34
  manifest = ((request.content_length.nil? || request.content_length.to_i == 0) && (params['state'])) ? StringIO.new(deployment.manifest) : request.body
@@ -0,0 +1,13 @@
1
+ require 'bosh/director/api/controllers/base_controller'
2
+
3
+ module Bosh::Director
4
+ module Api::Controllers
5
+ class RestoreController < BaseController
6
+ post '/', :consumes => :multipart do
7
+ @restore_manager.restore_db(params[:nginx_upload_path])
8
+
9
+ status 202
10
+ end
11
+ end
12
+ end
13
+ end
@@ -41,7 +41,7 @@ module Bosh::Director
41
41
  raise VmAgentIdMissing, "VM `#{vm.cid}' doesn't have an agent id"
42
42
  end
43
43
 
44
- AgentClient.with_vm(vm)
44
+ AgentClient.with_vm_credentials_and_agent_id(vm.credentials, vm.agent_id)
45
45
  end
46
46
 
47
47
  def fetch_logs(username, deployment_name, job, index_or_id, options = {})
@@ -0,0 +1,33 @@
1
+ module Bosh::Director
2
+ module Api
3
+ class RestoreManager
4
+ def initialize
5
+ @logger = Config.logger
6
+ @db_config = Config.db_config
7
+ end
8
+
9
+ def restore_db(path)
10
+ @logger.debug("Restoring database from db_dump file: #{path}...")
11
+
12
+ db_name = @db_config.fetch('database')
13
+ adapter = @db_config.fetch('adapter')
14
+ user = @db_config.fetch('user')
15
+ pass = @db_config.fetch('password')
16
+ host = @db_config.fetch('host')
17
+
18
+ Process.spawn(
19
+ 'sudo',
20
+ "LD_LIBRARY_PATH=#{ENV['LD_LIBRARY_PATH']}",
21
+ 'restore-db',
22
+ adapter,
23
+ host,
24
+ user,
25
+ pass,
26
+ db_name,
27
+ path,
28
+ out: '/dev/null'
29
+ )
30
+ end
31
+ end
32
+ end
33
+ end
@@ -12,6 +12,7 @@ module Bosh
12
12
  controllers = {}
13
13
  controllers['/backups'] = Bosh::Director::Api::Controllers::BackupsController.new(@config)
14
14
  controllers['/cleanup'] = Bosh::Director::Api::Controllers::CleanupController.new(@config)
15
+ controllers['/restore'] = Bosh::Director::Api::Controllers::RestoreController.new(@config)
15
16
  controllers['/cloud_configs'] = Bosh::Director::Api::Controllers::CloudConfigsController.new(@config)
16
17
  controllers['/deployments'] = Bosh::Director::Api::Controllers::DeploymentsController.new(@config)
17
18
  controllers['/disks'] = Bosh::Director::Api::Controllers::DisksController.new(@config)
@@ -20,7 +20,7 @@ module Bosh::Director
20
20
  end
21
21
 
22
22
  # remove old tasks
23
- TaskRemover.new(Config.max_tasks).remove
23
+ TaskRemover.new(Config.max_tasks).remove(type)
24
24
 
25
25
  task.output = log_dir
26
26
  task.save
@@ -4,16 +4,16 @@ module Bosh::Director::Api
4
4
  @max_tasks = max_tasks
5
5
  end
6
6
 
7
- def remove
8
- removal_candidates_dataset.each do |task|
7
+ def remove (type)
8
+ removal_candidates_dataset(type).each do |task|
9
9
  FileUtils.rm_rf(task.output) if task.output
10
10
  task.destroy
11
11
  end
12
12
  end
13
13
 
14
14
  private
15
- def removal_candidates_dataset
16
- Bosh::Director::Models::Task.filter("state NOT IN ('processing', 'queued')").
15
+ def removal_candidates_dataset(type)
16
+ Bosh::Director::Models::Task.filter("state NOT IN ('processing', 'queued') and type='#{type}'").
17
17
  order{id.desc}.limit(2, @max_tasks)
18
18
  end
19
19
  end
@@ -155,7 +155,7 @@ module Bosh::Director
155
155
  :retry_methods => { :get_state => retries }
156
156
  }
157
157
  @clients ||= {}
158
- @clients[vm.agent_id] ||= AgentClient.with_vm(vm, options)
158
+ @clients[vm.agent_id] ||= AgentClient.with_vm_credentials_and_agent_id(vm.credentials, vm.agent_id, options)
159
159
  end
160
160
 
161
161
  def agent_timeout_guard(vm, &block)
@@ -101,8 +101,8 @@ module Bosh::Director
101
101
  # the default one does nothing
102
102
  @event_log = EventLog::Log.new
103
103
 
104
- # by default keep only last 500 tasks in disk
105
- @max_tasks = config.fetch('max_tasks', 500).to_i
104
+ # by default keep only last 100 tasks of each type in disk
105
+ @max_tasks = config.fetch('max_tasks', 100).to_i
106
106
 
107
107
  @max_threads = config.fetch('max_threads', 32).to_i
108
108
 
@@ -8,7 +8,7 @@ module Bosh::Director
8
8
 
9
9
  def get_state(vm_model)
10
10
  @logger.debug("Requesting current VM state for: #{vm_model.agent_id}")
11
- agent = AgentClient.with_vm(vm_model)
11
+ agent = AgentClient.with_vm_credentials_and_agent_id(vm_model.credentials, vm_model.agent_id)
12
12
  state = agent.get_state
13
13
 
14
14
  @logger.debug("Received VM state: #{state.pretty_inspect}")
@@ -204,7 +204,7 @@ module Bosh::Director
204
204
  end
205
205
 
206
206
  def agent_client
207
- @agent_client ||= AgentClient.with_vm(@model.vm)
207
+ @agent_client ||= AgentClient.with_vm_credentials_and_agent_id(@model.vm.credentials, @model.vm.agent_id)
208
208
  end
209
209
 
210
210
  ##
@@ -42,7 +42,7 @@ module Bosh::Director
42
42
  vm_model = instance.vm.model
43
43
  begin
44
44
  @cloud.attach_disk(vm_model.cid, disk_cid)
45
- AgentClient.with_vm(vm_model).mount_disk(disk_cid)
45
+ AgentClient.with_vm_credentials_and_agent_id(vm_model.credentials, vm_model.agent_id).mount_disk(disk_cid)
46
46
  rescue => e
47
47
  @logger.warn("Failed to attach disk to new VM: #{e.inspect}")
48
48
  raise e
@@ -212,7 +212,7 @@ module Bosh::Director
212
212
  end
213
213
 
214
214
  def agent(instance)
215
- AgentClient.with_vm(instance.vm.model)
215
+ AgentClient.with_vm_credentials_and_agent_id(instance.vm.model.credentials, instance.vm.model.agent_id)
216
216
  end
217
217
 
218
218
  def create_and_attach_disk(instance_plan, vm_recreator)
@@ -169,7 +169,7 @@ module Bosh::Director
169
169
  end
170
170
 
171
171
  def agent(instance)
172
- AgentClient.with_vm(instance.model.vm)
172
+ AgentClient.with_vm_credentials_and_agent_id(instance.model.vm.credentials, instance.model.vm.agent_id)
173
173
  end
174
174
  end
175
175
  end
@@ -37,7 +37,7 @@ module Bosh::Director
37
37
  processes = []
38
38
 
39
39
  begin
40
- agent = AgentClient.with_vm(vm, :timeout => TIMEOUT)
40
+ agent = AgentClient.with_vm_credentials_and_agent_id(vm.credentials, vm.agent_id, :timeout => TIMEOUT)
41
41
  agent_state = agent.get_state(@format)
42
42
  agent_state['networks'].each_value do |network|
43
43
  ips << network['ip']
@@ -96,10 +96,6 @@ module Bosh::Director::Models
96
96
  self.spec_json = Yajl::Encoder.encode(spec)
97
97
  end
98
98
 
99
- def bind_to_vm_model(vm)
100
- self.vm = vm
101
- end
102
-
103
99
  def env
104
100
  if vm
105
101
  @env = vm.env
@@ -58,7 +58,7 @@ module Bosh::Director
58
58
 
59
59
  instance, mounted_disk_cid = @problem_register.get_vm_instance_and_disk(vm)
60
60
 
61
- agent = AgentClient.with_vm(vm, agent_options)
61
+ agent = AgentClient.with_vm_credentials_and_agent_id(vm.credentials, vm.agent_id, agent_options)
62
62
  begin
63
63
  state = agent.get_state
64
64
 
@@ -23,7 +23,7 @@ module Bosh::Director
23
23
  private
24
24
 
25
25
  def agent_client
26
- @agent_client ||= AgentClient.with_vm(@instance_model.vm)
26
+ @agent_client ||= AgentClient.with_vm_credentials_and_agent_id(@instance_model.vm.credentials, @instance_model.vm.agent_id)
27
27
  end
28
28
 
29
29
  def perform_drain
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Director
3
- VERSION = '1.3169.0'
3
+ VERSION = '1.3173.0'
4
4
  end
5
5
  end
@@ -60,7 +60,7 @@ module Bosh::Director
60
60
  instance.bind_to_vm_model(vm_model)
61
61
  VmMetadataUpdater.build.update(vm_model, {})
62
62
 
63
- agent_client = AgentClient.with_vm(vm_model)
63
+ agent_client = AgentClient.with_vm_credentials_and_agent_id(vm_model.credentials, vm_model.agent_id)
64
64
  agent_client.wait_until_ready
65
65
  instance.update_trusted_certs
66
66
  instance.update_cloud_properties!
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.3169.0
4
+ version: 1.3173.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-12-31 00:00:00.000000000 Z
11
+ date: 2016-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bosh_common
@@ -16,98 +16,98 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.3169.0
19
+ version: 1.3173.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.3169.0
26
+ version: 1.3173.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bosh_cpi
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.3169.0
33
+ version: 1.3173.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.3169.0
40
+ version: 1.3173.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bosh-registry
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.3169.0
47
+ version: 1.3173.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.3169.0
54
+ version: 1.3173.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: blobstore_client
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.3169.0
61
+ version: 1.3173.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.3169.0
68
+ version: 1.3173.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bosh-core
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.3169.0
75
+ version: 1.3173.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.3169.0
82
+ version: 1.3173.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bosh-director-core
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.3169.0
89
+ version: 1.3173.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.3169.0
96
+ version: 1.3173.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: bosh-template
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 1.3169.0
103
+ version: 1.3173.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.3169.0
110
+ version: 1.3173.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: bosh_openstack_cpi
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -674,6 +674,7 @@ files:
674
674
  - lib/bosh/director/api/controllers/packages_controller.rb
675
675
  - lib/bosh/director/api/controllers/releases_controller.rb
676
676
  - lib/bosh/director/api/controllers/resources_controller.rb
677
+ - lib/bosh/director/api/controllers/restore_controller.rb
677
678
  - lib/bosh/director/api/controllers/resurrection_controller.rb
678
679
  - lib/bosh/director/api/controllers/stemcells_controller.rb
679
680
  - lib/bosh/director/api/controllers/task_controller.rb
@@ -691,6 +692,7 @@ files:
691
692
  - lib/bosh/director/api/property_manager.rb
692
693
  - lib/bosh/director/api/release_manager.rb
693
694
  - lib/bosh/director/api/resource_manager.rb
695
+ - lib/bosh/director/api/restore_manager.rb
694
696
  - lib/bosh/director/api/resurrector_manager.rb
695
697
  - lib/bosh/director/api/route_configuration.rb
696
698
  - lib/bosh/director/api/snapshot_manager.rb