Add global functions
This commit is contained in:
parent
41dac7b77b
commit
91a254cdec
54
README.md
54
README.md
|
@ -1,5 +1,4 @@
|
||||||
Custom RouterOS Scripts
|
# Custom RouterOS Scripts
|
||||||
=======================
|
|
||||||
|
|
||||||
[RouterOS](https://mikrotik.com/software) is the operating system developed
|
[RouterOS](https://mikrotik.com/software) is the operating system developed
|
||||||
by [MikroTik](https://mikrotik.com/aboutus) for networking tasks. This
|
by [MikroTik](https://mikrotik.com/aboutus) for networking tasks. This
|
||||||
|
@ -9,21 +8,55 @@ to manage RouterOS devices or extend their functionality.
|
||||||
*Use at your own risk*, pay attention to
|
*Use at your own risk*, pay attention to
|
||||||
[license and warranty](#license-and-warranty)!
|
[license and warranty](#license-and-warranty)!
|
||||||
|
|
||||||
Requirements
|
## Table of Contents
|
||||||
------------
|
|
||||||
|
- [Custom RouterOS Scripts](#custom-routeros-scripts)
|
||||||
|
- [Table of Contents](#table-of-contents)
|
||||||
|
- [Requirements](#requirements)
|
||||||
|
- [Installation](#installation)
|
||||||
|
- [Initial Setup](#initial-setup)
|
||||||
|
- [Adding a script](#adding-a-script)
|
||||||
|
- [Available scripts](#available-scripts)
|
||||||
|
- [License and warranty](#license-and-warranty)
|
||||||
|
- [Upstream](#upstream)
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
This is a repository containing **custom** RouterOS scripts. These do depend
|
This is a repository containing **custom** RouterOS scripts. These do depend
|
||||||
on upstream project. Visit
|
on upstream project. Visit
|
||||||
[RouterOS-Scripts](https://git.eworm.de/cgit/routeros-scripts/about/) and
|
[RouterOS-Scripts](https://git.eworm.de/cgit/routeros-scripts/about/) and
|
||||||
follow the instructions there for the basic installation and setup.
|
follow the instructions there for the basic installation and setup.
|
||||||
|
|
||||||
Available scripts
|
## Installation
|
||||||
-----------------
|
|
||||||
|
|
||||||
* [Hello World](doc/hello-world.md)
|
### Initial Setup
|
||||||
|
|
||||||
License and warranty
|
Download the `global-functions-custom-phg.rsc` script:
|
||||||
--------------------
|
|
||||||
|
```rsc
|
||||||
|
$ScriptInstallUpdate global-functions-custom-phg "base-url=https://git.s1q.dev/phg/routeros-scripts-custom/raw/branch/main/";
|
||||||
|
```
|
||||||
|
|
||||||
|
And finally load my custom functions and add a scheduler to load them on each startup.
|
||||||
|
|
||||||
|
```rsc
|
||||||
|
/system/script/run global-functions-custom-phg;
|
||||||
|
/system/scheduler/add name="global-scripts-custom-phg" start-time=startup on-event="/system/script/run global-functions-custom-phg;";
|
||||||
|
```
|
||||||
|
|
||||||
|
### Adding a script
|
||||||
|
|
||||||
|
To add a script from the repository run function `$ScriptInstallUpdate` with a comma separated list of script names, as well as the parameter `"base-url=https://git.s1q.dev/phg/routeros-scripts-custom/raw/branch/main/"`.
|
||||||
|
|
||||||
|
```rsc
|
||||||
|
$ScriptInstallUpdate ddns-hetzner,dns-to-ipv6-subnet-resolver "base-url=https://git.s1q.dev/phg/routeros-scripts-custom/raw/branch/main/";
|
||||||
|
```
|
||||||
|
|
||||||
|
## Available scripts
|
||||||
|
|
||||||
|
- [Hello World](doc/hello-world.md)
|
||||||
|
|
||||||
|
## License and warranty
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -35,8 +68,7 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
[GNU General Public License](COPYING.md) for more details.
|
[GNU General Public License](COPYING.md) for more details.
|
||||||
|
|
||||||
Upstream
|
## Upstream
|
||||||
--------
|
|
||||||
|
|
||||||
URL:
|
URL:
|
||||||
[git.s1q.dev](https://git.s1q.dev/phg/routeros-scripts-custom)
|
[git.s1q.dev](https://git.s1q.dev/phg/routeros-scripts-custom)
|
||||||
|
|
39
global-functions-custom-phg.rsc
Normal file
39
global-functions-custom-phg.rsc
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
#!rsc by RouterOS
|
||||||
|
# RouterOS script: global-functions-custom-phg
|
||||||
|
# Copyright (c) 2025 Philip 'ShokiNN' Henning <mail@philip-henning.com>
|
||||||
|
# https://git.s1q.dev/phg/routeros-scripts-custom/about/COPYING.md
|
||||||
|
#
|
||||||
|
# requires RouterOS, version=7.14
|
||||||
|
#
|
||||||
|
# global functions for my custom scripts
|
||||||
|
# https://git.s1q.dev/phg/routeros-scripts-custom/about
|
||||||
|
|
||||||
|
:local ScriptName [ :jobname ];
|
||||||
|
|
||||||
|
# global variables not to be changed by user
|
||||||
|
:global GlobalFunctionsCustomPhgReady false;
|
||||||
|
|
||||||
|
# global functions
|
||||||
|
:global SafelyResolve
|
||||||
|
|
||||||
|
# Function: safelyResolve
|
||||||
|
# - Takes a DNS string (e.g. "example.com")
|
||||||
|
# - Takes an IP type [ipv4, ipv6]
|
||||||
|
# - Returns a string of and IP address or false if it can't be resolved
|
||||||
|
:set SafelyResolve do={
|
||||||
|
:do {
|
||||||
|
:local DomainName [ :tostr $1 ];
|
||||||
|
:if ( [ :tostr $2 ] = "ipv4" or [ :tostr $2 ] = "ipv6" ) do={
|
||||||
|
:local IPType [ :tostr $2 ];
|
||||||
|
} else={
|
||||||
|
:local IPType "ipv4";
|
||||||
|
}
|
||||||
|
:local IP [:resolve domain-name="$DomainName" type=$IPType];
|
||||||
|
:return "$IP";
|
||||||
|
} on-error={
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# signal we are ready
|
||||||
|
:set GlobalFunctionsCustomPhgReady true;
|
33
template.rsc.tpl
Normal file
33
template.rsc.tpl
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#!rsc by RouterOS
|
||||||
|
# RouterOS script: <script-filename>
|
||||||
|
# Copyright (c) <year> Philip 'ShokiNN' Henning <mail@philip-henning.com>
|
||||||
|
# https://git.s1q.dev/phg/routeros-scripts-custom/about/COPYING.md
|
||||||
|
#
|
||||||
|
# requires RouterOS, version=<min ros version>
|
||||||
|
#
|
||||||
|
# <short script description>
|
||||||
|
# https://git.s1q.dev/phg/routeros-scripts-custom/about/doc/<script-filename>.md
|
||||||
|
|
||||||
|
:global GlobalFunctionsReady;
|
||||||
|
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
|
||||||
|
|
||||||
|
:local ExitOK false;
|
||||||
|
:do {
|
||||||
|
:local ScriptName [ :jobname ];
|
||||||
|
|
||||||
|
:global LogPrint;
|
||||||
|
:global ParseKeyValueStore;
|
||||||
|
:global ScriptLock;
|
||||||
|
|
||||||
|
# Local/global script specific variables
|
||||||
|
|
||||||
|
:if ([ $ScriptLock $ScriptName ] = false) do={
|
||||||
|
:set ExitOK true;
|
||||||
|
:error false;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add Script from here:
|
||||||
|
|
||||||
|
} on-error={
|
||||||
|
:global ExitError; $ExitError $ExitOK [ :jobname ];
|
||||||
|
}
|
Loading…
Reference in a new issue