diff --git a/yang/clixon/clixon-autocli@2023-09-01.yang b/yang/clixon/clixon-autocli@2023-09-01.yang new file mode 100644 index 000000000..ebb14b25f --- /dev/null +++ b/yang/clixon/clixon-autocli@2023-09-01.yang @@ -0,0 +1,285 @@ +module clixon-autocli{ + yang-version 1.1; + namespace "http://clicon.org/autocli"; + prefix autocli; + + organization + "Clicon / Clixon"; + + contact + "Olof Hagsand "; + + description + "Clixon CLIgen specification declarations, including autocli. + Design inspired by ietf-netconf-acm.yang + + ***** BEGIN LICENSE BLOCK ***** + Copyright (C) 2020-2021 Olof Hagsand and Rubicon Communications, LLC(Netgate) + + This file is part of CLIXON + + Licensed under the Apache License, Version 2.0 (the \"License\"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an \"AS IS\" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Alternatively, the contents of this file may be used under the terms of + the GNU General Public License Version 3 or later (the \"GPL\"), + in which case the provisions of the GPL are applicable instead + of those above. If you wish to allow use of your version of this file only + under the terms of the GPL, and not to allow others to + use your version of this file under the terms of Apache License version 2, + indicate your decision by deleting the provisions above and replace them with + the notice and other provisions required by the GPL. If you do not delete + the provisions above, a recipient may use your version of this file under + the terms of any one of the Apache License version 2 or the GPL. + + ***** END LICENSE BLOCK *****"; + + revision 2023-09-01 { + description + "Added argument to alias + Released in Clixon 6.3"; + } + revision 2023-05-01 { + description + "Added extensions skip and alias + Added grouping-treeref + Released in Clixon 6.3"; + } + revision 2022-02-11 { + description + "Released in Clixon 5.6"; + } + revision 2021-12-05 { + description + "Initial version + Released in Clixon 5.5"; + } + extension hide { + description + "Hide the command associated with a YANG node and its + sub-commands. + The command is active but not shown by ? or TAB. In other words, it hides the + auto-completion of commands"; + } + extension hide-show { + description + "Hide the command associated with a YANG node and its + sub-commands in CLI show commands."; + } + extension skip { + description + "Skip the command associated with a YANG node and its sub-commands altogether. + The command is completely removed from the CLI, but still exists in NETCONF/ + RESTCONF."; + } + extension strict-expand { + description + "Modify the autocli by only showing exactly the expanded values of a variable. + It should not be possible to add a new value that is not in the expanded list."; + } + extension alias { + description + "Replace the command name with a new value. + Instead of using the YANG argument name, use new argument instead. + Only implemented for YANG leafs"; + argument new; + } + typedef autocli-op { + description + "Autocli rule-type operation, each rule use different fields as + described in the individual enums below."; + type enumeration { + enum enable { + description + "Include a complete subtree to rendering of autocli. + Example: + false + + wifi + enable + openconfig-wifi + + Only on module-level and if module-default is false, + Rule fields used: module-name"; + } + enum compress { + description + "Skip a keyword from a command. + Keep the command, only make it shorter by omitting a part. + Example: compress containers if single list child + + container compress + compress + container + list + + Rule fields used: + module-name, yang-keyword, schema-nodeid, yang-keyword-child, extension"; + } + enum edit-mode { + description + "Autocli CLI edit modes for YANG symbols. + For example, + edit interface eth0 + enters a new mode with local context."; + } + } + } + typedef list-keyword-type { + description + "Autocli CLI keyword behaviour in YANG lists. + With 'keyword' is meant CLIgen 'constants' rather than 'variables'. + Assume a YANG LIST: list a{ key x; leaf x; leaf y;} and how to generate + the autocli"; + type enumeration { + enum kw-none{ + description "No extra keywords, only variables: a "; + } + enum kw-nokey{ + description "Keywords on non-key variables: a y "; + } + enum kw-all{ + description "Keywords on all variables: a x y "; + } + } + } + typedef yang-keywords { + type bits { + bit list; + bit listall{ /* NYI */ + description + "Variant of list encompassing all list entries, not just an instance"; + } + bit container; + bit leaf; /* Also leaf-list (NYI) */ + } + } + grouping clixon-autocli{ + /* options */ + leaf module-default { + description + "Include YANG modules for generation of autocli. + If true, all modules with a top-level datanode are generated, ie + they get a top-level entry in the @basemodel tree. + If false, you need to explicitly enable modules for autocli generation + using 'enable' rules"; + type boolean; + default true; + } + leaf list-keyword-default { + description + "Autocli CLI keyword behaviour in YANG lists."; + type list-keyword-type; + default kw-nokey; + } + leaf treeref-state-default { + description + "If 'true', generate CLI from YANG state/non-config statements as well, not only config data. + Many specs have very large state parts, for example openconfig has ca 10 times + larger state than config parts, see for example openconfig-isis.yang."; + type boolean; + default false; + } + leaf edit-mode-default { + description + "Open automatic edit-modes for some YANG keywords and do not allow others. + A CLI edit mode opens a carriage-return option and changes the context to be + in that local context. + For example: + cli> interfaces interface e0 + eth0> + Default is to generate edit-modes for all containers and lists."; + type yang-keywords; + default "list container"; + } + leaf completion-default { + description + "Generate code for CLI completion of existing db symbols. + That is, check existing configure database for completion options. + This is normally always enabled."; + type boolean; + default true; + } + leaf grouping-treeref { + description + "Controls the behaviour when generating CLISPEC of YANG 'uses' statements into the + corresponding 'grouping' definition: macro expansion. + For optimization of memory footprint. + If 'false', replace the uses definition with the grouping definition. + If 'true' use indirect tree reference '@treeref' to reference the grouping definition. This + saves memory for large YANGs. + + See also AUTOCLI_GROUPING_TOPLEVEL_SKIP and AUTOCLI_GROUPING_AUGMENT_SKIP for + temporary disabled cornercases. + This option was introduced in Clixon 6.3"; + type boolean; + default false; + } + /* rules */ + list rule { + description + "Represents a modification rule of a clixon clispec."; + key name; + leaf name { + description + "Arbitrary name assigned for the rule, must be unique"; + type string; + } + leaf description { + description + "Rule description"; + type string; + } + leaf operation { + description "Rule operation"; + type autocli-op; + } + leaf module-name { + description + "Name of the module associated with this rule. + Wildchars '*' and '?' can be used (glob pattern). + Revision and yang suffix are omitted + Example: 'openconfig-*'"; + type string; + } + leaf yang-keyword { + description + "If present identifes a YANG keyword which the rule applies to + Example: 'container' + "; + type string; + } + leaf schema-nodeid { + description + "path in the form of // or just a single identifying a YANG + schema-node identifier as defined in RFC 7950 Sec 6.5 + Example: 'config', '/interfaces/interface'"; + type string; + } + leaf yang-keyword-child { + description + "The YANG statement has a single child, and the yang type of the child is the + value of this option + A (maybe too) specific property to cover openconfig compressions + as defined here: + https://github.com/openconfig/ygot/blob/master/docs/design.md#openconfig-path-compression"; + type string; + } + leaf extension { + /* Consider making this a container with name/module/value instead */ + description + "The extension is set either in the node itself, or in this module + Extension prefix must be set + Example: oc-ext:openconfig-version"; + type string; + } + } + } +}