From bb749aeb6fa0df462c5417ce083189c4202c8cc8 Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 17 Nov 2022 23:58:04 +0300 Subject: [PATCH] init --- update-notify.rsc | 80 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 update-notify.rsc diff --git a/update-notify.rsc b/update-notify.rsc new file mode 100644 index 0000000..dc6a957 --- /dev/null +++ b/update-notify.rsc @@ -0,0 +1,80 @@ +:global lastKnownROSVersion + +:local rcpt "admin@example.org" + + +:local id [/system identity get name] +:local ts [/system clock get time] +:local ds [/system clock get date] + +:set ts ([:pick $ts 0 2]."-".[:pick $ts 3 5]."-".[:pick $ts 6 8]) +:set ds ([:pick $ds 4 6]."-".[:pick $ds 0 3]."-".[:pick $ds 7 11]) + +:local installedVersion [/system package update get installed-version] +:local latestVersion $installedVersion +:local updateChannel [/system package update get channel] +:local changelogLink ("https://mikrotik.com/download/changelogs/".$updateChannel."-release-tree") + +:local subj ("MT update notification from ".$id." - ".$ds." ".$ts) +:local body ("This is a scheduled update notification from MT device \"".$id."\". \r\nDate: ".$ds." \r\nTime: ".$ts." \r\n\r\n") +:local send false +:local fail false + + +:if ([:len [/tool e-mail get address]] = 0 or [:len [/tool e-mail get from]] = 0) do={ + :log error "Email configuration is missing" + :error "Email configuration is missing" +} else={ + :do { + :log info "Checking for RouterOS updates..." + + /system package update check-for-updates + :set latestVersion [/system package update get latest-version] + + :if ([:len $latestVersion] = 0) do={ + :log error "Failed to retrieve latest RouterOS version information, sending an email" + :set subj ($subj.": failed to get version info") + :set body ($body."Failed to retrieve latest RouterOS version information") + :set send true + } else={ + :local versionDescription ($latestVersion." in ".$updateChannel." channel") + + :if ($installedVersion != $latestVersion and $lastKnownROSVersion != $latestVersion) do={ + :log info ("Found new version ".$versionDescription.", sending an email") + :set subj ($subj.": new version ".$versionDescription) + :set body ($body."A new RouterOS version is avaliable - ".$versionDescription." (currently running ".$installedVersion."). \r\nRead full changelog here: ".$changelogLink) + :set send true + } else={ + :if ($installedVersion != $latestVersion) do={ + :log info ("Found new version ".$versionDescription.", notification already sent") + } else={ + :log info ("No new RouterOS updates (latest version is ".$versionDescription.")") + } + } + + :set lastKnownROSVersion $latestVersion + } + + :if ($send = true) do={ + :do {/tool e-mail send to=$rcpt subject=$subj body=$body} on-error={ + :log warning "Failed to send email message. Retrying in 30s..." + :delay 30s + + :do {/tool e-mail send to=$rcpt subject=$subj body=$body} on-error={ + :log error "Failed to send email message (2nd attempt)" + :set fail true + } + } + } + } on-error={ + :log warning "Caught an exception when checking for updates" + :set fail true + } + + :if ($fail = false) do={ + :log info "Update notification script completed" + } else={ + :log error "Update notification script completed with errors" + :error "Update notification script completed with errors" + } +}