@@ -12,7 +12,7 @@ NOLOG=0
12
12
QUIET=0
13
13
CONVERT=0
14
14
URI=" "
15
- SSH_CMD =" "
15
+ RPC_CMD =" "
16
16
METHOD=PUT
17
17
CONF_FILES=()
18
18
@@ -82,6 +82,9 @@ while [ $# -gt 0 ]; do
82
82
elif [ " ${1: 0: 6} " = " ssh://" ]; then
83
83
UNIT_CTRL=$1
84
84
shift
85
+ elif [ " ${1: 0: 9} " = " docker://" ]; then
86
+ UNIT_CTRL=$1
87
+ shift
85
88
else
86
89
echo " ${0##*/ } : ERROR: Invalid option ($1 )"
87
90
exit 1
@@ -115,9 +118,10 @@ Local options
115
118
Remote options
116
119
ssh://[user@]remote_host[:port]/path/to/control.socket # Remote Unix socket
117
120
http://remote_host:port/URI # Remote TCP socket
121
+ docker://container_ID[/non-default/control.socket] # Container on host
118
122
119
- A remote Unit control socket may also be defined with the \$ UNIT_CTRL
120
- environment variable as http://remote_host:port -OR- ssh://… (as above)
123
+ A remote Unit instance may also be defined with the \$ UNIT_CTRL environment
124
+ variable as http://remote_host:port or ssh://… or docker://… (as above).
121
125
122
126
__EOF__
123
127
exit 1
@@ -133,8 +137,16 @@ if [ "$UNIT_CTRL" = "" ]; then
133
137
fi
134
138
elif [ " ${UNIT_CTRL: 0: 6} " = " ssh://" ]; then
135
139
REMOTE=1
136
- SSH_CMD =" ssh $( echo $UNIT_CTRL | cut -f1-3 -d/) "
140
+ RPC_CMD =" ssh $( echo $UNIT_CTRL | cut -f1-3 -d/) "
137
141
UNIT_CTRL=" --unix-socket /$( echo $UNIT_CTRL | cut -f4- -d/) _"
142
+ elif [ " ${UNIT_CTRL: 0: 9} " = " docker://" ]; then
143
+ RPC_CMD=" docker exec -i $( echo $UNIT_CTRL | cut -f3 -d/) "
144
+ DOCKSOCK=/$( echo " $UNIT_CTRL " | cut -f4- -d/)
145
+ if [ " $DOCKSOCK " = " /" ]; then
146
+ DOCKSOCK=" /var/run/control.unit.sock" # Use default location if no path
147
+ fi
148
+ UNIT_CTRL=" --unix-socket $DOCKSOCK _"
149
+ REMOTE=1
138
150
elif [ " ${URI: 0: 1} " = " /" ]; then
139
151
REMOTE=1
140
152
fi
241
253
#
242
254
if [ -t 0 ] && [ ${# CONF_FILES[@]} - eq 0 ]; then
243
255
if [ "$METHOD " = "DELETE" ]; then
244
- $SSH_CMD curl -X $METHOD $UNIT_CTRL$URI 2 > /tmp/${0##*/ } .$$ | $OUTPUT
256
+ $RPC_CMD curl -X $METHOD $UNIT_CTRL$URI 2 > /tmp/${0##*/ } .$$ | $OUTPUT
245
257
elif [ "$METHOD " = "EDIT" ]; then
246
258
EDITOR=$(test "$EDITOR " && printf '%s' "$EDITOR " || command -v editor || command -v vim || echo vi)
247
259
EDIT_FILENAME=/tmp/${0##*/ } .$$ ${URI// \/ / _}
248
- $SSH_CMD curl -fsS $UNIT_CTRL$URI > $EDIT_FILENAME || exit 2
260
+ $RPC_CMD curl -fsS $UNIT_CTRL$URI > $EDIT_FILENAME || exit 2
249
261
if [ "${URI: 0: 12} " = "/ js_modules/ " ]; then
250
262
if ! hash jq 2 > /dev/null; then
251
263
echo "${0##*/ } : ERROR: jq(1 ) is required to edit JavaScript modules; install at < https:// stedolan.github.io/ jq/> "
@@ -255,23 +267,23 @@ if [ -t 0 ] && [ ${#CONF_FILES[@]} -eq 0 ]; then
255
267
EDIT_FILE=$EDIT_FILENAME .js
256
268
$EDITOR $EDIT_FILENAME .js || exit 2
257
269
# Remove the references, delete old config, push new config+reference
258
- $SSH_CMD curl -fsS $UNIT_CTRL /config/settings/js_module > /tmp/${0##*/ } .$$ _js_module && \
259
- $SSH_CMD curl -X DELETE $UNIT_CTRL /config/settings/js_module && \
260
- $SSH_CMD curl -fsSX DELETE $UNIT_CTRL$URI 2 > /tmp/${0##*/ } .$$ && \
261
- printf "%s" "$(< $EDIT_FILENAME .js)" | $SSH_CMD curl -fX PUT --data-binary @- $UNIT_CTRL$URI 2 > /tmp/${0##*/ } .$$ && \
262
- $SSH_CMD curl -X PUT --data-binary @/tmp/${0##*/ } .$$ _js_module $UNIT_CTRL / config/ settings/ js_module 2 > / tmp/ ${0##*/ } .$$
270
+ $RPC_CMD curl -fsS $UNIT_CTRL /config/settings/js_module > /tmp/${0##*/ } .$$ _js_module && \
271
+ $RPC_CMD curl -X DELETE $UNIT_CTRL /config/settings/js_module && \
272
+ $RPC_CMD curl -fsSX DELETE $UNIT_CTRL$URI 2 > /tmp/${0##*/ } .$$ && \
273
+ printf "%s" "$(< $EDIT_FILENAME .js)" | $RPC_CMD curl -fX PUT --data-binary @- $UNIT_CTRL$URI 2 > /tmp/${0##*/ } .$$ && \
274
+ $RPC_CMD curl -X PUT --data-binary @/tmp/${0##*/ } .$$ _js_module $UNIT_CTRL / config/ settings/ js_module 2 > / tmp/ ${0##*/ } .$$
263
275
elif [ $CONVERT -eq 1 ]; then
264
276
$CONVERT_FROM_JSON < $EDIT_FILENAME > $EDIT_FILENAME .yaml
265
277
$EDITOR $EDIT_FILENAME .yaml || exit 2
266
- $CONVERT_TO_JSON < $EDIT_FILENAME .yaml | $SSH_CMD curl -X PUT --data-binary @- $UNIT_CTRL$URI 2 > /tmp/${0##*/ } .$$ | $OUTPUT
278
+ $CONVERT_TO_JSON < $EDIT_FILENAME .yaml | $RPC_CMD curl -X PUT --data-binary @- $UNIT_CTRL$URI 2 > /tmp/${0##*/ } .$$ | $OUTPUT
267
279
else
268
280
tr -d '\r' < $EDIT_FILENAME > $EDIT_FILENAME .json # Remove carriage-return from newlines
269
281
$EDITOR $EDIT_FILENAME .json || exit 2
270
- $SSH_CMD curl -X PUT --data-binary @$EDIT_FILENAME .json $UNIT_CTRL$URI 2 > /tmp/${0##*/ } .$$ | $OUTPUT
282
+ $RPC_CMD curl -X PUT --data-binary @$EDIT_FILENAME .json $UNIT_CTRL$URI 2 > /tmp/${0##*/ } .$$ | $OUTPUT
271
283
fi
272
284
else
273
285
SHOW_LOG=$(echo $URI | grep -c ^/control/)
274
- $SSH_CMD curl $UNIT_CTRL$URI 2 > /tmp/${0##*/ } .$$ | $OUTPUT
286
+ $RPC_CMD curl $UNIT_CTRL$URI 2 > /tmp/${0##*/ } .$$ | $OUTPUT
275
287
fi
276
288
else
277
289
if [ "$METHOD " = "INSERT" ]; then
281
293
fi
282
294
NEW_ELEMENT=$(cat ${CONF_FILES[@]} )
283
295
echo $NEW_ELEMENT | jq > /dev/null || exit $? # Test the input is valid JSON before proceeding
284
- OLD_ARRAY=$($SSH_CMD curl -s $UNIT_CTRL$URI )
296
+ OLD_ARRAY=$($RPC_CMD curl -s $UNIT_CTRL$URI )
285
297
if [ "$(echo $OLD_ARRAY | jq -r type)" = "array" ]; then
286
- echo $OLD_ARRAY | jq ". |= [$NEW_ELEMENT ] + ." | $SSH_CMD curl -X PUT --data-binary @- $UNIT_CTRL$URI 2 > /tmp/${0##*/ } .$$ | $OUTPUT
298
+ echo $OLD_ARRAY | jq ". |= [$NEW_ELEMENT ] + ." | $RPC_CMD curl -X PUT --data-binary @- $UNIT_CTRL$URI 2 > /tmp/${0##*/ } .$$ | $OUTPUT
287
299
else
288
300
echo "${0##*/ } : ERROR: the INSERT method expects an array"
289
301
exit 3
293
305
cat ${CONF_FILES[@]} | $CONVERT_TO_JSON > / tmp/ ${0##*/ } .$$ _json
294
306
CONF_FILES=(/tmp/${0##*/ } .$$ _json)
295
307
fi
296
- cat ${CONF_FILES[@]} | $SSH_CMD curl - X $METHOD -- data- binary @- $UNIT_CTRL$URI 2 > / tmp/ ${0##*/ } .$$ | $OUTPUT
308
+ cat ${CONF_FILES[@]} | $RPC_CMD curl - X $METHOD -- data- binary @- $UNIT_CTRL$URI 2 > / tmp/ ${0##*/ } .$$ | $OUTPUT
297
309
fi
298
310
fi
299
311
0 commit comments