2017-03-24 20 views
1

私は、他のリストの中のリストを指し示すleafrefを持つyangモデルを持っています。 は、基本的にはこのような何か:余分なリーフなしでリーフのキー識別子を制限する

list some-names 
{ 
    key "name"; 
    leaf name 
    { 
     type string; 
    } 

    list some-other-names 
    { 
     key "name"; 
     leaf name 
     { 
      type string; 
     } 
    } 
} 

私はsome-other-namesリストにleafrefで外部から指すようにしたいが、上側の名前を持つ唯一のものは、FOOに等しいです。 残念ながら、リーフレファレンスには制限のためにcurrent()が必要です。 私の現在の解決策は次のとおりですが、 が構成に必要ない余分なリーフを必要とします。

leaf foo 
{ 
    type string; 
    deafault "foo"; 
} 
leaf some-leaf-ref 
{ 
    type leafref 
    { 
     path "/some-names[name = current()/../foo]/some-other-names/name"; 
    } 
} 

が一定値にsome-namesの名前を制限するための追加のリーフを必要としません。これ以上簡単な方法は、ありますか?

ところで、この私はすでに試したが、その正しくないパス引数:

leaf some-leaf-ref 
{ 
    type leafref 
    { 
     path "/some-names[name = 'foo']/some-other-names"; 
    } 
} 

答えて

0

おそらくの線に沿って何か:だから

leaf some-leafref { 
    must "/some-names[name = 'foo']/some-other-names/name = ."; 
    type leafref { 
     path "/some-names/some-other-names/name"; 
    } 
    } 

path発現に述語を、まだと追加のmust制限 - 2つの式は本質的にANDで結ばれます。 YANG仕様では、パス式が複数のノードを含むノード集合に評価される可能性があり、述語はキーごとに必須であるとは言いません(instance-identifiersの場合と異なります)。少なくとも、私にはハッカーのように思えますが、少なくとも醜いです。

あなたが本当に欲しいものおそらく

は、それが有効なだけ../name = 'foo'にするwhenを持っている、あなたの外側listsome-names)にleafref葉の子です。

list some-names { 
    key "name"; 
    leaf name { 
     type string; 
    } 

    list some-other-names { 
     key "name"; 
     leaf name { 
     type my-type; 
     } 
    } 

    leaf some-leafref { 
     when "../name = 'foo'"; 
     type leafref { 
     path "../some-other-names/name"; 
     } 
    } 
    } 
関連する問題