diff options
Diffstat (limited to 'pyenc/__init__.py')
-rw-r--r-- | pyenc/__init__.py | 97 |
1 files changed, 85 insertions, 12 deletions
diff --git a/pyenc/__init__.py b/pyenc/__init__.py index c5f5ada..90aa4fa 100644 --- a/pyenc/__init__.py +++ b/pyenc/__init__.py @@ -8,15 +8,18 @@ functionallity is pulled in from other modules. import logging import random +import os.path +from domonic.html import a import flask from flask import ( - Flask, - request, - flash, - redirect, - url_for - ) + Flask, + request, + flash, + redirect, + url_for +) +from sqlalchemy.orm import joinedload from .app import model from .app import cmdline @@ -46,15 +49,85 @@ def create_app(): ]: module.init_app(app) - # not API @app.route('/') def root_page(): + # flash('Test') + return flask.render_template('index.html') + + @app.route('/host') + def hosts(): + result = model.Host.query.all() + return flask.render_template( + 'list.html', + title='Hosts', + items=[a(x.fqdn, _href=f'/host/{x.fqdn}') + for x in result]) + + @app.route('/host/<host>') + def host(host): + host = model.Host.query.where(model.Host.fqdn == host).one() + return flask.render_template( + 'host.html', + title=host.fqdn, + env=host.environment.name, + classes=[a(x.name, _href=f'/class/{x.name}') + for x in host.classes]) + + + @app.route('/environment') + def environments(): + envs = model.Environment.query.all() + return flask.render_template( + 'list.html', + title='Environments', + items=[a(env.name, _href=f'/environment/{env.name}') + for env in envs]) + + @app.route('/environment/<name>') + def environment(name): + env = model.Environment \ + .query \ + .where(model.Environment.name == name) \ + .one() + return flask.render_template( + 'environment.html', + title=name, + env=env) + + @app.route('/class') + def classes(): + clss = model.PuppetClass \ + .query \ + .all() + return flask.render_template( - 'start_page.html', - hosts=model.Host.query.order_by(model.Host.fqdn), - random=random, - str=str, - ) + 'list.html', + title='Classes', + items=[a(cls.name, _href=f'/class/{cls.name}') + for cls in clss]) + + @app.route('/class/<name>') + def class_(name): + cls = model.PuppetClass \ + .query \ + .where(model.PuppetClass.name == name) \ + .options(joinedload('files').joinedload('environment')) \ + .one() + return flask.render_template('class.html', + title=name, + cls=cls) + + + @app.route('/file') + def file(): + environment = request.args.get('environment') + path = request.args.get('path') + path_base = '/var/lib/machines/busting/etc/puppetlabs/code/environments/' + with open(os.path.join(path_base, environment, path)) as f: + content = f.read() + return flask.render_template('file.html', + title=f'{environment}/{path}', + content=content) # API? @app.route('/remove', methods=['POST']) |