2016-08-24 23 views
1

當PyEZ使用RPC調用我們添加的參數像rpc.get_interface_information(terse="True", interface-name="xe-0/0/0")命名的參數有所不同,但對於配置的選項需要像rpc.get_configuration({"inherit":"inherit", "groups":"groups"})PyEZ RPC選項格式獲取配置和其他呼叫

在詞典中有什麼的原因這些差異?

回答

2

描述它的最好方法是這樣的: 對於非配置的rpcs,每個項都是它自己的元素,而在PyEZ中,我們使用這些參數來確定我們正在引用元素。

<get-interface-information> 
     <routing-instance>routing-instance</routing-instance> 
     <extensive/> 
     <statistics/> 
     <media/> 
     <detail/> 
     <terse/> 
     <brief/> 
     <descriptions/> 
     <snmp-index>snmp-index</snmp-index> 
     <switch-port>switch-port</switch-port> 
     <interface-name>interface-name</interface-name> 

</get-interface-information> 

在獲得配置RPC的情況下,所有你引用的項目實際上是屬性獲得配置標籤本身,在RPC定義不元素。

<get-configuration 
         [changed="changed"] 
         [commit-scripts="(apply | apply-no-transients | view)"] 
         [compare="rollback" [rollback="[0-49]"]] 
         [database="(candidate | committed)"] 
         [database-path=$junos-context/commit-context/database-path] 
         [format="(text | xml)"] 
         [inherit="(defaults | inherit)" 
            [groups="groups"] [interface-ranges="interface-ranges"]] 
         [(junos:key | key)="key"] > 

    <!-- tag elements for the configuration element to display --> 
</get-configuration> 

因此,要知道的RPC(我們將在PyEZ動態創建)是否被引用的元素或屬性是參數或字典的使用,分別。

希望有所幫助。

+0

謝謝愛德華,看到這些標籤的最佳方式是什麼/檢查某物是屬性而不是元素? –

0

添加到Edward的答案,我相信PyEZ RPC調用是使用反射(__call__方法)實現的,所以今天它不知道有效的RPC調用和參數。讓它意識到的方法是從設備動態加載Netconf模式並使用它將命名的arg映射到標記或元素。

試圖從用戶那裏抽象出這個調用約定是一個潛在的問題,那就是當同一個RPC有一個標籤和一個同名元素時該怎麼辦 - 不確定是否是現在的情況,或者是否有規則在模式中防止這種情況發生,但在這種情況下,調用的用戶應該能夠控制RPC doc恕我直言。