Update .editorconfig to change indent size for .rsc files from 4 to 2 spaces

This commit is contained in:
Alexander Tebiev 2025-04-15 21:15:02 +02:00
parent 5f839c943c
commit 183086b154
2 changed files with 453 additions and 498 deletions

View file

@ -13,7 +13,7 @@ insert_final_newline = true
[*.rsc] [*.rsc]
indent_style = space indent_style = space
indent_size = 4 indent_size = 2
[*.{yml,yaml,sls}] [*.{yml,yaml,sls}]
indent_style = space indent_style = space

View file

@ -14,51 +14,47 @@
# Minimum supported RouterOS version is v6.43.7 # Minimum supported RouterOS version is v6.43.7
# #
#----------MODIFY THIS SECTION AS NEEDED---------------------------------------- #----------MODIFY THIS SECTION AS NEEDED----------------------------------------
## Notification e-mail # Notification e-mail
## (Make sure you have configured Email settings in Tools -> Email) # (Make sure you have configured Email settings in Tools -> Email)
:local emailAddress "yourmail@example.com"; :local emailAddress "yourmail@example.com";
## Script mode, possible values: backup, osupdate, osnotify. # Script mode, possible values: backup, osupdate, osnotify.
# backup - Only backup will be performed. (default value, if none provided) # backup - Only backup will be performed. (default value, if none provided)
# #
# osupdate - The script will install a new RouterOS version if it is available. # osupdate - Installs new RouterOS if available and creates backups before/after update (ignores `forceBackup`)
# It will also create backups before and after update process (it does not matter what value `forceBackup` is set to) # Sends email only when an update is found.
# Email will be sent only if a new RouterOS version is available. # Set `forceBackup` to true to always create backups, even without updates
# Change parameter `forceBackup` if you need the script to create backups every time when it runs (even when no updates were found).
# #
# osnotify - The script will send email notifications only (without backups) if a new RouterOS update is available. # osnotify - Sends email only if a new RouterOS update is found (no backups)
# Change parameter `forceBackup` if you need the script to create backups every time when it runs. # Set `forceBackup` to always create backups on every run
:local scriptMode "osupdate" :local scriptMode "osupdate"
## Additional parameter if you set `scriptMode` to `osupdate` or `osnotify` # Additional parameter if you set `scriptMode` to `osupdate` or `osnotify`
# Set `true` if you want the script to perform backup every time its fired, whatever script mode is set. # Set `true` if you want the script to perform backup every time its fired, whatever script mode is set.
:local forceBackup false :local forceBackup false
## Backup encryption password, no encryption if no password. # Backup encryption password, no encryption if no password.
:local backupPassword "" :local backupPassword ""
## If true, passwords will be included in exported config. # If true, passwords will be included in exported config.
:local sensitiveDataInConfig true :local sensitiveDataInConfig true
## Update channel. Possible values: stable, long-term, testing, development ## Update channel. Possible values: stable, long-term, testing, development
:local updateChannel "stable" :local updateChannel "stable"
## Install only patch updates (requires scriptMode = "osupdate") # Installs patch updates only (scriptMode = "osupdate").
## Works only for `stable` and `long-term` channels. # Works for `stable` and `long-term` channels.
## Update will run only if MAJOR and MINOR versions match the current one # Updates only if MAJOR.MINOR match (e.g. 6.43.2 → 6.43.6 allowed, 6.44.1 skipped).
## Example: current = v6.43.2 → v6.43.6 = allowed, v6.44.1 = skipped # Sends info if a newer (non-patch) version is found.
## Script will send information if new version is greater than just patch.
:local installOnlyPatchUpdates false :local installOnlyPatchUpdates false
## If true, device public IP address information will be included into the email message # Include public IP info in email if set to true
:local detectPublicIpAddress true :local detectPublicIpAddress true
## Allow anonymous statistics collection. (script mode and generic non-sensitive device info) ## Allow anonymous statistics collection. (script mode and generic non-sensitive device info)
:local allowAnonymousStatisticsCollection true :local anonStats true
##------------------------------------------------------------------------------------------## # !!! DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOURE DOING !!!
# !!!! DO NOT CHANGE ANYTHING BELOW THIS LINE, IF YOU ARE NOT SURE WHAT YOU ARE DOING !!!! #
##------------------------------------------------------------------------------------------##
:local scriptVersion "25.04.12" :local scriptVersion "25.04.12"
@ -73,21 +69,17 @@
:log info "\n\n$SMP Script \"Mikrotik RouterOS automatic backup & update\" v.$scriptVersion started." :log info "\n\n$SMP Script \"Mikrotik RouterOS automatic backup & update\" v.$scriptVersion started."
:log info "$SMP Script Mode: `$scriptMode`, Update channel: `$updateChannel`, Force backup: `$forceBackup`, Install only patch updates: `$installOnlyPatchUpdates`" :log info "$SMP Script Mode: `$scriptMode`, Update channel: `$updateChannel`, Force backup: `$forceBackup`, Install only patch updates: `$installOnlyPatchUpdates`"
############### vvvvvvvvv FUNCTIONS vvvvvvvvv ############### ## vv FUNCTIONS vv ##
# Function: FuncGetRunningOsVersion
# ----------------------------
# Returns currently running RouterOS version # Returns currently running RouterOS version
#
# Example:
# :put [$FuncGetRunningOsVersion] # Output: 6.48.1 # :put [$FuncGetRunningOsVersion] # Output: 6.48.1
:local FuncGetRunningOsVersion do={ :local FuncGetRunningOsVersion do={
:local runningOsAndChannel [/system resource get version] :local runningOsAndChannel [/system resource get version]
:local spacePos [:find $runningOsAndChannel " "] :local spacePos [:find $runningOsAndChannel " "]
:if ([:len $spacePos] = 0) do={ :if ([:len $spacePos] = 0) do={
:log error "Bkp&Upd: Could not extract installed OS version string: `$runningOsAndChannel`. Script stopped." :log error "Bkp&Upd: Could not extract installed OS version string: `$runningOsAndChannel`."
:error "Bkp&Upd: script stopped due to an error. Please check logs for more details." :error "Bkp&Upd: error, check logs"
} }
:local versionOnly [:pick $runningOsAndChannel 0 $spacePos] :local versionOnly [:pick $runningOsAndChannel 0 $spacePos]
@ -95,59 +87,32 @@
:return $versionOnly :return $versionOnly
} }
# Function: FuncGetRunningOsChannel # Returns currently running RouterOS channel
# ----------------------------
# Returns currently running RouterOS channel (stable, long-term, testing, development)
#
# Example:
# :put [$FuncGetRunningOsChannel] # Output: stable # :put [$FuncGetRunningOsChannel] # Output: stable
:local FuncGetRunningOsChannel do={ :local FuncGetRunningOsChannel do={
:local runningOsAndChannel [/system resource get version] :local runningOsAndChannel [/system resource get version]
:local errorMessage "Bkp&Upd: Could not extract installed OS channel from version string: `$runningOsAndChannel`. Script stopped."
:local exitErrorMessage "Bkp&Upd: script stopped due to an error. Please check logs for more details."
:local open [:find $runningOsAndChannel "("] :local open [:find $runningOsAndChannel "("]
:if ([:len $open] = 0) do={ :if ([:len $open] = 0) do={
:log error ($errorMessage . " (1)") :log error "Bkp&Upd: Could not extract installed OS channel from version string: `$runningOsAndChannel`."
:error $exitErrorMessage :error "Bkp&Upd: error, check logs"
} }
:local rest [:pick $runningOsAndChannel ($open+1) [:len $runningOsAndChannel]] :local rest [:pick $runningOsAndChannel ($open+1) [:len $runningOsAndChannel]]
:local close [:find $rest ")"] :local close [:find $rest ")"]
:if ([:len $close] = 0) do={
:log error ($errorMessage . " (2)")
:error $exitErrorMessage
}
:local channel [:pick $rest 0 $close] :local channel [:pick $rest 0 $close]
:if ([:len $channel] = 0) do={
:log error ($errorMessage . " (3)")
:error $exitErrorMessage
}
:return $channel :return $channel
} }
# Function: FuncIsPatchUpdateOnly # Checks if two RouterOS version strings differ only by the patch version
# ----------------------------
# Determines if two RouterOS version strings differ only by the patch version.
#
# Parameters:
# `version1` | string | The first version string (e.g., "6.2.1").
# `version2` | string | The second version string (e.g., "6.2.4").
#
# Returns:
# boolean | true if only the patch versions differ; false otherwise.
#
# Example:
# :put [$FuncIsPatchUpdateOnly "6.2.1" "6.2.4"] # Output: true # :put [$FuncIsPatchUpdateOnly "6.2.1" "6.2.4"] # Output: true
# :put [$FuncIsPatchUpdateOnly "6.2.1" "6.3.1"] # Output: false # :put [$FuncIsPatchUpdateOnly "6.2.1" "6.3.1"] # Output: false
:local FuncIsPatchUpdateOnly do={ :local FuncIsPatchUpdateOnly do={
:local ver1 $1 :local ver1 $1
:local ver2 $2 :local ver2 $2
# Internal function to extract the major and minor components from a version string. # Extract the major and minor components from a version
:local extractMajorMinor do={ :local extractMajorMinor do={
:local ver $1 :local ver $1
:local dot1 [:find $ver "."] :local dot1 [:find $ver "."]
@ -162,18 +127,18 @@
:return ($major . "." . $minor) :return ($major . "." . $minor)
} }
# Compare the major and minor components of both version strings. # Compare the major and minor components of both version strings
:if ([$extractMajorMinor $ver1] = [$extractMajorMinor $ver2]) do={ :if ([$extractMajorMinor $ver1] = [$extractMajorMinor $ver2]) do={
:return true :return true
} }
:return false :return false
} }
# Function creates backups (system and config) and returns array of names of created files. # Creates backups and returns array of names
# Possible arguments: # Possible arguments:
# `backupName` | string | backup file name, without extension! # $1 - file name, without extension
# `backupPassword` | string | # $2 - password (optional)
# `sensitiveDataInConfig` | boolean | # $3 - sensitive data in config (optional, default: false)
# Example: # Example:
# :put [$FuncCreateBackups "daily-backup"] # :put [$FuncCreateBackups "daily-backup"]
:local FuncCreateBackups do={ :local FuncCreateBackups do={
@ -245,10 +210,7 @@
:return $backupNames :return $backupNames
} }
# Function: FuncSendEmailSafe # Sends an email
# ---------------------------
# Sends an email and checks if it was sent successfully.
#
# Parameters: # Parameters:
# $1 - to (email address) # $1 - to (email address)
# $2 - subject # $2 - subject
@ -256,11 +218,7 @@
# $4 - file attachments (optional; pass "" if not needed) # $4 - file attachments (optional; pass "" if not needed)
# #
# Example: # Example:
# :do {
# $FuncSendEmailSafe "admin@domain.com" "Backup Done" "Backup complete." "backup1.backup" # $FuncSendEmailSafe "admin@domain.com" "Backup Done" "Backup complete." "backup1.backup"
# } on-error={
# :log error "Email failed to send"
# }
:local FuncSendEmailSafe do={ :local FuncSendEmailSafe do={
:local emailTo $1 :local emailTo $1
@ -332,7 +290,7 @@
:if ([:len $scriptStep] = 0) do={ :if ([:len $scriptStep] = 0) do={
:set scriptStep 1 :set scriptStep 1
} }
############### ^^^^^^^^^ FUNCTIONS ^^^^^^^^^ ############### ## ^^ FUNCTIONS ^^ ##
# #
@ -341,7 +299,7 @@
## Check email settings ## Check email settings
:if ([:len $emailAddress] < 3) do={ :if ([:len $emailAddress] < 3) do={
:log error ("$SMP Script parameter `\$emailAddress` is not set, or contains invalid value. Script stopped.") :log error ("$SMP Parameter `\$emailAddress` is not set, or contains invalid value. Script stopped.")
:error $exitErrorMessage :error $exitErrorMessage
} }
@ -357,11 +315,11 @@
:set emailServer [/tool e-mail get address] :set emailServer [/tool e-mail get address]
} }
:if ($emailServer = "0.0.0.0") do={ :if ($emailServer = "0.0.0.0") do={
:log error ("$SMP Email server address is not correct: `$emailServer`, please check `Tools -> Email`. Script stopped."); :log error ("$SMP Email server address is not correct: `$emailServer`, check `Tools -> Email`. Script stopped.");
:error $exitErrorMessage :error $exitErrorMessage
} }
:if ([:len $emailFromAddress] < 3) do={ :if ([:len $emailFromAddress] < 3) do={
:log error ("$SMP Email configuration FROM address is not correct: `$emailFromAddress`, please check `Tools -> Email`. Script stopped."); :log error ("$SMP Email configuration FROM address is not correct: `$emailFromAddress`, check `Tools -> Email`. Script stopped.");
:error $exitErrorMessage :error $exitErrorMessage
} }
@ -380,14 +338,14 @@
# Check if the script is set to install only patch updates and if the update channel is valid # Check if the script is set to install only patch updates and if the update channel is valid
:if ($scriptMode = "osupdate" and $installOnlyPatchUpdates = true) do={ :if ($scriptMode = "osupdate" and $installOnlyPatchUpdates = true) do={
:if ($updateChannel != "stable" and $updateChannel != "long-term") do={ :if ($updateChannel != "stable" and $updateChannel != "long-term") do={
:log error ("$SMP Script is set to install only patch updates, but the update channel is not valid: `$updateChannel`. Only `stable` and `long-term` channels supported. Script stopped.") :log error ("$SMP Patch-only updates enabled, but update channel `$updateChannel` is invalid. Only `stable` and `long-term` are supported. Script stopped")
:error $exitErrorMessage :error $exitErrorMessage
} }
:local susRunningOsChannel [$FuncGetRunningOsChannel] :local susRunningOsChannel [$FuncGetRunningOsChannel]
:if ($susRunningOsChannel != "stable" and $susRunningOsChannel != "long-term") do={ :if ($susRunningOsChannel != "stable" and $susRunningOsChannel != "long-term") do={
:log error ("$SMP Script is set to install only patch updates, but the installed RouterOS version is not from `stable` or `long-term` channel: `$susRunningOsChannel`. Script stopped.") :log error ("$SMP Script is set to install only patch updates, but the installed RouterOS version is not from `stable` or `long-term` channel: `$susRunningOsChannel`. Script stopped")
:error $exitErrorMessage :error $exitErrorMessage
} }
} }
@ -413,14 +371,14 @@
:set currentDate $rawDate :set currentDate $rawDate
} }
## Combine date and time → `YYYY-MM-DD-hh-mm-ss` or `YYYY-Mon-DD-hh-mm-ss` ## Combine date and time
:local currentDateTime ($currentDate . "-" . $currentTime) :local currentDateTime ($currentDate . "-" . $currentTime)
##### ##
:local deviceBoardName [/system resource get board-name] :local deviceBoardName [/system resource get board-name]
## Check if it's a cloud hosted router or a hardware based device ## Check if it's a cloud hosted router
:local isCloudHostedRouter false; :local isCloudHostedRouter false;
:if ([:pick $deviceBoardName 0 3] = "CHR" or [:pick $deviceBoardName 0 3] = "x86") do={ :if ([:pick $deviceBoardName 0 3] = "CHR" or [:pick $deviceBoardName 0 3] = "x86") do={
:set isCloudHostedRouter true; :set isCloudHostedRouter true;
@ -482,8 +440,8 @@
:local publicIpAddress "not-detected" :local publicIpAddress "not-detected"
:local telemetryDataQuery "" :local telemetryDataQuery ""
:if ($detectPublicIpAddress = true or $allowAnonymousStatisticsCollection = true) do={ :if ($detectPublicIpAddress = true or $anonStats = true) do={
:if ($allowAnonymousStatisticsCollection = true) do={ :if ($anonStats = true) do={
:set telemetryDataQuery ("\?mode=" . $scriptMode . "&scriptver=" . $scriptVersion . "&updatechannel=" . $updateChannel . "&osver=" . $runningOsVersion . "&step=" . $scriptStep . "&forcebackup=" . $forceBackup . "&onlypatchupdates=" . $installOnlyPatchUpdates . "&model=" . $deviceRbModel . "&deviceboard=" . $deviceBoardName) :set telemetryDataQuery ("\?mode=" . $scriptMode . "&scriptver=" . $scriptVersion . "&updatechannel=" . $updateChannel . "&osver=" . $runningOsVersion . "&step=" . $scriptStep . "&forcebackup=" . $forceBackup . "&onlypatchupdates=" . $installOnlyPatchUpdates . "&model=" . $deviceRbModel . "&deviceboard=" . $deviceBoardName)
} }
@ -491,26 +449,25 @@
:if ($detectPublicIpAddress = true) do={ :if ($detectPublicIpAddress = true) do={
:log warning "$SMP Could not detect public IP address using default detection service: `$ipAddressDetectServiceDefault`" :log warning "$SMP Could not detect public IP address using default detection service: `$ipAddressDetectServiceDefault`"
:log warning "$SMP Trying to detect public IP using fallback detection service: `$ipAddressDetectServiceFallback`" :log warning "$SMP Trying to detect public IP using fallback detection service: `$ipAddressDetectServiceFallback`"
:do {
:set publicIpAddress ([/tool fetch http-method="get" url=$ipAddressDetectServiceFallback output=user as-value]->"data") :do {:set publicIpAddress ([/tool fetch http-method="get" url=$ipAddressDetectServiceFallback output=user as-value]->"data")} on-error={
} on-error={
:log warning "$SMP Could not detect public IP address using fallback detection service: `$ipAddressDetectServiceFallback`" :log warning "$SMP Could not detect public IP address using fallback detection service: `$ipAddressDetectServiceFallback`"
} }
} }
} }
# basic safety
:set publicIpAddress ([:pick $publicIpAddress 0 15]) :set publicIpAddress ([:pick $publicIpAddress 0 15])
:if ($detectPublicIpAddress = true) do={ :if ($detectPublicIpAddress = true) do={
# truncate IP to max 15 characters (basic safety)
:set mailBodyDeviceInfo ($mailBodyDeviceInfo . "\nPublic IP address: $publicIpAddress") :set mailBodyDeviceInfo ($mailBodyDeviceInfo . "\nPublic IP address: $publicIpAddress")
:log info "$SMP Public IP address detected: `$publicIpAddress`" :log info "$SMP Public IP address detected: `$publicIpAddress`"
} }
} }
} }
## STEP ONE: Creating backups, checking for new RouterOs version and sending email with backups, ## STEP 1: Create backups, check for new RouterOS, and send email
## Steps 2 and 3 are fired only if script is set to automatically update device and if a new RouterOs version is available. ## Steps 23 run only if auto-update is enabled and a new version is available
:if ($scriptStep = 1) do={ :if ($scriptStep = 1) do={
:local routerOsVersionAvailable "0.0.0" :local routerOsVersionAvailable "0.0.0"
:local isNewOsUpdateAvailable false :local isNewOsUpdateAvailable false
@ -525,14 +482,14 @@
:local mailPtSubjectBackup "" :local mailPtSubjectBackup ""
:local mailPtBodyBackup "" :local mailPtBodyBackup ""
# Checking for new RouterOS version # Checking for new version
:if ($scriptMode = "osupdate" or $scriptMode = "osnotify") do={ :if ($scriptMode = "osupdate" or $scriptMode = "osnotify") do={
log info ("$SMP Setting update channel to `$updateChannel`") log info ("$SMP Setting update channel to `$updateChannel`")
/system package update set channel=$updateChannel /system package update set channel=$updateChannel
log info ("$SMP Checking for new RouterOS version. Current installed version is: `$runningOsVersion`") log info ("$SMP Checking for new RouterOS version. Current installed version is: `$runningOsVersion`")
/system package update check-for-updates /system package update check-for-updates
# Wait for 5 seconds to allow the system to check for updates # Wait to allow the system to check for updates
:delay 5s; :delay 5s;
:local packageUpdateStatus "undefined" :local packageUpdateStatus "undefined"
@ -566,7 +523,7 @@
} }
} }
# Checking if the script needs to install new RouterOS version # Checking if the script needs to install new os version
:if ($scriptMode = "osupdate" and $isNewOsUpdateAvailable = true) do={ :if ($scriptMode = "osupdate" and $isNewOsUpdateAvailable = true) do={
:if ($installOnlyPatchUpdates = true) do={ :if ($installOnlyPatchUpdates = true) do={
:if ([$FuncIsPatchUpdateOnly $runningOsVersion $routerOsVersionAvailable] = true) do={ :if ([$FuncIsPatchUpdateOnly $runningOsVersion $routerOsVersionAvailable] = true) do={
@ -624,20 +581,19 @@
:local mailStep1Subject $mailSubjectPrefix :local mailStep1Subject $mailSubjectPrefix
:local mailStep1Body "" :local mailStep1Body ""
# Assemble email subject # subject
:if ($mailSubjectPartAction != "") do={:set mailStep1Subject ($mailStep1Subject . " - " . $mailSubjectPartAction)} :if ($mailSubjectPartAction != "") do={:set mailStep1Subject ($mailStep1Subject . " - " . $mailSubjectPartAction)}
:if ($mailPtSubjectBackup != "") do={:set mailStep1Subject ($mailStep1Subject . " - " . $mailPtSubjectBackup)} :if ($mailPtSubjectBackup != "") do={:set mailStep1Subject ($mailStep1Subject . " - " . $mailPtSubjectBackup)}
# Assemble email body # body
:if ($mailPtBodyAction != "") do={:set mailStep1Body ($mailStep1Body . $mailPtBodyAction . "\n\n")} :if ($mailPtBodyAction != "") do={:set mailStep1Body ($mailStep1Body . $mailPtBodyAction . "\n\n")}
:if ($mailPtBodyBackup != "") do={:set mailStep1Body ($mailStep1Body . $mailPtBodyBackup . "\n\n")} :if ($mailPtBodyBackup != "") do={:set mailStep1Body ($mailStep1Body . $mailPtBodyBackup . "\n\n")}
:set mailStep1Body ($mailStep1Body . $mailBodyDeviceInfo . "\n\n" . $mailBodyCopyright) :set mailStep1Body ($mailStep1Body . $mailBodyDeviceInfo . "\n\n" . $mailBodyCopyright)
# Send email with backup files attached # Send email with backups
:do {$FuncSendEmailSafe $emailAddress $mailStep1Subject $mailStep1Body $mailAttachments} on-error={ :do {$FuncSendEmailSafe $emailAddress $mailStep1Subject $mailStep1Body $mailAttachments} on-error={
:set isOsNeedsToBeUpdated false :set isOsNeedsToBeUpdated false
:log error "$SMP The script will not proceed with the update process, because the email was not sent." :log error "$SMP The script will not proceed with the update process, because the email was not sent."
#:error $exitErrorMessage
} }
} }
@ -661,7 +617,7 @@
/system package update install /system package update install
} on-error={ } on-error={
# Failed to install new RouterOS version, remove the scheduled task # Failed to install new os version, remove the task
:do {/system scheduler remove BKPUPD-NEXT-BOOT-TASK} on-error={} :do {/system scheduler remove BKPUPD-NEXT-BOOT-TASK} on-error={}
:log error "$SMP Failed to install new RouterOS version. Please check device logs for more details." :log error "$SMP Failed to install new RouterOS version. Please check device logs for more details."
@ -669,7 +625,7 @@
:local mailUpdateErrorSubject ($mailSubjectPrefix . " - Update failed") :local mailUpdateErrorSubject ($mailSubjectPrefix . " - Update failed")
:local mailUpdateErrorBody "The script was unable to install new RouterOS version. Please check device logs for more details." :local mailUpdateErrorBody "The script was unable to install new RouterOS version. Please check device logs for more details."
# Send email with error message # Send email with error
$FuncSendEmailSafe $emailAddress $mailUpdateErrorSubject $mailUpdateErrorBody "" $FuncSendEmailSafe $emailAddress $mailUpdateErrorSubject $mailUpdateErrorBody ""
:error $exitErrorMessage :error $exitErrorMessage
@ -677,8 +633,8 @@
} }
} }
## STEP TWO: (after first reboot) routerboard firmware upgrade ## STEP 2: (Post-reboot) Upgrade RouterBOARD firmware
## Steps 2 and 3 are fired only if script is set to automatically update device and if new RouterOs is available. ## Runs only if auto-update is enabled and a new RouterOS version was found
:if ($scriptStep = 2) do={ :if ($scriptStep = 2) do={
:log info "$SMP The script is in the second step, updating Routerboard firmware." :log info "$SMP The script is in the second step, updating Routerboard firmware."
@ -689,16 +645,15 @@
:delay 2s :delay 2s
:log info "$SMP routerboard upgrade process was completed, going to reboot in a moment!"; :log info "$SMP routerboard upgrade process was completed, going to reboot in a moment!";
## Set scheduled task to send final report on the next boot, task will be deleted when it is done. (That is why you should keep original script name) ## Set scheduled task to send final report on the next boot
/system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=":delay 5s; /system scheduler remove BKPUPD-NEXT-BOOT-TASK; :global buGlobalVarScriptStep 3; :global buGlobalVarTargetOsVersion \"$buGlobalVarTargetOsVersion\"; :delay 10s; /system script run BackupAndUpdate;" start-time=startup interval=0 /system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=":delay 5s; /system scheduler remove BKPUPD-NEXT-BOOT-TASK; :global buGlobalVarScriptStep 3; :global buGlobalVarTargetOsVersion \"$buGlobalVarTargetOsVersion\"; :delay 10s; /system script run BackupAndUpdate;" start-time=startup interval=0
## Reboot system to boot with new firmware ## Reboot system to boot with new firmware
/system reboot; /system reboot;
} }
## STEP THREE: Last step (after second reboot) sending final report ## STEP 3: Final report (after second reboot, with delay).
## Steps 2 and 3 are fired only if script is set to automatically update device and if new RouterOs is available. ## Runs only if auto-update is enabled and a new RouterOS version was found.
## This step is executed after some delay
:if ($scriptStep = 3) do={ :if ($scriptStep = 3) do={
:log info ("$SMP The script is in the third step, sending final report.") :log info ("$SMP The script is in the third step, sending final report.")