diff options
Diffstat (limited to 'script-updates')
| -rw-r--r-- | script-updates | 130 | 
1 files changed, 0 insertions, 130 deletions
diff --git a/script-updates b/script-updates deleted file mode 100644 index 95af07d..0000000 --- a/script-updates +++ /dev/null @@ -1,130 +0,0 @@ -#!rsc -# RouterOS script: script-updates -# Copyright (c) 2013-2020 Christian Hesse <mail@eworm.de> -# -# update installed scripts from file or url - -:global ExpectedConfigVersion; -:global GlobalConfigVersion; -:global Identity; -:global IDonate; -:global SentConfigChangesNotification; -:global ScriptUpdatesFetch; -:global ScriptUpdatesBaseUrl; -:global ScriptUpdatesUrlSuffix; -:global ScriptUpdatesIgnore; -:global ScriptUpdatesConfigChangesIgnore; - -:global SendNotification; - -:foreach Script in=[ / system script find ] do={ -  :local Ignore 0; -  :local ScriptVal [ / system script get $Script ]; -  :local ScriptFile [ / file find where name=("script-updates/" . $ScriptVal->"name") ]; -  :local SourceNew; -  :if ([ :len $ScriptFile ] > 0) do={ -    :set SourceNew [ / file get $ScriptFile content ]; -    / file remove $ScriptFile; -  } - -  :foreach Scheduler in=[ / system scheduler find where on-event~("\\b" . $ScriptVal->"name" . "\\b") ] do={ -    :local SchedulerVal [ / system scheduler get $Scheduler ]; -    :if ($ScriptVal->"policy" != $SchedulerVal->"policy") do={ -      :log warning ("Policies differ for script " . $ScriptVal->"name" . \ -        " and its scheduler " . $SchedulerVal->"name" . "!"); -    } -  } - -  :if ([ :len $SourceNew ] = 0 && $ScriptUpdatesFetch = true) do={ -    :foreach IgnoreLoop in=$ScriptUpdatesIgnore do={ -      :if ($IgnoreLoop = $ScriptVal->"name") do={ :set Ignore 1; } -    } - -    :if ($Ignore = 0) do={ -      :log debug ("Fetching script from url: " . $ScriptVal->"name"); -      :do { -        :local Result [ / tool fetch check-certificate=yes-without-crl \ -            ($ScriptUpdatesBaseUrl . $ScriptVal->"name" . $ScriptUpdatesUrlSuffix) \ -            output=user as-value ]; -        :if ($Result->"status" = "finished") do={ -          :set SourceNew ($Result->"data"); -        } -      } on-error={ -        :log info ("Failed fetching " . $ScriptVal->"name"); -      } -    } -  } - -  :if ([ :len $SourceNew ] > 0) do={ -    :if ([ :pick $SourceNew 0 5 ] = "#!rsc") do={ -      :if ($SourceNew != $ScriptVal->"source") do={ -        :local DontRequirePermissions \ -            ($SourceNew~"\n# requires: dont-require-permissions=yes\n"); -        :log info ("Updating script: " . $ScriptVal->"name"); -        / system script set owner=($ScriptVal->"name") source=$SourceNew \ -            dont-require-permissions=$DontRequirePermissions $Script; -        :if ($ScriptVal->"name" = "global-config" && \ -             [ / system script print count-only where name="global-config-overlay" ] > 0) do={ -          / system script { run global-config; run global-config-overlay; } -        } -        :if ($ScriptVal->"name" = "global-functions") do={ -          / system script run global-functions; -        } -      } else={ -        :log debug ("Script " .  $ScriptVal->"name" . " did not change."); -      } -    } else={ -      :log warning ("Looks like new script " . $ScriptVal->"name" . " is not valid. Ignoring!"); -    } -  } else={ -    :log debug ("No update for script " . $ScriptVal->"name" . "."); -  } -} - -:if ($ScriptUpdatesConfigChangesIgnore!=true && \ -     $SentConfigChangesNotification!=$ExpectedConfigVersion && \ -     $GlobalConfigVersion < $ExpectedConfigVersion) do={ -  :global GlobalConfigChanges; -  :local ChangeLogCode; -  :local ConfigScript "global-config"; -  :if ([ /system script print count-only where name="global-config-overlay" ] > 0) do={ -    :set ConfigScript "global-config-overlay"; -  } -  :local NotificationMessage ("Current configuration on " . $Identity . \ -      " is out of date. Please update " . $ConfigScript . ", then increase " . \ -      "variable GlobalConfigVersion (currently " . $GlobalConfigVersion . \ -      ") to " . $ExpectedConfigVersion . " and re-run " . $ConfigScript . "."); - -  :log debug ("Fetching changelog."); -  :do { -    :local Result [ / tool fetch check-certificate=yes-without-crl \ -        ($ScriptUpdatesBaseUrl . "global-config.changes" . $ScriptUpdatesUrlSuffix) \ -        output=user as-value ]; -    :if ($Result->"status" = "finished") do={ -      :set ChangeLogCode ($Result->"data"); -    } -    :set NotificationMessage ($NotificationMessage . "\n\nChanges:"); -    [ :parse $ChangeLogCode ]; -    :for I from=($GlobalConfigVersion + 1) to=$ExpectedConfigVersion do={ -      :set NotificationMessage ($NotificationMessage . \ -          "\n * " . $GlobalConfigChanges->[ :tostr $I ]); -    } -    :set GlobalConfigChanges; -  } on-error={ -    :log info ("Failed fetching changes!"); -    :set NotificationMessage ($NotificationMessage . \ -        "\n\nChanges are not available."); -  } - -  :if ($IDonate != true) do={ -    :set NotificationMessage ($NotificationMessage . \ -      "\n\n==== donation hint ====\n" . \ -      "This project is developed in private spare time and usage is " . \ -      "free of charge for you. If you like the scripts and think this is " . \ -      "of value for you or your business please consider a donation:\n" . \ -      "https://git.eworm.de/cgit/routeros-scripts/about/#donate"); -  } - -  $SendNotification "Configuration warning!" $NotificationMessage; -  :set SentConfigChangesNotification $ExpectedConfigVersion; -}  |