Skip to content

Commit 3d65763

Browse files
klapkovameowlia
authored andcommitted
RFC-0030: Add support for file-based service bindings
1 parent a06bf56 commit 3d65763

File tree

8 files changed

+73
-7
lines changed

8 files changed

+73
-7
lines changed

jobs/rep/spec

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ templates:
2222
tls.key.erb: config/certs/tls.key
2323
tls_ca.crt.erb: config/certs/tls_ca.crt
2424
indicators.yml.erb: config/indicators.yml
25-
25+
volume_mounted_files.erb: bin/volume_mounted_files
26+
2627
packages:
2728
- pid_utils
2829
- rep

jobs/rep/templates/bpm-pre-start.erb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ bin_dir=/var/vcap/jobs/rep/bin
55
$bin_dir/set-rep-kernel-params
66

77
$bin_dir/setup_mounted_data_dirs
8+
9+
$bin_dir/volume_mounted_files

jobs/rep/templates/rep.json.erb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
trusted_certs_dir = "/var/vcap/data/rep/shared/garden/trusted_certs"
55
instance_identity_dir = "/var/vcap/data/rep/shared/garden/instance_identity"
66
download_cache_dir= "/var/vcap/data/rep/shared/garden/download_cache"
7+
volume_mounted_files = "/var/vcap/data/rep/shared/garden/volume_mounted_files"
78

89
zone = spec.az
910
if_p("diego.rep.zone") do |value|
@@ -104,6 +105,7 @@
104105
report_interval: "1m",
105106
max_data_string_length: p("logging.max_data_string_length"),
106107
max_log_lines_per_second: p("diego.executor.max_log_lines_per_second"),
108+
volume_mounted_files: "#{volume_mounted_files}",
107109
}
108110

109111
if p("containers.graceful_shutdown_interval_in_seconds") < 10

jobs/rep/templates/rep_ctl.erb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ case $1 in
3838

3939
$bin_dir/set-rep-kernel-params
4040
$bin_dir/setup_mounted_data_dirs
41+
$bin_dir/volume_mounted_files
4142

4243
# Allowed number of open file descriptors
4344
ulimit -n 100000
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/usr/bin/env bash
2+
3+
<%
4+
_max_containers = 250
5+
if_p("diego.rep.max_containers") do |value|
6+
_max_containers = value
7+
end
8+
if _max_containers <= 0
9+
raise "The max_containers prop should be a positive integer"
10+
end
11+
%>
12+
max_containers=<%= _max_containers %>
13+
14+
# Define the service binding root directory
15+
volume_mounted_files="/var/vcap/data/rep/shared/garden/volume_mounted_files"
16+
17+
# Calculate the size for the tmpfs (1MB per container)
18+
root_tmpfs_size=$((max_containers * 1))M
19+
20+
# Ensure the root directory is safely removed and recreated
21+
if [ -d "$volume_mounted_files" ]; then
22+
# Ensure the root directory is unmounted before removing it
23+
if mountpoint -q "$volume_mounted_files"; then
24+
fuser -k "$volume_mounted_files"
25+
umount -l "$volume_mounted_files"
26+
fi
27+
28+
sleep 10
29+
30+
rm -rf "$volume_mounted_files"
31+
fi
32+
33+
mkdir -p "$volume_mounted_files"
34+
35+
# Mount the root tmpfs
36+
mount -t tmpfs -o size="$root_tmpfs_size" tmpfs "$volume_mounted_files" || exit 1
37+
38+
# Set permissions and ownership for the root directory and all subdirectories
39+
chmod 0700 "$volume_mounted_files"
40+
chown vcap:vcap "$volume_mounted_files"

