Я наконец-то создал скрипт для проверки и отключения шлюзов. Он работает нормально, но я хочу немного его оптимизировать. Вот сам скрипт.
#set variables
:local pingcount 3
:local pingip [:resolve "google.com"]
:local GatewayA 192.168.1.1
:local GatewayB 192.168.2.254
:local GatewayC 192.168.3.254
:if ([/ip route print count-only where dst-address="$pingip/32"]=0) do={
/ip route add dst-address=($pingip) gateway=($GatewayA) comment="Gateway $GatewayA Check"
}
/ip route set [find dst-address="$pingip/32"] disabled=no gateway=$GatewayA comment="Gateway $GatewayA Check"
Тестирую GatewayA:
:local pingresultA [/ping $pingip count=$pingcount]
GatewayA включение/отключение:
:if ($pingresultA=0) do={
:foreach i in=[/ip route find gateway=$GatewayA] do={
/ip route set $i disabled=yes
}
}
:if ($pingresultA!=0) do={
:foreach i in=[/ip route find gateway=$GatewayA] do={
:if ([/ip route get $i disabled]) do={
/ip route set $i disabled=no
}
}
}
:log info ("tested Gateway $GatewayA")
:delay 5000ms
Тестирую GatewayB:
/ip route set [find dst-address="$pingip/32"] disabled=no gateway=$GatewayB comment="Gateway $GatewayB Check"
:local pingresultB [/ping $pingip count=$pingcount]
GatewayB включение/отключение:
:if ($pingresultB=0) do={
:foreach i in=[/ip route find gateway=$GatewayB] do={
/ip route set $i disabled=yes
}
}
:if ($pingresultB!=0) do={
:foreach i in=[/ip route find gateway=$GatewayB] do={
:if ([/ip route get $i disabled]) do={
/ip route set $i disabled=no
}
}
}
:log info ("tested Gateway $GatewayB")
Могу ли я создать переменную со всеми шлюзами внутри и использовать :foreach?
Сейчас, если я добавляю ещё один шлюз (GatewayC), приходится копировать часть скрипта в конце и переименовывать переменные.
Я хочу что-то вроде этого:
#set variables
:local pingcount 3
:local pingip 69.16.137.252
:local Gateway [192.168.1.1;192.168.2.254]
:foreach i in=($Gateway) do={
:if ([/ip route print count-only where dst-address="$pingip/32"]=0) do={
/ip route add dst-address=($pingip) gateway=($Gateway) comment="Gateway $Gateway Check"
}
/ip route set [find dst-address="$pingip/32"] disabled=no gateway=$GatewayA comment="Gateway $Gateway Check"
Тестируем Gateway:
:local pingresult [/ping $pingip count=$pingcount]
Включение/отключение Gateway:
:if ($pingresult=0) do={
:foreach i in=[/ip route find gateway=$Gateway] do={
/ip route set $i disabled=yes
}
}
:if ($pingresult!=0) do={
:foreach i in=[/ip route find gateway=$Gateway] do={
:if ([/ip route get $i disabled]) do={
/ip route set $i disabled=no
}
}
}
:log info ("tested Gateway $Gateway")
:delay 5000ms
}
#set variables
:local pingcount 3
:local pingip [:resolve "google.com"]
:local GatewayA 192.168.1.1
:local GatewayB 192.168.2.254
:local GatewayC 192.168.3.254
:if ([/ip route print count-only where dst-address="$pingip/32"]=0) do={
/ip route add dst-address=($pingip) gateway=($GatewayA) comment="Gateway $GatewayA Check"
}
/ip route set [find dst-address="$pingip/32"] disabled=no gateway=$GatewayA comment="Gateway $GatewayA Check"
Тестирую GatewayA:
:local pingresultA [/ping $pingip count=$pingcount]
GatewayA включение/отключение:
:if ($pingresultA=0) do={
:foreach i in=[/ip route find gateway=$GatewayA] do={
/ip route set $i disabled=yes
}
}
:if ($pingresultA!=0) do={
:foreach i in=[/ip route find gateway=$GatewayA] do={
:if ([/ip route get $i disabled]) do={
/ip route set $i disabled=no
}
}
}
:log info ("tested Gateway $GatewayA")
:delay 5000ms
Тестирую GatewayB:
/ip route set [find dst-address="$pingip/32"] disabled=no gateway=$GatewayB comment="Gateway $GatewayB Check"
:local pingresultB [/ping $pingip count=$pingcount]
GatewayB включение/отключение:
:if ($pingresultB=0) do={
:foreach i in=[/ip route find gateway=$GatewayB] do={
/ip route set $i disabled=yes
}
}
:if ($pingresultB!=0) do={
:foreach i in=[/ip route find gateway=$GatewayB] do={
:if ([/ip route get $i disabled]) do={
/ip route set $i disabled=no
}
}
}
:log info ("tested Gateway $GatewayB")
Могу ли я создать переменную со всеми шлюзами внутри и использовать :foreach?
Сейчас, если я добавляю ещё один шлюз (GatewayC), приходится копировать часть скрипта в конце и переименовывать переменные.
Я хочу что-то вроде этого:
#set variables
:local pingcount 3
:local pingip 69.16.137.252
:local Gateway [192.168.1.1;192.168.2.254]
:foreach i in=($Gateway) do={
:if ([/ip route print count-only where dst-address="$pingip/32"]=0) do={
/ip route add dst-address=($pingip) gateway=($Gateway) comment="Gateway $Gateway Check"
}
/ip route set [find dst-address="$pingip/32"] disabled=no gateway=$GatewayA comment="Gateway $Gateway Check"
Тестируем Gateway:
:local pingresult [/ping $pingip count=$pingcount]
Включение/отключение Gateway:
:if ($pingresult=0) do={
:foreach i in=[/ip route find gateway=$Gateway] do={
/ip route set $i disabled=yes
}
}
:if ($pingresult!=0) do={
:foreach i in=[/ip route find gateway=$Gateway] do={
:if ([/ip route get $i disabled]) do={
/ip route set $i disabled=no
}
}
}
:log info ("tested Gateway $Gateway")
:delay 5000ms
}
