Juniper NETCONF RPC — данные не возвращены

Я пытаюсь отправить пользовательский XML RPC на свою виртуальную машину Juniper. Команда следующая:

netconf-console --host 192.168.1.100 --port 830 --user xxxx --password xxxx --rpc junos-get-interfaces.xml

<nc:get-config xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
<nc:source>
<nc:running/>
</nc:source>
<nc:filter type="xpath" select="/interfaces">
</nc:filter>
</nc:get-config>

Пользовательский RPC пытается отфильтровать текущую конфигурацию, чтобы просто получить раздел интерфейсов. Но я получаю следующий ответ:

<?xml version='1.0' encoding='UTF-8'?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/12.1R1/junos" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:f0b4fd48-fcb5-4e03-815b-961a19a9b525">
<data>
</data>
</rpc-reply>

Однако в разделе «Интерфейсы» на коробке есть конфигурация. Любые идеи, что происходит? Я также пытался использовать xpath в команде CLI netconf-console, но он говорит, что сервер его не поддерживает.

netconf-console --host 192.168.1.100 --port 830 --user xxxx --password xxxx --get-config /native/interfaces Ошибка операции: MissingCapabilityError - сервер не поддерживает [:xpath]


person Jok56    schedule 31.12.2020    source источник


Ответы (2)


XPath не является допустимым типом фильтра для get-config.

<filter> — Enclose the <configuration> tag element. The mandatory type attribute indicates the kind of syntax used to represent the requested configuration elements; the only acceptable value is subtree.

https://www.juniper.net/documentation/en_US/junos/topics/reference/tag-summary/netconf-get-config.html

Вместо этого вы можете использовать поддерево типа фильтра, как описано ниже.

ПРИМЕЧАНИЕ. GET-CONF не имеет атрибута для наследования. Если вам нужно получить то, что будет окончательной конфигурацией, то есть вы используете раздел Groups, вам нужно будет использовать GET-CONFIGURATION. Я покажу разницу в дополнительном выводе ниже. https://www.juniper.net/documentation/en_US/junos/topics/reference/tag-summary/junos-xml-protocol-get-configuration.html

Содержимое файла get-interfaces.xml с использованием get-conf

<get-config>
    <source>
        <running/>
    </source>
    <filter type="subtree">
        <configuration>
            <interfaces/>
        </configuration>
    </filter>
</get-config>

Выполните команду на целевом хосте:

netconf-console --host 10.49.162.162 --port 830 --user root --password xxxx --rpc get-interfaces.xml

Пример вывода get-conf:

root@Ubuntu-Server:~# netconf-console --host 10.49.162.162 --port 830 --user root --password Embe1mpls --rpc get-interfaces.xml 
<?xml version='1.0' encoding='UTF-8'?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/18.3I0/junos" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:ae0be5f0-4f9d-45fa-b92f-c161d2a92f2b">
<data>
<configuration xmlns="http://xml.juniper.net/xnm/1.1/xnm" junos:commit-seconds="1608495419" junos:commit-localtime="2020-12-20 12:16:59 PST" junos:commit-user="root">
    <interfaces>
        <interface>
            <name>xe-0/0/0</name>
            <unit>
                <name>0</name>
                <family>
                    <inet>
                        <address>
                            <name>172.20.0.12/32</name>
                        </address>
                    </inet>
                </family>
            </unit>
        </interface>
        <interface>
            <name>xe-0/0/1</name>
            <unit>
                <name>0</name>
                <family>
                    <inet>
                        <address>
                            <name>172.20.20.0/32</name>
                        </address>
                    </inet>
                </family>
            </unit>
        </interface>
    </interfaces>
</configuration>
</data>
</rpc-reply>

Содержимое файла get-interfaces.xml с использованием конфигурации get-config с наследованием

<get-configuration inherit="inherit">
    <configuration>
        <interfaces/>
    </configuration>
</get-configuration>

Пример вывода команды get-configuration: [Обратите внимание на все дополнительные интерфейсы, унаследованные на том же хосте]

