diff options
Diffstat (limited to 'pyenc/__init__.py')
-rw-r--r-- | pyenc/__init__.py | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/pyenc/__init__.py b/pyenc/__init__.py index 6323fbe..851488c 100644 --- a/pyenc/__init__.py +++ b/pyenc/__init__.py @@ -48,7 +48,7 @@ def create_app(): return redirect(url_for('root_page')) # API - @app.route('/list-classes') + @app.route('/api/list-classes') def list_classes(): q = request.args.get('q', '') qq = '%{}%'.format('%'.join(q.split(' '))) @@ -58,6 +58,40 @@ def create_app(): return Response(json.dumps([x.class_name for x in results]), mimetype='application/json') + @app.route('/api/classes-for') + def classes_for(): + fqdn = request.args.get('fqdn') + classes = [cls.class_name for cls in + model.Host.query.where(model.Host.fqdn==fqdn).first().classes] + return Response(json.dumps(classes), + mimetype='application/json') + + @app.route('/api/change-classes', methods=['POST']) + def change_classes(): + j = request.json + host = model.Host.query.where(model.Host.fqdn==j['fqdn']).first() + remove_set = set(j['removed']) + + new_cls = [] + for cls in host.classes: + if cls.class_name in remove_set: + continue + new_cls.append(cls) + host.classes = new_cls + + cls = model.PuppetClass.query \ + .where(model.PuppetClass.class_name.in_(j['added'])) \ + .all() + host.classes.extend(cls) + print(remove_set, db.db.session.dirty) + return flask.redirect(url_for('classes_for', fqdn=j['fqdn'])) + + + @app.route('/api/hosts') + def list_hosts(): + return Response(flask.json.dumps([x.serialize() for x in model.Host.query.all()]), + mimetype='application/json') + @app.route('/enc') def enc(): fqdn = request.args.get('fqdn', 'default') @@ -75,6 +109,4 @@ def create_app(): mimetype='application/x-yaml') - - return app |