コード例 #1
0
def enc(host_id):
    from app.models import Host
    host_id = resolve_id(host_id)
    host = Host.find_one({
        "$or": [{
            "_id": host_id
        }, {
            "fqdn": host_id
        }, {
            "short_name": host_id
        }]
    })
    if host is None:
        return json_response({"errors": ["Host not found"]}, 404)

    puppet_data = {"classes": [], "parameters": {}}

    for tag in host.all_tags:
        class_match = CLASS_EXPR.match(tag)
        if class_match is not None:
            puppet_data["classes"].append(class_match.groups()[0])
            continue
        param_match = PARAM_EXPR.match(tag)
        if param_match is not None:
            k, v = param_match.groups()
            puppet_data["parameters"][k] = v
            continue
        env_match = ENV_EXPR.match(tag)
        if env_match is not None:
            puppet_data["environment"] = env_match.groups()[0]

    return yaml_response(puppet_data)
コード例 #2
0
def _get_group_by_id(group_id):
    from app.models import Group
    group_id = resolve_id(group_id)
    return Group.find_one({
        "$or": [
            { "_id": group_id },
            { "name": group_id }
        ]
    })
コード例 #3
0
ファイル: storable_model.py プロジェクト: viert/microeng
 def get(cls, expression):
     from bson.objectid import ObjectId, InvalidId
     from library.engine.utils import resolve_id
     expression = resolve_id(expression)
     if type(expression) == ObjectId:
         query = {"_id": expression}
     else:
         expression = str(expression)
         query = {cls.KEY_FIELD: expression}
     return cls.find_one(query)
コード例 #4
0
def show(group_id=None):
    from app.models import Group
    if group_id is None:
        query = {}
        if "_filter" in request.values:
            name_filter = request.values["_filter"]
            if len(name_filter) >= 2:
                query["name"] = { "$regex": "^%s" % name_filter }
        if "project_id" in request.values:
            project_id = resolve_id(request.values["project_id"])
            query["project_id"] = project_id
        groups = Group.find(query)
    else:
        group_id = resolve_id(group_id)
        groups = Group.find({"$or": [
            { "_id": group_id },
            { "name": group_id }
        ]})

    data = paginated_data(groups.sort("name"))
    return json_response(data)
コード例 #5
0
def show(host_id=None):
    from app.models import Host
    if host_id is None:
        query = {}
        if "_filter" in request.values:
            name_filter = request.values["_filter"]
            if len(name_filter) >= 2:
                query["fqdn"] = {"$regex": "^%s" % name_filter}
        if "group_id" in request.values:
            group_id = resolve_id(request.values["group_id"])
            query["group_id"] = group_id
        hosts = Host.find(query)
    else:
        host_id = resolve_id(host_id)
        hosts = Host.find({"$or": [{"_id": host_id}, {"fqdn": host_id}]})
        if hosts.count() == 0:
            return json_response({"errors": ["Host not found"]}, 404)
    try:
        data = paginated_data(hosts.sort("fqdn"))
    except AttributeError as e:
        return json_exception(e, 500)
    return json_response(data)
コード例 #6
0
ファイル: datacenters.py プロジェクト: vinnishtein/conductor
def update(dc_id):
    dc = _get_dc_by_id(dc_id)
    if dc is None:
        return json_response({"errors": ["Datacenter not found"]}, 404)
    # TODO: check permissions!
    try:
        dc.update(request.json)
    except Exception as e:
        return json_exception(e, 500)
    if "parent_id" in request.json:
        parent_id = resolve_id(request.json["parent_id"])
        if parent_id != dc.parent_id:
            return set_parent(dc._id)
    return json_response({"data": dc.to_dict()})
コード例 #7
0
ファイル: projects.py プロジェクト: katyavoid/conductor
def delete(id):
    from app.models import Project
    id = resolve_id(id)
    project = Project.find_one({ "$or": [
        { "_id": id },
        { "name": id }
    ] })
    if project is None:
        return json_response({ "errors": [ "Project not found" ]}, 404)
    # TODO check user supervisor privileges
    try:
        project.destroy()
    except Exception as e:
        return json_exception(e, 400)
    return json_response({ "data": project.to_dict(), "status": "deleted" })
コード例 #8
0
ファイル: projects.py プロジェクト: katyavoid/conductor
def update(id):
    from app.models import Project
    data = clear_aux_fields(request.json)
    # TODO check user ownership of project
    id = resolve_id(id)
    project = Project.find_one({ "$or": [
        { "_id": id },
        { "name": id }
    ] })
    if project is None:
        return json_response({ "errors": [ "Project not found" ]}, 404)
    try:
        project.update(data)
    except Exception as e:
        return json_exception(e, 500)
    return json_response({ "data": project.to_dict(), "status": "updated" })
コード例 #9
0
ファイル: projects.py プロジェクト: katyavoid/conductor
def show(project_id=None):
    "list/show handler for projects"
    from app.models import Project
    if project_id is None:
        query = {}
        if "_filter" in request.values:
            name_filter = request.values["_filter"]
            if len(name_filter) > 2:
                query["name"] = { "$regex": "^%s" % name_filter }
        projects = Project.find(query)
    else:
        project_id = resolve_id(project_id)
        projects = Project.find({ "$or": [
            { "_id": project_id },
            { "name": project_id }
        ] })
    return json_response(paginated_data(projects.sort("name")))
