def list_tags(): if request.method == "POST": tag_name = request.form["tag-name"] tag = Tag.find(tag_name) if not tag: tag = Tag(tag_name) tag.save() tags = Tag.find_all() return render_template('tags.html', tags=tags)
def tag_items(): def item_url(item): return url_for('melange_api.show_item', name=item.name) tags = [tag.to_data(item_href=item_url) for tag in Tag.find_all()] for tag in tags: tag['href'] = url_for('melange_api.show_tag',name=tag['name']) response = make_response( json.dumps(tags), 200 ) response.headers['Content-Type'] = 'application/json' return response
def ansible_inventory(): data = {} for tag in Tag.find_all(): data[tag.name] = {'hosts': [host.name for host in tag.items]} data['_meta'] = {'hostvars': {}} for item in Item.find_all(): vars = {} for var in item.to_data()['vars']: vars[var['key']] = var['value'] data['_meta']['hostvars'][item.name] = vars ansible_groups = ['linux', 'ansible-managed'] return json_response(keep_only(ansible_groups, data))
def show_item(name): item = Item.find(name) if not item: abort(404) if request.method in ["POST", "DELETE"]: if "tag-add" in request.form: tag_name = request.form['tag-name'] tag = Tag.find(tag_name) item.add_to(tag) item.save() elif "tag-remove" in request.form: tag_name = request.form['tag-name'] tag = Tag.find(tag_name) item.remove_from(tag) item.save() elif "child-add" in request.form: child_name = request.form['child-name'] child_item = Item.find(child_name) item.add_child(child_item) item.save() elif "child-remove" in request.form: child_name = request.form['child-name'] child_item = Item.find(child_name) item.remove_child(child_item) item.save() elif "item-remove" in request.form: item.remove() return redirect(url_for("list_tags")) else: update_variables(item, request) var_list = [] for var in item.to_data()['vars']: v = var['value'] if type(v) in [str, int]: var['type'] = 'Text' elif type(v) == list: var['type'] = 'List' elif type(v) == dict: var['type'] = 'Map' var_list.append(var) tag_names = [tag.name for tag in item.tags] available_tags = [tag.name for tag in Tag.find_all() if tag.name not in tag_names] return render_template('item.html', item=item, var_list=var_list, available_tags=available_tags)
def list_tags(): if request.method == 'POST': if not request.json: abort(415) data = request.json if not 'name' in data: abort(400) if Tag.find(data['name']): abort(409) tag = Tag(data['name']) try: tag.update_from(data) except MelangeException: abort(400) tag.save() response = make_response('', 201) response.headers['Content-Location'] = url_for('melange_api.show_tag',name=tag.name) return response tags = [ {'name':tag.name, 'href':url_for('melange_api.show_tag', name=tag.name)} for tag in Tag.find_all() ] response = make_response( json.dumps(tags), 200 ) response.headers['Content-Type'] = 'application/json' return response
def show_frontpage(): return render_template('front.html', tags=Tag.find_all())