bosh-director 1.2583.0 → 1.2596.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,3 @@
1
- # Copyright (c) 2009-2012 VMware, Inc.
2
-
3
1
  module Bosh::Director::Models
4
2
  class Vm < Sequel::Model(Bosh::Director::Config.db)
5
3
  many_to_one :deployment
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Director
3
- VERSION = '1.2583.0'
3
+ VERSION = '1.2596.0'
4
4
  end
5
5
  end
@@ -1,12 +1,15 @@
1
1
  require 'digest/sha1'
2
2
  require 'fileutils'
3
3
  require 'securerandom'
4
+ require 'logger'
4
5
 
5
6
  module Bosh
6
7
  module Clouds
7
8
  class Dummy
8
9
  class NotImplemented < StandardError; end
9
10
 
11
+ attr_reader :commands
12
+
10
13
  def initialize(options)
11
14
  @options = options
12
15
 
@@ -22,8 +25,9 @@ module Bosh
22
25
 
23
26
  @running_vms_dir = File.join(@base_dir, 'running_vms')
24
27
 
25
- log_device = options['log_device'] || STDOUT
26
- @logger = Logger.new(log_device)
28
+ @logger = Logger.new(options['log_device'] || STDOUT)
29
+
30
+ @commands = CommandTransport.new(@base_dir, @logger)
27
31
 
28
32
  FileUtils.mkdir_p(@base_dir)
29
33
  rescue Errno::EACCES
@@ -42,13 +46,19 @@ module Bosh
42
46
 
43
47
  # rubocop:disable ParameterLists
44
48
  def create_vm(agent_id, stemcell, resource_pool, networks, disk_locality = nil, env = nil)
45
- @logger.info('Dummy: create_vm')
46
49
  # rubocop:enable ParameterLists
50
+ @logger.info('Dummy: create_vm')
51
+
52
+ cmd = commands.next_create_vm_cmd
53
+
54
+ write_agent_default_network(agent_id, cmd.ip_address) if cmd.ip_address
55
+
47
56
  write_agent_settings(agent_id, {
48
57
  agent_id: agent_id,
49
58
  blobstore: @options['agent']['blobstore'],
50
59
  ntp: [],
51
60
  disks: { persistent: {} },
61
+ networks: networks,
52
62
  vm: { name: "vm-#{agent_id}" },
53
63
  mbus: @options['nats'],
54
64
  })
@@ -71,7 +81,7 @@ module Bosh
71
81
  FileUtils.rm_rf(File.join(@base_dir, 'running_vms', vm_name))
72
82
  end
73
83
 
74
- def reboot_vm(vm)
84
+ def reboot_vm(vm_id)
75
85
  raise NotImplemented, 'Dummy CPI does not implement reboot_vm'
76
86
  end
77
87
 
@@ -79,7 +89,9 @@ module Bosh
79
89
  File.exists?(vm_file(vm_id))
80
90
  end
81
91
 
82
- def configure_networks(vm, networks)
92
+ def configure_networks(vm_id, networks)
93
+ cmd = commands.next_configure_networks_cmd(vm_id)
94
+ raise NotSupported, 'Dummy CPI was configured to return NotSupported' if cmd.not_supported
83
95
  raise NotImplemented, 'Dummy CPI does not implement configure_networks'
84
96
  end
85
97
 
@@ -130,7 +142,8 @@ module Bosh
130
142
  # Additional Dummy test helpers
131
143
 
132
144
  def vm_cids
133
- Dir.glob(File.join(@running_vms_dir, '*')).map { |vm| File.basename(vm) }
145
+ # Shuffle so that no one relies on the order of VMs
146
+ Dir.glob(File.join(@running_vms_dir, '*')).map { |vm| File.basename(vm) }.shuffle
134
147
  end
135
148
 
136
149
  def kill_agents
@@ -190,6 +203,13 @@ module Bosh
190
203
  File.write(agent_settings_file(agent_id), JSON.generate(settings))
191
204
  end
192
205
 
206
+ def write_agent_default_network(agent_id, ip_address)
207
+ # Agent looks for following file to resolve default network on dummy infrastructure
208
+ path = File.join(agent_base_dir(agent_id), 'bosh', 'dummy-default-network-settings.json')
209
+ FileUtils.mkdir_p(File.dirname(path))
210
+ File.write(path, JSON.generate('ip' => ip_address))
211
+ end
212
+
193
213
  def agent_cmd(agent_id, root_dir)
194
214
  go_agent_exe = File.expand_path('../../../../go_agent/out/bosh-agent', __FILE__)
