mirror of
https://git.eworm.de/cgit/routeros-scripts
synced 2025-07-02 14:14:29 +02: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
|
@ -68,6 +68,8 @@
|
|||
:global ScriptUpdatesBaseUrl;
|
||||
:global ScriptUpdatesUrlSuffix;
|
||||
|
||||
:global WaitForFile;
|
||||
|
||||
:if ([ / certificate print count-only where common-name=$CommonName ] = 0) do={
|
||||
:log info ("Certificate with CommonName " . $CommonName . \
|
||||
" not available, downloading and importing.");
|
||||
|
@ -76,6 +78,7 @@
|
|||
($ScriptUpdatesBaseUrl . "certs/" . \
|
||||
$FileName . $ScriptUpdatesUrlSuffix) \
|
||||
dst-path=$FileName;
|
||||
$WaitForFile $FileName;
|
||||
/ certificate import file-name=$FileName passphrase="";
|
||||
} on-error={
|
||||
:log warning "Failed imprting certificate!";
|
||||
|
@ -166,6 +169,7 @@
|
|||
|
||||
:global CertificateAvailable;
|
||||
:global CleanFilePath;
|
||||
:global WaitForFile;
|
||||
|
||||
:if ([ :len $PkgName ] = 0) do={ return false; }
|
||||
:if ([ :len $PkgVer ] = 0) do={ :set PkgVer [ / system package update get installed-version ]; }
|
||||
|
@ -179,6 +183,7 @@
|
|||
/ tool fetch check-certificate=yes-without-crl \
|
||||
("https://upgrade.mikrotik.com/routeros/" . $PkgVer . "/" . $PkgFile) \
|
||||
dst-path=$PkgDest;
|
||||
$WaitForFile $PkgDest;
|
||||
} on-error={
|
||||
/ file remove [ find where name=$PkgDest ];
|
||||
:return false;
|
||||
|
@ -196,3 +201,20 @@
|
|||
: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…
Add table
Add a link
Reference in a new issue