def do_sync(self): """When our physical device is reboot, it will be used to smooth configuration to device. """ LOG.info(_("Synchronizing is start.")) with self.timer_lock: host_vlan = db.get_host_vlan() if len(host_vlan) == 0: LOG.info(_("No objects need sync.")) return leaf_config, leaf_ref_vlans = self.collect_leaf_config() dev_config = self.collect_spine_config(leaf_config, leaf_ref_vlans) LOG.info(_("Sync device config %s"), dev_config) for dev_ip in dev_config: rpc_client = self.rpc_clients.get(dev_ip, None) if rpc_client is not None: vlan_list = dev_config[dev_ip]['vlan_create'] port_vlan_tuple_list = dev_config[dev_ip]['port_vlan'] result = rpc_client.create_vlan_bulk(vlan_list, overlap=self.overlap) if result is True: rpc_client.port_trunk_bulk(port_vlan_tuple_list) LOG.info(_("Sync config %s to %s successful"), port_vlan_tuple_list, dev_ip) else: LOG.warn(_("Failed to sync %s to %s"), port_vlan_tuple_list, dev_ip) LOG.info(_("Synchronizing is end."))
def collect_leaf_config(self): leaf_config = {} host_vlan = db.get_host_vlan() leaf_generator = tools.topology_generator(self.leaf_topology) leaf_ref_vlans = {} for leaf_ip, topology in leaf_generator: host_connect = topology['host'] if host_connect in host_vlan: leaf_ref_vlans.setdefault(leaf_ip, set([])) vlan_list = host_vlan[host_connect] leaf_ref_vlans[leaf_ip] |= set(vlan_list) leaf_config.setdefault(leaf_ip, {}) leaf_config[leaf_ip].setdefault('port_vlan', []) leaf_config[leaf_ip]['port_vlan'].\ append((topology['ports'], vlan_list)) for leaf_ip in leaf_ref_vlans: leaf_config[leaf_ip].setdefault('vlan_create', []) leaf_config[leaf_ip]['vlan_create'] = \ list(leaf_ref_vlans[leaf_ip]) return leaf_config, leaf_ref_vlans