Просмотр исходного кода

fix(scripts): Finds node name and cookie from vm.args

For node name and cookie overriden from environment variable
the only way to find it from another shell is to inspect
the vm.args file.

For node boot commands, the vm.args file may not have been created
yet, so we need to inspect node name in emqx.conf
Zaiming Shi 4 лет назад
Родитель
Сommit
4ee0dbdea4
2 измененных файлов с 56 добавлено и 31 удалено
  1. 44 15
      bin/emqx
  2. 12 16
      bin/emqx_ctl

+ 44 - 15
bin/emqx

@@ -260,15 +260,43 @@ if [ -z "$RELX_CONFIG_PATH" ]; then
     fi
     fi
 fi
 fi
 
 
+IS_BOOT_COMMAND='no'
+case "$1" in
+    start|start_boot)
+        IS_BOOT_COMMAND='yes'
+        ;;
+    console|console_clean|console_boot)
+        IS_BOOT_COMMAND='yes'
+        ;;
+    foreground)
+        IS_BOOT_COMMAND='yes'
+        ;;
+esac
+
+
 if [ -z "$NAME_ARG" ]; then
 if [ -z "$NAME_ARG" ]; then
     NODENAME="${EMQX_NODE_NAME:-}"
     NODENAME="${EMQX_NODE_NAME:-}"
     # compatible with docker entrypoint
     # compatible with docker entrypoint
     [ -z "$NODENAME" ] && [ -n "$EMQX_NAME" ] && [ -n "$EMQX_HOST" ] && NODENAME="${EMQX_NAME}@${EMQX_HOST}"
     [ -z "$NODENAME" ] && [ -n "$EMQX_NAME" ] && [ -n "$EMQX_HOST" ] && NODENAME="${EMQX_NAME}@${EMQX_HOST}"
