Size: a a a

2020 December 14

F

Fly in MikrotikRus
теперь выполняется команда
get
в контексте
/ip dhcp-server lease

в качестве параметров команды указывается 1) идентификатор записи и 2) имя извлекаемого поля
источник

M

Maksim Sharov in MikrotikRus
Fly
найденый идентификатор подставляется вместо скобок. например получен идентификатор записи 0, остается такая команда:
:put [/ip dhcp-server lease get 0 mac-address]
идентификатор соответствует номеру строки?

не могу интерпретировать вывод

[ci_bot@mkrt] /ip dhcp-server lease> /ip dhcp-server lease print
Flags: X - disabled, R - radius, D - dynamic, B - blocked
#   ADDRESS                                                MAC-ADDRESS       HOST-NAME             SERVER             RATE-LIMIT             STATUS
0 D 192.168.88.99                                          04:B1:67:19:51:6A Redmi4X-Redmi         defconf                                   bound  
1 D ;;; test
    192.168.88.80                                          0A:D4:E6:38:FB:02 gate                  defconf                                   bound  
2 D 192.168.88.82                                          D8:9C:67:19:12:BA                       defconf                                   bound  
[ci_bot@mkrt] /ip dhcp-server lease> :put [/ip dhcp-server lease find host-name="gate"]
*194


почему аж 194, например?
источник

С

Сергей in MikrotikRus
Hasper
Комрады есть кто нить из РБ Витебск ?
есть )
источник

F

Fly in MikrotikRus
Maksim Sharov
идентификатор соответствует номеру строки?

не могу интерпретировать вывод

[ci_bot@mkrt] /ip dhcp-server lease> /ip dhcp-server lease print
Flags: X - disabled, R - radius, D - dynamic, B - blocked
#   ADDRESS                                                MAC-ADDRESS       HOST-NAME             SERVER             RATE-LIMIT             STATUS
0 D 192.168.88.99                                          04:B1:67:19:51:6A Redmi4X-Redmi         defconf                                   bound  
1 D ;;; test
    192.168.88.80                                          0A:D4:E6:38:FB:02 gate                  defconf                                   bound  
2 D 192.168.88.82                                          D8:9C:67:19:12:BA                       defconf                                   bound  
[ci_bot@mkrt] /ip dhcp-server lease> :put [/ip dhcp-server lease find host-name="gate"]
*194


почему аж 194, например?
на самом деле идентификатор не совсем номер.
идентификатор - особый "непечатаемый" тип данных (но можно распечатать его приведение к строке).

НО команде get в качестве идентификатора можно подать и номер.
источник

M

Maksim Sharov in MikrotikRus
Fly
на самом деле идентификатор не совсем номер.
идентификатор - особый "непечатаемый" тип данных (но можно распечатать его приведение к строке).

НО команде get в качестве идентификатора можно подать и номер.
ага, теперь понял логику
источник

F

Fly in MikrotikRus
*194 - это приведенный к строке идентификатор
источник

F

Fly in MikrotikRus
команда find - возвращает идентификатор, который подставляется потом в get
источник

F

Fly in MikrotikRus
результат работы get подставляется в команду :put, которая и распечатает
источник

F

Fly in MikrotikRus
Maksim Sharov
ага, теперь понял логику
искать дхцп-лиз по хостнэйму - не очень уникально. часто встречал ситуацию когда хостнэймы были одинаковы. и ещё чаще когда хостнэйм пустой (не определившийся).
уникально - искать по мак-у или ип-у.
источник

F

Fly in MikrotikRus
кстати если find найдёт более одной записи по отобраному параметру - эта строка скрипта выдаст ошибку и скрипт остановится.
источник

M

Maksim Sharov in MikrotikRus
Fly
искать дхцп-лиз по хостнэйму - не очень уникально. часто встречал ситуацию когда хостнэймы были одинаковы. и ещё чаще когда хостнэйм пустой (не определившийся).
уникально - искать по мак-у или ип-у.
мне как раз нужно найти адрес по маку или хосту
источник

F

Fly in MikrotikRus
Ну вот лучше по маку
источник

M

Maksim Sharov in MikrotikRus
Fly
кстати если find найдёт более одной записи по отобраному параметру - эта строка скрипта выдаст ошибку и скрипт остановится.
так, я думал, он первое совпадение находит. есть оператор первого совпадения?
источник

F

Fly in MikrotikRus
Maksim Sharov
так, я думал, он первое совпадение находит. есть оператор первого совпадения?
find находит все записи которые попадают под условие.
есть более корректный способ обработки ситуаций когда find может найти более одной записи
источник

F

Fly in MikrotikRus
если find находит более одной записи, то он возвращает массив (array) идентификаторов, а не единичный идентификатор.
Единичный - тоже можно рассматривать как массив с одним элементом.

поэтому в таких ситуациях лучше использовать конструкцию
:foreach элемент in=массив do={ код цикла };
источник

F

Fly in MikrotikRus
например:
:foreach dhcpLease in=[/ip dhcp-server lease find] do={
   :put [/ip dhcp-server lease get $dhcpLease mac-address];
};
источник

F

Fly in MikrotikRus
Maksim Sharov
так, я думал, он первое совпадение находит. есть оператор первого совпадения?
корректнее обрабатывать все совпадения в цикле foreach
источник

F

Fly in MikrotikRus
и только если на 100% уверен что всегда find всегда найдёт одну запись по условию (не 0, и не больше 1), тогда можно обойтись без foreach
источник

F

Fly in MikrotikRus
В контексте дхцплиз лучше юзать именно форич, т.к. в определенный момент запуска скрипта нужной динамической лизы может не быть (комп выключен) или ситуация с задвоением хостнэймов и прочее
источник

M

Maksim Sharov in MikrotikRus
Fly
и только если на 100% уверен что всегда find всегда найдёт одну запись по условию (не 0, и не больше 1), тогда можно обойтись без foreach
да, спасибо, пока будут уникальные записи, думаю find хватит
источник