aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuis Rascão <[email protected]>2018-02-15 16:56:26 +0000
committerGitHub <[email protected]>2018-02-15 16:56:26 +0000
commit86d415f33c500d432d6c9fa2fcbff3bb2fff3e8f (patch)
tree2cbd5d32ad9db7f107f0289b283bab425ff3ce25
parentaf3ae8a64f92054ce474f5d67bdd467d3ca8d74e (diff)
parent310b7047a2dba4d4ed6ef8ef52a96456073e0c16 (diff)
downloadrelx-86d415f33c500d432d6c9fa2fcbff3bb2fff3e8f.tar.gz
relx-86d415f33c500d432d6c9fa2fcbff3bb2fff3e8f.tar.bz2
relx-86d415f33c500d432d6c9fa2fcbff3bb2fff3e8f.zip
Merge pull request #640 from juise/masterv3.24.5
Add extra args from vm.args into escripts and erl
-rwxr-xr-xpriv/templates/extended_bin19
-rw-r--r--test/rlx_extended_bin_SUITE.erl44
2 files changed, 60 insertions, 3 deletions
diff --git a/priv/templates/extended_bin b/priv/templates/extended_bin
index ac74358..1e8aa63 100755
--- a/priv/templates/extended_bin
+++ b/priv/templates/extended_bin
@@ -167,7 +167,7 @@ relx_rem_sh() {
# Setup remote shell command to control node
exec "$BINDIR/erl" "$NAME_TYPE" "$id" -remsh "$NAME" -boot start_clean \
-boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR" \
- -setcookie "$COOKIE" -hidden -kernel net_ticktime $TICKTIME
+ -setcookie "$COOKIE" -hidden -kernel net_ticktime $TICKTIME $VM_ARGS
}
# Generate a random id
@@ -179,6 +179,8 @@ relx_gen_id() {
relx_nodetool() {
command="$1"; shift
+ escript_emulator_args $ROOTDIR/bin/nodetool
+
"$ERTS_DIR/bin/escript" "$ROOTDIR/bin/nodetool" "$NAME_TYPE" "$NAME" \
-setcookie "$COOKIE" "$command" $@
}
@@ -228,6 +230,19 @@ replace_os_vars() {
}1' < "$1" > "$2"
}
+escript_emulator_args() {
+ if [ -n "${VM_ARGS}" ]; then
+ if grep -q '%%!' $1; then
+ cmd=$(echo sed -i"' '" "'s|%%!.*|%%! ${VM_ARGS}|'" $1)
+ eval "$cmd"
+ else
+ cmd=$(echo sed -i"' '" "'/#!.*/ a \\
+%%! ${VM_ARGS}\n'" $1)
+ eval "$cmd"
+ fi
+ fi
+}
+
add_path() {
# Use $CWD/$1 if exists, otherwise releases/VSN/$1
IN_FILE_PATH=$2
@@ -442,6 +457,8 @@ else
COOKIE="$(echo "$COOKIE_ARG" | awk '{print $2}')"
fi
+VM_ARGS="$(grep -v -E '^#|^-name|^-sname|^-setcookie|^-args_file' "$VMARGS_PATH" | xargs | sed -e 's/ / /g')"
+
cd "$ROOTDIR"
# Check the first argument for instructions
diff --git a/test/rlx_extended_bin_SUITE.erl b/test/rlx_extended_bin_SUITE.erl
index d2bf753..1177ede 100644
--- a/test/rlx_extended_bin_SUITE.erl
+++ b/test/rlx_extended_bin_SUITE.erl
@@ -24,6 +24,7 @@
all/0,
start_sname_in_other_argsfile/1,
start_preserves_arguments/1,
+ start_nodetool_with_data_from_argsfile/1,
start_fail_when_no_name/1,
start_fail_when_multiple_names/1,
start_fail_when_missing_argsfile/1,
@@ -78,7 +79,7 @@ init_per_testcase(_, Config) ->
{state, State1} | Config].
all() ->
- [start_sname_in_other_argsfile, start_preserves_arguments,
+ [start_sname_in_other_argsfile, start_preserves_arguments, start_nodetool_with_data_from_argsfile,
start_fail_when_no_name, start_fail_when_multiple_names,
start_fail_when_missing_argsfile, start_fail_when_nonreadable_argsfile,
start_fail_when_relative_argsfile, start_fail_when_circular_argsfiles,
@@ -94,7 +95,6 @@ all() ->
ping(Config) ->
LibDir1 = proplists:get_value(lib1, Config),
-
rlx_test_utils:create_app(LibDir1, "goal_app", "0.0.1", [stdlib,kernel], []),
ConfigFile = filename:join([LibDir1, "relx.config"]),
@@ -1490,6 +1490,46 @@ start_preserves_arguments(Config) ->
%% a ping should fail after stopping a node
{error, 1, _} = sh(filename:join([OutputDir, "foo", "bin", "foo ping"])).
+start_nodetool_with_data_from_argsfile(Config) ->
+ LibDir1 = proplists:get_value(lib1, Config),
+
+ rlx_test_utils:create_app(LibDir1, "goal_app", "0.0.1", [stdlib,kernel], []),
+
+ ConfigFile = filename:join([LibDir1, "relx.config"]),
+ VmArgs = filename:join([LibDir1, "vm.args"]),
+
+ rlx_test_utils:write_config(ConfigFile,
+ [{release, {foo, "0.0.1"},
+ [goal_app]},
+ {lib_dirs, [filename:join(LibDir1, "*")]},
+ {vm_args, VmArgs},
+ {generate_start_script, true},
+ {extended_start_script, true}
+ ]),
+
+ ec_file:write(VmArgs, "-setcookie cookie\n"
+ "-sname foo\n\n"
+ "-proto_dist inet_tcp\n\n"),
+
+ OutputDir = filename:join([proplists:get_value(priv_dir, Config),
+ rlx_test_utils:create_random_name("relx-output")]),
+
+ {ok, _State} = relx:do([{relname, foo},
+ {relvsn, "0.0.1"},
+ {goals, []},
+ {lib_dirs, [LibDir1]},
+ {log_level, 3},
+ {output_dir, OutputDir},
+ {config, ConfigFile}], ["release"]),
+
+ %% now start/stop the release to make sure the extended script is working
+ {ok, _} = sh(filename:join([OutputDir, "foo", "bin", "foo start"])),
+ timer:sleep(2000),
+ {ok, "pong"} = sh(filename:join([OutputDir, "foo", "bin", "foo ping"])),
+ {ok, _} = sh(filename:join([OutputDir, "foo", "bin", "foo stop"])),
+ %% a ping should fail after stopping a node
+ {error, 1, _} = sh(filename:join([OutputDir, "foo", "bin", "foo ping"])).
+
start_fail_when_no_name(Config) ->
LibDir1 = proplists:get_value(lib1, Config),
VmArgs = filename:join([LibDir1, "vm.args"]),