1
1
#! /bin/bash
2
- set -e
2
+ set -eu
3
3
4
4
# allow the container to be started with `--user`
5
5
if [[ " $1 " == rabbitmq* ]] && [ " $( id -u) " = ' 0' ]; then
14
14
: " ${RABBITMQ_SSL_KEYFILE:= ${RABBITMQ_SSL_KEY_FILE:- } } "
15
15
: " ${RABBITMQ_SSL_CACERTFILE:= ${RABBITMQ_SSL_CA_FILE:- } } "
16
16
17
+ # "management" SSL config should default to using the same certs
18
+ : " ${RABBITMQ_MANAGEMENT_SSL_CACERTFILE:= $RABBITMQ_SSL_CACERTFILE } "
19
+ : " ${RABBITMQ_MANAGEMENT_SSL_CERTFILE:= $RABBITMQ_SSL_CERTFILE } "
20
+ : " ${RABBITMQ_MANAGEMENT_SSL_KEYFILE:= $RABBITMQ_SSL_KEYFILE } "
21
+
17
22
# https://www.rabbitmq.com/configure.html
18
- fileConfigs=(
19
- ssl_cacertfile
20
- ssl_certfile
21
- ssl_keyfile
23
+ sslConfigKeys=(
24
+ cacertfile
25
+ certfile
26
+ fail_if_no_peer_cert
27
+ keyfile
28
+ verify
22
29
)
23
- configs=(
30
+ managementConfigKeys=(
31
+ " ${sslConfigKeys[@]/#/ ssl_} "
32
+ )
33
+ rabbitConfigKeys=(
24
34
default_pass
25
35
default_user
26
36
default_vhost
27
37
hipe_compile
28
- ssl_fail_if_no_peer_cert
29
- ssl_verify
30
- " ${fileConfigs[@]} "
38
+ )
39
+ fileConfigKeys=(
40
+ management_ssl_cacertfile
41
+ management_ssl_certfile
42
+ management_ssl_keyfile
43
+ ssl_cacertfile
44
+ ssl_certfile
45
+ ssl_keyfile
46
+ )
47
+ allConfigKeys=(
48
+ " ${managementConfigKeys[@]/#/ management_} "
49
+ " ${rabbitConfigKeys[@]} "
50
+ " ${sslConfigKeys[@]/#/ ssl_} "
51
+ )
52
+
53
+ declare -A configDefaults=(
54
+ [management_ssl_fail_if_no_peer_cert]=' false'
55
+ [management_ssl_verify]=' verify_none'
56
+
57
+ [ssl_fail_if_no_peer_cert]=' true'
58
+ [ssl_verify]=' verify_peer'
31
59
)
32
60
33
61
haveConfig=
34
62
haveSslConfig=
35
- for conf in " ${configs[@]} " ; do
63
+ haveManagementSslConfig=
64
+ for conf in " ${allConfigKeys[@]} " ; do
36
65
var=" RABBITMQ_${conf^^} "
37
- val=" ${! var} "
66
+ val=" ${! var:- } "
38
67
if [ " $val " ]; then
39
68
haveConfig=1
40
- if [[ " $conf " == ssl_* ]]; then
41
- haveSslConfig=1
42
- fi
69
+ case " $conf " in
70
+ ssl_* ) haveSslConfig=1 ;;
71
+ management_ssl_* ) haveManagementSslConfig=1 ;;
72
+ esac
43
73
fi
44
74
done
45
75
if [ " $haveSslConfig " ]; then
@@ -64,7 +94,7 @@ if [ "$haveSslConfig" ]; then
64
94
fi
65
95
fi
66
96
missingFiles=()
67
- for conf in " ${fileConfigs [@]} " ; do
97
+ for conf in " ${fileConfigKeys [@]} " ; do
68
98
var=" RABBITMQ_${conf^^} "
69
99
val=" ${! var} "
70
100
if [ " $val " ] && [ ! -f " $val " ]; then
@@ -83,12 +113,20 @@ if [ "${#missingFiles[@]}" -gt 0 ]; then
83
113
exit 1
84
114
fi
85
115
116
+ # set defaults for missing values (but only after we're done with all our checking so we don't throw any of that off)
117
+ for conf in " ${! configDefaults[@]} " ; do
118
+ default=" ${configDefaults[$conf]} "
119
+ var=" RABBITMQ_${conf^^} "
120
+ [ -z " ${! var:- } " ] || continue
121
+ eval " export $var =\"\$ default\" "
122
+ done
123
+
86
124
# If long & short hostnames are not the same, use long hostnames
87
125
if [ " $( hostname) " != " $( hostname -s) " ]; then
88
126
: " ${RABBITMQ_USE_LONGNAME:= true} "
89
127
fi
90
128
91
- if [ " $RABBITMQ_ERLANG_COOKIE " ]; then
129
+ if [ " ${ RABBITMQ_ERLANG_COOKIE:- } " ]; then
92
130
cookieFile=' /var/lib/rabbitmq/.erlang.cookie'
93
131
if [ -e " $cookieFile " ]; then
94
132
if [ " $( cat " $cookieFile " 2> /dev/null) " != " $RABBITMQ_ERLANG_COOKIE " ]; then
@@ -127,6 +165,45 @@ rabbit_array() {
127
165
esac
128
166
echo -n ' ]'
129
167
}
168
+ rabbit_env_config () {
169
+ local prefix=" $1 " ; shift
170
+
171
+ local ret=()
172
+ local conf
173
+ for conf; do
174
+ local var=" rabbitmq${prefix: +_$prefix } _$conf "
175
+ var=" ${var^^} "
176
+
177
+ local val=" ${! var:- } "
178
+
179
+ local rawVal=
180
+ case " $conf " in
181
+ verify|fail_if_no_peer_cert)
182
+ [ " $val " ] || continue
183
+ rawVal=" $val "
184
+ ;;
185
+
186
+ hipe_compile)
187
+ [ " $val " ] && rawVal=' true' || rawVal=' false'
188
+ ;;
189
+
190
+ cacertfile|certfile|keyfile)
191
+ [ " $val " ] || continue
192
+ rawVal=' "' " $val " ' "'
193
+ ;;
194
+
195
+ * )
196
+ [ " $val " ] || continue
197
+ rawVal=' <<"' " $val " ' ">>'
198
+ ;;
199
+ esac
200
+ [ " $rawVal " ] || continue
201
+
202
+ ret+=( " { $conf , $rawVal }" )
203
+ done
204
+
205
+ join $' \n ' " ${ret[@]} "
206
+ }
130
207
131
208
if [ " $1 " = ' rabbitmq-server' ] && [ " $haveConfig " ]; then
132
209
fullConfig=()
@@ -135,34 +212,10 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$haveConfig" ]; then
135
212
" { loopback_users, $( rabbit_array) }"
136
213
)
137
214
138
- rabbitSslOptions=()
139
215
if [ " $haveSslConfig " ]; then
140
- for conf in " ${configs[@]} " ; do
141
- sslConf=" ${conf# ssl_} "
142
- [ " $sslConf " != " $conf " ] || continue
143
-
144
- var=" RABBITMQ_${conf^^} "
145
- val=" ${! var} "
146
-
147
- # default values
148
- case " $sslConf " in
149
- verify) : " ${val:= verify_peer} " ;;
150
- fail_if_no_peer_cert) : " ${val:= true} " ;;
151
- esac
152
-
153
- rawVal=
154
- case " $sslConf " in
155
- verify|fail_if_no_peer_cert) rawVal=" $val " ;;
156
-
157
- * )
158
- [ " $val " ] || continue
159
- rawVal=' "' " $val " ' "'
160
- ;;
161
- esac
162
- [ " $rawVal " ] || continue
163
-
164
- rabbitSslOptions+=( " { $sslConf , $rawVal }" )
165
- done
216
+ IFS=$' \n '
217
+ rabbitSslOptions=( $( rabbit_env_config ' ssl' " ${sslConfigKeys[@]} " ) )
218
+ unset IFS
166
219
167
220
rabbitConfig+=(
168
221
" { tcp_listeners, $( rabbit_array) }"
@@ -176,41 +229,23 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$haveConfig" ]; then
176
229
)
177
230
fi
178
231
179
- for conf in " ${configs[@]} " ; do
180
- var=" RABBITMQ_${conf^^} "
181
- val=" ${! var} "
182
-
183
- rawVal=
184
- case " $conf " in
185
- # SSL-related options are configured above, so should be ignored here
186
- ssl_* ) continue ;;
187
-
188
- # convert shell booleans into Erlang booleans
189
- hipe_compile)
190
- [ " $val " ] && rawVal=' true' || rawVal=' false'
191
- ;;
192
-
193
- # otherwise, assume string-based (and skip or add appropriate decorations)
194
- * )
195
- [ " $val " ] || continue
196
- rawVal=' <<"' " $val " ' ">>'
197
- ;;
198
- esac
199
- [ " $rawVal " ] || continue
200
-
201
- rabbitConfig+=( " { $conf , $rawVal }" )
202
- done
232
+ IFS=$' \n '
233
+ rabbitConfig+=( $( rabbit_env_config ' ' " ${rabbitConfigKeys[@]} " ) )
234
+ unset IFS
203
235
204
236
fullConfig+=( " { rabbit, $( rabbit_array " ${rabbitConfig[@]} " ) }" )
205
237
206
238
# If management plugin is installed, then generate config consider this
207
239
if [ " $( rabbitmq-plugins list -m -e rabbitmq_management) " ]; then
208
- rabbitManagementListenerConfig=()
209
- if [ " $haveSslConfig " ]; then
240
+ if [ " $haveManagementSslConfig " ]; then
241
+ IFS=$' \n '
242
+ rabbitManagementSslOptions=( $( rabbit_env_config ' management_ssl' " ${sslConfigKeys[@]} " ) )
243
+ unset IFS
244
+
210
245
rabbitManagementListenerConfig+=(
211
246
' { port, 15671 }'
212
247
' { ssl, true }'
213
- " { ssl_opts, $( rabbit_array " ${rabbitSslOptions [@]} " ) }"
248
+ " { ssl_opts, $( rabbit_array " ${rabbitManagementSslOptions [@]} " ) }"
214
249
)
215
250
else
216
251
rabbitManagementListenerConfig+=(
0 commit comments