def update_port(self, context, id, port): LOG.debug("MidonetMixin.update_port called: id=%(id)s port=%(port)r", {'id': id, 'port': port}) with context.session.begin(subtransactions=True): # update the port DB original_port = self.get_port(context, id) p = super(MidonetMixin, self).update_port(context, id, port) c_utils.check_update_port(original_port, p) has_sg = self._check_update_has_security_groups(port) delete_sg = self._check_update_deletes_security_groups(port) if delete_sg or has_sg: # delete the port binding and read it with the new rules. self._delete_port_security_group_bindings(context, id) sg_ids = self._get_security_groups_on_port(context, port) self._process_port_create_security_group(context, p, sg_ids) self._update_extra_dhcp_opts_on_port(context, id, port, p) self._process_portbindings_create_and_update(context, port['port'], p) self.client.update_port_precommit(context, id, p) self.client.update_port_postcommit(id, p) LOG.debug("MidonetMixin.update_port exiting: p=%r", p) return p
def update_port(self, context, id, port): LOG.debug("MidonetPluginV2.update_port called: id=%(id)s " "port=%(port)r", {'id': id, 'port': port}) with context.session.begin(subtransactions=True): # update the port DB original_port = super(MidonetPluginV2, self).get_port(context, id) p = super(MidonetPluginV2, self).update_port(context, id, port) c_utils.check_update_port(original_port, p) has_sg = self._check_update_has_security_groups(port) delete_sg = self._check_update_deletes_security_groups(port) if delete_sg or has_sg: # delete the port binding and read it with the new rules. self._delete_port_security_group_bindings(context, id) sg_ids = self._get_security_groups_on_port(context, port) self._process_port_create_security_group(context, p, sg_ids) self._update_extra_dhcp_opts_on_port(context, id, port, p) self._process_portbindings_create_and_update(context, port['port'], p) self._process_mido_portbindings_create_and_update(context, port['port'], p) self.update_address_pairs_on_port(context, id, port, original_port, p) self._process_port_port_security_update(context, port['port'], p) port_psec = p.get(psec.PORTSECURITY) if port_psec is False: if p.get(ext_sg.SECURITYGROUPS): raise psec.PortSecurityPortHasSecurityGroup() if p.get(addr_pair.ADDRESS_PAIRS): raise addr_pair.AddressPairAndPortSecurityRequired() self.client.update_port_precommit(context, id, p) self.client.update_port_postcommit(id, p) LOG.debug("MidonetPluginV2.update_port exiting: p=%r", p) return p
def update_port_precommit(self, context): port = context.current c_utils.check_update_port(context.original, port) self.client.update_port_precommit(context, port['id'], port)
def update_port(self, context, id, port): LOG.debug("MidonetPluginV2.update_port called: id=%(id)s " "port=%(port)r", {'id': id, 'port': port}) with context.session.begin(subtransactions=True): # update the port DB original_port = super(MidonetPluginV2, self).get_port(context, id) p = super(MidonetPluginV2, self).update_port(context, id, port) c_utils.check_update_port(original_port, p) has_sg = self._check_update_has_security_groups(port) delete_sg = self._check_update_deletes_security_groups(port) if delete_sg or has_sg: # delete the port binding and read it with the new rules. self._delete_port_security_group_bindings(context, id) sg_ids = self._get_security_groups_on_port(context, port) self._process_port_create_security_group(context, p, sg_ids) self._update_extra_dhcp_opts_on_port(context, id, port, p) self._process_portbindings_create_and_update(context, port['port'], p) self._process_mido_portbindings_create_and_update(context, port['port'], p) self.update_address_pairs_on_port(context, id, port, original_port, p) self._process_port_port_security_update(context, port['port'], p) port_psec = p.get(psec.PORTSECURITY) if port_psec is False: if p.get(ext_sg.SECURITYGROUPS): raise psec.PortSecurityPortHasSecurityGroup() if p.get(addr_pair.ADDRESS_PAIRS): raise addr_pair.AddressPairAndPortSecurityRequired() self.client.update_port_precommit(context, id, p) # Set status along admin_state_up to update. if p['admin_state_up']: update_status = n_const.PORT_STATUS_ACTIVE else: update_status = n_const.PORT_STATUS_DOWN try: self.client.update_port_postcommit(id, p) data = {'port': {'status': update_status}} super(MidonetPluginV2, self).update_port(context, id, data) # prevent binding:profile information from lacking p['status'] = data['port']['status'] except Exception as ex: with excutils.save_and_reraise_exception(): LOG.error(_LE("Failed to update a port %(port_id)s in " "MidoNet: %(err)s"), {"port_id": id, "err": ex}) try: data = {'port': {'status': n_const.PORT_STATUS_ERROR}} super(MidonetPluginV2, self).update_port(context, id, data) except Exception: LOG.exception(_LE("Failed to update port status %s"), id) LOG.debug("MidonetPluginV2.update_port exiting: p=%r", p) return p