Ejemplo n.º 1
0
def _save_config_1_0(project_name, data):
    document = io.find_one({"type": "project"})

    config = document["config"]

    config["apps"] = data.get("apps", [])
    config["tasks"] = data.get("tasks", [])
    config["template"].update(data.get("template", {}))

    schema.validate(document)

    io.save(document)
Ejemplo n.º 2
0
def _save_inventory_1_0(project_name, data):
    data.pop("schema")

    # Separate project metadata from assets
    metadata = {}
    for key, value in data.copy().items():
        if not isinstance(value, list):
            print("Separating project metadata: %s" % key)
            metadata[key] = data.pop(key)

    document = io.find_one({"type": "project"})
    if document is None:
        print("'%s' not found, creating.." % project_name)
        _id = create_project(project_name)

        document = io.find_one({"_id": _id})

    print("Updating project data..")
    for key, value in metadata.items():
        document["data"][key] = value

    io.save(document)

    print("Updating assets..")
    added = list()
    updated = list()
    missing = list()
    for silo, assets in data.items():
        for asset in assets:
            asset_doc = io.find_one({
                "name": asset["name"],
                "type": "asset",
            })

            if asset_doc is None:
                asset["silo"] = silo
                missing.append(asset)
                continue

            for key, value in asset.items():
                asset_doc["data"][key] = value

                if key not in asset_doc["data"]:
                    added.append("%s.%s: %s" % (asset["name"], key, value))

                elif asset_doc["data"][key] != value:
                    updated.append("%s.%s: %s -> %s" % (asset["name"],
                                                        key,
                                                        asset_doc["data"][key],
                                                        value))

            io.save(asset_doc)

    for data in missing:
        print("+ added %s" % data["name"])

        create_asset(
            name=data.pop("name"),
            silo=data.pop("silo"),
            data=data,
            parent=document["_id"]
        )

    else:
        print("| nothing missing")

    _report(added, missing)