From 18d2e7074f053fb3ba5890795988b9f3b2769606 Mon Sep 17 00:00:00 2001 From: yves Date: Thu, 15 Aug 2013 12:01:23 +0200 Subject: add rendering for dokuwiki --- render.py | 26 ++++++++++++---- templates/host.dokuwiki | 78 ++++++++++++++++++++++++++++++++++++++++++++++++ templates/index.dokuwiki | 23 ++++++++++++++ 3 files changed, 121 insertions(+), 6 deletions(-) create mode 100644 templates/host.dokuwiki create mode 100644 templates/index.dokuwiki diff --git a/render.py b/render.py index 65181c8..236ae0c 100644 --- a/render.py +++ b/render.py @@ -7,17 +7,19 @@ import optparse from utils import filters, tests, globals class Renderer: - def __init__(self, output_dir): + def __init__(self, output_dir, format): template_dir = os.path.join( os.path.dirname(os.path.abspath(os.path.realpath(__file__))), 'templates') self.env = jinja2.Environment( + trim_blocks = format == "dokuwiki", loader = jinja2.FileSystemLoader(template_dir)) self.env.filters.update(filters) self.env.tests.update(tests) self.env.globals.update(globals) self.output_dir = output_dir self.templates = {} + self.format = format def _render(self, template, filename, **kwargs): if template not in self.templates: @@ -27,13 +29,14 @@ class Renderer: output.write(self.templates[template].render(**kwargs)) def host(self, host, hostdata): - print("Rendering: %s" % host) - hostdata['url'] = "%s.html" % host - self._render('host.html', hostdata['url'], **hostdata) + print("Rendering: %s" % (host)) + hostdata['url'] = "%s.%s" % (host, self.format) + self._render('host.%s' % (self.format), hostdata['url'], **hostdata) def index(self, data): + indexpage = "index.%s" % (self.format) print("Rendering: index") - self._render('index.html', 'index.html', hosts=data) + self._render(indexpage, indexpage, hosts=data) def load_yaml(*args): with open(os.path.join(*args)) as infile: @@ -46,17 +49,28 @@ def main(): "-o", "--output", help="write rendered hostinfo files DEST_DIR", metavar="DEST_DIR", + type="string", default=os.path.join(basename,"htdocs")) optparser.add_option( "-s", "--source", help="read yaml encoded hostinfo data from SRC_DIR", metavar="SRC_DIR", + type="string", default=os.path.join(basename,"data")) + optparser.add_option( + "-f", "--format", + help="output format that is produce: html or dokuwiki" + "[default: %default]", + type="choice", + choices=["html", "dokuwiki"], + default="html" + ) + (options, _ ) = optparser.parse_args() - renderer = Renderer(options.output) + renderer = Renderer(options.output, options.format) hosts = load_yaml(options.source, "metadata", "hosts") data = [] diff --git a/templates/host.dokuwiki b/templates/host.dokuwiki new file mode 100644 index 0000000..f377ac8 --- /dev/null +++ b/templates/host.dokuwiki @@ -0,0 +1,78 @@ +{# {% extends 'layout.html' %} + +{% block title %}{{hostname}}{% endblock %} #} + +{% block content %} +====== {{hostname|replace('.spline.inf.fu-berlin.de', '')}} ====== + +{{description}} + +===== Summary ===== + +* **hostname:** {{hostname}} +* **os:** {{os|default('unknown')}} +* **arch:** {{arch|default('unknonw')}} +{% if vserver %} +* **vserver:** {{vserver}} +{% endif %} +{% if vserver_host %} +* **vserver host:** {{vserver_host}} +{% endif %} +{% if maintainers is iterable %} +* **maintainers:** +{% for maintainer in maintainers %} +{% set name, mail = get_contact_info(maintainer) %} + * [[mailto:{{mail}}|{{name}}]] +{% endfor %} +{% endif %} +{% if groups is defined %} +* **bcfg2-groups:** +{% for group in groups %} + * {{group}} +{% endfor %} + +( [[https://bcfg2.spline.de/client/{{hostname}}|view client in bcfg2]] ) +{% endif %} + + +===== network interfaces ===== + +{% for group in addresses | select_with_attribute('vserver', False) | groupby('interface') %} +* **{{ group.grouper }}** +{% for address in group.list %} + * {{address['address']}}/{{address['netmask']}} +{% else %} + * no address +{% endfor %} +{% else %} +No network interfaces configured. +{% endfor %} + + +===== open ports ===== + +{% if ports is iterable %} +^ Port ^ IP ^ Process ^ Protocol ^ +{% for port in ports %} +| {{port['port']}} | {{port['ip']}} | {{port['process']}} | {{port['proto']}} | +{% endfor %} +{% else %} No open ports +{% endif %} + +===== services ===== + + +{% if services is iterable %} +^ Name ^ Port ^ Visibility ^ +{% for service_category in services %} +{% if services[service_category] is iterable %} +{% for service in services[service_category] %} +| {% if service is string %} {{service}} {% else %} {{service.items()[0][0]}} {% endif %} | {% if service is string %} default {% else %} {{service.items()[0][1]}} {% endif %} | {{service_category}} | +{% endfor %} +{% endif %} +{% else %} +no services provoided +{% endfor %} +{% endif %} + +{% endblock %} diff --git a/templates/index.dokuwiki b/templates/index.dokuwiki new file mode 100644 index 0000000..6f1e1e8 --- /dev/null +++ b/templates/index.dokuwiki @@ -0,0 +1,23 @@ +{% block content %} +====== Hostinfo ====== + +{% for host in hosts|sort(attribute='hostname') %} +{% set os = host['os'] | get_os_name %} +* {{ '{{' }} + {%- if os is not none %} + {{- host['os'] | get_os_name}}.png + {%- else %} +unknown.png + {%- endif %}?20x20 + {{- '}}' }} {{ host['hostname'] | replace(".spline.inf.fu-berlin.de","")}} +{% if host['description'] is defined %} + * **description:**{{host['description'] | replace("\n"," ")}} +{% else %} + * no description yet +{% endif %} + * **adresses:** +{% for ip in host['addresses'] | select_with_attribute('vserver', False) | sort(attribute='address') %} + * {{ip['address']}} +{% endfor %} +{% endfor %} +{% endblock %} -- cgit v1.2.3-1-g7c22