bosh_deployer 0.1.4 → 0.2.4

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.
@@ -10,6 +10,10 @@ network:
10
10
  type: dynamic
11
11
  cloud_properties: {}
12
12
 
13
+ env:
14
+ bosh:
15
+ password:
16
+
13
17
  resources:
14
18
  persistent_disk: 4096
15
19
  cloud_properties:
@@ -24,15 +28,16 @@ cloud:
24
28
  secret_access_key:
25
29
  ec2_endpoint:
26
30
  max_retries: 2
27
- default_key_name: dougm
31
+ default_key_name:
28
32
  default_security_groups: []
33
+ ssh_user: vcap
29
34
  registry:
30
- endpoint: http://admin:admin@localhost:25777
35
+ endpoint: http://admin:admin@localhost:25888
31
36
  user: admin
32
37
  password: admin
33
38
  stemcell:
34
39
  kernel_id:
35
- disk_size: 4096
40
+ disk: 4096
36
41
  agent:
37
42
  ntp: []
38
43
  blobstore:
@@ -14,6 +14,10 @@ network:
14
14
  cloud_properties:
15
15
  name:
16
16
 
17
+ env:
18
+ bosh:
19
+ password:
20
+
17
21
  resources:
18
22
  persistent_disk: 4096
19
23
  cloud_properties:
@@ -5,6 +5,7 @@ require "deployer"
5
5
  module Bosh::Cli::Command
6
6
  class Micro < Base
7
7
  include Bosh::Cli::DeploymentHelper
8
+ include Bosh::Deployer::Helpers
8
9
 
9
10
  MICRO_DIRECTOR_PORT = 25555
10
11
  DEFAULT_CONFIG_PATH = File.expand_path("~/.bosh_deployer_config")
@@ -85,6 +86,8 @@ module Bosh::Cli::Command
85
86
  err "No stemcell provided"
86
87
  end
87
88
 
