diff options
author | Christian Hesse <mail@eworm.de> | 2021-11-15 20:22:56 +0100 |
---|---|---|
committer | Christian Hesse <mail@eworm.de> | 2021-11-15 22:18:10 +0100 |
commit | 8fc88c73f8cb99774727e7b96f9b85a8bf216c2c (patch) | |
tree | e5a36de5fd846a210088b2a21bd436f3f53b4805 /mod/scriptrunonce | |
parent | f484e45b6a1fe5284462da19c90219d0716d916a (diff) |
shorten modules directory name (global-functions.d -> mod)change-67
Diffstat (limited to 'mod/scriptrunonce')
-rw-r--r-- | mod/scriptrunonce | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/mod/scriptrunonce b/mod/scriptrunonce new file mode 100644 index 0000000..0b519c3 --- /dev/null +++ b/mod/scriptrunonce @@ -0,0 +1,46 @@ +#!rsc by RouterOS +# RouterOS script: mod/scriptrunonece +# Copyright (c) 2020-2021 Christian Hesse <mail@eworm.de> +# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md + +:global ScriptRunOnce; + +# fetch and run script(s) once +:set ScriptRunOnce do={ + :local Scripts [ :toarray $1 ]; + + :global ScriptRunOnceBaseUrl; + :global ScriptRunOnceUrlSuffix; + + :global LogPrintExit2; + :global ValidateSyntax; + + :foreach Script in=$Scripts do={ + :if (!($Script ~ "^(ftp|https\?|sftp)://")) do={ + :if ([ :len $ScriptRunOnceBaseUrl ] = 0) do={ + $LogPrintExit2 warning $0 ("Script '" . $Script . "' is not an url and base url is not available.") true; + } + :set Script ($ScriptRunOnceBaseUrl . $Script . $ScriptRunOnceUrlSuffix); + } + + :local Source; + :do { + :set Source ([ / tool fetch check-certificate=yes-without-crl $Script output=user as-value ]->"data"); + } on-error={ + $LogPrintExit2 warning $0 ("Failed fetching script '" . $Script . "'!") false; + } + + :if ([ :len $Source ] > 0) do={ + :if ([ $ValidateSyntax $Source ] = true) do={ + :do { + $LogPrintExit2 info $0 ("Running script '" . $Script . "' now.") false; + [ :parse $Source ]; + } on-error={ + $LogPrintExit2 warning $0 ("The script '" . $Script . "' failed to run!") false; + } + } else={ + $LogPrintExit2 warning $0 ("The script '" . $Script . "' failed syntax validation!") false; + } + } + } +} |