Некоторое время я использовал salt-sproxy с нашей сетью на основе Juniper, и все работало нормально.
Я начал находить некоторые проблемы с новым кодом Junos, который мы используем (18.x).
Я могу общаться с устройством (net.connected, net.cli, зернышки....и т.д.), но не могу ничего на нем настроить ни через net.cli, ни через net.load_config/template, устройство не сообщает вернет любой дифф и увидит, что новые конфиги уже настроены, даже если новый сет-файл содержит новые конфиги, не настроенные на устройстве точно.
И я не вижу ничего, что возвращается с устройства через rpc-reply при отладке запроса.
Я проверил это на нескольких устройствах Juniper с одним и тем же кодом, и все они ведут себя одинаково неправильно.
salt-sproxy '10-220-1-9' net.load_config text='set vlans vlan888 vlan-id 888'
10-220-1-9:
----------
уже_настроено:
Истинный
комментарий:
Уже настроен.
разница:
загруженная_конфигурация:
результат:
Истинный
mkh@sw220-1-9> показать конфигурацию vlans vlan888
{мастер: 0}
mkh@sw220-1-9>
Отладка показывает то же самое
[INFO] [host 10.220.1.9 session-id 82730] Запрос «ExecuteRpc»
[ОТЛАДКА] [host 10.220.1.9 session-id 82730] постановка в очередь <?xml version="1.0" encoding="UTF-8"?><nc:rpc xmlns:nc="urn:ietf:params:xml:ns: netconf:base:1.0" message-id="urn:uuid:ff66d123-c081-487d-971f-5d7e2932524a"><lock-configuration/></nc:rpc>
[DEBUG] [host 10.220.1.9 session-id 82730] Запрос на синхронизацию, будет ждать timeout=60
[DEBUG] [host 10.220.1.9 идентификатор сеанса 82730] Отправка сообщения
[INFO] [host 10.220.1.9 session-id 82730] Отправка:
<?xml version="1.0" encoding="UTF-8"?><nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid :ff66d123-c081-487d-971f-5d7e2932524a"><lock-configuration/></nc:rpc>]]>]]>
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[INFO] [host 10.220.1.9 session-id 82730] Получено сообщение от хоста
[DEBUG] [host 10.220.1.9 идентификатор сеанса 82730] Получено:
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/18.2R3/junos" xmlns:nc=" urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:ff66d123-c081-487d-971f-5d7e2932524a">
</rpc-ответ>
[ОТЛАДКА] [хост 10.220.1.9 идентификатор сеанса 82730] отправляет сообщение разным слушателям: <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http:/ /xml.juniper.net/junos/18.2R3/junos" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:ff66d123-c081-487d- 971f-5d7e2932524a">
</rpc-ответ>
[DEBUG] [хост 10.220.1.9 идентификатор сеанса 82730] отправляет сообщение слушателю: <объект ncclient.operations.rpc.RPCReplyListener по адресу 0x7fa31e732670>
[DEBUG] [host 10.220.1.9 session-id 82730] Доставка в объект <ncclient.operations. Third_party.juniper.rpc.ExecuteRpc по адресу 0x7fa31efeac10>
[DEBUG] [host 10.220.1.9 session-id 82730] отправляет сообщение слушателю: <объект ncclient.transport.session.NotificationHandler по адресу 0x7fa31e644130>
[DEBUG] [host 10.220.1.9 session-id 82730] отправляет сообщение слушателю: <jnpr.junos.device.DeviceSessionListener object at 0x7fa31e628370>
[INFO] [host 10.220.1.9 session-id 82730] Запрос «ExecuteRpc»
[ОТЛАДКА] [host 10.220.1.9 session-id 82730] постановка в очередь <?xml version="1.0" encoding="UTF-8"?><nc:rpc xmlns:nc="urn:ietf:params:xml:ns: netconf:base:1.0" message-id="urn:uuid:5f53421e-6d44-4c58-91e1-c19ccea38b1e"><load-configuration format="text" action="set"><configuration-set>set vlans vlan888 vlan -id 888
</configuration-set></load-configuration></nc:rpc>
[DEBUG] [host 10.220.1.9 session-id 82730] Запрос на синхронизацию, будет ждать timeout=60
[DEBUG] [host 10.220.1.9 идентификатор сеанса 82730] Отправка сообщения
[INFO] [host 10.220.1.9 session-id 82730] Отправка:
<?xml version="1.0" encoding="UTF-8"?><nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid :5f53421e-6d44-4c58-91e1-c19ccea38b1e"><load-configuration format="text" action="set"><configuration-set>set vlans vlan888 vlan-id 888
</configuration-set></load-configuration></nc:rpc>]]>]]>
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[INFO] [host 10.220.1.9 session-id 82730] Получено сообщение от хоста
[DEBUG] [host 10.220.1.9 идентификатор сеанса 82730] Получено:
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/18.2R3/junos" xmlns:nc=" urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:5f53421e-6d44-4c58-91e1-c19ccea38b1e">
<загрузить-конфигурацию-результатов>
<ок/>
</загрузить-конфигурация-результаты>
</rpc-ответ>
[ОТЛАДКА] [хост 10.220.1.9 идентификатор сеанса 82730] отправляет сообщение разным слушателям: <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http:/ /xml.juniper.net/junos/18.2R3/junos" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:5f53421e-6d44-4c58- 91e1-c19ccea38b1e">
<загрузить-конфигурацию-результатов>
<ок/>
</загрузить-конфигурация-результаты>
</rpc-ответ>
[DEBUG] [хост 10.220.1.9 идентификатор сеанса 82730] отправляет сообщение слушателю: <объект ncclient.operations.rpc.RPCReplyListener по адресу 0x7fa31e732670>
[DEBUG] [host 10.220.1.9 session-id 82730] Доставка в объект <ncclient.operations. Third_party.juniper.rpc.ExecuteRpc по адресу 0x7fa31f160fd0>
[DEBUG] [host 10.220.1.9 session-id 82730] отправляет сообщение слушателю: <объект ncclient.transport.session.NotificationHandler по адресу 0x7fa31e644130>
[DEBUG] [host 10.220.1.9 session-id 82730] отправляет сообщение слушателю: <jnpr.junos.device.DeviceSessionListener object at 0x7fa31e628370>
[INFO] [host 10.220.1.9 session-id 82730] Запрос «ExecuteRpc»
[ОТЛАДКА] [host 10.220.1.9 session-id 82730] постановка в очередь <?xml version="1.0" encoding="UTF-8"?><nc:rpc xmlns:nc="urn:ietf:params:xml:ns: netconf:base:1.0" message-id="urn:uuid:aa19bafc-a8b9-42ee-a9ae-f18de0448176"><get-configuration compare="rollback" rollback="0" format="text"/></nc :рпц>
[DEBUG] [host 10.220.1.9 session-id 82730] Запрос на синхронизацию, будет ждать timeout=60
[DEBUG] [host 10.220.1.9 идентификатор сеанса 82730] Отправка сообщения
[INFO] [host 10.220.1.9 session-id 82730] Отправка:
<?xml version="1.0" encoding="UTF-8"?><nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid :aa19bafc-a8b9-42ee-a9ae-f18de0448176"><get-configuration compare="rollback" rollback="0" format="text"/></nc:rpc>]]>]]>
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[INFO] [host 10.220.1.9 session-id 82730] Получено сообщение от хоста
[DEBUG] [host 10.220.1.9 идентификатор сеанса 82730] Получено:
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/18.2R3/junos" xmlns:nc=" urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:aa19bafc-a8b9-42ee-a9ae-f18de0448176">
<информация о конфигурации>
<вывод-конфигурации>
</вывод-конфигурации>
</ информация о конфигурации>
</rpc-ответ>
[ОТЛАДКА] [хост 10.220.1.9 идентификатор сеанса 82730] отправляет сообщение разным слушателям: <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http:/ /xml.juniper.net/junos/18.2R3/junos" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:aa19bafc-a8b9-42ee- a9ae-f18de0448176">
<информация о конфигурации>
<вывод-конфигурации>
</вывод-конфигурации>
</ информация о конфигурации>
</rpc-ответ>
[DEBUG] [хост 10.220.1.9 идентификатор сеанса 82730] отправляет сообщение слушателю: <объект ncclient.operations.rpc.RPCReplyListener по адресу 0x7fa31e732670>
[DEBUG] [host 10.220.1.9 session-id 82730] Доставка в объект <ncclient.operations. Third_party.juniper.rpc.ExecuteRpc по адресу 0x7fa31f0edb80>
[DEBUG] [host 10.220.1.9 session-id 82730] отправляет сообщение слушателю: <объект ncclient.transport.session.NotificationHandler по адресу 0x7fa31e644130>
[DEBUG] [host 10.220.1.9 session-id 82730] отправляет сообщение слушателю: <jnpr.junos.device.DeviceSessionListener object at 0x7fa31e628370>
[DEBUG] Отказ от конфигурации
[DEBUG] {'result': True, 'comment': '', 'already_configured': False, 'loaded_config': '', 'diff': ''}
[INFO] [host 10.220.1.9 session-id 82730] Запрос «ExecuteRpc»
[ОТЛАДКА] [host 10.220.1.9 session-id 82730] постановка в очередь <?xml version="1.0" encoding="UTF-8"?><nc:rpc xmlns:nc="urn:ietf:params:xml:ns: netconf:base:1.0" message-id="urn:uuid:4ef1fa52-c32d-49c4-aab2-e2db867a3761"><load-configuration compare="rollback" rollback="0"/></nc:rpc>
[DEBUG] [host 10.220.1.9 session-id 82730] Запрос на синхронизацию, будет ждать timeout=60
[DEBUG] [host 10.220.1.9 идентификатор сеанса 82730] Отправка сообщения
[INFO] [host 10.220.1.9 session-id 82730] Отправка:
<?xml version="1.0" encoding="UTF-8"?><nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid :4ef1fa52-c32d-49c4-aab2-e2db867a3761"><load-configuration compare="rollback" rollback="0"/></nc:rpc>]]>]]>
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[INFO] [host 10.220.1.9 session-id 82730] Получено сообщение от хоста
[DEBUG] [host 10.220.1.9 идентификатор сеанса 82730] Получено:
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/18.2R3/junos" xmlns:nc=" urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:4ef1fa52-c32d-49c4-aab2-e2db867a3761">
<загрузить-конфигурацию-результатов>
<ок/>
</загрузить-конфигурация-результаты>
</rpc-ответ>
[ОТЛАДКА] [хост 10.220.1.9 идентификатор сеанса 82730] отправляет сообщение разным слушателям: <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http:/ /xml.juniper.net/junos/18.2R3/junos" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:4ef1fa52-c32d-49c4- aab2-e2db867a3761">
<загрузить-конфигурацию-результатов>
<ок/>
</загрузить-конфигурация-результаты>
</rpc-ответ>
[DEBUG] [хост 10.220.1.9 идентификатор сеанса 82730] отправляет сообщение слушателю: <объект ncclient.operations.rpc.RPCReplyListener по адресу 0x7fa31e732670>
[DEBUG] [host 10.220.1.9 session-id 82730] Доставка в объект <ncclient.operations. Third_party.juniper.rpc.ExecuteRpc по адресу 0x7fa31f160f70>
[DEBUG] [host 10.220.1.9 session-id 82730] отправляет сообщение слушателю: <объект ncclient.transport.session.NotificationHandler по адресу 0x7fa31e644130>
[DEBUG] [host 10.220.1.9 session-id 82730] отправляет сообщение слушателю: <jnpr.junos.device.DeviceSessionListener object at 0x7fa31e628370>
[INFO] [host 10.220.1.9 session-id 82730] Запрос «ExecuteRpc»
[ОТЛАДКА] [host 10.220.1.9 session-id 82730] постановка в очередь <?xml version="1.0" encoding="UTF-8"?><nc:rpc xmlns:nc="urn:ietf:params:xml:ns: netconf:base:1.0" message-id="urn:uuid:ddb0f24c-387a-4366-9703-9a618e7ad6f4"><unlock-configuration/></nc:rpc>
[DEBUG] [host 10.220.1.9 session-id 82730] Запрос на синхронизацию, будет ждать timeout=60
[DEBUG] [host 10.220.1.9 идентификатор сеанса 82730] Отправка сообщения
[INFO] [host 10.220.1.9 session-id 82730] Отправка:
<?xml version="1.0" encoding="UTF-8"?><nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid :ddb0f24c-387a-4366-9703-9a618e7ad6f4"><unlock-configuration/></nc:rpc>]]>]]>
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[INFO] [host 10.220.1.9 session-id 82730] Получено сообщение от хоста
[DEBUG] [host 10.220.1.9 идентификатор сеанса 82730] Получено:
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/18.2R3/junos" xmlns:nc=" urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:ddb0f24c-387a-4366-9703-9a618e7ad6f4">
</rpc-ответ>
[ОТЛАДКА] [хост 10.220.1.9 идентификатор сеанса 82730] отправляет сообщение разным слушателям: <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http:/ /xml.juniper.net/junos/18.2R3/junos" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:ddb0f24c-387a-4366- 9703-9a618e7ad6f4">
</rpc-ответ>
[DEBUG] [хост 10.220.1.9 идентификатор сеанса 82730] отправляет сообщение слушателю: <объект ncclient.operations.rpc.RPCReplyListener по адресу 0x7fa31e732670>
[DEBUG] [host 10.220.1.9 session-id 82730] Доставка в объект <ncclient.operations. Third_party.juniper.rpc.ExecuteRpc по адресу 0x7fa31f0ed430>
[DEBUG] [host 10.220.1.9 session-id 82730] отправляет сообщение слушателю: <объект ncclient.transport.session.NotificationHandler по адресу 0x7fa31e644130>
[DEBUG] [host 10.220.1.9 session-id 82730] отправляет сообщение слушателю: <jnpr.junos.device.DeviceSessionListener object at 0x7fa31e628370>
[INFO] [host 10.220.1.9 session-id 82730] Запрос «CloseSession»
[ОТЛАДКА] [host 10.220.1.9 session-id 82730] постановка в очередь <?xml version="1.0" encoding="UTF-8"?><nc:rpc xmlns:nc="urn:ietf:params:xml:ns: netconf:base:1.0" message-id="urn:uuid:f8b65a65-5563-46b3-a7a1-36f2da78487e"><nc:close-session/></nc:rpc>
[DEBUG] [host 10.220.1.9 session-id 82730] Запрос на синхронизацию, будет ждать timeout=60
[DEBUG] [host 10.220.1.9 идентификатор сеанса 82730] Отправка сообщения
[INFO] [host 10.220.1.9 session-id 82730] Отправка:
<?xml version="1.0" encoding="UTF-8"?><nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid :f8b65a65-5563-46b3-a7a1-36f2da78487e"><nc:close-session/></nc:rpc>]]>]]>
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[DEBUG] [host 10.220.1.9 session-id 82730] анализ netconf v1.0
[INFO] [host 10.220.1.9 session-id 82730] Получено сообщение от хоста
[DEBUG] [host 10.220.1.9 идентификатор сеанса 82730] Получено:
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/18.2R3/junos" xmlns:nc=" urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:f8b65a65-5563-46b3-a7a1-36f2da78487e">
<ок/>
</rpc-ответ>
[ОТЛАДКА] [хост 10.220.1.9 идентификатор сеанса 82730] отправляет сообщение разным слушателям: <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http:/ /xml.juniper.net/junos/18.2R3/junos" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:f8b65a65-5563-46b3- a7a1-36f2da78487e">
<ок/>
</rpc-ответ>
Еще один момент: те же команды set file + net работают для другого кода Junos, отличного от 18, протестировано на 20.4 и 15.1 без подобных проблем.
Я добавил это в проект Salt-sproxy, как показано ниже, и убедился, что проблема не связана ни с Napalm, ни с netconf, которые были протестированы по отдельности и работали:
https://github.com/mirceaulinic/salt-sproxy/issues/255
Ценю любую поддержку и с наилучшими пожеланиями,
Моу