bosh_cli_plugin_micro 1.2089.0 → 1.2121.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.
- data/lib/bosh/cli/commands/micro.rb +6 -9
- data/lib/bosh/deployer/configuration.rb +49 -50
- data/lib/bosh/deployer/infrastructure_defaults/aws.rb +65 -0
- data/lib/bosh/deployer/infrastructure_defaults/openstack.rb +63 -0
- data/lib/bosh/deployer/infrastructure_defaults/vcloud.rb +51 -0
- data/lib/bosh/deployer/infrastructure_defaults/vsphere.rb +54 -0
- data/lib/bosh/deployer/infrastructure_defaults.rb +39 -0
- data/lib/bosh/deployer/instance_manager/aws.rb +37 -29
- data/lib/bosh/deployer/instance_manager/openstack.rb +50 -24
- data/lib/bosh/deployer/instance_manager/vcloud.rb +15 -13
- data/lib/bosh/deployer/instance_manager/vsphere.rb +15 -13
- data/lib/bosh/deployer/instance_manager.rb +42 -37
- data/lib/bosh/deployer/logger_renderer.rb +7 -2
- data/lib/bosh/deployer/microbosh_job_instance.rb +2 -2
- data/lib/bosh/deployer/models/instance.rb +4 -1
- data/lib/bosh/deployer/specification.rb +35 -29
- data/lib/bosh/deployer/version.rb +1 -1
- metadata +29 -28
- data/config/aws_defaults.yml +0 -53
- data/config/openstack_defaults.yml +0 -52
- data/config/vcloud_defaults.yml +0 -41
- data/config/vsphere_defaults.yml +0 -44
@@ -52,7 +52,7 @@ module Bosh::Cli::Command
|
|
52
52
|
if manifest['network'].blank?
|
53
53
|
err 'network is not defined in deployment manifest'
|
54
54
|
end
|
55
|
-
ip = deployer(manifest_filename).
|
55
|
+
ip = deployer(manifest_filename).client_services_ip
|
56
56
|
|
57
57
|
if target
|
58
58
|
old_director_ip = URI.parse(target).host
|
@@ -298,7 +298,8 @@ AGENT_HELP
|
|
298
298
|
usage 'micro apply'
|
299
299
|
desc 'Apply spec'
|
300
300
|
def apply(spec)
|
301
|
-
|
301
|
+
config = Bosh::Deployer::Config
|
302
|
+
deployer.apply(Bosh::Deployer::Specification.new(load_yaml_file(spec), config))
|
302
303
|
end
|
303
304
|
|
304
305
|
private
|
@@ -354,16 +355,12 @@ AGENT_HELP
|
|
354
355
|
|
355
356
|
# rubocop:disable MethodLength
|
356
357
|
def update_target
|
357
|
-
|
358
|
-
bosh_ip = deployer.discover_bosh_ip
|
359
|
-
if URI.parse(target).host != bosh_ip
|
360
|
-
set_current(deployment)
|
361
|
-
end
|
362
|
-
|
363
|
-
director = Bosh::Cli::Client::Director.new(target)
|
358
|
+
set_target(deployer.client_services_ip)
|
364
359
|
|
360
|
+
if deployer.exists?
|
365
361
|
if options[:director_checks]
|
366
362
|
begin
|
363
|
+
director = Bosh::Cli::Client::Director.new(target)
|
367
364
|
status = director.get_status
|
368
365
|
rescue Bosh::Cli::AuthError
|
369
366
|
status = {}
|
@@ -1,13 +1,17 @@
|
|
1
|
+
require 'bosh/deployer/models/instance'
|
2
|
+
require 'bosh/deployer/infrastructure_defaults'
|
3
|
+
|
1
4
|
module Bosh::Deployer
|
2
5
|
class Configuration
|
3
6
|
attr_accessor :logger, :db, :uuid, :resources, :cloud_options,
|
4
|
-
:spec_properties, :agent_properties, :
|
7
|
+
:spec_properties, :agent_properties, :env, :name, :net_conf
|
8
|
+
|
9
|
+
attr_reader :base_dir
|
5
10
|
|
6
11
|
# rubocop:disable MethodLength
|
7
12
|
def configure(config)
|
8
13
|
plugin = config['cloud']['plugin']
|
9
|
-
|
10
|
-
config = deep_merge(load_defaults(plugin), config)
|
14
|
+
config = InfrastructureDefaults.merge_for(plugin, config)
|
11
15
|
|
12
16
|
@base_dir = config['dir']
|
13
17
|
FileUtils.mkdir_p(@base_dir)
|
@@ -15,9 +19,9 @@ module Bosh::Deployer
|
|
15
19
|
@name = config['name']
|
16
20
|
@cloud_options = config['cloud']
|
17
21
|
@net_conf = config['network']
|
18
|
-
@bosh_ip = @net_conf['ip']
|
19
22
|
@resources = config['resources']
|
20
23
|
@env = config['env']
|
24
|
+
@deployment_network = config['deployment_network']
|
21
25
|
|
22
26
|
@logger = Logger.new(config['logging']['file'] || STDOUT)
|
23
27
|
@logger.level = Logger.const_get(config['logging']['level'].upcase)
|
@@ -46,8 +50,7 @@ module Bosh::Deployer
|
|
46
50
|
Sequel::Model.plugin :validation_helpers
|
47
51
|
|
48
52
|
Bosh::Clouds::Config.configure(self)
|
49
|
-
|
50
|
-
require 'bosh/deployer/models/instance'
|
53
|
+
Models.define_instance_from_table(db[:instances])
|
51
54
|
|
52
55
|
@cloud_options['properties']['agent']['mbus'] ||=
|
53
56
|
'https://vcap:b00tstrap@0.0.0.0:6868'
|
@@ -55,6 +58,8 @@ module Bosh::Deployer
|
|
55
58
|
@disk_model = nil
|
56
59
|
@cloud = nil
|
57
60
|
@networks = nil
|
61
|
+
|
62
|
+
self
|
58
63
|
end
|
59
64
|
# rubocop:enable MethodLength
|
60
65
|
|
@@ -66,26 +71,12 @@ module Bosh::Deployer
|
|
66
71
|
@cloud
|
67
72
|
end
|
68
73
|
|
69
|
-
def agent
|
70
|
-
uri = URI.parse(agent_url)
|
71
|
-
user, password = uri.userinfo.split(':', 2)
|
72
|
-
uri.userinfo = nil
|
73
|
-
uri.host = bosh_ip
|
74
|
-
Bosh::Agent::HTTPClient.new(uri.to_s, {
|
75
|
-
'user' => user,
|
76
|
-
'password' => password,
|
77
|
-
'reply_to' => uuid,
|
78
|
-
})
|
79
|
-
end
|
80
|
-
|
81
74
|
def agent_url
|
82
75
|
@cloud_options['properties']['agent']['mbus']
|
83
76
|
end
|
84
77
|
|
85
78
|
def networks
|
86
|
-
|
87
|
-
|
88
|
-
@networks = {
|
79
|
+
@networks ||= {
|
89
80
|
'bosh' => {
|
90
81
|
'cloud_properties' => @net_conf['cloud_properties'],
|
91
82
|
'netmask' => @net_conf['netmask'],
|
@@ -95,16 +86,7 @@ module Bosh::Deployer
|
|
95
86
|
'type' => @net_conf['type'],
|
96
87
|
'default' => %w(dns gateway)
|
97
88
|
}
|
98
|
-
}
|
99
|
-
if @net_conf['vip']
|
100
|
-
@networks['vip'] = {
|
101
|
-
'ip' => @net_conf['vip'],
|
102
|
-
'type' => 'vip',
|
103
|
-
'cloud_properties' => {}
|
104
|
-
}
|
105
|
-
end
|
106
|
-
|
107
|
-
@networks
|
89
|
+
}.merge(vip_network).merge(deployment_network)
|
108
90
|
end
|
109
91
|
|
110
92
|
def task_checkpoint
|
@@ -114,8 +96,44 @@ module Bosh::Deployer
|
|
114
96
|
# NoMethodError exceptions.
|
115
97
|
end
|
116
98
|
|
99
|
+
def agent_services_ip
|
100
|
+
if net_conf['type'] == 'dynamic'
|
101
|
+
net_conf['vip']
|
102
|
+
elsif @deployment_network
|
103
|
+
@deployment_network['ip']
|
104
|
+
else
|
105
|
+
net_conf['ip']
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def client_services_ip
|
110
|
+
net_conf['vip'] || net_conf['ip']
|
111
|
+
end
|
112
|
+
|
113
|
+
def internal_services_ip
|
114
|
+
'127.0.0.1'
|
115
|
+
end
|
116
|
+
|
117
117
|
private
|
118
118
|
|
119
|
+
def vip_network
|
120
|
+
return {} unless @net_conf['vip']
|
121
|
+
{
|
122
|
+
'vip' => {
|
123
|
+
'ip' => @net_conf['vip'],
|
124
|
+
'type' => 'vip',
|
125
|
+
'cloud_properties' => {}
|
126
|
+
}
|
127
|
+
}
|
128
|
+
end
|
129
|
+
|
130
|
+
def deployment_network
|
131
|
+
return {} unless @deployment_network
|
132
|
+
{
|
133
|
+
'deployment' => @deployment_network
|
134
|
+
}
|
135
|
+
end
|
136
|
+
|
119
137
|
def migrate_cpi
|
120
138
|
cpi = @cloud_options['plugin']
|
121
139
|
require_path = File.join('cloud', cpi)
|
@@ -127,24 +145,5 @@ module Bosh::Deployer
|
|
127
145
|
Sequel::TimestampMigrator.new(@db, migrations, table: "#{cpi}_cpi_schema").run
|
128
146
|
end
|
129
147
|
end
|
130
|
-
|
131
|
-
def deep_merge(src, dst)
|
132
|
-
src.merge(dst) do |key, old, new|
|
133
|
-
if new.respond_to?(:blank) && new.blank?
|
134
|
-
old
|
135
|
-
elsif old.kind_of?(Hash) && new.kind_of?(Hash)
|
136
|
-
deep_merge(old, new)
|
137
|
-
elsif old.kind_of?(Array) && new.kind_of?(Array)
|
138
|
-
old.concat(new).uniq
|
139
|
-
else
|
140
|
-
new
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
def load_defaults(provider)
|
146
|
-
file = File.expand_path("../../../../config/#{provider}_defaults.yml", __FILE__)
|
147
|
-
Psych.load_file(file)
|
148
|
-
end
|
149
148
|
end
|
150
149
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Bosh::Deployer::InfrastructureDefaults
|
2
|
+
AWS = {
|
3
|
+
'name' => nil,
|
4
|
+
'logging' => {
|
5
|
+
'level' => 'INFO'
|
6
|
+
},
|
7
|
+
'dir' => nil,
|
8
|
+
'network' => {
|
9
|
+
'type' => 'dynamic',
|
10
|
+
'cloud_properties' => {}
|
11
|
+
},
|
12
|
+
'env' => {
|
13
|
+
'bosh' => {
|
14
|
+
'password' => nil
|
15
|
+
}
|
16
|
+
},
|
17
|
+
'resources' => {
|
18
|
+
'persistent_disk' => 4096,
|
19
|
+
'cloud_properties' => {
|
20
|
+
'instance_type' => 'm1.small',
|
21
|
+
'availability_zone' => nil
|
22
|
+
}
|
23
|
+
},
|
24
|
+
'cloud' => {
|
25
|
+
'plugin' => 'aws',
|
26
|
+
'properties' => {
|
27
|
+
'aws' => {
|
28
|
+
'access_key_id' => nil,
|
29
|
+
'secret_access_key' => nil,
|
30
|
+
'ec2_endpoint' => nil,
|
31
|
+
'max_retries' => 2,
|
32
|
+
'default_key_name' => nil,
|
33
|
+
'default_security_groups' => [],
|
34
|
+
'ssh_user' => 'vcap'
|
35
|
+
},
|
36
|
+
'registry' => {
|
37
|
+
'endpoint' => 'http://admin:admin@localhost:25888',
|
38
|
+
'user' => 'admin',
|
39
|
+
'password' => 'admin'
|
40
|
+
},
|
41
|
+
'stemcell' => {
|
42
|
+
'kernel_id' => nil,
|
43
|
+
'disk' => 4096
|
44
|
+
},
|
45
|
+
'agent' => {
|
46
|
+
'ntp' => [],
|
47
|
+
'blobstore' => {
|
48
|
+
'provider' => 'local',
|
49
|
+
'options' => {
|
50
|
+
'blobstore_path' => '/var/vcap/micro_bosh/data/cache'
|
51
|
+
}
|
52
|
+
},
|
53
|
+
'mbus' => nil
|
54
|
+
}
|
55
|
+
}
|
56
|
+
},
|
57
|
+
'apply_spec' => {
|
58
|
+
'properties' => {},
|
59
|
+
'agent' => {
|
60
|
+
'blobstore' => {},
|
61
|
+
'nats' => {}
|
62
|
+
}
|
63
|
+
}
|
64
|
+
}
|
65
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Bosh::Deployer::InfrastructureDefaults
|
2
|
+
OPENSTACK = {
|
3
|
+
'name' => nil,
|
4
|
+
'logging' => {
|
5
|
+
'level' => 'INFO'
|
6
|
+
},
|
7
|
+
'dir' => nil,
|
8
|
+
'network' => {
|
9
|
+
'type' => 'dynamic',
|
10
|
+
'cloud_properties' => {}
|
11
|
+
},
|
12
|
+
'env' => {
|
13
|
+
'bosh' => {
|
14
|
+
'password' => nil
|
15
|
+
}
|
16
|
+
},
|
17
|
+
'resources' => {
|
18
|
+
'persistent_disk' => 4096,
|
19
|
+
'cloud_properties' => {
|
20
|
+
'instance_type' => 'm1.small',
|
21
|
+
'availability_zone' => nil
|
22
|
+
}
|
23
|
+
},
|
24
|
+
'cloud' => {
|
25
|
+
'plugin' => 'openstack',
|
26
|
+
'properties' => {
|
27
|
+
'openstack' => {
|
28
|
+
'auth_url' => nil,
|
29
|
+
'username' => nil,
|
30
|
+
'api_key' => nil,
|
31
|
+
'tenant' => nil,
|
32
|
+
'region' => nil,
|
33
|
+
'endpoint_type' => 'publicURL',
|
34
|
+
'default_key_name' => nil,
|
35
|
+
'default_security_groups' => [],
|
36
|
+
'ssh_user' => 'vcap'
|
37
|
+
},
|
38
|
+
'registry' => {
|
39
|
+
'endpoint' => 'http://admin:admin@localhost:25889',
|
40
|
+
'user' => 'admin',
|
41
|
+
'password' => 'admin'
|
42
|
+
},
|
43
|
+
'agent' => {
|
44
|
+
'ntp' => [],
|
45
|
+
'blobstore' => {
|
46
|
+
'provider' => 'local',
|
47
|
+
'options' => {
|
48
|
+
'blobstore_path' => '/var/vcap/micro_bosh/data/cache'
|
49
|
+
}
|
50
|
+
},
|
51
|
+
'mbus' => nil
|
52
|
+
}
|
53
|
+
}
|
54
|
+
},
|
55
|
+
'apply_spec' => {
|
56
|
+
'properties' => {},
|
57
|
+
'agent' => {
|
58
|
+
'blobstore' => {},
|
59
|
+
'nats' => {}
|
60
|
+
}
|
61
|
+
}
|
62
|
+
}
|
63
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Bosh::Deployer::InfrastructureDefaults
|
2
|
+
VCLOUD = {
|
3
|
+
'name' => nil,
|
4
|
+
'logging' => {
|
5
|
+
'level' => 'INFO'
|
6
|
+
},
|
7
|
+
'dir' => nil,
|
8
|
+
'network' => {
|
9
|
+
'dns' => [],
|
10
|
+
'cloud_properties' => {
|
11
|
+
'name' => nil
|
12
|
+
}
|
13
|
+
},
|
14
|
+
'env' => {
|
15
|
+
'bosh' => {
|
16
|
+
'password' => nil
|
17
|
+
}
|
18
|
+
},
|
19
|
+
'resources' => {
|
20
|
+
'persistent_disk' => 4096,
|
21
|
+
'cloud_properties' => {
|
22
|
+
'ram' => 1024,
|
23
|
+
'disk' => 4096,
|
24
|
+
'cpu' => 1
|
25
|
+
}
|
26
|
+
},
|
27
|
+
'cloud' => {
|
28
|
+
'plugin' => 'vcloud',
|
29
|
+
'properties' => {
|
30
|
+
'agent' => {
|
31
|
+
'ntp' => [],
|
32
|
+
'blobstore' => {
|
33
|
+
'provider' => 'local',
|
34
|
+
'options' => {
|
35
|
+
'blobstore_path' => '/var/vcap/micro_bosh/data/cache'
|
36
|
+
}
|
37
|
+
},
|
38
|
+
'mbus' => nil
|
39
|
+
},
|
40
|
+
'vcds' => []
|
41
|
+
}
|
42
|
+
},
|
43
|
+
'apply_spec' => {
|
44
|
+
'properties' => {},
|
45
|
+
'agent' => {
|
46
|
+
'blobstore' => {},
|
47
|
+
'nats' => {}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Bosh::Deployer::InfrastructureDefaults
|
2
|
+
VSPHERE = {
|
3
|
+
'name' => nil,
|
4
|
+
'logging' => {
|
5
|
+
'level' => 'INFO'
|
6
|
+
},
|
7
|
+
'dir' => nil,
|
8
|
+
'network' => {
|
9
|
+
'ip' => nil,
|
10
|
+
'netmask' => nil,
|
11
|
+
'gateway' => nil,
|
12
|
+
'dns' => [],
|
13
|
+
'cloud_properties' => {
|
14
|
+
'name' => nil
|
15
|
+
}
|
16
|
+
},
|
17
|
+
'env' => {
|
18
|
+
'bosh' => {
|
19
|
+
'password' => nil
|
20
|
+
}
|
21
|
+
},
|
22
|
+
'resources' => {
|
23
|
+
'persistent_disk' => 4096,
|
24
|
+
'cloud_properties' => {
|
25
|
+
'ram' => 1024,
|
26
|
+
'disk' => 4096,
|
27
|
+
'cpu' => 1
|
28
|
+
}
|
29
|
+
},
|
30
|
+
'cloud' => {
|
31
|
+
'plugin' => 'vsphere',
|
32
|
+
'properties' => {
|
33
|
+
'agent' => {
|
34
|
+
'ntp' => [],
|
35
|
+
'blobstore' => {
|
36
|
+
'provider' => 'local',
|
37
|
+
'options' => {
|
38
|
+
'blobstore_path' => '/var/vcap/micro_bosh/data/cache'
|
39
|
+
}
|
40
|
+
},
|
41
|
+
'mbus' => nil
|
42
|
+
},
|
43
|
+
'vcenters' => []
|
44
|
+
}
|
45
|
+
},
|
46
|
+
'apply_spec' => {
|
47
|
+
'properties' => {},
|
48
|
+
'agent' => {
|
49
|
+
'blobstore' => {},
|
50
|
+
'nats' => {}
|
51
|
+
}
|
52
|
+
}
|
53
|
+
}
|
54
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'bosh/deployer/infrastructure_defaults/aws'
|
2
|
+
require 'bosh/deployer/infrastructure_defaults/openstack'
|
3
|
+
require 'bosh/deployer/infrastructure_defaults/vcloud'
|
4
|
+
require 'bosh/deployer/infrastructure_defaults/vsphere'
|
5
|
+
|
6
|
+
module Bosh::Deployer::InfrastructureDefaults
|
7
|
+
def self.merge_for(plugin, config)
|
8
|
+
case plugin
|
9
|
+
when 'aws'
|
10
|
+
defaults = AWS
|
11
|
+
when 'openstack'
|
12
|
+
defaults = OPENSTACK
|
13
|
+
when 'vcloud'
|
14
|
+
defaults = VCLOUD
|
15
|
+
when 'vsphere'
|
16
|
+
defaults = VSPHERE
|
17
|
+
else
|
18
|
+
raise "Infrastructure '#{plugin}' not found"
|
19
|
+
end
|
20
|
+
deep_merge(defaults, config)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def self.deep_merge(src, dst)
|
26
|
+
src.merge(dst) do |key, old, new|
|
27
|
+
if new.respond_to?(:blank) && new.blank?
|
28
|
+
old
|
29
|
+
elsif old.kind_of?(Hash) && new.kind_of?(Hash)
|
30
|
+
deep_merge(old, new)
|
31
|
+
elsif old.kind_of?(Array) && new.kind_of?(Array)
|
32
|
+
old.concat(new).uniq
|
33
|
+
else
|
34
|
+
new
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
@@ -5,10 +5,11 @@ require 'bosh/deployer/ssh_server'
|
|
5
5
|
module Bosh::Deployer
|
6
6
|
class InstanceManager
|
7
7
|
class Aws
|
8
|
-
def initialize(instance_manager, logger)
|
8
|
+
def initialize(instance_manager, config, logger)
|
9
9
|
@instance_manager = instance_manager
|
10
10
|
@logger = logger
|
11
|
-
|
11
|
+
@config = config
|
12
|
+
properties = config.cloud_options['properties']
|
12
13
|
|
13
14
|
@registry = Registry.new(
|
14
15
|
properties['registry']['endpoint'],
|
@@ -25,7 +26,7 @@ module Bosh::Deployer
|
|
25
26
|
end
|
26
27
|
|
27
28
|
def remote_tunnel
|
28
|
-
@remote_tunnel.create(instance_manager.
|
29
|
+
@remote_tunnel.create(instance_manager.client_services_ip, registry.port)
|
29
30
|
end
|
30
31
|
|
31
32
|
def disk_model
|
@@ -40,11 +41,11 @@ module Bosh::Deployer
|
|
40
41
|
# and if it doesn't exist, use the bosh deployer
|
41
42
|
# aws properties (cloud.properties.aws)
|
42
43
|
properties['aws'] =
|
43
|
-
|
44
|
-
|
44
|
+
config.spec_properties['aws'] ||
|
45
|
+
config.cloud_options['properties']['aws'].dup
|
45
46
|
|
46
|
-
properties['aws']['registry'] =
|
47
|
-
properties['aws']['stemcell'] =
|
47
|
+
properties['aws']['registry'] = config.cloud_options['properties']['registry']
|
48
|
+
properties['aws']['stemcell'] = config.cloud_options['properties']['stemcell']
|
48
49
|
|
49
50
|
spec.delete('networks')
|
50
51
|
end
|
@@ -62,29 +63,16 @@ module Bosh::Deployer
|
|
62
63
|
instance_manager.save_state
|
63
64
|
end
|
64
65
|
|
65
|
-
def
|
66
|
-
|
67
|
-
|
68
|
-
# deployed micro bosh will be cut off from the public IP when
|
69
|
-
# we re-deploy micro bosh
|
70
|
-
instance = instance_manager.cloud.ec2.instances[instance_manager.state.vm_cid]
|
71
|
-
if instance.has_elastic_ip?
|
72
|
-
ip = instance.elastic_ip.public_ip
|
73
|
-
else
|
74
|
-
ip = instance.public_ip_address
|
75
|
-
end
|
76
|
-
|
77
|
-
if ip && ip != instance_manager.bosh_ip
|
78
|
-
instance_manager.bosh_ip = ip
|
79
|
-
logger.info("discovered bosh ip=#{instance_manager.bosh_ip}")
|
80
|
-
end
|
81
|
-
end
|
66
|
+
def client_services_ip
|
67
|
+
discover_client_services_ip
|
68
|
+
end
|
82
69
|
|
83
|
-
|
70
|
+
def agent_services_ip
|
71
|
+
discover_client_services_ip
|
84
72
|
end
|
85
73
|
|
86
|
-
def
|
87
|
-
|
74
|
+
def internal_services_ip
|
75
|
+
config.internal_services_ip
|
88
76
|
end
|
89
77
|
|
90
78
|
# @return [Integer] size in MiB
|
@@ -98,13 +86,13 @@ module Bosh::Deployer
|
|
98
86
|
# is a risk of conversion errors which lead to an unnecessary
|
99
87
|
# disk migration, so we need to do a double conversion
|
100
88
|
# here to avoid that
|
101
|
-
requested = (
|
89
|
+
requested = (config.resources['persistent_disk'] / 1024.0).ceil * 1024
|
102
90
|
requested != disk_size(instance_manager.state.disk_cid)
|
103
91
|
end
|
104
92
|
|
105
93
|
private
|
106
94
|
|
107
|
-
attr_reader :registry, :instance_manager, :logger
|
95
|
+
attr_reader :registry, :instance_manager, :logger, :config
|
108
96
|
|
109
97
|
def ssh_properties(properties)
|
110
98
|
ssh_user = properties['aws']['ssh_user']
|
@@ -113,6 +101,7 @@ module Bosh::Deployer
|
|
113
101
|
|
114
102
|
key = properties['aws']['ec2_private_key']
|
115
103
|
err 'Missing properties.aws.ec2_private_key' unless key
|
104
|
+
|
116
105
|
ssh_key = File.expand_path(key)
|
117
106
|
unless File.exists?(ssh_key)
|
118
107
|
err "properties.aws.ec2_private_key '#{key}' does not exist"
|
@@ -120,6 +109,25 @@ module Bosh::Deployer
|
|
120
109
|
|
121
110
|
[ssh_key, ssh_port, ssh_user, ssh_wait]
|
122
111
|
end
|
112
|
+
|
113
|
+
def discover_client_services_ip
|
114
|
+
if instance_manager.state.vm_cid
|
115
|
+
# choose elastic IP over public, as any agent connecting to the
|
116
|
+
# deployed micro bosh will be cut off from the public IP when
|
117
|
+
# we re-deploy micro bosh
|
118
|
+
instance = instance_manager.cloud.ec2.instances[instance_manager.state.vm_cid]
|
119
|
+
if instance.has_elastic_ip?
|
120
|
+
ip = instance.elastic_ip.public_ip
|
121
|
+
else
|
122
|
+
ip = instance.public_ip_address
|
123
|
+
end
|
124
|
+
|
125
|
+
logger.info("discovered bosh ip=#{ip}")
|
126
|
+
ip
|
127
|
+
else
|
128
|
+
config.client_services_ip
|
129
|
+
end
|
130
|
+
end
|
123
131
|
end
|
124
132
|
end
|
125
133
|
end
|