コード例 #10
0
ファイル: datacenters.py プロジェクト: vinnishtein/conductor
def set_parent(dc_id):
    dc = _get_dc_by_id(dc_id)
    if dc is None:
        return json_response({"errors": ["Datacenter not found"]}, 404)
    # TODO: check permissions!
    parent_id = request.json.get("parent_id")
    if dc.parent:
        try:
            dc.unset_parent()
        except Exception as e:
            return json_exception(e, 500)
    if parent_id is not None:
        try:
            parent_id = resolve_id(parent_id)
            dc.set_parent(parent_id)
        except Exception as e:
            return json_exception(e, 500)
    return json_response({"data": dc.to_dict()})
コード例 #11
0
def show(host_id=None):
    from app.models import Host
    if host_id is None:
        query = {}
        if "_filter" in request.values:
            name_filter = request.values["_filter"]
            if len(name_filter) >= 2:
                query["fqdn"] = { "$regex": "^%s" % name_filter }
        hosts = Host.find(query)
    else:
        host_id = resolve_id(host_id)
        hosts = Host.find({ "$or": [
            { "_id": host_id },
            { "fqdn": host_id },
            { "short_name": host_id }
        ]})
    data = paginated_data(hosts.sort("fqdn"))
    return json_response(data)
コード例 #12
0
def mass_detach():
    if "host_ids" not in request.json or request.json["host_ids"] is None:
        return json_response({"errors": ["No host_ids provided"]}, 400)
    if type(request.json["host_ids"]) != list:
        return json_response({"errors": ["host_ids must be an array type"]},
                             400)

    from app.models import Host

    # resolving hosts
    host_ids = [resolve_id(x) for x in request.json["host_ids"]]
    host_ids = set([x for x in host_ids if x is not None])
    hosts = Host.find({"_id": {"$in": list(host_ids)}}).all()
    if len(hosts) == 0:
        return json_response({"errors": ["No hosts found to be moved"]}, 404)

    failed_hosts = []
    for host in hosts:
        if not host.modification_allowed:
            failed_hosts.append(host)
    if len(failed_hosts) > 0:
        failed_hosts = ', '.join([h.fqdn for h in failed_hosts])
        return json_response(
            {
                "errors": [
                    "You don't have permissions to modify hosts: %s" %
                    failed_hosts
                ]
            }, 403)

    # moving hosts
    for host in hosts:
        host.group_id = None
        host.save()

    result = {
        "status": "ok",
        "data": {
            "hosts": [host.to_dict() for host in hosts]
        }
    }

    return json_response(result)
コード例 #13
0
def show(project_id=None):
    from app.models import Project
    if project_id is None:
        query = {}
        if "_filter" in request.values:
            name_filter = request.values["_filter"]
            if len(name_filter) > 2:
                query["name"] = {"$regex": "^%s" % name_filter}
        projects = Project.find(query)
    else:
        project_id = resolve_id(project_id)
        projects = Project.find(
            {"$or": [{
                "_id": project_id
            }, {
                "name": project_id
            }]})
        if projects.count() == 0:
            return json_response({"errors": ["Project not found"]}, 404)
    return json_response(paginated_data(projects.sort("name")))
コード例 #14
0
ファイル: datacenters.py プロジェクト: vinnishtein/conductor
def show(datacenter_id=None):
    from app.models import Datacenter
    if datacenter_id is None:
        query = {}
        if "_filter" in request.values:
            name_filter = request.values["_filter"]
            if len(name_filter) >= 2:
                query["name"] = {"$regex": "^%s" % name_filter}
        datacenters = Datacenter.find(query)
    else:
        datacenter_id = resolve_id(datacenter_id)
        datacenters = Datacenter.find(
            {"$or": [{
                "_id": datacenter_id
            }, {
                "name": datacenter_id
            }]})
        if datacenters.count() == 0:
            return json_response({"errors": ["Datacenter not found"]}, 404)
    data = paginated_data(datacenters.sort("name"))
    return json_response(data)
コード例 #15
0
ファイル: users.py プロジェクト: vinnishtein/conductor
def show(user_id=None):
    from app.models import User
    if user_id is None:
        query = {}
        if "_filter" in request.values:
            name_filter = request.values["_filter"]
            if len(name_filter) >= 2:
                query["username"] = { "$regex": "^%s" % name_filter }
        users = User.find(query)
    else:
        user_id = resolve_id(user_id)
        users = User.find({
            "$or": [
                { "_id": user_id },
                { "username": user_id }
            ]
        })
        if users.count() == 0:
            return json_response({"errors":["User not found"]}, 404)
    try:
        data = paginated_data(users.sort("username"))
    except AttributeError as e:
        return json_exception(e, 500)
    return json_response(data)
コード例 #16
0
ファイル: datacenters.py プロジェクト: vinnishtein/conductor
def _get_dc_by_id(dc_id):
    from app.models import Datacenter
    dc_id = resolve_id(dc_id)
    return Datacenter.find_one({"$or": [{"_id": dc_id}, {"name": dc_id}]})