195
215
  {
@@ -221,6 +241,49 @@ module Bosh
221
241
  def snapshot_file(snapshot_id)
222
242
  File.join(@base_dir, 'snapshots', snapshot_id)
223
243
  end
244
+
245
+ # Example file system layout for arranging commands information.
246
+ # Currently uses file system as transport but could be switch to use NATS.
247
+ # base_dir/cpi/create_vm/next -> {"something": true}
248
+ # base_dir/cpi/configure_networks/<vm_id> -> (presence)
249
+ class CommandTransport
250
+ def initialize(base_dir, logger)
251
+ @cpi_commands = File.join(base_dir, 'cpi_commands')
252
+ @logger = logger
253
+ end
254
+
255
+ def make_configure_networks_not_supported(vm_id)
256
+ @logger.info("Making configure_networks for #{vm_id} raise NotSupported")
257
+ path = File.join(@cpi_commands, 'configure_networks', vm_id)
258
+ FileUtils.mkdir_p(File.dirname(path))
259
+ File.write(path, 'marker')
260
+ end
261
+
262
+ def next_configure_networks_cmd(vm_id)
263
+ @logger.info("Reading configure_networks configuration for #{vm_id}")
264
+ vm_path = File.join(@cpi_commands, 'configure_networks', vm_id)
265
+ vm_supported = File.exists?(vm_path)
266
+ FileUtils.rm_rf(vm_path)
267
+ ConfigureNetworksCommand.new(vm_supported)
268
+ end
269
+
270
+ def make_create_vm_always_use_dynamic_ip(ip_address)
271
+ @logger.info("Making create_vm method to set ip address #{ip_address}")
272
+ always_path = File.join(@cpi_commands, 'create_vm', 'always')
273
+ FileUtils.mkdir_p(File.dirname(always_path))
274
+ File.write(always_path, ip_address)
275
+ end
276
+
277
+ def next_create_vm_cmd
278
+ @logger.info('Reading create_vm configuration')
279
+ always_path = File.join(@cpi_commands, 'create_vm', 'always')
280
+ ip_address = File.read(always_path) if File.exists?(always_path)
281
+ CreareVmCommand.new(ip_address)
282
+ end
283
+ end
284
+
285
+ class ConfigureNetworksCommand < Struct.new(:not_supported); end
286
+ class CreareVmCommand < Struct.new(:ip_address); end
224
287
  end
225
288
  end
226
289
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-director
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2583.0
4
+ version: 1.2596.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-30 00:00:00.000000000 Z
12
+ date: 2014-06-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bcrypt-ruby
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 1.2583.0
37
+ version: 1.2596.0
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 1.2583.0
45
+ version: 1.2596.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: bosh-core
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: 1.2583.0
53
+ version: 1.2596.0
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -58,7 +58,7 @@ dependencies:
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 1.2583.0
61
+ version: 1.2596.0
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: bosh-director-core
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +66,7 @@ dependencies:
66
66
  requirements:
67
67
  - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 1.2583.0
69
+ version: 1.2596.0
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,7 +74,7 @@ dependencies:
74
74
  requirements:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: 1.2583.0
77
+ version: 1.2596.0
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: bosh_common
80
80
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +82,7 @@ dependencies:
82
82
  requirements:
83
83
  - - ~>
84
84
  - !ruby/object:Gem::Version
85
- version: 1.2583.0
85
+ version: 1.2596.0
86
86
  type: :runtime
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +90,7 @@ dependencies:
90
90
  requirements:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
- version: 1.2583.0
93
+ version: 1.2596.0
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: bosh_cpi
96
96
  requirement: !ruby/object:Gem::Requirement
@@ -98,7 +98,7 @@ dependencies:
98
98
  requirements:
99
99
  - - ~>
100
100
  - !ruby/object:Gem::Version
101
- version: 1.2583.0
101
+ version: 1.2596.0
102
102
  type: :runtime
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
@@ -106,7 +106,7 @@ dependencies:
106
106
  requirements:
107
107
  - - ~>
108
108
  - !ruby/object:Gem::Version
109
- version: 1.2583.0
109
+ version: 1.2596.0
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: bosh_openstack_cpi
112
112
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +114,7 @@ dependencies:
114
114
  requirements:
115
115
  - - ~>
116
116
  - !ruby/object:Gem::Version
117
- version: 1.2583.0
117
+ version: 1.2596.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
@@ -122,7 +122,7 @@ dependencies:
122
122
  requirements:
123
123
  - - ~>
124
124
  - !ruby/object:Gem::Version
125
- version: 1.2583.0
125
+ version: 1.2596.0
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: bosh_aws_cpi
128
128
  requirement: !ruby/object:Gem::Requirement
@@ -130,7 +130,7 @@ dependencies:
130
130
  requirements:
131
131
  - - ~>
132
132
  - !ruby/object:Gem::Version
133
- version: 1.2583.0
133
+ version: 1.2596.0
134
134
  type: :runtime
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
@@ -138,7 +138,7 @@ dependencies:
138
138
  requirements:
139
139
  - - ~>
140
140
  - !ruby/object:Gem::Version
141
- version: 1.2583.0
141
+ version: 1.2596.0
142
142
  - !ruby/object:Gem::Dependency
143
143
  name: bosh_vsphere_cpi
144
144
  requirement: !ruby/object:Gem::Requirement
@@ -146,7 +146,7 @@ dependencies:
146
146
  requirements:
147
147
  - - ~>
148
148
  - !ruby/object:Gem::Version
149
- version: 1.2583.0
149
+ version: 1.2596.0
150
150
  type: :runtime
151
151
  prerelease: false
152
152
  version_requirements: !ruby/object:Gem::Requirement
@@ -154,7 +154,7 @@ dependencies:
154
154
  requirements:
155
155
  - - ~>
156
156
  - !ruby/object:Gem::Version
157
- version: 1.2583.0
157
+ version: 1.2596.0
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: bosh_warden_cpi
160
160
  requirement: !ruby/object:Gem::Requirement
@@ -162,7 +162,7 @@ dependencies:
162
162
  requirements:
163
163
  - - ~>
164
164
  - !ruby/object:Gem::Version
165
- version: 1.2583.0
165
+ version: 1.2596.0
166
166
  type: :runtime
167
167
  prerelease: false
168
168
  version_requirements: !ruby/object:Gem::Requirement
@@ -170,7 +170,7 @@ dependencies:
170
170
  requirements:
171
171
  - - ~>
172
172
  - !ruby/object:Gem::Version
173
- version: 1.2583.0
173
+ version: 1.2596.0
174
174
  - !ruby/object:Gem::Dependency
175
175
  name: bosh_vcloud_cpi
176
176
  requirement: !ruby/object:Gem::Requirement
@@ -477,7 +477,7 @@ dependencies:
477
477
  version: 1.1.0
478
478
  description: ! 'BOSH Director
479
479
 
480
- b96a92'
480
+ 3c1470'
481
481
  email: support@cloudfoundry.com
482
482
  executables:
483
483
  - bosh-director
@@ -626,11 +626,13 @@ files:
626
626
  - lib/bosh/director/instance_updater/network_updater.rb
627
627
  - lib/bosh/director/instance_updater/preparer.rb
628
628
  - lib/bosh/director/instance_updater/stopper.rb
629
+ - lib/bosh/director/instance_updater/vm_updater.rb
629
630
  - lib/bosh/director/ip_util.rb
630
631
  - lib/bosh/director/job_queue.rb
631
632
  - lib/bosh/director/job_renderer.rb
632
633
  - lib/bosh/director/job_runner.rb
633
634
  - lib/bosh/director/job_updater.rb
635
+ - lib/bosh/director/job_updater_factory.rb
634
636
  - lib/bosh/director/jobs/backup.rb
635
637
  - lib/bosh/director/jobs/base_job.rb
636
638
  - lib/bosh/director/jobs/cloud_check/apply_resolutions.rb
@@ -683,7 +685,6 @@ files:
683
685
  - lib/bosh/director/models/vm.rb
684
686
  - lib/bosh/director/nats_rpc.rb
685
687
  - lib/bosh/director/network_reservation.rb
686
- - lib/bosh/director/next_rebase_version.rb
687
688
  - lib/bosh/director/package_compiler.rb
688
689
  - lib/bosh/director/problem_handlers/base.rb
689
690
  - lib/bosh/director/problem_handlers/inactive_disk.rb
@@ -738,7 +739,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
738
739
  version: '0'
739
740
  segments:
740
741
  - 0
741
- hash: 3045382623018678181
742
+ hash: -3703569249647131017
742
743
  requirements: []
743
744
  rubyforge_project:
744
745
  rubygems_version: 1.8.23.2
@@ -1,34 +0,0 @@
1
- require 'semi_semantic/version'
2
-
3
- module Bosh::Director
4
- class NextRebaseVersion
5
-
6
- # See Bosh::Common::VersionNumber.parse_list to parse a list of strings
7
- def initialize(existing_versions)
8
- existing_versions.each { |v| raise TypeError, "Invalid Version Type: #{v.class}" unless v.is_a?(SemiSemantic::Version) }
9
- @existing_versions = existing_versions
10
- end
11
-
12
- def calculate(version)
13
- raise TypeError, "Invalid Version Type: #{version.class}" unless version.is_a?(SemiSemantic::Version)
14
-
15
- # Only rebase post-release versions
16
- return version if version.post_release.nil?
17
-
18
- # Find the latest existing version with the same release and pre-release segments as the provided version
19
- latest = @existing_versions.select { |v|
20
- v.release == version.release && v.pre_release == version.pre_release
21
- }.max
22
-
23
- if latest
24
- if latest.post_release.nil?
25
- SemiSemantic::Version.new(latest.release, latest.pre_release, Bosh::Common::VersionNumber::DEFAULT_DEV_RELEASE_SEGMENT)
26
- else
27
- SemiSemantic::Version.new(latest.release, latest.pre_release, latest.post_release.increment)
28
- end
29
- else
30
- SemiSemantic::Version.new(version.release, version.pre_release, Bosh::Common::VersionNumber::DEFAULT_DEV_RELEASE_SEGMENT)
31
- end
32
- end
33
- end
34
- end