Community discussions

MikroTik App
 
dke
newbie
Topic Author
Posts: 47
Joined: Tue Dec 10, 2019 11:30 pm
Location: Austria

Differentiate between RouterOS v6.x and v7.x

Mon Aug 22, 2022 2:15 pm

Hi,

is there a proper way to differentiate between RouterOS v6.x and v7.x in a configuration script?
I tried
/system resource
:global versionStr [get value-name=version]
:if ([:pick $versionStr 0] < 7) do={
  /log info "Found RouterOS v6.x."                                
  /system ntp client              
  set enabled=yes primary-ntp=192.168.144.210
} else={
  /log info "Found RouterOS v7.x."
  /system ntp client
  set enabled=yes servers=192.168.144.210
  /system ntp server
  set enabled=yes
}
but RouterOS seems to parse the contents inside the if-brackets despite not going inside, so that it then throws the error, as the
primary-ntp
key is no longer available:
...
set enabled=yes primary-ntp=192.168.144.210
expected end of command (line 4 column 19)
Thanks,
Daniel
 
sid5632
Long time Member
Long time Member
Posts: 553
Joined: Fri Feb 17, 2017 6:05 pm

Re: Differentiate between RouterOS v6.x and v7.x

Mon Aug 22, 2022 2:30 pm

You probably need something like this:
:do {[:parse "/system ntp client set enabled=yes primary-ntp=192.168.144.210"]} on-error={}
 
User avatar
Jotne
Forum Guru
Forum Guru
Posts: 3291
Joined: Sat Dec 24, 2016 11:17 am
Location: Magrathean

Re: Differentiate between RouterOS v6.x and v7.x

Mon Aug 22, 2022 8:12 pm

I do use this to test if RouterOS is 7 or other
:if ([:tonum [:pick [/system resource get version] 0 1]] > 6) do={
 This runs if Router os is 7.x+
} else={
  This part runs if Router is is 6 .x or lower
}
 
dke
newbie
Topic Author
Posts: 47
Joined: Tue Dec 10, 2019 11:30 pm
Location: Austria

Re: Differentiate between RouterOS v6.x and v7.x

Thu Sep 08, 2022 5:46 pm

You probably need something like this:
:do {[:parse "/system ntp client set enabled=yes primary-ntp=192.168.144.210"]} on-error={}
Working, thank you very much!

Complete, corrected script:
:global versionStr [/system resource get version]
:if ([:pick $versionStr 0] < 7) do={
  :do {[:parse "/system ntp client set enabled=yes primary-ntp=192.168.144.210"]} on-error={}
} else={
  :do {[:parse "/system ntp client set enabled=yes servers=192.168.144.210"]} on-error={}
  :do {[:parse "/system ntp server set enabled=yes"]} on-error={}
}
 
User avatar
Jotne
Forum Guru
Forum Guru
Posts: 3291
Joined: Sat Dec 24, 2016 11:17 am
Location: Magrathean

Re: Differentiate between RouterOS v6.x and v7.x

Thu Sep 08, 2022 6:42 pm

From what I have learned from rextended, you should avoid on-error.
Find out what can go wrong and make a script that will not fail.
Maybe rextended will help out. :)
 
sid5632
Long time Member
Long time Member
Posts: 553
Joined: Fri Feb 17, 2017 6:05 pm

Re: Differentiate between RouterOS v6.x and v7.x

Fri Sep 09, 2022 3:16 am

You clearly didn't read or understand the question then.
There is a syntax difference between V6 and V7. You CAN'T make something that won't fail, except as already stated.
 
User avatar
rextended
Forum Guru
Forum Guru
Posts: 11982
Joined: Tue Feb 25, 2014 12:49 pm
Location: Italy
Contact:

Re: Differentiate between RouterOS v6.x and v7.x

Fri Sep 09, 2022 4:03 am

It is not sufficent to ckeck only RouterOS version with (s)NTP...

This is just the example for check, not for bypass syntax checking.
/system resource
:global rosVer [:tonum [:pick [get version] 0 1]]

:if ($rosVer~"(6|7)") do={
    :if ($rosVer = 6) do={
        :put "Detected RouterOS 6"
        /system package
        :if ([:len [find where name="ntp"]] = 1) do={
            :put "with NTP package installed"
        } else={
            :put "without NTP package installed, use SNTP"
        }
    }
    :if ($rosVer = 7) do={
        :put "Detected RouterOS 7"
        :put "the NTP package is always present"
    }
} else={
    :put "Unrecognized RouterOS version: >$rosVer<"
}
 
User avatar
rextended
Forum Guru
Forum Guru
Posts: 11982
Joined: Tue Feb 25, 2014 12:49 pm
Location: Italy
Contact:

Re: Differentiate between RouterOS v6.x and v7.x

Fri Sep 09, 2022 4:13 am

And this is the code without the "onhorror-resume-next"
/system resource
:global rosVer [:tonum [:pick [get version] 0 1]]
:global priNTP 0.0.0.0
:global secNTP 0.0.0.0

:if ($rosVer~"(6|7)") do={
    :local setNTP ""
    :if ($rosVer = 6) do={
        /system package
        :if ([:len [find where name="ntp"]] = 1) do={
            :set setNTP "/system ntp client set enabled=yes primary-ntp=$priNTP secondary-ntp=$secNTP; \
                         /system ntp server set enabled=yes"
        } else={
            :set setNTP "/system ntp client set enabled=yes primary-ntp=$priNTP secondary-ntp=$secNTP"
        }
    }
    :if ($rosVer = 7) do={
            :set setNTP "/system ntp client set enabled=yes servers=$priNTP,$secNTP; \
                         /system ntp server set enabled=yes"
    }
    :execute "$setNTP"
} else={
    :put "Unrecognized RouterOS version: >$rosVer<"
}

Who is online

Users browsing this forum: No registered users and 20 guests