cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
244
Views
0
Helpful
10
Replies
Beginner

custom error-message for datatypes

Hi

 

Is there any way to define custom error-message for data types in yang? For example:

 

type inet:ipv4-address {
error-message "Invalid IPv4 address for loopback0";
}

 

PS - the above produces an error: unexpected keyword 'error-message'

Everyone's tags (3)
10 REPLIES 10
Cisco Employee

Re: custom error-message for datatypes

Hi,

Take a look at what was provided in RFC7950 - YANG:

7.5.4. The must's Substatements

+---------------+---------+-------------+
| substatement | section | cardinality |
+---------------+---------+-------------+
| description | 7.21.3 | 0..1 |
| error-app-tag | 7.5.4.2 | 0..1 |
| error-message | 7.5.4.1 | 0..1 |
| reference | 7.21.4 | 0..1 |
+---------------+---------+-------------+

7.5.4.1. The "error-message" Statement

The "error-message" statement, which is optional, takes a string as
an argument. If the constraint evaluates to "false", the string is
passed as <error-message> in the <rpc-error> in NETCONF.

7.5.4.2. The "error-app-tag" Statement

The "error-app-tag" statement, which is optional, takes a string as
an argument. If the constraint evaluates to "false", the string is
passed as <error-app-tag> in the <rpc-error> in NETCONF.

7.5.4.3. Usage Example of must and error-message

container interface {
leaf ifType {
type enumeration {
enum ethernet;
enum atm;
}
}
leaf ifMTU {
type uint32;
}
must 'ifType != "ethernet" or ifMTU = 1500' {
error-message "An Ethernet MTU must be 1500";
}
must 'ifType != "atm" or'
+ ' (ifMTU <= 17966 and ifMTU >= 64)' {
error-message "An ATM MTU must be 64 .. 17966";
}
}

10.3.1.1. Usage Example

list interface {
key "name type";
leaf name { ... }
leaf type { ... }
leaf enabled {
type boolean;
}
...
}

container mgmt-interface {
leaf name {
type leafref {
path "/interface/name";
}
}
leaf type {
type leafref {
path "/interface[name=current()/../name]/type";
}
must 'deref(.)/../enabled = "true"' {
error-message
"The management interface cannot be disabled.";
}
}
}


It seems a string must be configured in order for 'error-message' to work. Are you trying to set certain restraints on the ipv4-address?
Beginner

Re: custom error-message for datatypes

Thanks, yes I have seen that part of RFC but it seems in all the examples error-message is applicable when a condition is evaluated on datatype (for example: range, pattern, etc.). I'm not trying to impose further conditions on "inet:ipv4-address", rather want to just customize the error message that NSO returns to NB API when an invalid IP address is sent. By default, NSO's error-message returned to NB API contains the internal xpath to the IPv4 address in question, I want to customize that to a more generic error message. 

Cisco Employee

Re: custom error-message for datatypes

Hmm. Makes sense. For display purposes, can you provide a sample of what you see now when an error occurs? Just to make more sense of it.
Beginner

Re: custom error-message for datatypes

Here's a sample of error-message NSO would return to NB API by default:

 

"error-message": "invalid value for: loopback0v4 in /myservice:myservice[myservice:device='Router24']/myservice:loopbacks/myservice:loopback0v4: \"10.10.10.1000\" is not a valid value."

Cisco Employee

Re: custom error-message for datatypes

So..

The only thing I can find within the NSO install directory is the following:


src/ncs/errors/errcode.xml:343: "{lexical-unicode}" is not a valid value.

src/ncs/errors/errcode.xml:349: {native-val} is not a valid value.

src/ncs/errors/errcode.xml:400: "{lexical-val}" is not a valid value.


In which leads me to believe it may not be something that is easily adjustable since I think it is predefined within NSO. I could be wrong, but take a look at the errcode.xml:






This error type denotes a type error. It is generated when an

invalid value is specified for a certain leaf.









{native-val} is not a valid value.





Cisco Employee

Re: custom error-message for datatypes

Sorry, it filtered the other info. But bad_value us explained as:

This error type denotes a type error. It is generated when an
invalid value is specified for a certain leaf.

 

which leads to the following errcodes.

 

 

Another thing would be, what is the use-case here? More customization? To me it seems straight forward as to what is wrong, but I understand use cases my vary.

Beginner

Re: custom error-message for datatypes

yeah good find... I'm not sure how errcode.xml is imported and used inside ncs. If someone could shed more light on it, that would be great... I wish there was some documentation around it (maybe there is?)...

 

The use-case is simple... we don't necessarily want NSO's default error-messages which refer to the internal structure of service yang to be passed to a NB system/user. Ability to customize/generalize the error text returned to NB systems/users who are unaware of NSO details is very much desired. 

Cisco Employee

Re: custom error-message for datatypes

I’ll see what I can do for you.
Highlighted
Beginner

Re: custom error-message for datatypes

Thanks Joe

Cisco Employee

Re: custom error-message for datatypes

Hi,

 

So..As far as I know..only some errors can  be altered. If you go to your NSO install directory and go into the man pages > man3 > confd_lib_dp, you can check out a section called 'Error Formatting Callback'. But that is all I can find at the moment. I checked it out myself and I'm not too familiar with this, but as far as I can find, this is the closest to what you are requesting.

 

Hope this helps!