Skip to content

Commit 76f32c6

Browse files
authored
add nats.fail_if_using_nats_without_tls flag to route registrar (#370)
1 parent 11b0da1 commit 76f32c6

File tree

3 files changed

+64
-11
lines changed

3 files changed

+64
-11
lines changed

jobs/route_registrar/spec

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,13 @@ properties:
5353
description: "PEM-encoded certificate for the route-registrar to present to NATS for verification when connecting via TLS."
5454
nats.tls.client_key:
5555
description: "PEM-encoded private key for the route-registrar to present to NATS for verification when connecting via TLS."
56+
nats.fail_if_using_nats_without_tls:
57+
description: |
58+
Connecting to nats (instead of nats-tls) is deprecated. The nats
59+
process will be removed soon. Please migrate to using nats-tls as soon
60+
as possible. If you must continue using nats for a short time you can
61+
set this flag to false.
62+
default: true
5663

5764
host:
5865
description: (string, optional) By default, route_registrar will detect the IP of the VM and use it, in combination with port as the backend destination for each uri being registered. This property enables overriding the destination hostname or IP.

jobs/route_registrar/templates/registrar_settings.json.erb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
11
<%=
22
require 'json'
33

4+
nats_err_msg = <<-TEXT
5+
Using nats (instead of nats-tls) is deprecated. The nats process will
6+
be removed soon. Please migrate to using nats-tls as soon as possible.
7+
If you must continue using nats for a short time you can set the
8+
nats.fail_if_using_nats_without_tls property on route_registrar to
9+
false.
10+
TEXT
411
nats_link_name = 'nats'
512
if p('nats.tls.enabled')
613
nats_link_name = 'nats-tls'
14+
else
15+
if p('nats.fail_if_using_nats_without_tls')
16+
raise nats_err_msg
17+
end
718
end
819

920
nats_machines = nil

spec/route_registar_templates_spec.rb

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@
3434
]
3535
}
3636
],
37-
'routing_api' => {}
37+
'routing_api' => {},
38+
'nats' => {
39+
'fail_if_using_nats_without_tls' => false
40+
}
3841
}
3942
}
4043
end
@@ -215,6 +218,7 @@
215218

216219
describe 'nats properties' do
217220
it 'renders with the default' do
221+
merged_manifest_properties['nats'] = {'fail_if_using_nats_without_tls' => false }
218222
rendered_hash = JSON.parse(template.render(merged_manifest_properties, consumes: links))
219223
expect(rendered_hash['message_bus_servers'][0]['host']).to eq('nats-host:8080')
220224
expect(rendered_hash['message_bus_servers'][0]['user']).to eq('nats-user')
@@ -260,13 +264,31 @@
260264
end
261265

