summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/Makefile4
-rw-r--r--docs/_ext/testcoverage.py15
-rw-r--r--docs/_ext/vyos.py53
-rw-r--r--docs/_static/css/custom.css6
-rw-r--r--docs/documentation.rst15
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
"""""