summaryrefslogtreecommitdiff
path: root/virtinst/pollhelpers.py
blob: a5c8391e7739f2a3a119686251f72af11a2c7eac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#
# Copyright (C) 2013 Red Hat, Inc.
#
# This work is licensed under the GNU GPLv2 or later.
# See the COPYING file in the top-level directory.
#

from .logger import log


def _new_poll_helper(origmap, typename, list_cb, build_cb, support_cb):
    """
    Helper for new style listAll* APIs
    """
    current = {}
    new = {}
    objs = []

    try:
        if support_cb():
            objs = list_cb()
    except Exception as e:
        log.debug("Unable to list all %ss: %s", typename, e)

    for obj in objs:
        connkey = obj.name()

        if connkey not in origmap:
            # Object is brand new this period
            current[connkey] = build_cb(obj, connkey)
            new[connkey] = current[connkey]
        else:
            # Previously known object
            current[connkey] = origmap[connkey]
            del(origmap[connkey])

    return (list(origmap.values()), list(new.values()), list(current.values()))


def fetch_nets(backend, origmap, build_cb):
    name = "network"
    list_cb = backend.listAllNetworks
    support_cb = backend.support.conn_network
    return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb)


def fetch_pools(backend, origmap, build_cb):
    name = "pool"
    list_cb = backend.listAllStoragePools
    support_cb = backend.support.conn_storage
    return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb)


def fetch_volumes(backend, pool, origmap, build_cb):
    name = "volume"
    list_cb = pool.listAllVolumes
    support_cb = backend.support.conn_storage
    return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb)


def fetch_interfaces(backend, origmap, build_cb):
    name = "interface"
    list_cb = backend.listAllInterfaces
    support_cb = backend.support.conn_interface
    return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb)


def fetch_nodedevs(backend, origmap, build_cb):
    name = "nodedev"
    list_cb = backend.listAllDevices
    support_cb = backend.support.conn_nodedev
    return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb)


def fetch_vms(backend, origmap, build_cb):
    name = "domain"
    list_cb = backend.listAllDomains
    support_cb = backend.support.conn_domain
    return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb)