Action callbacks and output statement

I’m afraid I can’t help you with the Python equivalent, but since you quote the documentation for the C API:-), I’ll give an answer in terms of that, and maybe you can figure out the Python (or @mnovak might be able to translate…) . The output nodes are definitely part of the loaded schema, both for action and rpc - the reason for the NULL pointer is that the keypath (kp) argument passed to the action() callback is actually the path to the parent node, while the action/rpc itself is given in the name argument - and by definition, an rpc does not have a parent.

In the schema, both the input and the output nodes are direct children of the action/rpc node - the input nodes have the CS_NODE_IS_PARAM flag set, while the output nodes have CS_NODE_IS_RESULT set. The confd_cmd tool has a nice command dump_schema, that can be used to get a condensed view of the schema - the command confd_cmd -c 'dump_schema /some_action' will show you what is there for your rpc.

And in the C API, you could use e.g. struct confd_cs_node *csp = confd_cs_node_cd(NULL, "/some_action/result"); to get the node for your “result” leaf, with csp->ns and csp->tag being the hash values for the namespace and “tag”. (Caveat: if your input and output have same-named nodes, you will have to traverse the children to find the “param” vs “result” node.)