mirror of
https://github.com/eworm-de/routeros-scripts
synced 2024-05-14 08:04:19 +00:00
global-functions: add $WaitForFile, wait for file on fetch
The fetch command is asynchronous, the file is not guaranteed to be available when command terminates. I opened an issue at Mikrotik support (Ticket#2019041722004999), their answer: > You should perform a check in a loop. > :delay until file exist > > That can happen also with any configuration not just files. So add a function to wait for a file with given name. I have not seen this with other configuration, though.
This commit is contained in:
parent
9aac873163
commit
7f96e5c966
5 changed files with 35 additions and 4 deletions
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
:global SendNotification;
|
:global SendNotification;
|
||||||
:global UrlEncode;
|
:global UrlEncode;
|
||||||
|
:global WaitForFile;
|
||||||
|
|
||||||
:local GetIssuerCN do={
|
:local GetIssuerCN do={
|
||||||
:foreach IssuerI in=$1 do={
|
:foreach IssuerI in=$1 do={
|
||||||
|
@ -39,7 +40,9 @@
|
||||||
:foreach Type in={ ".pem"; ".p12" } do={
|
:foreach Type in={ ".pem"; ".p12" } do={
|
||||||
:local CertFileName ([ $UrlEncode $CommonName ] . $Type);
|
:local CertFileName ([ $UrlEncode $CommonName ] . $Type);
|
||||||
:do {
|
:do {
|
||||||
/ tool fetch check-certificate=yes-without-crl ($CertRenewUrl . $CertFileName);
|
/ tool fetch check-certificate=yes-without-crl \
|
||||||
|
($CertRenewUrl . $CertFileName) dst-path=$CertFileName;
|
||||||
|
$WaitForFile $CertFileName;
|
||||||
:foreach PassPhrase in=$CertRenewPass do={
|
:foreach PassPhrase in=$CertRenewPass do={
|
||||||
/ certificate import file-name=$CertFileName passphrase=$PassPhrase;
|
/ certificate import file-name=$CertFileName passphrase=$PassPhrase;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,9 +9,10 @@
|
||||||
|
|
||||||
:global Identity;
|
:global Identity;
|
||||||
:global DailyPskMatchComment;
|
:global DailyPskMatchComment;
|
||||||
:global UrlEncode;
|
|
||||||
|
|
||||||
:global SendNotification;
|
:global SendNotification;
|
||||||
|
:global UrlEncode;
|
||||||
|
:global WaitForFile;
|
||||||
|
|
||||||
:local Seen [ :toarray "" ];
|
:local Seen [ :toarray "" ];
|
||||||
|
|
||||||
|
@ -76,6 +77,7 @@
|
||||||
:do {
|
:do {
|
||||||
/ tool fetch check-certificate=yes-without-crl \
|
/ tool fetch check-certificate=yes-without-crl \
|
||||||
$Url dst-path=$Attach;
|
$Url dst-path=$Attach;
|
||||||
|
$WaitForFile $Attach;
|
||||||
} on-error={
|
} on-error={
|
||||||
:set Attach "";
|
:set Attach "";
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,9 +9,10 @@
|
||||||
|
|
||||||
:global Identity;
|
:global Identity;
|
||||||
:global DailyPskMatchComment;
|
:global DailyPskMatchComment;
|
||||||
:global UrlEncode;
|
|
||||||
|
|
||||||
:global SendNotification;
|
:global SendNotification;
|
||||||
|
:global UrlEncode;
|
||||||
|
:global WaitForFile;
|
||||||
|
|
||||||
:local Seen [ :toarray "" ];
|
:local Seen [ :toarray "" ];
|
||||||
|
|
||||||
|
@ -76,6 +77,7 @@
|
||||||
:do {
|
:do {
|
||||||
/ tool fetch check-certificate=yes-without-crl \
|
/ tool fetch check-certificate=yes-without-crl \
|
||||||
$Url dst-path=$Attach;
|
$Url dst-path=$Attach;
|
||||||
|
$WaitForFile $Attach;
|
||||||
} on-error={
|
} on-error={
|
||||||
:set Attach "";
|
:set Attach "";
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,9 +10,10 @@
|
||||||
|
|
||||||
:global Identity;
|
:global Identity;
|
||||||
:global DailyPskMatchComment;
|
:global DailyPskMatchComment;
|
||||||
:global UrlEncode;
|
|
||||||
|
|
||||||
:global SendNotification;
|
:global SendNotification;
|
||||||
|
:global UrlEncode;
|
||||||
|
:global WaitForFile;
|
||||||
|
|
||||||
:local Seen [ :toarray "" ];
|
:local Seen [ :toarray "" ];
|
||||||
|
|
||||||
|
@ -82,6 +83,7 @@
|
||||||
:do {
|
:do {
|
||||||
/ tool fetch check-certificate=yes-without-crl \
|
/ tool fetch check-certificate=yes-without-crl \
|
||||||
$Url dst-path=$Attach;
|
$Url dst-path=$Attach;
|
||||||
|
$WaitForFile $Attach;
|
||||||
} on-error={
|
} on-error={
|
||||||
:set Attach "";
|
:set Attach "";
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,6 +68,8 @@
|
||||||
:global ScriptUpdatesBaseUrl;
|
:global ScriptUpdatesBaseUrl;
|
||||||
:global ScriptUpdatesUrlSuffix;
|
:global ScriptUpdatesUrlSuffix;
|
||||||
|
|
||||||
|
:global WaitForFile;
|
||||||
|
|
||||||
:if ([ / certificate print count-only where common-name=$CommonName ] = 0) do={
|
:if ([ / certificate print count-only where common-name=$CommonName ] = 0) do={
|
||||||
:log info ("Certificate with CommonName " . $CommonName . \
|
:log info ("Certificate with CommonName " . $CommonName . \
|
||||||
" not available, downloading and importing.");
|
" not available, downloading and importing.");
|
||||||
|
@ -76,6 +78,7 @@
|
||||||
($ScriptUpdatesBaseUrl . "certs/" . \
|
($ScriptUpdatesBaseUrl . "certs/" . \
|
||||||
$FileName . $ScriptUpdatesUrlSuffix) \
|
$FileName . $ScriptUpdatesUrlSuffix) \
|
||||||
dst-path=$FileName;
|
dst-path=$FileName;
|
||||||
|
$WaitForFile $FileName;
|
||||||
/ certificate import file-name=$FileName passphrase="";
|
/ certificate import file-name=$FileName passphrase="";
|
||||||
} on-error={
|
} on-error={
|
||||||
:log warning "Failed imprting certificate!";
|
:log warning "Failed imprting certificate!";
|
||||||
|
@ -166,6 +169,7 @@
|
||||||
|
|
||||||
:global CertificateAvailable;
|
:global CertificateAvailable;
|
||||||
:global CleanFilePath;
|
:global CleanFilePath;
|
||||||
|
:global WaitForFile;
|
||||||
|
|
||||||
:if ([ :len $PkgName ] = 0) do={ return false; }
|
:if ([ :len $PkgName ] = 0) do={ return false; }
|
||||||
:if ([ :len $PkgVer ] = 0) do={ :set PkgVer [ / system package update get installed-version ]; }
|
:if ([ :len $PkgVer ] = 0) do={ :set PkgVer [ / system package update get installed-version ]; }
|
||||||
|
@ -179,6 +183,7 @@
|
||||||
/ tool fetch check-certificate=yes-without-crl \
|
/ tool fetch check-certificate=yes-without-crl \
|
||||||
("https://upgrade.mikrotik.com/routeros/" . $PkgVer . "/" . $PkgFile) \
|
("https://upgrade.mikrotik.com/routeros/" . $PkgVer . "/" . $PkgFile) \
|
||||||
dst-path=$PkgDest;
|
dst-path=$PkgDest;
|
||||||
|
$WaitForFile $PkgDest;
|
||||||
} on-error={
|
} on-error={
|
||||||
/ file remove [ find where name=$PkgDest ];
|
/ file remove [ find where name=$PkgDest ];
|
||||||
:return false;
|
:return false;
|
||||||
|
@ -196,3 +201,20 @@
|
||||||
:error "Locked."
|
:error "Locked."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# wait for file to be available
|
||||||
|
:global WaitForFile do={
|
||||||
|
:global CleanFilePath;
|
||||||
|
|
||||||
|
:local FileName [ $CleanFilePath [ :tostr $1 ] ];
|
||||||
|
:local I 0;
|
||||||
|
|
||||||
|
:while ([ file print count-only where name=$FileName ] = 0) do={
|
||||||
|
:if ($I > 20) do={
|
||||||
|
:return false;
|
||||||
|
}
|
||||||
|
:delay 100ms;
|
||||||
|
:set I ($I + 1);
|
||||||
|
}
|
||||||
|
:return true;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue