-
Notifications
You must be signed in to change notification settings - Fork 10
/
deploy.sh.erb
139 lines (114 loc) · 3.7 KB
/
deploy.sh.erb
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
#!/bin/bash -eu
export PATH="/var/vcap/packages/cf-cli-6-linux/bin:$PATH"
export CF_HOME=`pwd`/home/cf
export CF_DIAL_TIMEOUT=<%= p('cf.dial_timeout') %>
SCHEME=https
DOMAIN=<%= p('domain') %>
API_ENDPOINT=$SCHEME://api.$DOMAIN
ORG=<%= p('organization') %>
SPACE=<%= p('space') %>
APP_NAME=<%= p('app_name') %>
SERVICE_BROKER_NAME=<%= p('broker_name') %>
SERVICES_CONFIG=/var/vcap/jobs/smbbrokerpush/config/services.json
SYSLOG_URL="<%= p('syslog_url') %>"
MANIFEST=/var/vcap/jobs/smbbrokerpush/manifest.yml
PROCFILE=/var/vcap/jobs/smbbrokerpush/Procfile
STARTUP_SCRIPT=/var/vcap/jobs/smbbrokerpush/start.sh
CREDHUB_CA_CERT=/var/vcap/jobs/smbbrokerpush/credhub_ca.crt
USERNAME="<%= p('username') %>"
PASSWORD="<%= p('password') %>"
APP_URL=$SCHEME://$APP_NAME.$DOMAIN
mkdir -p $CF_HOME
ERROR_EXIT_CODE=<%= p('error_on_misconfiguration') ? 1 : 0 %>
DEPLOYMENT_STATUS=0
function authenticate_and_target() {
cf api $API_ENDPOINT <% if p('skip_cert_verify') %>--skip-ssl-validation<% end %>
<% if_p('cf.client_id', 'cf.client_secret') do |client_id, client_secret| %>
cf auth "<%= client_id %>" "<%= client_secret %>" --client-credentials
<% end.else do %>
cf auth "<%= p('cf.admin_user') %>" "<%= p('cf.admin_password') %>"
<% end %>
cf create-org $ORG
cf target -o $ORG
cf create-space $SPACE
cf target -s $SPACE
}
function create_credhub_security_group() {
cf create-security-group credhub_open /var/vcap/jobs/smbbrokerpush/credhub.json
cf update-security-group credhub_open /var/vcap/jobs/smbbrokerpush/credhub.json
cf bind-security-group credhub_open $ORG $SPACE
}
function create_manifest() {
cat $MANIFEST | sed 's/PASSWORD: "[^"]*"/PASSWORD: ****/g'
cp -f $MANIFEST /var/vcap/packages/smbbroker/manifest.yml
cp -f $PROCFILE /var/vcap/packages/smbbroker/Procfile
cp -f $STARTUP_SCRIPT /var/vcap/packages/smbbroker/start.sh
chmod +x /var/vcap/packages/smbbroker/start.sh
cp -f $SERVICES_CONFIG /var/vcap/packages/smbbroker/services.json
<% if_p('credhub.ca_cert') do |_| %>
cp -f $CREDHUB_CA_CERT /var/vcap/packages/smbbroker/credhub_ca.crt
<% end %>
}
function create_logging_service() {
local LOGGER_NAME=$APP_NAME-logger
set +e
cf service $LOGGER_NAME --guid
local exit_code=$?
set -e
if [[ -z "$SYSLOG_URL" ]]; then
echo "Syslog URL is not set."
if [[ $exit_code -eq 0 ]]; then
cf unbind-service $APP_NAME $LOGGER_NAME
cf delete-service $LOGGER_NAME -f
fi
return
fi
if [[ $exit_code -ne 0 ]]; then
cf create-user-provided-service $LOGGER_NAME -l $SYSLOG_URL
else
cf update-user-provided-service $LOGGER_NAME -l $SYSLOG_URL
fi
cf bind-service $APP_NAME $LOGGER_NAME
}
function push_app() {
local exit_code
mkdir -p /var/vcap/data/tmp
export TMPDIR=/var/vcap/data/tmp
local app_stack
app_stack="cflinuxfs2"
if [[ -n "`cf stacks | grep cflinuxfs3`" ]]; then
app_stack="cflinuxfs3"
fi
pushd /var/vcap/packages/smbbroker > /dev/null
set +e
cf push "${APP_NAME}" -i 1 -s ${app_stack}
exit_code=$?
set -e
if [[ $exit_code -ne 0 ]]; then
cf logs "${APP_NAME}" --recent
exit "${exit_code}"
fi
popd > /dev/null
}
function register_service() {
cf create-service-broker $SERVICE_BROKER_NAME $USERNAME $PASSWORD $APP_URL || cf update-service-broker $SERVICE_BROKER_NAME $USERNAME $PASSWORD $APP_URL
}
function print_deployment_status() {
if [[ $DEPLOYMENT_STATUS != 0 ]]; then
echo "Deployment failed!"
exit 1
fi
echo "Deployment succeeded!"
}
cf -v
authenticate_and_target
create_manifest
<% if p('credhub.create_security_group') %>
create_credhub_security_group
<% end %>
push_app
create_logging_service
<% if p('register_broker') %>
register_service
<% end %>
print_deployment_status