← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1844607] [NEW] log error when create neutron port with wrong subnet

 

Public bug reported:

With Neutron Newton version

There are two networks named share_net and test1 in my env, each with
one subnet. When I create port in share_net, but specify subnet_id of
the test1's subnet, not the subnet of share_net. Create port failed, but
log is "Failed to create port on network
8fd6c0d1-e499-4e29-9786-dadb377f9939, because fixed_ips included invalid
subnet d213e64e-045e-4941-a4bd-ffc049ad792c."

Here we can see network 8fd6c0d1-e499-4e29-9786-dadb377f9939 is test1,
subnet d213e64e-045e-4941-a4bd-ffc049ad792c is the subnet of test1. The
log is confused, actually it should log network
311a12a8-6824-4348-b5b5-80068a0c3785 with invalid subnet d213e64e-
045e-4941-a4bd-ffc049ad792c.

()[root@busybox-openstack-85c44df77f-xk2rx /]# neutron net-list
+--------------------------------------+----------------------------------------------------+-------------------------------------------------------+
| id                                   | name                                               | subnets                                               |
+--------------------------------------+----------------------------------------------------+-------------------------------------------------------+
| 311a12a8-6824-4348-b5b5-80068a0c3785 | share_net                                          | ef7e9220-d478-48f7-819e-80143621f233 192.168.20.0/24  |
| 8fd6c0d1-e499-4e29-9786-dadb377f9939 | test1                                              | d213e64e-045e-4941-a4bd-ffc049ad792c 192.168.20.0/24  |
+--------------------------------------+----------------------------------------------------+-------------------------------------------------------+

()[root@busybox-openstack-85c44df77f-xk2rx /]# neutron port-create
--name nic1 --fixed-ip subnet_id=d213e64e-045e-4941-a4bd-ffc049ad792c
311a12a8-6824-4348-b5b5-80068a0c3785

Invalid input for operation: Failed to create port on network 8fd6c0d1-e499-4e29-9786-dadb377f9939, because fixed_ips included invalid subnet d213e64e-045e-4941-a4bd-ffc049ad792c.
Neutron server returns request_ids: ['req-e32df57b-0756-4b88-b042-a0b67ccd7fe7']

after inspect code, I found the function code is:

    def _get_subnet_for_fixed_ip(self, context, fixed, subnets):
        # Subnets are all the subnets belonging to the same network.
        if not subnets:
            msg = _('IP allocation requires subnets for network')
            raise exc.InvalidInput(error_message=msg)

        if 'subnet_id' in fixed:
            def get_matching_subnet():
                for subnet in subnets:
                    if subnet['id'] == fixed['subnet_id']:
                        return subnet
            subnet = get_matching_subnet()
            if not subnet:
                subnet = self._get_subnet(context, fixed['subnet_id'])
                msg = (_("Failed to create port on network %(network_id)s"
                         ", because fixed_ips included invalid subnet "
                         "%(subnet_id)s") %
                       {'network_id': subnet['network_id'],
                        'subnet_id': fixed['subnet_id']})
                raise exc.InvalidInput(error_message=msg)
this function, it use “'network_id': subnet['network_id'] ”, actually it should use the network passed from api.


master branch also have this problem: https://github.com/openstack/neutron/blob/master/neutron/db/ipam_backend_mixin.py#382

** Affects: neutron
     Importance: Undecided
     Assignee: zhengyong (zhengy23)
         Status: New

** Changed in: neutron
     Assignee: (unassigned) => zhengyong (zhengy23)

** Description changed:

  With Neutron Newton version
  
  There are two networks named share_net and test1 in my env, each with
  one subnet. When I create port in share_net, but specify subnet_id of
  the test1's subnet, not the subnet of share_net. Create port failed, but
  log is "Failed to create port on network
  8fd6c0d1-e499-4e29-9786-dadb377f9939, because fixed_ips included invalid
  subnet d213e64e-045e-4941-a4bd-ffc049ad792c."
  
  Here we can see network 8fd6c0d1-e499-4e29-9786-dadb377f9939 is test1,
  subnet d213e64e-045e-4941-a4bd-ffc049ad792c is the subnet of test1. The
  log is confused, actually it should log network
  311a12a8-6824-4348-b5b5-80068a0c3785 with invalid subnet d213e64e-
  045e-4941-a4bd-ffc049ad792c.
  
  ()[root@busybox-openstack-85c44df77f-xk2rx /]# neutron net-list
  +--------------------------------------+----------------------------------------------------+-------------------------------------------------------+
  | id                                   | name                                               | subnets                                               |
  +--------------------------------------+----------------------------------------------------+-------------------------------------------------------+
  | 311a12a8-6824-4348-b5b5-80068a0c3785 | share_net                                          | ef7e9220-d478-48f7-819e-80143621f233 192.168.20.0/24  |
  | 8fd6c0d1-e499-4e29-9786-dadb377f9939 | test1                                              | d213e64e-045e-4941-a4bd-ffc049ad792c 192.168.20.0/24  |
  +--------------------------------------+----------------------------------------------------+-------------------------------------------------------+
  
  ()[root@busybox-openstack-85c44df77f-xk2rx /]# neutron port-create
  --name nic1 --fixed-ip subnet_id=d213e64e-045e-4941-a4bd-ffc049ad792c
  311a12a8-6824-4348-b5b5-80068a0c3785
  
  Invalid input for operation: Failed to create port on network 8fd6c0d1-e499-4e29-9786-dadb377f9939, because fixed_ips included invalid subnet d213e64e-045e-4941-a4bd-ffc049ad792c.
  Neutron server returns request_ids: ['req-e32df57b-0756-4b88-b042-a0b67ccd7fe7']
  
  after inspect code, I found the function code is:
  
