Bug 1590359
| Summary: | [ovn-provider] wrong message when posting a Subnet with no default gateway | ||||||
|---|---|---|---|---|---|---|---|
| Product: | [oVirt] ovirt-engine | Reporter: | Roni <reliezer> | ||||
| Component: | BLL.Network | Assignee: | Miguel Duarte Barroso <mduarted> | ||||
| Status: | CLOSED CURRENTRELEASE | QA Contact: | Roni <reliezer> | ||||
| Severity: | low | Docs Contact: | |||||
| Priority: | low | ||||||
| Version: | 4.2.4.1 | CC: | bugs, mburman, mduarted, mmirecki | ||||
| Target Milestone: | ovirt-4.2.6 | Flags: | rule-engine:
ovirt-4.2+
rule-engine: ovirt-4.3+ |
||||
| Target Release: | --- | ||||||
| Hardware: | x86_64 | ||||||
| OS: | Linux | ||||||
| Whiteboard: | |||||||
| Fixed In Version: | ovirt-provider-ovn-1.2.14 | Doc Type: | If docs needed, set a value | ||||
| Doc Text: | Story Points: | --- | |||||
| Clone Of: | Environment: | ||||||
| Last Closed: | 2018-09-03 15:11:00 UTC | Type: | Bug | ||||
| Regression: | --- | Mount Type: | --- | ||||
| Documentation: | --- | CRM: | |||||
| Verified Versions: | Category: | --- | |||||
| oVirt Team: | Network | RHEL 7.3 requirements from Atomic Host: | |||||
| Cloudforms Team: | --- | Target Upstream Version: | |||||
| Embargoed: | |||||||
| Attachments: |
|
||||||
Verified: 4.2.6-0.1.el7ev
Info:
The new message:
'{\n "error": {\n "message": "Subnet 0855835a-79d6-409f-93af-8d97ce4f7232 cannot be used as external gateway, since it does not have a default gateway defined",\n "code": 400,\n "title": "Bad Request"\n }\n}\n'
|
Created attachment 1450517 [details] python_script_to_simulate_the_error Description of problem: ovn-provider is trying to read an IP address from 'None' object instead of raising an error message for missing default gateway IP Version-Release number of selected component (if applicable): 4.2.4.2-0.1.el7_3 How reproducible: 100% Steps to Reproduce: NOTE: the attached script can simulate below steps by commenting the line 344: "gateway_ip": "1.1.1.254" 1. Enable ovn-provider 2. Create Network using REST and get it's ID 3. Add Subnet using REST as followed: e.g.: { "name": "SUBNET_NAME", "cidr": "1.1.1.0/24", "enable_dhcp": True, "ip_version": 4, "network_id": (use above ID), } 4. Add Router using REST e.g.: { "name": ROUTER_NAME, "external_gateway_info": { "network_id": str(get the ID from #2 above), "enable_snat": False, "external_fixed_ips": [ { "subnet_id": (get the ID from #3 above), "ip_address": 1.1.1.1 }]} } Actual results: got an error: "root failed to detect a valid IP address from None" Expected results: "subnet can not be used as external_gateway, it does not have a default_gatway definded" Additional info: to eliminate the error add: "gateway_ip": "1.1.1.254" to the Subnet dictionary See logs and Marcin comments at the chat below: Error at the /var/log/ovirt-provider-ovn.log: <reliezer> 2018-06-12 11:30:48,764 root From: 10.35.206.28:54072 Request: POST /v2.0/routers <reliezer> 2018-06-12 11:30:48,764 root Request body: <reliezer> {"router": {"external_gateway_info": {"network_id": "90245b55-b0cc-422d-ac96-3f0810b1ab0b", "enable_snat": false, "external_fixed_ips": [{"subnet_id": "d03accc6-aec0-443f-901c-c1095681d66b", "ip_address": "1.1.1.111"}]}, "name": "ovn_router_test_3"}} <reliezer> 2018-06-12 11:30:48,764 root failed to detect a valid IP address from None <reliezer> Traceback (most recent call last): <reliezer> File "/usr/share/ovirt-provider-ovn/handlers/base_handler.py", line 133, in _handle_request <reliezer> method, path_parts, content) <reliezer> File "/usr/share/ovirt-provider-ovn/handlers/selecting_handler.py", line 175, in handle_request <reliezer> return self.call_response_handler(handler, content, parameters) <reliezer> File "/usr/share/ovirt-provider-ovn/handlers/neutron.py", line 36, in call_response_handler <reliezer> return response_handler(ovn_north, content, parameters) <reliezer> File "/usr/share/ovirt-provider-ovn/handlers/neutron_responses.py", line 205, in post_routers <reliezer> router = nb_db.add_router(received_router) <reliezer> File "/usr/share/ovirt-provider-ovn/ovndb/ovn_north_mappers.py", line 69, in wrapper <reliezer> else f(wrapped_self, rest_data)) <reliezer> File "/usr/share/ovirt-provider-ovn/ovndb/ovn_north_mappers.py", line 52, in wrapper <reliezer> return cls.rest2row(wrapped_self, f, rest_data, entity_id) <reliezer> File "/usr/share/ovirt-provider-ovn/ovndb/ovn_north_mappers.py", line 561, in rest2row <reliezer> gateway_ip=ip <reliezer> File "/usr/share/ovirt-provider-ovn/ovndb/ovn_north_mappers.py", line 76, in wrapper <reliezer> data = f(wrapped_self, *args, **kwargs) <reliezer> File "/usr/share/ovirt-provider-ovn/ovndb/ovn_north.py", line 779, in add_router <reliezer> name, enabled, network_id, gateway_subnet, gateway_ip <reliezer> File "/usr/share/ovirt-provider-ovn/ovndb/ovn_north.py", line 734, in _add_router <reliezer> gateway_ip, gateway_subnet_id, network_id, router_id <reliezer> File "/usr/share/ovirt-provider-ovn/ovndb/ovn_north.py", line 750, in _add_external_gateway_to_router <reliezer> self._add_default_route_to_router(router_id, subnet) <reliezer> File "/usr/share/ovirt-provider-ovn/ovndb/ovn_north.py", line 768, in _add_default_route_to_router <reliezer> default_gateway <reliezer> File "/usr/lib/python2.7/site-packages/ovsdbapp/schema/ovn_northbound/impl_idl.py", line 140, in lr_route_add <reliezer> policy, may_exist) <reliezer> File "/usr/lib/python2.7/site-packages/ovsdbapp/schema/ovn_northbound/commands.py", line 653, in __init__ <reliezer> nexthop = str(netaddr.IPAddress(nexthop)) <reliezer> File "/usr/lib/python2.7/site-packages/netaddr/ip/__init__.py", line 306, in __init__ <reliezer> 'address from %r' % addr) <reliezer> AddrFormatError: failed to detect a valid IP address from None <reliezer> 2018-06-12 11:34:32,875 requests.packages.urllib3.connectionpool Starting new HTTPS connection (1): network-ge-1.scl.lab.tlv.redhat.com <reliezer> 2018-06-12 11:34:33,035 requests.packages.urllib3.connectionpool Starting new HTTPS connection (1): network-ge-1.scl.lab.tlv.redhat.com <reliezer> 2018-06-12 11:34:33,163 requests.packages.urllib3.connectionpool Starting new HTTPS connection (1): network-ge-1.scl.lab.tlv.redhat.com <mmirecki> can you please send me the output for: ovn-nbctl list dhcp-options <mmirecki> if you could fpaste it please <reliezer> [root@network-ge-1 ~]# ovn-nbctl dhcp-options-list <reliezer> d03accc6-aec0-443f-901c-c1095681d66b <reliezer> [root@network-ge-1 ~]# <reliezer> [root@network-ge-1 ~]# ovn-nbctl list dhcp-options <reliezer> _uuid : d03accc6-aec0-443f-901c-c1095681d66b <reliezer> cidr : "1.1.1.0/24" <reliezer> external_ids : {ovirt_name="roni_subnet_test_3", ovirt_network_id="90245b55-b0cc-422d-ac96-3f0810b1ab0b"} <reliezer> options : {lease_time="86400", mtu="1442", server_id="1.1.1.0", server_mac="02:00:00:00:00:00"} mmirecki> we create a router with a external_gatway to subnet "roni_subnet_test_3" <mmirecki> so the port connecting to this subnet is the default route for the router <mmirecki> we must set a default static route for this, which is: <mmirecki> network: cidr of subnet <mmirecki> nexthop: default gateway of subnet <mmirecki> but: the default gateway of the subnet is not set, it is None <mmirecki> so when trying to set it, we get: AddrFormatError: failed to detect a valid IP address from None <mmirecki> <mmirecki> expected outcome should be: <mmirecki> (something like): Validation error: subnet can not be used as external_gateway, it does not have a default_gatway definded <mmirecki> although the best thing to do would be to check what neutron does in this case <mmirecki> but, this is a bug <mmirecki> we should handle this condition <mmirecki> so please open a BZ for this <mmirecki> you can copy paste the expected results