-    [ -z "$NODENAME" ] && NODENAME=$(grep -E '^[ \t]*node.name[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2-)
+    if [ -z "$NODENAME" ] && [ "$IS_BOOT_COMMAND" = 'no' ]; then
+        # for non-boot commands, inspect vm.<time>.args for node name
+        LATEST_VM_ARGS="$(ls -t $RUNNER_DATA_DIR/configs/vm.*.args | head -1)"
+        if [ -z "$LATEST_VM_ARGS" ]; then
+            echo "For command $1, there is no vm.*.args config file found in $RUNNER_DATA_DIR/configs/"
+            exit 1
+        fi
+        NODENAME="$(grep -E '^-name' $LATEST_VM_ARGS | awk '{print $2}')"
+    else
+        # for boot commands, inspect emqx.conf for node name
+        NODENAME=$(grep -E '^[ \t]*node.name[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2-)
+    fi
     if [ -z "$NODENAME" ]; then
     if [ -z "$NODENAME" ]; then
-        echoerr "vm.args needs to have a -name parameter."
-        echoerr "  -sname is not supported."
-        echoerr "perhaps you do not have read permissions on $RUNNER_ETC_DIR/emqx.conf"
+        echoerr "Failed to resolve emqx node name"
+        if [ "$IS_BOOT_COMMAND" = 'yes' ]; then
+            echoerr "Make user emqx has read permissions on $RUNNER_ETC_DIR/emqx.conf"
+        fi
+        echoerr "Maybe set environment variable ENQX_NODE_NAME='name@host.name'"
+        echoerr "or set EMQX_NAME='name' EMQX_HOST='host.name'"
         exit 1
         exit 1
     else
     else
         NAME_ARG="-name ${NODENAME# *}"
         NAME_ARG="-name ${NODENAME# *}"
@@ -283,22 +311,23 @@ export ESCRIPT_NAME="$NODENAME"
 
 
 PIPE_DIR="${PIPE_DIR:-/$RUNNER_DATA_DIR/${WHOAMI}_erl_pipes/$NAME/}"
 PIPE_DIR="${PIPE_DIR:-/$RUNNER_DATA_DIR/${WHOAMI}_erl_pipes/$NAME/}"
 
 
-# Extract the target cookie
-if [ -z "$COOKIE_ARG" ]; then
-    COOKIE="${EMQX_NODE_COOKIE:-}"
-    [ -z "$COOKIE" ] && COOKIE=$(grep -E '^[ \t]*node.cookie[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2-)
+# COOKIE is only needed for non-boot commands
+# so, either read environment variable override
+# or inspect vm.<time>.args
+COOKIE="${EMQX_NODE_COOKIE:-}"
+if [ -z "$COOKIE" ] && [ "$IS_BOOT_COMMAND" = 'no' ]; then
+    LATEST_VM_ARGS="$(ls -t $RUNNER_DATA_DIR/configs/vm.*.args | head -1)"
+    if [ -z "$LATEST_VM_ARGS" ]; then
+        echo "For command $1, there is no vm.*.args config file found in $RUNNER_DATA_DIR/configs/"
+        exit 1
+    fi
+    COOKIE="$(grep -E '^-setcookie' $LATEST_VM_ARGS | awk '{print $2}')"
     if [ -z "$COOKIE" ]; then
     if [ -z "$COOKIE" ]; then
-        echoerr "vm.args needs to have a -setcookie parameter."
-        echoerr "please check $RUNNER_ETC_DIR/emqx.conf"
+        echoerr "Please set node.cookie in $RUNNER_ETC_DIR/emqx.conf or override from environment variable EMQX_NODE_COOKIE"
         exit 1
         exit 1
-    else
-        COOKIE_ARG="-setcookie $COOKIE"
     fi
     fi
 fi
 fi
 
 
-# Extract cookie name from COOKIE_ARG
-COOKIE="$(echo "$COOKIE_ARG" | awk '{print $2}')"
-
 # Support for IPv6 Dist. See: https://github.com/emqtt/emqttd/issues/1460
 # Support for IPv6 Dist. See: https://github.com/emqtt/emqttd/issues/1460
 PROTO_DIST=$(grep -E '^[ \t]*cluster.proto_dist[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2-)
 PROTO_DIST=$(grep -E '^[ \t]*cluster.proto_dist[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2-)
 if [ -z "$PROTO_DIST" ]; then
 if [ -z "$PROTO_DIST" ]; then

+ 12 - 16
bin/emqx_ctl

@@ -8,6 +8,12 @@ ROOT_DIR="$(cd "$(dirname "$(readlink "$0" || echo "$0")")"/..; pwd -P)"
 # shellcheck disable=SC1090
 # shellcheck disable=SC1090
 . "$ROOT_DIR"/releases/emqx_vars
 . "$ROOT_DIR"/releases/emqx_vars
 
 
+LATEST_VM_ARGS="$(ls -t $RUNNER_DATA_DIR/configs/vm.*.args | head -1)"
+if [ -z "$LATEST_VM_ARGS" ]; then
+    echo "No vm.*.args config file found in $RUNNER_DATA_DIR/configs/"
+    exit 1
+fi
+
 # Echo to stderr on errors
 # Echo to stderr on errors
 echoerr() { echo "$@" 1>&2; }
 echoerr() { echo "$@" 1>&2; }
 
 
@@ -34,9 +40,8 @@ relx_nodetool() {
 
 
 if [ -z "$NAME_ARG" ]; then
 if [ -z "$NAME_ARG" ]; then
     NODENAME="${EMQX_NODE_NAME:-}"
     NODENAME="${EMQX_NODE_NAME:-}"
-    # compatible with docker entrypoint
     [ -z "$NODENAME" ] && [ -n "$EMQX_NAME" ] && [ -n "$EMQX_HOST" ] && NODENAME="${EMQX_NAME}@${EMQX_HOST}"
     [ -z "$NODENAME" ] && [ -n "$EMQX_NAME" ] && [ -n "$EMQX_HOST" ] && NODENAME="${EMQX_NAME}@${EMQX_HOST}"
-    [ -z "$NODENAME" ] && NODENAME=$(grep -E '^[ \t]*node.name[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2-)
+    [ -z "$NODENAME" ] && NODENAME="$(grep -E '^-name' $LATEST_VM_ARGS | awk '{print $2}')"
     if [ -z "$NODENAME" ]; then
     if [ -z "$NODENAME" ]; then
         echoerr "vm.args needs to have a -name parameter."
         echoerr "vm.args needs to have a -name parameter."
         echoerr "  -sname is not supported."
         echoerr "  -sname is not supported."
@@ -51,22 +56,13 @@ fi
 NAME_TYPE="$(echo "$NAME_ARG" | awk '{print $1}')"
 NAME_TYPE="$(echo "$NAME_ARG" | awk '{print $1}')"
 NAME="$(echo "$NAME_ARG" | awk '{print $2}')"
 NAME="$(echo "$NAME_ARG" | awk '{print $2}')"
 
 
-# Extract the target cookie
-if [ -z "$COOKIE_ARG" ]; then
-    COOKIE="${EMQX_NODE_COOKIE:-}"
-    [ -z "$COOKIE" ] && COOKIE=$(grep -E '^[ \t]*node.cookie[ \t]*=[ \t]*' "$RUNNER_ETC_DIR/emqx.conf" 2> /dev/null | tail -1 | cut -d = -f 2-)
-    if [ -z "$COOKIE" ]; then
-        echoerr "vm.args needs to have a -setcookie parameter."
-        echoerr "please check $RUNNER_ETC_DIR/emqx.conf"
-        exit 1
-    else
-        COOKIE_ARG="-setcookie $COOKIE"
-    fi
+COOKIE="${EMQX_NODE_COOKIE:-}"
+[ -z "$COOKIE" ] && COOKIE="$(grep -E '^-setcookie' $LATEST_VM_ARGS | awk '{print $2}')"
+if [ -z "$COOKIE" ]; then
+    echoerr "Please set node.cookie in $RUNNER_ETC_DIR/emqx.conf or override from environment variable EMQX_NODE_COOKIE"
+    exit 1
 fi
 fi
 
 
-# Extract cookie name from COOKIE_ARG
-COOKIE="$(echo "$COOKIE_ARG" | awk '{print $2}')"
-
 # Support for IPv6 Dist. See: https://github.com/emqtt/emqttd/issues/1460
 # Support for IPv6 Dist. See: https://github.com/emqtt/emqttd/issues/1460
 PROTO_DIST=$(grep -E '^[ \t]*cluster.proto_dist[ \t]*=[ \t]*' "$RUNNER_ETC_DIR"/emqx.conf 2> /dev/null | tail -1 | cut -d = -f 2-)
 PROTO_DIST=$(grep -E '^[ \t]*cluster.proto_dist[ \t]*=[ \t]*' "$RUNNER_ETC_DIR"/emqx.conf 2> /dev/null | tail -1 | cut -d = -f 2-)
 if [ -z "$PROTO_DIST" ]; then
 if [ -z "$PROTO_DIST" ]; then