-     def _get_subnet_for_fixed_ip(self, context, fixed, subnets):
-         # Subnets are all the subnets belonging to the same network.
-         if not subnets:
-             msg = _('IP allocation requires subnets for network')
-             raise exc.InvalidInput(error_message=msg)
+     def _get_subnet_for_fixed_ip(self, context, fixed, subnets):
+         # Subnets are all the subnets belonging to the same network.
+         if not subnets:
+             msg = _('IP allocation requires subnets for network')
+             raise exc.InvalidInput(error_message=msg)
  
-         if 'subnet_id' in fixed:
-             def get_matching_subnet():
-                 for subnet in subnets:
-                     if subnet['id'] == fixed['subnet_id']:
-                         return subnet
-             subnet = get_matching_subnet()
-             if not subnet:
-                 subnet = self._get_subnet(context, fixed['subnet_id'])
-                 msg = (_("Failed to create port on network %(network_id)s"
-                          ", because fixed_ips included invalid subnet "
-                          "%(subnet_id)s") %
-                        {'network_id': subnet['network_id'],
-                         'subnet_id': fixed['subnet_id']})
-                 raise exc.InvalidInput(error_message=msg)
+         if 'subnet_id' in fixed:
+             def get_matching_subnet():
+                 for subnet in subnets:
+                     if subnet['id'] == fixed['subnet_id']:
+                         return subnet
+             subnet = get_matching_subnet()
+             if not subnet:
+                 subnet = self._get_subnet(context, fixed['subnet_id'])
+                 msg = (_("Failed to create port on network %(network_id)s"
+                          ", because fixed_ips included invalid subnet "
+                          "%(subnet_id)s") %
+                        {'network_id': subnet['network_id'],
+                         'subnet_id': fixed['subnet_id']})
+                 raise exc.InvalidInput(error_message=msg)
  this function, it use “'network_id': subnet['network_id'] ”, actually it should use the network passed from api.
+ 
+ 
+ master branch also have this problem: https://github.com/openstack/neutron/blob/master/neutron/db/ipam_backend_mixin.py#382

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1844607

Title:
  log error when create neutron port with wrong subnet

Status in neutron:
  New

Bug description:
  With Neutron Newton version

  There are two networks named share_net and test1 in my env, each with
  one subnet. When I create port in share_net, but specify subnet_id of
  the test1's subnet, not the subnet of share_net. Create port failed,
  but log is "Failed to create port on network
  8fd6c0d1-e499-4e29-9786-dadb377f9939, because fixed_ips included
  invalid subnet d213e64e-045e-4941-a4bd-ffc049ad792c."

  Here we can see network 8fd6c0d1-e499-4e29-9786-dadb377f9939 is test1,
  subnet d213e64e-045e-4941-a4bd-ffc049ad792c is the subnet of test1.
  The log is confused, actually it should log network
  311a12a8-6824-4348-b5b5-80068a0c3785 with invalid subnet d213e64e-
  045e-4941-a4bd-ffc049ad792c.

  ()[root@busybox-openstack-85c44df77f-xk2rx /]# neutron net-list
  +--------------------------------------+----------------------------------------------------+-------------------------------------------------------+
  | id                                   | name                                               | subnets                                               |
  +--------------------------------------+----------------------------------------------------+-------------------------------------------------------+
  | 311a12a8-6824-4348-b5b5-80068a0c3785 | share_net                                          | ef7e9220-d478-48f7-819e-80143621f233 192.168.20.0/24  |
  | 8fd6c0d1-e499-4e29-9786-dadb377f9939 | test1                                              | d213e64e-045e-4941-a4bd-ffc049ad792c 192.168.20.0/24  |
  +--------------------------------------+----------------------------------------------------+-------------------------------------------------------+

  ()[root@busybox-openstack-85c44df77f-xk2rx /]# neutron port-create
  --name nic1 --fixed-ip subnet_id=d213e64e-045e-4941-a4bd-ffc049ad792c
  311a12a8-6824-4348-b5b5-80068a0c3785

  Invalid input for operation: Failed to create port on network 8fd6c0d1-e499-4e29-9786-dadb377f9939, because fixed_ips included invalid subnet d213e64e-045e-4941-a4bd-ffc049ad792c.
  Neutron server returns request_ids: ['req-e32df57b-0756-4b88-b042-a0b67ccd7fe7']

  after inspect code, I found the function code is:

      def _get_subnet_for_fixed_ip(self, context, fixed, subnets):
          # Subnets are all the subnets belonging to the same network.
          if not subnets:
              msg = _('IP allocation requires subnets for network')
              raise exc.InvalidInput(error_message=msg)

          if 'subnet_id' in fixed:
              def get_matching_subnet():
                  for subnet in subnets:
                      if subnet['id'] == fixed['subnet_id']:
                          return subnet
              subnet = get_matching_subnet()
              if not subnet:
                  subnet = self._get_subnet(context, fixed['subnet_id'])
                  msg = (_("Failed to create port on network %(network_id)s"
                           ", because fixed_ips included invalid subnet "
                           "%(subnet_id)s") %
                         {'network_id': subnet['network_id'],
                          'subnet_id': fixed['subnet_id']})
                  raise exc.InvalidInput(error_message=msg)
  this function, it use “'network_id': subnet['network_id'] ”, actually it should use the network passed from api.

  
  master branch also have this problem: https://github.com/openstack/neutron/blob/master/neutron/db/ipam_backend_mixin.py#382

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1844607/+subscriptions


Follow ups