Esempio n. 1
0
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)
Esempio n. 2
0
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
Esempio n. 3
0
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))
Esempio n. 4
0
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)
Esempio n. 5
0
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
Esempio n. 6
0
def show_frontpage():
    return render_template('front.html', tags=Tag.find_all())