jobs/rep_windows/templates/pre-start.ps1.erb

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,12 @@ if (-Not (Get-NetFirewallRule | Where-Object { $_.DisplayName -eq "SecureRepPort
3737
}
3838

3939
# Remove old data dirs so that disk space isn't wasted. This cleanup can be removed in v4
40-
Remove-Item -Path "/var/vcap/data/rep/download_cache" -Force -Recurse -ErrorAction "Continue"
41-
Remove-Item -Path "/var/vcap/data/rep/instance_identity" -Force -Recurse -ErrorAction "Continue"
42-
Remove-Item -Path "/var/vcap/data/rep/trusted_certs" -Force -Recurse -ErrorAction "Continue"
43-
Remove-Item -Path "/var/vcap/data/rep/proxy_config" -Force -Recurse -ErrorAction "Continue"
40+
Remove-Item -Path "/var/vcap/data/rep/shared/garden/download_cache" -Force -Recurse -ErrorAction "Continue"
41+
Remove-Item -Path "/var/vcap/data/rep/shared/garden/instance_identity" -Force -Recurse -ErrorAction "Continue"
42+
Remove-Item -Path "/var/vcap/data/rep/shared/garden/trusted_certs" -Force -Recurse -ErrorAction "Continue"
43+
Remove-Item -Path "/var/vcap/data/rep/shared/garden/proxy_config" -Force -Recurse -ErrorAction "Continue"
4444
Remove-Item -Path "/var/vcap/data/rep/shared_data" -Force -Recurse -ErrorAction "Continue"
45+
Remove-Item -Path "/var/vcap/data/rep/shared/garden/volume_mounted_files" -Force -Recurse -ErrorAction "Continue"
4546

4647
$bindmountDirs = @()
4748

@@ -53,6 +54,10 @@ $instance_identity_dir = "/var/vcap/data/rep/shared/garden/instance_identity"
5354
New-Item -Path $instance_identity_dir -ItemType "directory" -Force
5455
$bindmountDirs += $instance_identity_dir
5556

57+
$service_bindings_dir = "/var/vcap/data/rep/shared/garden/volume_mounted_files"
58+
New-Item -Path $service_bindings_dir -ItemType "directory" -Force
59+
$bindmountDirs += $service_bindings_dir
60+
5661
<% if_p("containers.trusted_ca_certificates") do |value| %>
5762
$conf_dir = "C:/var/vcap/jobs/rep_windows/config"
5863
$trusted_certs_dir = "C:/var/vcap/data/rep/shared/garden/trusted_certs"

jobs/rep_windows/templates/rep.json.erb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
trusted_certs_dir = "/var/vcap/data/rep/shared/garden/trusted_certs"
55
instance_identity_dir = "/var/vcap/data/rep/shared/garden/instance_identity"
66
download_cache_dir= "/var/vcap/data/rep/shared/garden/download_cache"
7+
volume_mounted_files = "/var/vcap/data/rep/shared/garden/volume_mounted_files"
78

89
zone = spec.az
910
if_p("diego.rep.zone") do |value|
@@ -104,6 +105,7 @@
104105
report_interval: "1m",
105106
max_data_string_length: p("logging.max_data_string_length"),
106107
max_log_lines_per_second: p("diego.executor.max_log_lines_per_second"),
108+
volume_mounted_files: "#{volume_mounted_files}",
107109
}
108110

109111
if p("containers.graceful_shutdown_interval_in_seconds") < 10

spec/rep_template_spec.rb

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,5 +106,18 @@
106106
end.to raise_error(/The max_containers prop should be a positive integer/)
107107
end
108108
end
109-
end
110-
end
109+
end
110+
111+
describe 'volume_mounted_files.erb' do
112+
let(:template) { job.template('bin/volume_mounted_files') }
113+
114+
context 'checks the max_containers value' do
115+
it 'raises an error if max_containers is <= 0' do
116+
deployment_manifest_fragment['diego']['rep']['max_containers'] = -10
117+
expect do
118+
rendered_template
119+
end.to raise_error(/The max_containers prop should be a positive integer/)
120+
end
121+
end
122+
end
123+
end

0 commit comments

Comments
 (0)