262266
context 'when mTLS is not enabled for NATS' do
263-
it 'renders with the default nat properties' do
264-
rendered_hash = JSON.parse(template.render(merged_manifest_properties, consumes: links))
265-
expect(rendered_hash['nats_mtls_config']['enabled']).to be false
266-
expect(rendered_hash['message_bus_servers'].length).to eq(1)
267-
expect(rendered_hash['message_bus_servers'][0]['host']).to eq('nats-host:8080')
268-
expect(rendered_hash['message_bus_servers'][0]['user']).to eq('nats-user')
269-
expect(rendered_hash['message_bus_servers'][0]['password']).to eq('nats-password')
267+
context 'when nats.fail_if_using_nats_without_tls is false' do
268+
it 'renders with the default nat properties' do
269+
merged_manifest_properties['nats'] = {'fail_if_using_nats_without_tls' => false }
270+
rendered_hash = JSON.parse(template.render(merged_manifest_properties, consumes: links))
271+
expect(rendered_hash['nats_mtls_config']['enabled']).to be false
272+
expect(rendered_hash['message_bus_servers'].length).to eq(1)
273+
expect(rendered_hash['message_bus_servers'][0]['host']).to eq('nats-host:8080')
274+
expect(rendered_hash['message_bus_servers'][0]['user']).to eq('nats-user')
275+
expect(rendered_hash['message_bus_servers'][0]['password']).to eq('nats-password')
276+
end
277+
end
278+
context 'when nats.fail_if_using_nats_without_tls is true' do
279+
it 'fails' do
280+
nats_err_msg = <<-TEXT
281+
Using nats (instead of nats-tls) is deprecated. The nats process will
282+
be removed soon. Please migrate to using nats-tls as soon as possible.
283+
If you must continue using nats for a short time you can set the
284+
nats.fail_if_using_nats_without_tls property on route_registrar to
285+
false.
286+
TEXT
287+
merged_manifest_properties['nats'] = {'fail_if_using_nats_without_tls' => true }
288+
expect { template.render(merged_manifest_properties, consumes: links) }.to raise_error(
289+
RuntimeError, nats_err_msg
290+
)
291+
end
270292
end
271293
end
272294
end
@@ -313,15 +335,19 @@
313335
}
314336
),
315337
Bosh::Template::Test::Link.new(
316-
name: 'nats',
338+
name: 'nats-tls',
317339
properties: {
318340
'nats' => {
319-
'hostname' => '', 'user' => '', 'password' => '', 'port' => 8080
341+
'hostname' => 'nats-tls-host', 'user' => 'nats-tls-user', 'password' => 'nats-tls-password', 'port' => 9090
320342
}
321-
}
343+
},
344+
instances: [Bosh::Template::Test::LinkInstance.new(address: 'my-nats-tls-ip')]
322345
)
323346
]
324347
end
348+
before do
349+
merged_manifest_properties['nats'] = { 'tls' => { 'enabled' => true } }
350+
end
325351
context 'when routing_api_url is not provided' do
326352
it 'renders with the default' do
327353
rendered_hash = JSON.parse(template.render(merged_manifest_properties, consumes: links))
@@ -360,6 +386,7 @@
360386

361387
describe 'when given a valid set of properties' do
362388
it 'renders the template' do
389+
merged_manifest_properties['nats'] = {'fail_if_using_nats_without_tls' => false }
363390
rendered_hash = JSON.parse(template.render(merged_manifest_properties, consumes: links))
364391
expect(rendered_hash).to eq(
365392
'host' => '192.168.0.0',
@@ -399,6 +426,7 @@
399426
describe 'when skip_ssl_validation is enabled' do
400427
before do
401428
merged_manifest_properties['route_registrar']['routing_api'] = { 'skip_ssl_validation' => true }
429+
merged_manifest_properties['nats'] = {'fail_if_using_nats_without_tls' => false }
402430
end
403431

404432
it 'renders skip_ssl_validation as true' do
@@ -410,6 +438,7 @@
410438
describe 'when tls is enabled and the san is not provided' do
411439
before do
412440
merged_manifest_properties['route_registrar']['routes'][0].delete('server_cert_domain_san')
441+
merged_manifest_properties['nats'] = {'fail_if_using_nats_without_tls' => false }
413442
end
414443
it 'should required san if tls_port is provided' do
415444
expect { template.render(merged_manifest_properties, consumes: links) }.to raise_error(
@@ -421,6 +450,7 @@
421450
describe 'when tls is enabled and the san is not provided' do
422451
before do
423452
merged_manifest_properties['route_registrar']['routes'][0]['server_cert_domain_san'] = ''
453+
merged_manifest_properties['nats'] = {'fail_if_using_nats_without_tls' => false }
424454
end
425455
it 'should required san if tls_port is provided' do
426456
expect { template.render(merged_manifest_properties, consumes: links) }.to raise_error(
@@ -433,6 +463,7 @@
433463
before do
434464
merged_manifest_properties['route_registrar']['routes'][0].delete('tls_port')
435465
merged_manifest_properties['route_registrar']['routes'][0].delete('server_cert_domain_san')
466+
merged_manifest_properties['nats'] = {'fail_if_using_nats_without_tls' => false }
436467
end
437468

438469
it 'renders the template' do
@@ -441,6 +472,10 @@
441472
end
442473

443474
describe 'when protocol is provided' do
475+
before do
476+
merged_manifest_properties['nats'] = {'fail_if_using_nats_without_tls' => false }
477+
end
478+
444479
it 'uses configured protocol http1' do
445480
merged_manifest_properties['route_registrar']['routes'][0]['protocol'] = 'http1'
446481
rendered_hash = JSON.parse(template.render(merged_manifest_properties, consumes: links))

0 commit comments

Comments
 (0)