CESNET / netopeer2

NETCONF toolset
BSD 3-Clause "New" or "Revised" License
301 stars 189 forks source link

How to construct a leafref element in notification #1367

Closed fushion2018 closed 1 year ago

fushion2018 commented 1 year ago

Hi @michalvasko: I encountered problems a question recently during constructing a leftef element in notification. the admin-state is leafref type(RO) in notification, but is defined RW in ietf-hardware:hardware, when constructing ietf-hardware:hardware-state-oper-enabled. it alway report errors as below: Leafref "/hardware/component/state/admin-state" of value "unlocked" points to a non-existing leaf. (path: /ietf-hardware:hardware-state-oper-enabled/admin-state)

Details are as follows

1、ietf-hardware.yang module: ietf-hardware +--rw hardware +--ro last-change? yang:date-and-time +--rw component [name] +--rw name string +--rw class identityref +--ro physical-index? int32 {entity-mib}? +--ro description? string +--rw parent? -> ../../component/name +--rw parent-rel-pos? int32 +--ro contains-child -> ../../component/name +--ro hardware-rev? string +--ro firmware-rev? string +--ro software-rev? string +--ro serial-num? string +--ro mfg-name? string +--ro model-name? string +--rw alias? string +--rw asset-id? string +--ro is-fru? boolean +--ro mfg-date? yang:date-and-time +--rw uri* inet:uri +--ro uuid? yang:uuid +--rw state {hardware-state}? | +--ro state-last-changed? yang:date-and-time | +--rw admin-state? admin-state | +--ro oper-state? oper-state | +--ro usage-state? usage-state | +--ro alarm-state? alarm-state | +--ro standby-state? standby-state +--ro sensor-data {hardware-sensor}? +--ro value? sensor-value +--ro value-type? sensor-value-type +--ro value-scale? sensor-value-scale +--ro value-precision? sensor-value-precision +--ro oper-status? sensor-status +--ro units-display? string +--ro value-timestamp? yang:date-and-time +--ro value-update-rate? uint32

notifications: +---n hardware-state-change +---n hardware-state-oper-enabled {hardware-state}? | +--ro name? -> /hardware/component/name | +--ro admin-state? -> /hardware/component/state/admin-state | +--ro alarm-state? -> /hardware/component/state/alarm-state +---n hardware-state-oper-disabled {hardware-state}? +--ro name? -> /hardware/component/name +--ro admin-state? -> /hardware/component/state/admin-state +--ro alarm-state? -> /hardware/component/state/alarm-state

2、 get --filter-xpath /ietf-hardware:*//.

DATA
<hardware xmlns="urn:ietf:params:xml:ns:yang:ietf-hardware">
  <component>
    <name>HPRUF</name>
    <class xmlns:o-ran-hw="urn:o-ran:hardware:1.0">o-ran-hw:O-RAN-RADIO</class>
    <alias>666666</alias>
    <asset-id>888888</asset-id>
    <state>
      <admin-state>unlocked</admin-state>
      <state-last-changed>2023-07-29T13:42:00Z</state-last-changed>
      <alarm-state>critical</alarm-state>
    </state>
    <o-ran-name xmlns="urn:o-ran:hardware:1.0">HPRUF</o-ran-name>
    <hardware-rev>hw-rev01</hardware-rev>
    <firmware-rev>fw-rev01</firmware-rev>
    <serial-num>123456</serial-num>
    <model-name>model_pru</model-name>
    <product-code xmlns="urn:o-ran:hardware:1.0">SN123456</product-code>
    <label-content xmlns="urn:o-ran:hardware:1.0">
      <model-name>true</model-name>
      <serial-number>true</serial-number>
    </label-content>
  </component>
  <last-change>2014-07-29T13:42:00Z</last-change>
</hardware>

get-data --datastore operational --filter-xpath /ietf-hardware:*//.

DATA
<hardware xmlns="urn:ietf:params:xml:ns:yang:ietf-hardware">
<last-change>2014-07-29T13:42:00Z</last-change>
<component>
<name>HPRUF</name>
<hardware-rev>hw-rev01</hardware-rev>
<firmware-rev>fw-rev01</firmware-rev>
<serial-num>123456</serial-num>
<model-name>model_pru</model-name>
<state>
<state-last-changed>2023-07-29T13:42:00Z</state-last-changed>
<alarm-state>critical</alarm-state>
</state>
<product-code xmlns="urn:o-ran:hardware:1.0">SN123456</product-code>
<label-content xmlns="urn:o-ran:hardware:1.0">
<model-name>true</model-name>
<serial-number>true</serial-number>
</label-content>
</component>
</hardware>

3、 related code

    notif = lyd_new_path(NULL, ctx, "/ietf-hardware:hardware-state-oper-enabled", NULL, 0, 0);
    lyd_new_path(notif, NULL, "name", "HPRUF", 0, 0);
    **lyd_new_path(notif, NULL, "admin-state", "unlocked", 0, 0);**
    lyd_new_path(notif, NULL, "alarm-state", "critical", 0, 0);

@michalvasko Looking forward to your reply, Thank you!

fushion2018 commented 1 year ago

i got it, after subscribled running data can be shown in operational datastore