root@Ubuntu-Server:~# netconf-console --host 10.49.162.162 --port 830 --user root --password xxxx --rpc get-interfaces.xml 
<?xml version='1.0' encoding='UTF-8'?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/18.3I0/junos" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:92751ca5-8d1f-449c-a3e8-10aba7be249c">
<configuration xmlns="http://xml.juniper.net/xnm/1.1/xnm" junos:changed-seconds="1608495419" junos:changed-localtime="2020-12-20 12:16:59 PST">
    <interfaces>
        <interface>
            <name>xe-0/0/0</name>
            <unit>
                <name>0</name>
                <family>
                    <inet>
                        <address>
                            <name>172.20.0.12/32</name>
                        </address>
                    </inet>
                </family>
            </unit>
        </interface>
        <interface>
            <name>xe-0/0/1</name>
            <unit>
                <name>0</name>
                <family>
                    <inet>
                        <address>
                            <name>172.20.20.0/32</name>
                        </address>
                    </inet>
                </family>
            </unit>
        </interface>
        <interface>
            <name>lo0</name>
            <unit>
                <name>0</name>
                <family>
                    <inet>
                        <address>
                            <name>128.49.162.162/32</name>
                            <primary/>
                        </address>
                    </inet>
                    <iso>
                        <address>
                            <name>47.0005.80ff.f800.0000.0108.0001.1280.4916.2162.00</name>
                        </address>
                    </iso>
                    <inet6>
                        <address>
                            <name>abcd::128:49:162:162/128</name>
                            <primary/>
                        </address>
                    </inet6>
                </family>
            </unit>
        </interface>
        <interface>
            <name>em0</name>
            <unit>
                <name>0</name>
                <family>
                    <inet>
                        <address>
                            <name>10.49.162.162/19</name>
                        </address>
                    </inet>
                </family>
            </unit>
        </interface>
        <interface>
            <name>em1</name>
            <unit>
                <name>0</name>
                <family>
                    <inet>
                        <address>
                            <name>169.254.0.2/24</name>
                        </address>
                    </inet>
                </family>
            </unit>
        </interface>
    </interfaces>
</configuration>
</rpc-reply>

Примечание. Чтобы упростить поиск уровня фильтра, | команду display xml можно запустить на хосте, чтобы определить правильный тег

root@vqfx-leaf-01> show configuration interfaces | display xml | display inheritance 
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/18.3I0/junos">
    <configuration junos:commit-seconds="1608495419" junos:commit-localtime="2020-12-20 12:16:59 PST" junos:commit-user="root">
            <interfaces>
                <interface>
                    <name>xe-0/0/0</name>
                    <unit>
                        <name>0</name>
                        <family>
                            <inet>
                                <address>
                                    <name>172.20.0.12/32</name>
                                </address>
                            </inet>
                        </family>
                    </unit>
                </interface>
                <interface>
                    <name>xe-0/0/1</name>
                    <unit>
                        <name>0</name>
                        <family>
                            <inet>
                                <address>
                                    <name>172.20.20.0/32</name>
                                </address>
                            </inet>
                        </family>
                    </unit>
                </interface>
                <interface>
                    <name>lo0</name>
                    <unit>
                        <name>0</name>
                        <family>
                            <inet>
                                <address>
                                    <name>128.49.162.162/32</name>
                                    <primary/>
                                </address>
                            </inet>
                            <iso>
                                <address>
                                    <name>47.0005.80ff.f800.0000.0108.0001.1280.4916.2162.00</name>
                                </address>
                            </iso>
                            <inet6>
                                <address>
                                    <name>abcd::128:49:162:162/128</name>
                                    <primary/>
                                </address>
                            </inet6>
                        </family>
                    </unit>
                </interface>
                <interface>
                    <name>em0</name>
                    <unit>              
                        <name>0</name>
                        <family>
                            <inet>
                                <address>
                                    <name>10.49.162.162/19</name>
                                </address>
                            </inet>
                        </family>
                    </unit>
                </interface>
                <interface>
                    <name>em1</name>
                    <unit>
                        <name>0</name>
                        <family>
                            <inet>
                                <address>
                                    <name>169.254.0.2/24</name>
                                </address>
                            </inet>
                        </family>
                    </unit>
                </interface>
            </interfaces>
    </configuration>
    <cli>
        <banner>{master:0}</banner>
    </cli>
</rpc-reply>
person Ben Griffin    schedule 15.01.2021

Если вы пытаетесь использовать --get-config с --xpath с помощью команды CLI netconf-console, вы можете сделать что-то вроде этого:

netconf-console --host 192.168.1.100 --port 830 --user xxxx --password xxxx --get-config --xpath /native/interfaces
person nedstark179    schedule 18.05.2021