diff options
| -rw-r--r-- | docs/Makefile | 4 | ||||
| -rw-r--r-- | docs/_ext/testcoverage.py | 15 | ||||
| -rw-r--r-- | docs/_ext/vyos.py | 53 | ||||
| -rw-r--r-- | docs/_static/css/custom.css | 6 | ||||
| -rw-r--r-- | docs/documentation.rst | 15 | 
5 files changed, 82 insertions, 11 deletions
| diff --git a/docs/Makefile b/docs/Makefile index 7bc0c5ab..cb6226af 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -27,3 +27,7 @@ livehtml:  	sphinx-autobuild --host $(AUTOHOST) --port $(AUTOPORT) $(AUTOOPTS) \  		"$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +defaultvalue: export VYOS_DEFAULT=True +defaultvalue:	 +	@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
\ No newline at end of file diff --git a/docs/_ext/testcoverage.py b/docs/_ext/testcoverage.py index c06cf301..efe6e01d 100644 --- a/docs/_ext/testcoverage.py +++ b/docs/_ext/testcoverage.py @@ -175,12 +175,18 @@ def get_properties(p):  def process_node(n, f): +      props_elem = n.find("properties")      children = n.find("children")      command = n.find("command")      children_nodes = []      owner = n.get("owner")      node_type = n.tag +    defaultvalue = n.find("defaultValue") + +    if defaultvalue is not None: +        defaultvalue = defaultvalue.text +      name = n.get("name")      props = get_properties(props_elem) @@ -218,7 +224,9 @@ def process_node(n, f):          'children': children_nodes,          'props': props,          'command': test_command, -        'filename': f +        'filename': f, +        'defaultvalue': defaultvalue +      }      return node @@ -232,9 +240,11 @@ def create_commands(data, parent_list=[], level=0):          'tag_help': [],          'level': level,          'no_childs': False, -        'filename': None +        'filename': None, +        'defaultvalue': None,      }      command['filename'] = data['filename'] +    command['defaultvalue'] = data['defaultvalue']      command['name'].extend(parent_list)      command['name'].append(data['name']) @@ -348,6 +358,7 @@ def get_working_commands():                      'children': [],                      'command': node_data[kind][entry]['command'],                      'filename': node_data[kind][entry]['filename'], +                    'defaultvalue': node_data[kind][entry]['defaultvalue']                  }              config_tree_new[kind][node_0]['children'].extend(node_data[kind][entry]['children']) diff --git a/docs/_ext/vyos.py b/docs/_ext/vyos.py index e4f49da0..52364fc1 100644 --- a/docs/_ext/vyos.py +++ b/docs/_ext/vyos.py @@ -2,6 +2,7 @@ import re  import json  import os  from datetime import datetime +from unittest import defaultTestLoader  from docutils import io, nodes, utils, statemachine  from docutils.parsers.rst.roles import set_classes  from docutils.parsers.rst import Directive, directives, states @@ -356,6 +357,21 @@ class OpcmdlistDirective(Directive):          return [oplist] +def get_default_value(title_text, config, cfgmode): +    title_text = strip_cmd(title_text) +    for cmd in config.vyos_working_commands[cfgmode]: +        cmd_joined = ' '.join(cmd['name']) +        cmd_striped = strip_cmd(cmd_joined) +        if "table-size" in cmd['name']: +            pass +            #print(cmd) +            #print(cmd_striped) +            #print(title_text) +            #print() +        if cmd_striped == title_text: +            if cmd['defaultvalue']: +                return cmd['defaultvalue'] +    return None  class CmdDirective(SphinxDirective): @@ -368,19 +384,31 @@ class CmdDirective(SphinxDirective):          content_list = []          title_text = ''          content_text = '' +        defaultvalue = None          has_body = False          cfgmode = self.custom_class + "cmd" +        try: +            if '' in self.content: +                index = self.content.index('') +                title_list = self.content[0:index] +                content_list = self.content[index + 1:] + +                title_text = ' '.join(title_list) +                content_text = content_text + '\n'.join(content_list) +                has_body = True +            else: +                title_list = self.content +                title_text = ' '.join(title_list) +        except Exception as e: +            print("error", e) -        if '' in self.content: -            index = self.content.index('') -            title_list = self.content[0:index] -            content_list = self.content[index + 1:] -            title_text = ' '.join(title_list) -            content_text = '\n'.join(content_list) -            has_body = True -        else: -            title_text = ' '.join(self.content) +        # render defaultvalue +        if os.getenv('VYOS_DEFAULT') or ':defaultvalue:' in title_text: +            value = get_default_value(title_list, self.config, cfgmode) +            title_text = title_text.replace(":defaultvalue:", '') +            if value: +                defaultvalue = f"default: {value}\n"          anchor_id = nodes.make_id(self.custom_class + "cmd-" + title_text)          target = nodes.target(ids=[anchor_id]) @@ -402,6 +430,11 @@ class CmdDirective(SphinxDirective):          heading_element['classes'] += [self.custom_class + 'cmd-heading']          panel_element.append(heading_element) +        if defaultvalue: +            defaultvalue_element = nodes.paragraph(text=defaultvalue) +            defaultvalue_element['classes'] = ["defaultvalue"] +            panel_element.append(defaultvalue_element) +          append_list = {              'docname': self.env.docname, @@ -484,9 +517,11 @@ def strip_cmd(cmd, debug=False):      if debug:          print(cmd)      cmd = re.sub('\s+','',cmd) +    cmd = cmd.replace(':defaultvalue:','')      if debug:          print(cmd)          print("") +          return cmd  def build_row(app, fromdocname, rowdata):    diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css index 331a7720..7498b44d 100644 --- a/docs/_static/css/custom.css +++ b/docs/_static/css/custom.css @@ -87,6 +87,12 @@ span.opcmd:before {      display: none;  } +.defaultvalue{ +  font-size: 90%; +  color: gray; +  margin-bottom: 5px; + +}  a.cmdlink {      font-size: 80%; diff --git a/docs/documentation.rst b/docs/documentation.rst index a89b6079..2a1b390f 100644 --- a/docs/documentation.rst +++ b/docs/documentation.rst @@ -244,6 +244,21 @@ For a inline configuration level command use ``:cfgcmd:``    :cfgcmd:`set interface ethernet eth0` + +To extract a defaultvalue from the XML definitions add a ``:defaultvalue:`` +to ``.. cfgcmd::`` directive. +To have this feature locally, the vyos-1x submodule must be initialized before. +Please be aware to not update the submodule in your PR. + +.. code-block:: none + +  .. cfgcmd:: set system conntrack table-size <1-50000000> +      :defaultvalue: + +      The connection tracking table contains one entry for each connection being +      tracked by the system. + +  opcmd  """"" | 
