Beispiel #1
0
 def reload_allocations(self, port, network, prio=False):
     LOG.info("Trigger reload_allocations for port %s on network %s", port,
              network)
     if not dhcp.port_requires_dhcp_configuration(port):
         return
     driver_action = 'reload_allocations'
     if self._is_port_on_this_agent(port):
         orig = self.cache.get_port_by_id(port['id'])
         # assume IP change if not in cache
         orig = orig or {'fixed_ips': []}
         old_ips = {i['ip_address'] for i in orig['fixed_ips'] or []}
         new_ips = {i['ip_address'] for i in port['fixed_ips']}
         old_subs = {i['subnet_id'] for i in orig['fixed_ips'] or []}
         new_subs = {i['subnet_id'] for i in port['fixed_ips']}
         if new_subs != old_subs:
             # subnets being serviced by port have changed, this could
             # indicate a subnet_delete is in progress. schedule a
             # resync rather than an immediate restart so we don't
             # attempt to re-allocate IPs at the same time the server
             # is deleting them.
             self.schedule_resync("Agent port was modified",
                                  port.network_id)
             return
         elif old_ips != new_ips:
             LOG.debug("Agent IPs on network %s changed from %s to %s",
                       network.id, old_ips, new_ips)
             driver_action = 'restart'
     self.cache.put_port(port)
     self.call_driver(driver_action, network)
     if prio:
         self.dhcp_prio_ready_ports.add(port.id)
     else:
         self.dhcp_ready_ports.add(port.id)
     self.update_isolated_metadata_proxy(network)
Beispiel #2
0
 def port_create_end(self, context, payload):
     """Handle the port.create.end notification event."""
     created_port = dhcp.DictModel(payload['port'])
     if not dhcp.port_requires_dhcp_configuration(created_port):
         return
     update = DHCPResourceUpdate(created_port.network_id,
                                 payload.get('priority', DEFAULT_PRIORITY),
                                 action='_port_create',
                                 resource=created_port, obj_type='port')
     self._queue.add(update)
Beispiel #3
0
 def port_update_end(self, context, payload):
     """Handle the port.update.end notification event."""
     updated_port = dhcp.DictModel(payload['port'])
     if not dhcp.port_requires_dhcp_configuration(updated_port):
         return
     if self.cache.is_port_message_stale(updated_port):
         LOG.debug("Discarding stale port update: %s", updated_port)
         return
     update = DHCPResourceUpdate(updated_port.network_id,
                                 payload.get('priority', DEFAULT_PRIORITY),
                                 action='_port_update',
                                 resource=updated_port, obj_type='port')
     self._queue.add(update)