89
+ err "No deployment set" unless deployment
90
+
88
91
  rel_path = deployment[/#{Regexp.escape File.join(work_dir, '')}(.*)/, 1]
89
92
 
90
93
  desc = "`#{rel_path.green}' to `#{target_name.green}'"
@@ -96,7 +99,7 @@ module Bosh::Cli::Command
96
99
 
97
100
  confirmation = "Updating"
98
101
 
99
- method = :update
102
+ method = :update_deployment
100
103
  else
101
104
  if deployer.exists?
102
105
  err "Instance exists. Did you mean to --update?"
@@ -104,12 +107,12 @@ module Bosh::Cli::Command
104
107
 
105
108
  confirmation = "Deploying new"
106
109
 
107
- method = :create
110
+ method = :create_deployment
108
111
  end
109
112
 
110
113
  confirm_deployment("#{confirmation} micro BOSH instance #{desc}")
111
114
 
112
- unless File.directory?(tarball_path)
115
+ if is_tgz?(tarball_path)
113
116
  stemcell = Bosh::Cli::Stemcell.new(tarball_path, cache)
114
117
 
115
118
  say("\nVerifying stemcell...")
@@ -159,7 +162,7 @@ module Bosh::Cli::Command
159
162
 
160
163
  start_time = Time.now
161
164
 
162
- deployer.destroy
165
+ deployer.delete_deployment
163
166
 
164
167
  renderer.finish("done")
165
168
 
@@ -184,7 +187,7 @@ module Bosh::Cli::Command
184
187
  if manifest["network"].blank?
185
188
  err "network is not defined in deployment manifest"
186
189
  end
187
- ip = deployer.discover_bosh_ip || name
190
+ ip = deployer(manifest_filename).discover_bosh_ip || name
188
191
 
189
192
  if target
190
193
  old_director_ip = URI.parse(target).host
@@ -207,7 +210,7 @@ module Bosh::Cli::Command
207
210
  end
208
211
 
209
212
  def list
210
- file = File.join(work_dir, Bosh::Deployer::InstanceManager::DEPLOYMENTS_FILE)
213
+ file = File.join(work_dir, DEPLOYMENTS_FILE)
211
214
  if File.exists?(file)
212
215
  deployments = load_yaml_file(file)["instances"]
213
216
  else
@@ -250,12 +253,12 @@ module Bosh::Cli::Command
250
253
 
251
254
  private
252
255
 
253
- def deployer
256
+ def deployer(manifest_filename=nil)
254
257
  check_if_deployments_dir
255
- deployment_required
258
+ deployment_required unless manifest_filename
256
259
 
257
260
  if @deployer.nil?
258
- manifest_filename = deployment
261
+ manifest_filename ||= deployment
259
262
 
260
263
  if !File.exists?(manifest_filename)
261
264
  err("Cannot find deployment manifest in `#{manifest_filename}'")
@@ -265,12 +268,13 @@ module Bosh::Cli::Command
265
268
 
266
269
  manifest["dir"] ||= work_dir
267
270
  manifest["logging"] ||= {}
268
- if manifest["logging"]["level"] == "DEBUG"
269
- log_dir = File.dirname(manifest_filename)
270
- manifest["logging"]["file"] ||= File.join(log_dir, "bosh_micro_deploy.log")
271
+ unless manifest["logging"]["file"]
272
+ log_file = File.join(File.dirname(manifest_filename),
273
+ "bosh_micro_deploy.log")
274
+ manifest["logging"]["file"] = log_file
271
275
  end
272
276
 
273
- @deployer = Bosh::Deployer::InstanceManager.new(manifest)
277
+ @deployer = Bosh::Deployer::InstanceManager.create(manifest)
274
278
 
275
279
  $stderr.reopen("/dev/null") #silence ssl warnings
276
280
  end
@@ -7,17 +7,15 @@ module Bosh::Deployer
7
7
 
8
8
  class << self
9
9
 
10
- attr_accessor :logger, :db, :uuid, :resources, :cloud_options, :spec_properties, :bosh_ip
10
+ include Helpers
11
+
12
+ attr_accessor :logger, :db, :uuid, :resources, :cloud_options,
13
+ :spec_properties, :bosh_ip, :env
11
14
 
12
15
  def configure(config)
13
- if config["cloud"].nil?
14
- raise ConfigError, "No cloud properties defined"
15
- end
16
- if config["cloud"]["plugin"].nil?
17
- raise ConfigError, "No cloud plugin defined"
18
- end
16
+ plugin = cloud_plugin(config)
19
17
 
20
- config = deep_merge(load_defaults(config["cloud"]["plugin"]), config)
18
+ config = deep_merge(load_defaults(plugin), config)
21
19
 
22
20
  @base_dir = config["dir"]
23
21
  FileUtils.mkdir_p(@base_dir)
@@ -26,6 +24,7 @@ module Bosh::Deployer
26
24
  @net_conf = config["network"]
27
25
  @bosh_ip = @net_conf["ip"]
28
26
  @resources = config["resources"]
27
+ @env = config["env"]
29
28
 
30
29
  @logger = Logger.new(config["logging"]["file"] || STDOUT)
31
30
  @logger.level = Logger.const_get(config["logging"]["level"].upcase)
@@ -67,18 +66,6 @@ module Bosh::Deployer
67
66
  @networks = nil
68
67
  end
69
68
 
70
- def disk_model
71
- if @disk_model.nil?
72
- case @cloud_options["plugin"]
73
- when "vsphere"
74
- require "cloud/vsphere"
75
- @disk_model = VSphereCloud::Models::Disk
76
- else
77
- end
78
- end
79
- @disk_model
80
- end
81
-
82
69
  def cloud
83
70
  if @cloud.nil?
84
71
  @cloud = Bosh::Clouds::Provider.create(@cloud_options["plugin"],
@@ -0,0 +1,26 @@
1
+ # Copyright (c) 2009-2012 VMware, Inc.
2
+
3
+ module Bosh::Deployer
4
+
5
+ module Helpers
6
+
7
+ DEPLOYMENTS_FILE = "bosh-deployments.yml"
8
+
9
+ def is_tgz?(path)
10
+ File.extname(path) == ".tgz"
11
+ end
12
+
13
+ def cloud_plugin(config)
14
+ if config["cloud"].nil?
15
+ raise ConfigError, "No cloud properties defined"
16
+ end
17
+ if config["cloud"]["plugin"].nil?
18
+ raise ConfigError, "No cloud plugin defined"
19
+ end
20
+
21
+ config["cloud"]["plugin"]
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,234 @@
1
+ # Copyright (c) 2009-2012 VMware, Inc.
2
+
3
+ require 'net/ssh'
4
+
5
+ module Bosh::Deployer
6
+ class InstanceManager
7
+
8
+ class Aws < InstanceManager
9
+
10
+ def update_spec(spec)
11
+ spec = super(spec)
12
+ properties = spec["properties"]
13
+
14
+ properties["aws"] =
15
+ Config.spec_properties["aws"] ||
16
+ Config.cloud_options["properties"]["aws"].dup
17
+
18
+ properties["aws"]["registry"] = Config.cloud_options["properties"]["registry"]
19
+ properties["aws"]["stemcell"] = Config.cloud_options["properties"]["stemcell"]
20
+
21
+ spec.delete("networks")
22
+
23
+ spec
24
+ end
25
+
26
+ def configure
27
+ properties = Config.cloud_options["properties"]
28
+ @ssh_user = properties["aws"]["ssh_user"]
29
+ @ssh_port = properties["aws"]["ssh_port"] || 22
30
+ @ssh_wait = properties["aws"]["ssh_wait"] || 60
31
+
32
+ key = properties["aws"]["ec2_private_key"]
33
+ unless key
34
+ raise ConfigError, "Missing properties.aws.ec2_private_key"
35
+ end
36
+ @ssh_key = File.expand_path(key)
37
+ unless File.exists?(@ssh_key)
38
+ raise ConfigError, "properties.aws.ec2_private_key '#{key}' does not exist"
39
+ end
40
+
41
+ uri = URI.parse(properties["registry"]["endpoint"])
42
+ user, password = uri.userinfo.split(":", 2)
43
+ @registry_port = uri.port
44
+
45
+ @registry_db = Tempfile.new("aws_registry_db")
46
+ @registry_db_url = "sqlite://#{@registry_db.path}"
47
+
48
+ registry_config = {
49
+ "logfile" => "./aws_registry.log",
50
+ "http" => {
51
+ "port" => uri.port,
52
+ "user" => user,
53
+ "password" => password
54
+ },
55
+ "db" => {
56
+ "database" => @registry_db_url
57
+ },
58
+ "aws" => properties["aws"]
59
+ }
60
+
61
+ @registry_config = Tempfile.new("aws_registry_yml")
62
+ @registry_config.write(YAML.dump(registry_config))
63
+ @registry_config.close
64
+ end
65
+
66
+ def start
67
+ configure()
68
+
69
+ Sequel.connect(@registry_db_url) do |db|
70
+ migrate(db)
71
+ instances = @deployments["aws_instances"]
72
+ db[:aws_instances].insert_multiple(instances) if instances
73
+ end
74
+
75
+ unless has_aws_registry?
76
+ raise "aws_registry command not found - " +
77
+ "run 'gem install bosh_aws_registry'"
78
+ end
79
+
80
+ cmd = "aws_registry -c #{@registry_config.path}"
81
+
82
+ @registry_pid = spawn(cmd)
83
+
84
+ 5.times do
85
+ sleep 0.5
86
+ if Process.waitpid(@registry_pid, Process::WNOHANG)
87
+ raise Error, "`#{cmd}` failed, exit status=#{$?.exitstatus}"
88
+ end
89
+ end
90
+
91
+ timeout_time = Time.now.to_f + (60 * 5)
92
+ http_client = HTTPClient.new()
93
+ begin
94
+ http_client.head("http://127.0.0.1:#{@registry_port}")
95
+ sleep 0.5
96
+ rescue URI::Error, SocketError, Errno::ECONNREFUSED => e
97
+ if timeout_time - Time.now.to_f > 0
98
+ retry
99
+ else
100
+ raise "Cannot access aws_registry: #{e.message}"
101
+ end
102
+ end
103
+ logger.info("aws_registry is ready on port #{@registry_port}")
104
+ ensure
105
+ @registry_config.unlink if @registry_config
106
+ end
107
+
108
+ def stop
109
+ if @registry_pid && process_exists?(@registry_pid)
110
+ Process.kill("INT", @registry_pid)
111
+ Process.waitpid(@registry_pid)
112
+ end
113
+
114
+ return unless @registry_db_url
115
+
116
+ Sequel.connect(@registry_db_url) do |db|
117
+ @deployments["aws_instances"] = db[:aws_instances].map {|row| row}
118
+ end
119
+
120
+ save_state
121
+ @registry_db.unlink if @registry_db
122
+ end
123
+
124
+ def wait_until_agent_ready
125
+ tunnel(@registry_port)
126
+ super
127
+ end
128
+
129
+ def discover_bosh_ip
130
+ if exists?
131
+ ip = cloud.ec2.instances[state.vm_cid].public_ip_address
132
+ if ip != Config.bosh_ip
133
+ Config.bosh_ip = ip
134
+ logger.info("discovered bosh ip=#{Config.bosh_ip}")
135
+ end
136
+ end
137
+
138
+ super
139
+ end
140
+
141
+ def service_ip
142
+ cloud.ec2.instances[state.vm_cid].private_ip_address
143
+ end
144
+
145
+ private
146
+
147
+ # TODO this code is simliar to has_stemcell_copy?
148
+ # move the two into bosh_common later
149
+ def has_aws_registry?(path=ENV['PATH'])
150
+ path.split(":").each do |dir|
151
+ return true if File.exist?(File.join(dir, "aws_registry"))
152
+ end
153
+ false
154
+ end
155
+
156
+ def migrate(db)
157
+ db.create_table :aws_instances do
158
+ primary_key :id
159
+ column :instance_id, :text, :unique => true, :null => false
160
+ column :settings, :text, :null => false
161
+ end
162
+ end
163
+
164
+ def process_exists?(pid)
165
+ begin
166
+ Process.kill(0, pid)
167
+ rescue Errno::ESRCH
168
+ false
169
+ end
170
+ end
171
+
172
+ def socket_readable?(ip, port)
173
+ socket = TCPSocket.new(ip, port)
174
+ if IO.select([socket], nil, nil, 5)
175
+ logger.debug("tcp socket #{ip}:#{port} is readable")
176
+ yield
177
+ true
178
+ else
179
+ false
180
+ end
181
+ rescue SocketError => e
182
+ logger.debug("tcp socket #{ip}:#{port} SocketError: #{e.inspect}")
183
+ sleep 1
184
+ false
185
+ rescue SystemCallError => e
186
+ logger.debug("tcp socket #{ip}:#{port} SystemCallError: #{e.inspect}")
187
+ sleep 1
188
+ false
189
+ ensure
190
+ socket.close if socket
191
+ end
192
+
193
+ def tunnel(port)
194
+ return if @session
195
+
196
+ ip = discover_bosh_ip
197
+
198
+ loop until socket_readable?(ip, @ssh_port) do
199
+ #sshd is up, sleep while host keys are generated
200
+ sleep @ssh_wait
201
+ end
202
+
203
+ lo = "127.0.0.1"
204
+ cmd = "ssh -R #{port}:#{lo}:#{port} #{@ssh_user}@#{ip}"
205
+
206
+ logger.info("Preparing for ssh tunnel: #{cmd}")
207
+ loop do
208
+ begin
209
+ @session = Net::SSH.start(ip, @ssh_user, :keys => [@ssh_key],
210
+ :paranoid => false)
211
+ logger.debug("ssh #{@ssh_user}@#{ip}: ESTABLISHED")
212
+ break
213
+ rescue => e
214
+ logger.debug("ssh start #{@ssh_user}@#{ip} failed: #{e.inspect}")
215
+ sleep 1
216
+ end
217
+ end
218
+
219
+ @session.forward.remote(port, lo, port)
220
+ logger.info("`#{cmd}` started: OK")
221
+
222
+ Thread.new do
223
+ begin
224
+ @session.loop { true }
225
+ rescue IOError => e
226
+ logger.debug("`#{cmd}` terminated: #{e.inspect}")
227
+ @session = nil
228
+ end
229
+ end
230
+ end
231
+
232
+ end
233
+ end
234
+ end
@@ -0,0 +1,31 @@
1
+ # Copyright (c) 2009-2012 VMware, Inc.
2
+
3
+ module Bosh::Deployer
4
+ class InstanceManager
5
+
6
+ class Vsphere < InstanceManager
7
+
8
+ def disk_model
9
+ if @disk_model.nil?
10
+ require "cloud/vsphere"
11
+ @disk_model = VSphereCloud::Models::Disk
12
+ end
13
+ @disk_model
14
+ end
15
+
16
+ def update_spec(spec)
17
+ spec = super(spec)
18
+ properties = spec["properties"]
19
+
20
+ properties["vcenter"] =
21
+ Config.spec_properties["vcenter"] ||
22
+ Config.cloud_options["properties"]["vcenters"].first.dup
23
+
24
+ properties["vcenter"]["address"] ||= properties["vcenter"]["host"]
25
+
26
+ spec
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -3,7 +3,7 @@
3
3
  module Bosh::Deployer
4
4
  class InstanceManager
5
5
 
6
- DEPLOYMENTS_FILE = "bosh-deployments.yml"
6
+ include Helpers
7
7
 
8
8
  attr_reader :state
9
9
  attr_accessor :renderer
@@ -27,6 +27,23 @@ module Bosh::Deployer
27
27
  end
28
28
  end
29
29
 
30
+ class << self
31
+
32
+ include Helpers
33
+
34
+ def create(config)
35
+ plugin = cloud_plugin(config)
36
+
37
+ begin
38
+ require "deployer/instance_manager/#{plugin}"
39
+ rescue LoadError
40
+ raise Error, "Could not find Provider Plugin: #{plugin}"
41
+ end
42
+ Bosh::Deployer::InstanceManager.const_get(plugin.capitalize).new(config)
43
+ end
44
+
45
+ end
46
+
30
47
  def initialize(config)
31
48
  Config.configure(config)
32
49
 
@@ -51,7 +68,7 @@ module Bosh::Deployer
51
68
  end
52
69
 
53
70
  def disk_model
54
- Config.disk_model
71
+ nil
55
72
  end
56
73
 
57
74
  def instance_model
@@ -69,6 +86,37 @@ module Bosh::Deployer
69
86
  result
70
87
  end
71
88
 
89
+ def start
90
+ end
91
+
92
+ def stop
93
+ end
94
+
95
+ def with_lifecycle
96
+ start
97
+ yield
98
+ ensure
99
+ stop
100
+ end
101
+
102
+ def create_deployment(stemcell_tgz)
103
+ with_lifecycle do
104
+ create(stemcell_tgz)
105
+ end
106
+ end
107
+
108
+ def update_deployment(stemcell_tgz)
109
+ with_lifecycle do
110
+ update(stemcell_tgz)
111
+ end
112
+ end
113
+
114
+ def delete_deployment
115
+ with_lifecycle do
116
+ destroy
117
+ end
118
+ end
119
+
72
120
  def create(stemcell_tgz)
73
121
  if state.vm_cid
74
122
  raise ConfigError, "VM #{state.vm_cid} already exists"
@@ -102,6 +150,12 @@ module Bosh::Deployer
102
150
  update_persistent_disk
103
151
  end
104
152
 
153
+ unless @apply_spec
154
+ step "Fetching apply spec" do
155
+ @apply_spec = agent.release_apply_spec
156
+ end
157
+ end
158
+
105
159
  apply(@apply_spec)
106
160
 
107
161
  step "Waiting for the director" do
@@ -129,14 +183,10 @@ module Bosh::Deployer
129
183
  end
130
184
 
131
185
  def create_stemcell(stemcell_tgz)
132
- if File.directory?(stemcell_tgz)
186
+ unless is_tgz?(stemcell_tgz)
133
187
  step "Using existing stemcell" do
134
188
  end
135
189
 
136
- step "Loading apply spec" do
137
- @apply_spec = load_apply_spec("#{stemcell_tgz}/apply_spec.yml")
138
- end
139
-
140
190
  return stemcell_tgz
141
191
  end
142
192
 
@@ -145,7 +195,11 @@ module Bosh::Deployer
145
195
  run_command("tar -zxf #{stemcell_tgz} -C #{stemcell}")
146
196
  end
147
197
 
148
- @apply_spec = load_apply_spec("#{stemcell}/apply_spec.yml")
198
+ spec_file = "#{stemcell}/apply_spec.yml"
199
+ unless File.exist?(spec_file)
200
+ raise "this isn't a micro bosh stemcell - apply_spec.yml missing"
201
+ end
202
+ @apply_spec = load_apply_spec(spec_file)
149
203
  properties = Config.cloud_options["properties"]["stemcell"]
150
204
 
151
205
  step "Uploading stemcell" do
@@ -157,7 +211,8 @@ module Bosh::Deployer
157
211
  def create_vm(stemcell_cid)
158
212
  resources = Config.resources['cloud_properties']
159
213
  networks = Config.networks
160
- cloud.create_vm(state.uuid, stemcell_cid, resources, networks)
214
+ env = Config.env
215
+ cloud.create_vm(state.uuid, stemcell_cid, resources, networks, nil, env)
161
216
  end
162
217
 
163
218
  def mount_disk(disk_cid)
@@ -271,30 +326,13 @@ module Bosh::Deployer
271
326
 
272
327
  %w{blobstore postgres director redis nats aws_registry}.each do |service|
273
328
  next unless properties[service]
274
- properties[service]["address"] = bosh_ip
329
+ properties[service]["address"] = service_ip
275
330
 
276
331
  if override = Config.spec_properties[service]
277
332
  properties[service].merge!(override)
278
333
  end
279
334
  end
280
335
 
281
- case Config.cloud_options["plugin"]
282
- when "vsphere"
283
- properties["vcenter"] =
284
- Config.spec_properties["vcenter"] ||
285
- Config.cloud_options["properties"]["vcenters"].first.dup
286
-
287
- properties["vcenter"]["address"] ||= properties["vcenter"]["host"]
288
- when "aws"
289
- properties["aws"] =
290
- Config.spec_properties["aws"] ||
291
- Config.cloud_options["properties"]["aws"].dup
292
-
293
- properties["aws"]["registry"] = Config.cloud_options["properties"]["registry"]
294
- properties["aws"]["stemcell"] = Config.cloud_options["properties"]["stemcell"]
295
- else
296
- end
297
-
298
336
  spec
299
337
  end
300
338
 
@@ -309,11 +347,11 @@ module Bosh::Deployer
309
347
  end
310
348
 
311
349
  def discover_bosh_ip
312
- if exists? and cloud.respond_to?(:ec2)
313
- Config.bosh_ip = cloud.ec2.instances[state.vm_cid].private_ip_address
314
- logger.info("discovered bosh ip=#{Config.bosh_ip}")
315
- end
316
- Config.bosh_ip
350
+ bosh_ip
351
+ end
352
+
353
+ def service_ip
354
+ bosh_ip
317
355
  end
318
356
 
319
357
  private
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Bosh
4
4
  module Deployer
5
- VERSION = "0.1.4"
5
+ VERSION = "0.2.4"
6
6
  end
7
7
  end
data/lib/deployer.rb CHANGED
@@ -17,5 +17,6 @@ require "common/thread_formatter"
17
17
 
18
18
  require "deployer/version"
19
19
  require "deployer/errors"
20
+ require "deployer/helpers"
20
21
  require "deployer/config"
21
22
  require "deployer/instance_manager"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh_deployer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-11 00:00:00.000000000Z
12
+ date: 2012-07-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bosh_common
16
- requirement: &70307104764080 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 0.4.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70307104764080
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.4.0
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: bosh_cpi
27
- requirement: &70307104771300 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 0.4.2
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70307104771300
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.4.2
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: bosh_vsphere_cpi
38
- requirement: &70307104775840 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,21 +53,31 @@ dependencies:
43
53
  version: 0.4.8
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *70307104775840
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.4.8
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: bosh_aws_cpi
49
- requirement: &70307104780720 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ~>
53
68
  - !ruby/object:Gem::Version
54
- version: 0.3.3
69
+ version: 0.5.0
55
70
  type: :runtime
56
71
  prerelease: false
57
- version_requirements: *70307104780720
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.5.0
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: agent_client
60
- requirement: &70307104841300 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ~>
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: 0.1.1
66
86
  type: :runtime
67
87
  prerelease: false
68
- version_requirements: *70307104841300
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 0.1.1
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: sqlite3
71
- requirement: &70307105397640 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ~>
@@ -76,7 +101,12 @@ dependencies:
76
101
  version: 1.3.3
77
102
  type: :runtime
78
103
  prerelease: false
79
- version_requirements: *70307105397640
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.3.3
80
110
  description: Micro BOSH Deployer
81
111
  email: support@vmware.com
82
112
  executables: []
@@ -89,7 +119,10 @@ files:
89
119
  - lib/deployer.rb
90
120
  - lib/deployer/config.rb
91
121
  - lib/deployer/errors.rb
122
+ - lib/deployer/helpers.rb
92
123
  - lib/deployer/instance_manager.rb
124
+ - lib/deployer/instance_manager/aws.rb
125
+ - lib/deployer/instance_manager/vsphere.rb
93
126
  - lib/deployer/models/instance.rb
94
127
  - lib/deployer/version.rb
95
128
  - README.rdoc
@@ -109,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
142
  version: '0'
110
143
  segments:
111
144
  - 0
112
- hash: -2673180162828705393
145
+ hash: -4260462944740584037
113
146
  required_rubygems_version: !ruby/object:Gem::Requirement
114
147
  none: false
115
148
  requirements:
@@ -118,10 +151,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
151
  version: '0'
119
152
  segments:
120
153
  - 0
121
- hash: -2673180162828705393
154
+ hash: -4260462944740584037
122
155
  requirements: []
123
156
  rubyforge_project:
124
- rubygems_version: 1.8.12
157
+ rubygems_version: 1.8.24
125
158
  signing_key:
126
159
  specification_version: 3
127
160
  summary: Micro BOSH Deployer