Скрипт для Queues Simple

Автоматизация при помощи встроенного скриптового языка и RouterOS API
obesbash
Сообщения: 6
Зарегистрирован: 23 апр 2018, 23:00

Скрипт для Queues Simple

Сообщение obesbash »

Имеем скрипт

Код: Выделить всё

:local comment 10.10.10.12;
 :local i [queue simple get number=[find comment=10.10.10.12]];
  :if (i=true) do={queue simple
 set [find comment="$comment"] max-limit=3M/3M}
  else={queue simple add max-limit=3M/3M comment=10.10.10.12 target=10.10.10.12}
Смысл скрипта - скрипт запускается с биллинга UTM5, этот скрипт должен проверить есть ли в Queues Simple правило с комментарием 10.10.10.12, если да, то изменить max-limit на 3Мб/3Мб, если же правила с таким комментарием нет, то создать новое правило и присвоить ему комментарий 10.10.10.12, target 10.10.10.12 и max-limit 3Мб/3Мб. Как я не боролся с этим скриптом никак не получается выполнить условие if, т.е. даже если есть правило с комментарием 10.10.10.12 без указания max-limit, то всё равно создается новое правило с указанными данными. Помогите добиться выполнения проверки if. Заранее спасибо
Последний раз редактировалось obesbash 23 апр 2018, 23:55, всего редактировалось 1 раз.
obesbash
Сообщения: 6
Зарегистрирован: 23 апр 2018, 23:00

Re: Скрипт для Queues Simple

Сообщение obesbash »

Пробовал так:

Код: Выделить всё

:local comment "10.10.10.12";
 :local i [queue simple find comment=$comment]; 
:if ($i = true) do={queue simple set [find comment=$comment] max-lim
it=3M/3M} 
else={queue simple add max-limit=3M/3M comment=$comment target=10.10.10.12}
Ничего не изменилось
Аватара пользователя
Chupaka
Сообщения: 4095
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Скрипт для Queues Simple

Сообщение Chupaka »

Код: Выделить всё

:local exists false;
:foreach i in=[/que sim find ...] do={
  /que sim set $i max-.....
  :set exists true;
}
:if (!$exists) do={
  /que sim add .....
}
obesbash
Сообщения: 6
Зарегистрирован: 23 апр 2018, 23:00

Re: Скрипт для Queues Simple

Сообщение obesbash »

Chupaka, большое спасибо, скрипт работает. Но есть одна загвоздка, мне нужно этот скрипт выполнить с терминала сплошной строкой, т.е. :local exists false; :foreach i in=[/queue simple find comment=10.10.10.12] do={queue simple set $i max-limit=3M/3M :set exists true;} :if (!$exists) do={/queue simple add max-limit=3M/3M comment=10.10.10.12 target=10.10.10.12}. Но микротик ругается(выделяет крастным цветом ":set"), если сразу после "do={queue simple set $i max-limit=3M/3M" я ставлю ":set". Понимаю, что допускаю где-то синтаксическую ошибку

P.S. скрипт работает если запускать его с system scripts, а мне нужно терминала =)
Аватара пользователя
Chupaka
Сообщения: 4095
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Скрипт для Queues Simple

Сообщение Chupaka »

Так точку с запятой надо поставить перед :set — закрыть предыдущую команду. Для этого и используется либо точка с запятой, либо новая строка :)
obesbash
Сообщения: 6
Зарегистрирован: 23 апр 2018, 23:00

Re: Скрипт для Queues Simple

Сообщение obesbash »

Код: Выделить всё

:local exists false; :foreach i in=[/queue simple find comment=10.10.10.12] do={/queue simple set $i max-limit=3M/3M; :set exists true}; :if (!$exists) do={/queue simple add max-limit=3M/3M comment=10.10.10.12 target=10.10.10.12}
Заработало в одну строку!!! Большое человеческое спасибо тебе, господин Chupaka =)