Esempio n. 1
0
    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."))
Esempio n. 2
0
 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