aboutsummaryrefslogtreecommitdiffstats
path: root/netmodel/interfaces/vicn.py
diff options
context:
space:
mode:
Diffstat (limited to 'netmodel/interfaces/vicn.py')
-rw-r--r--netmodel/interfaces/vicn.py39
1 files changed, 26 insertions, 13 deletions
diff --git a/netmodel/interfaces/vicn.py b/netmodel/interfaces/vicn.py
index 9ec9672e..80195f9a 100644
--- a/netmodel/interfaces/vicn.py
+++ b/netmodel/interfaces/vicn.py
@@ -16,16 +16,20 @@
# limitations under the License.
#
+import logging
+
from vicn.core.task import BashTask
from netmodel.model.object import Object
from netmodel.model.attribute import Attribute
-from netmodel.model.query import Query, ACTION_INSERT
+from netmodel.model.query import Query, ACTION_INSERT, ACTION_SELECT
from netmodel.model.type import String
from netmodel.network.interface import Interface, InterfaceState
from netmodel.network.packet import Packet
from netmodel.network.prefix import Prefix
from netmodel.util.misc import lookahead
+log = logging.getLogger(__name__)
+
class VICNBaseResource(Object):
__type__ = 'vicn/'
@@ -50,18 +54,27 @@ class VICNBaseResource(Object):
elif query.object_name == 'resource':
resources = interface._manager.get_resources()
else:
- resources = interface._manager.by_type_str(query.object_name)
-
- for resource, last in lookahead(resources):
- params = resource.get_attribute_dict(aggregates = True)
- params['id'] = resource._state.uuid._uuid
- params['type'] = resource.get_types()
- params['state'] = resource._state.state
- params['log'] = resource._state.log
- reply = Query(ACTION_INSERT, query.object_name, params = params)
- reply.last = last
- packet = Packet.from_query(reply, reply = True)
- cb(packet, ingress_interface = interface)
+ _resources = interface._manager.by_type_str(query.object_name)
+ resources = list()
+ for resource in _resources:
+ group_names = [r.name for r in resource.groups]
+ resources.append(resource)
+
+ if query.action == ACTION_SELECT:
+ for resource, last in lookahead(resources):
+ params = resource.get_attribute_dict(aggregates = True)
+ params['id'] = resource._state.uuid._uuid
+ params['type'] = resource.get_types()
+ params['state'] = resource._state.state
+ params['log'] = resource._state.log
+ reply = Query(ACTION_INSERT, query.object_name, params = params)
+ reply.last = last
+ packet = Packet.from_query(reply, reply = True)
+ cb(packet, ingress_interface = interface)
+ else:
+ log.warning("Unknown action in query {}".format(query))
+
+ interface._manager._broadcast(query)
class L2Graph(Object):
__type__ = 'vicn/l2graph'