Exemplo n.º 1
0
    def render(self, session, grn, eon_id, disabled, **arguments):
        Grn.get_unique(session, grn=grn, preclude=True)
        Grn.get_unique(session, eon_id=eon_id, preclude=True)

        if disabled is None:
            disabled = False
        dbgrn = Grn(grn=grn, eon_id=eon_id, disabled=disabled)
        session.add(dbgrn)

        session.flush()
        return
Exemplo n.º 2
0
Arquivo: grn.py Projeto: ned21/aquilon
def update_grn_map(config, session, logger):
    if not config.get("broker", "grn_to_eonid_map_location"):  # pragma: no cover
        raise ArgumentError("GRN synchronization is disabled.")

    q = session.query(Grn)
    grns = {}
    for dbgrn in q:
        grns[dbgrn.eon_id] = dbgrn

    name = os.path.join(config.get("broker", "grn_to_eonid_map_location"),
                        "eon_catalog.csv")
    added = 0
    updated = 0
    deleted = 0
    with open(name) as f:
        reader = DictReader(f)
        for row in reader:
            changed = False
            eon_id = int(row["id"])
            disabled = int(row["can_map_resources"]) == 0 or \
                    int(row["deleted"]) != 0
            if eon_id not in grns:
                dbgrn = Grn(eon_id=eon_id, grn=row["name"], disabled=disabled)
                session.add(dbgrn)
                added += 1
            else:
                dbgrn = grns[eon_id]
                # Mark it as processed
                del grns[eon_id]

            if dbgrn.grn != row["name"]:
                dbgrn.grn = row["name"]
                changed = True

            if dbgrn.disabled != disabled:
                dbgrn.disabled = disabled
                changed = True

            if changed:
                updated += 1

    # Should not really happen in practice...
    for dbgrn in grns.values():
        session.delete(dbgrn)
        deleted += 1

    if logger:
        logger.client_info("Added %d, updated %d, deleted %d GRNs." %
                           (added, updated, deleted))

    session.flush()
    return