Exemple #1
0
    def process_events(self):
        devices_added = []
        devices_removed = []
        dev_to_ofport = {}
        for row in self.iter_stdout():
            json = jsonutils.loads(row).get('data')
            for ovs_id, action, name, ofport, external_ids in json:
                if external_ids:
                    external_ids = ovsdb.val_to_py(external_ids)
                if ofport:
                    ofport = ovsdb.val_to_py(ofport)
                device = {'name': name,
                          'ofport': ofport,
                          'external_ids': external_ids}
                if action in (OVSDB_ACTION_INITIAL, OVSDB_ACTION_INSERT):
                    devices_added.append(device)
                elif action == OVSDB_ACTION_DELETE:
                    devices_removed.append(device)
                elif action == OVSDB_ACTION_NEW:
                    dev_to_ofport[name] = ofport

        self.new_events['added'].extend(devices_added)
        self.new_events['removed'].extend(devices_removed)
        # update any events with ofports received from 'new' action
        for event in self.new_events['added']:
            event['ofport'] = dev_to_ofport.get(event['name'], event['ofport'])
    def process_events(self):
        devices_added = []
        devices_removed = []
        dev_to_ofport = {}
        for row in self.iter_stdout():
            json = jsonutils.loads(row).get('data')
            for ovs_id, action, name, ofport, external_ids in json:
                if external_ids:
                    external_ids = ovsdb.val_to_py(external_ids)
                if ofport:
                    ofport = ovsdb.val_to_py(ofport)
                device = {
                    'name': name,
                    'ofport': ofport,
                    'external_ids': external_ids
                }
                if action in (OVSDB_ACTION_INITIAL, OVSDB_ACTION_INSERT):
                    devices_added.append(device)
                elif action == OVSDB_ACTION_DELETE:
                    devices_removed.append(device)
                elif action == OVSDB_ACTION_NEW:
                    dev_to_ofport[name] = ofport

        self.new_events['added'].extend(devices_added)
        self.new_events['removed'].extend(devices_removed)
        # update any events with ofports received from 'new' action
        for event in self.new_events['added']:
            event['ofport'] = dev_to_ofport.get(event['name'], event['ofport'])
Exemple #3
0
    def result(self, raw_result):
        # If check_error=False, run_vsctl can return None
        if not raw_result:
            self._result = None
            return

        try:
            json = jsonutils.loads(raw_result)
        except (ValueError, TypeError) as e:
            # This shouldn't happen, but if it does and we check_errors
            # log and raise.
            with excutils.save_and_reraise_exception():
                LOG.error(_LE("Could not parse: %(raw_result)s. "
                              "Exception: %(exception)s"),
                          {'raw_result': raw_result, 'exception': e})

        headings = json['headings']
        data = json['data']
        results = []
        for record in data:
            obj = {}
            for pos, heading in enumerate(headings):
                obj[heading] = ovsdb.val_to_py(record[pos])
            results.append(obj)
        self._result = results
Exemple #4
0
 def process_events(self):
     devices_added = []
     devices_removed = []
     for row in self.iter_stdout():
         json = jsonutils.loads(row).get('data')
         for ovs_id, action, name, ofport, external_ids in json:
             if external_ids:
                 external_ids = ovsdb.val_to_py(external_ids)
             if ofport:
                 ofport = ovsdb.val_to_py(ofport)
             device = {'name': name,
                       'ofport': ofport,
                       'external_ids': external_ids}
             if action in (OVSDB_ACTION_INITIAL, OVSDB_ACTION_INSERT):
                 devices_added.append(device)
             elif action == OVSDB_ACTION_DELETE:
                 devices_removed.append(device)
     self.new_events['added'].extend(devices_added)
     self.new_events['removed'].extend(devices_removed)
Exemple #5
0
 def process_events(self):
     devices_added = []
     devices_removed = []
     for row in self.iter_stdout():
         json = jsonutils.loads(row).get('data')
         for ovs_id, action, name, ofport, external_ids in json:
             if external_ids:
                 external_ids = ovsdb.val_to_py(external_ids)
             if ofport:
                 ofport = ovsdb.val_to_py(ofport)
             device = {
                 'name': name,
                 'ofport': ofport,
                 'external_ids': external_ids
             }
             if action in (OVSDB_ACTION_INITIAL, OVSDB_ACTION_INSERT):
                 devices_added.append(device)
             elif action == OVSDB_ACTION_DELETE:
                 devices_removed.append(device)
     self.new_events['added'].extend(devices_added)
     self.new_events['removed'].extend(devices_removed)
Exemple #6
0
    def process_events(self):
        devices_added = []
        devices_removed = []
        devices_modified = []
        dev_to_ofport = {}
        for row in self.iter_stdout():
            json = jsonutils.loads(row).get('data')
            for ovs_id, action, name, ofport, external_ids in json:
                if external_ids:
                    external_ids = ovsdb.val_to_py(external_ids)
                if ofport:
                    ofport = ovsdb.val_to_py(ofport)
                device = {
                    'name': name,
                    'ofport': ofport,
                    'external_ids': external_ids
                }
                if action in (OVSDB_ACTION_INITIAL, OVSDB_ACTION_INSERT):
                    devices_added.append(device)
                elif action == OVSDB_ACTION_DELETE:
                    devices_removed.append(device)
                elif action == OVSDB_ACTION_NEW:
                    # We'll receive this event for "initial", "insert"
                    # and "modify" actions. If ever needed, the old state
                    # can also be included in the processed event as per
                    # https://tools.ietf.org/html/rfc7047#section-4.1.6
                    if device not in devices_added:
                        devices_modified.append(device)
                    dev_to_ofport[name] = ofport

        self.new_events['added'].extend(devices_added)
        self.new_events['removed'].extend(devices_removed)
        self.new_events['modified'].extend(devices_modified)
        # update any events with ofports received from 'new' action
        for event in self.new_events['added']:
            event['ofport'] = dev_to_ofport.get(event['name'], event['ofport'])

        self.new_events = self._filter_events(self.new_events)