Repository navigation
Expand file tree
/
Copy pathpre-start.sh.erb
More file actions
183 lines (147 loc) · 5.47 KB
/
Copy pathpre-start.sh.erb
File metadata and controls
183 lines (147 loc) · 5.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#!/usr/bin/env bash
set -ex
export LANG="en_US.UTF-8"
source /var/vcap/packages/capi_utils/syslog_utils.sh
tee_output_to_sys_log "cloud_controller_ng.$(basename "$0")"
SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")"
CC_JOB_DIR="/var/vcap/jobs/cloud_controller_ng"
CC_PACKAGE_DIR="/var/vcap/packages/cloud_controller_ng"
CONFIG_DIR="${CC_JOB_DIR}/config"
export CLOUD_CONTROLLER_NG_CONFIG="${CONFIG_DIR}/cloud_controller_ng.yml"
export BUNDLE_GEMFILE="${CC_PACKAGE_DIR}/cloud_controller_ng/Gemfile"
source ${CC_JOB_DIR}/bin/setup_local_blobstore.sh
source "${SCRIPT_DIR}/ruby_version.sh"
write_blobstore_scope_configs() {
local cfg_json="${CONFIG_DIR}/blobstore_configs.json"
if [[ ! -f "$cfg_json" ]]; then
echo "blobstore_configs.json not found at $cfg_json; skipping fan-out"
return 0
fi
# Use the packaged Ruby if you prefer; system Ruby is usually fine on CF VMs.
CFG="$cfg_json" DEST="$BUNDLER_DIR" ruby <<'RUBY'
require "json"
cfg_path = ENV.fetch("CFG")
dest = ENV.fetch("DEST")
data = JSON.parse(File.read(cfg_path))
%w[buildpacks droplets packages resource_pool].each do |k|
out = File.join(dest, "storage_cli_config_#{k}.json")
File.write(out, JSON.pretty_generate(data[k] || {}))
end
RUBY
}
function setup_nginx_directories {
mkdir -p "/var/vcap/sys/run/nginx_cc"
chown -R vcap:vcap "/var/vcap/sys/run/nginx_cc"
mkdir -p "/var/vcap/sys/log/nginx_cc"
chown -R vcap:vcap "/var/vcap/sys/log/nginx_cc"
mkdir -p "<%= p("cc.directories.tmpdir") %>/uploads"
chown vcap:vcap "<%= p("cc.directories.tmpdir") %>/uploads"
mkdir -p "/var/vcap/data/cloud_controller_ng/tmp/staged_droplet_uploads"
chown vcap:vcap "/var/vcap/data/cloud_controller_ng/tmp/staged_droplet_uploads"
mkdir -p "/var/vcap/data/nginx_cc/tmp"
chown vcap:vcap "/var/vcap/data/nginx_cc/tmp"
#Workarounds for running nginx master as non-root
mkdir -p "/var/vcap/packages/nginx/proxy_temp"
touch "/var/vcap/packages/nginx/logs/error.log"
chown vcap:vcap "/var/vcap/packages/nginx/logs/error.log"
}
function setup_nginx_plugin_directories {
mkdir -p "/var/vcap/sys/run/nginx_newrelic_plugin"
chown -R vcap:vcap "/var/vcap/sys/run/nginx_newrelic_plugin"
mkdir -p "/var/vcap/sys/log/nginx_newrelic_plugin"
chown -R vcap:vcap "/var/vcap/sys/log/nginx_newrelic_plugin"
cp "/var/vcap/jobs/cloud_controller_ng/config/newrelic_plugin.yml" "/var/vcap/packages/nginx_newrelic_plugin/config"
chown -R vcap:vcap "/var/vcap/packages/nginx_newrelic_plugin/config/newrelic_plugin.yml"
}
function setup_api_directories {
mkdir -p "/var/vcap/sys/run/cloud_controller_ng"
chown -R vcap:vcap "/var/vcap/sys/run/cloud_controller_ng"
mkdir -p "/var/vcap/sys/log/cloud_controller_ng"
chown -R vcap:vcap "/var/vcap/sys/log/cloud_controller_ng"
mkdir -p "/var/vcap/data/cloud_controller_ng/tmp"
chown vcap:vcap "/var/vcap/data/cloud_controller_ng/tmp"
mkdir -p "/var/vcap/sys/cores"
chown vcap:vcap "/var/vcap/sys/cores"
BUNDLER_DIR1=/tmp/bundler
BUNDLER_DIR2=/var/vcap/data/cloud_controller_ng/tmp/bundler
chpst -u vcap:vcap mkdir -p $BUNDLER_DIR1 $BUNDLER_DIR2
chpst -u vcap:vcap chmod -R go-w $BUNDLER_DIR1 $BUNDLER_DIR2
# Configure the core file location
<% if p("cc.core_file_pattern") %>
<% require 'shellwords' %>
echo <%= Shellwords.shellescape(p("cc.core_file_pattern")) %> > /proc/sys/kernel/core_pattern
<% end %>
}
function setup_directories {
setup_local_blobstore
setup_api_directories
setup_nginx_directories
setup_nginx_plugin_directories
<% if_p("cc.directories.diagnostics") do |diag_dir| %>
mkdir -p "<%= diag_dir %>"
chown vcap:vcap "<%= diag_dir %>"
<% end %>
}
function perform_migration {
pushd "${CC_PACKAGE_DIR}/cloud_controller_ng" > /dev/null
chpst -u vcap:vcap "${SCRIPT_DIR}/migrate_db"
popd > /dev/null
}
function seed_db {
pushd "${CC_PACKAGE_DIR}/cloud_controller_ng" > /dev/null
chpst -u vcap:vcap "${SCRIPT_DIR}/seed_db"
popd > /dev/null
}
function validate_encryption_keys {
pushd "${CC_PACKAGE_DIR}/cloud_controller_ng" > /dev/null
chpst -u vcap:vcap "${SCRIPT_DIR}/validate_encryption_keys"
popd > /dev/null
}
function start_bosh_dns_or_consul {
if [ -f /var/vcap/jobs/bosh-dns/bin/is-system-resolver ]; then
if (/var/vcap/jobs/bosh-dns/bin/is-system-resolver); then
echo "Waiting for bosh_dns"
/var/vcap/jobs/bosh-dns/bin/wait
else
echo "Bosh DNS is not resolver, using Consul"
start_consul_agent
fi
else
echo "Bosh DNS is-system-resolver script not present, using Consul"
start_consul_agent
fi
}
function stack_check() {
pushd "${CC_PACKAGE_DIR}/cloud_controller_ng" > /dev/null
chpst -u vcap:vcap "${SCRIPT_DIR}/stack_check"
popd > /dev/null
}
function start_consul_agent {
# Start the consul agent so we can connect to a database url provided by consul dns
if [ -f /var/vcap/jobs/consul_agent/bin/agent_ctl ]; then
# If consul is already running, start exits 1
set +e
/var/vcap/jobs/consul_agent/bin/pre-start
chpst -u vcap:vcap /var/vcap/jobs/consul_agent/bin/agent_ctl start &> /dev/null
set -e
fi
}
function main {
start_bosh_dns_or_consul
setup_directories
write_blobstore_scope_configs
<% if spec.bootstrap && p('cc.run_prestart_migrations') %>
stack_check
perform_migration
seed_db
<% if p('cc.database_encryption.skip_validation') %>
echo "Skipping DB encryption validation"
<% else %>
validate_encryption_keys
<% end %>
<% else %>
echo "Skipping DB migrations and seeds"
<% end %>
}
main
exit 0