Neutron - set "dns_domain" for existing network is passively failing when Designate DNS extension is not enabled for Neutron

Bug #1939680 reported by Arkady Shtempler
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
neutron
Expired
Undecided
Unassigned

Bug Description

### Scenario ###
Deploy Devstack without enabling DNS extension, using the attached localrc file.
Create network, subnet, Dns Zone and try to update the network with “dns_domain”:

stack@seal08:~/devstack$ openstack
(openstack) zone create example.com. --email <email address hidden>
(openstack) zone list --all
(openstack) network create net1
(openstack) subnet create subnet1 --network net1 --subnet-range 192.0.2.0/24
(openstack) network list
(openstack) network set --dns-domain example.com. f9b1ff63-6ad4-4569-8d6c-6d17ed34014b

### Expected result ###
Set "dns_domain" command should fail, as no DNS is enabled.

### Actual Result ###
"network set" command is PASS, but in fact it's passively failing as no "dns_domain" is set and it's None

(openstack) network show f9b1ff63-6ad4-4569-8d6c-6d17ed34014b
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | |
| created_at | 2021-08-12T11:04:29Z |
| description | |
| dns_domain | None |
| id | f9b1ff63-6ad4-4569-8d6c-6d17ed34014b |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | None |
| is_vlan_transparent | None |
| mtu | 1442 |
| name | net1 |
| port_security_enabled | True |
| project_id | 1318c4bf4aeb4f9892502f25875ae293 |
| provider:network_type | geneve |
| provider:physical_network | None |
| provider:segmentation_id | 44396 |
| qos_policy_id | None |
| revision_number | 3 |
| router:external | Internal |
| segments | None |
| shared | False |
| status | ACTIVE |
| subnets | afe01181-c299-44a3-ba94-328e0ebaed11 |
| tags | |
| updated_at | 2021-08-12T11:05:46Z |
+---------------------------+--------------------------------------+

Here are some details with (-vvv verbosity):
stack@seal08:~/devstack$
stack@seal08:~/devstack$ openstack network set --dns-domain example.com. 1749f7dd-e4b9-478b-bd28-a3dd7c539bd3 -vvv
START with options: network set --dns-domain example.com. 1749f7dd-e4b9-478b-bd28-a3dd7c539bd3 -vvv
options: Namespace(access_key='', access_secret='***', access_token='***', access_token_endpoint='', access_token_type='', application_credential_id='', application_credential_name='', application_credential_secret='***', auth_methods='', auth_type='', auth_url='http://10.35.64.8/identity', cacert=None, cert='', client_id='', client_secret='***', cloud='', code='', consumer_key='', consumer_secret='***', debug=False, default_domain='default', default_domain_id='', default_domain_name='', deferred_help=False, discovery_endpoint='', domain_id='', domain_name='', endpoint='', identity_provider='', identity_provider_url='', insecure=None, interface='public', key='', log_file=None, openid_scope='', os_beta_command=False, os_compute_api_version='', os_dns_api_version='2', os_identity_api_version='3', os_image_api_version='', os_key_manager_api_version='1', os_network_api_version='', os_object_api_version='', os_placement_api_version='1', os_project_id=None, os_project_name=None, os_volume_api_version='', passcode='', password='***', profile='', project_domain_id='default', project_domain_name='', project_id='', project_name='admin', protocol='', redirect_uri='', region_name='RegionOne', remote_project_domain_id='', remote_project_domain_name='', remote_project_id='', remote_project_name='', service_provider='', service_provider_endpoint='', service_provider_entity_id='', system_scope='', timing=False, token='***', trust_id='', user_domain_id='default', user_domain_name='', user_id='', username='admin', verbose_level=4, verify=None)
Auth plugin password selected
auth_config_hook(): {'api_timeout': None, 'verify': True, 'cacert': None, 'cert': None, 'key': None, 'baremetal_status_code_retries': '5', 'baremetal_introspection_status_code_retries': '5', 'image_status_code_retries': '5', 'disable_vendor_agent': {}, 'interface': 'public', 'floating_ip_source': 'neutron', 'image_api_use_tasks': False, 'image_format': 'qcow2', 'message': '', 'network_api_version': '2', 'object_store_api_version': '1', 'secgroup_source': 'neutron', 'status': 'active', 'auth': {'user_domain_id': 'default', 'project_domain_id': 'default', 'project_name': 'admin'}, 'verbose_level': 4, 'deferred_help': False, 'region_name': 'RegionOne', 'default_domain': 'default', 'timing': False, 'auth_url': 'http://10.35.64.8/identity', 'username': 'admin', 'password': '***', 'beta_command': False, 'identity_api_version': '3', 'placement_api_version': '1', 'dns_api_version': '2', 'key_manager_api_version': '1', 'auth_type': 'password', 'networks': []}
defaults: {'api_timeout': None, 'verify': True, 'cacert': None, 'cert': None, 'key': None, 'auth_type': 'password', 'baremetal_status_code_retries': 5, 'baremetal_introspection_status_code_retries': 5, 'image_status_code_retries': 5, 'disable_vendor_agent': {}, 'interface': None, 'floating_ip_source': 'neutron', 'image_api_use_tasks': False, 'image_format': 'qcow2', 'message': '', 'network_api_version': '2', 'object_store_api_version': '1', 'secgroup_source': 'neutron', 'status': 'active'}
cloud cfg: {'api_timeout': None, 'verify': True, 'cacert': None, 'cert': None, 'key': None, 'baremetal_status_code_retries': '5', 'baremetal_introspection_status_code_retries': '5', 'image_status_code_retries': '5', 'disable_vendor_agent': {}, 'interface': 'public', 'floating_ip_source': 'neutron', 'image_api_use_tasks': False, 'image_format': 'qcow2', 'message': '', 'network_api_version': '2', 'object_store_api_version': '1', 'secgroup_source': 'neutron', 'status': 'active', 'auth': {'user_domain_id': 'default', 'project_domain_id': 'default', 'project_name': 'admin'}, 'verbose_level': 4, 'deferred_help': False, 'region_name': 'RegionOne', 'default_domain': 'default', 'timing': False, 'auth_url': 'http://10.35.64.8/identity', 'username': 'admin', 'password': '***', 'beta_command': False, 'identity_api_version': '3', 'placement_api_version': '1', 'dns_api_version': '2', 'key_manager_api_version': '1', 'auth_type': 'password', 'networks': []}
compute API version 2.1, cmd group openstack.compute.v2
identity API version 3, cmd group openstack.identity.v3
image API version 2, cmd group openstack.image.v2
network API version 2, cmd group openstack.network.v2
object_store API version 1, cmd group openstack.object_store.v1
volume API version 3, cmd group openstack.volume.v3
neutronclient API version 2, cmd group openstack.neutronclient.v2
placement API version 1, cmd group openstack.placement.v1
dns API version 2, cmd group openstack.dns.v2
/usr/local/lib/python3.8/dist-packages/barbicanclient/__init__.py:57: UserWarning: The secrets module is moved to barbicanclient/v1 directory, direct import of barbicanclient.secrets will be deprecated. Please import barbicanclient.v1.secrets instead.
  warnings.warn("The %s module is moved to barbicanclient/v1 "
key_manager API version 1, cmd group openstack.key_manager.v1
command: network set -> openstackclient.network.v2.network.SetNetwork (auth=True)
Auth plugin password selected
auth_config_hook(): {'api_timeout': None, 'verify': True, 'cacert': None, 'cert': None, 'key': None, 'baremetal_status_code_retries': '5', 'baremetal_introspection_status_code_retries': '5', 'image_status_code_retries': '5', 'disable_vendor_agent': {}, 'interface': 'public', 'floating_ip_source': 'neutron', 'image_api_use_tasks': False, 'image_format': 'qcow2', 'message': '', 'network_api_version': '2', 'object_store_api_version': '1', 'secgroup_source': 'neutron', 'status': 'active', 'auth': {'user_domain_id': 'default', 'project_domain_id': 'default', 'project_name': 'admin'}, 'additional_user_agent': [('osc-lib', '2.4.1')], 'verbose_level': 4, 'deferred_help': False, 'region_name': 'RegionOne', 'default_domain': 'default', 'timing': False, 'auth_url': 'http://10.35.64.8/identity', 'username': 'admin', 'password': '***', 'beta_command': False, 'identity_api_version': '3', 'placement_api_version': '1', 'dns_api_version': '2', 'key_manager_api_version': '1', 'auth_type': 'password', 'networks': []}
Using auth plugin: password
Using parameters {'auth_url': 'http://10.35.64.8/identity', 'project_name': 'admin', 'project_domain_id': 'default', 'username': 'admin', 'user_domain_id': 'default', 'password': '***'}
Get auth_ref
REQ: curl -g -i -X GET http://10.35.64.8/identity -H "Accept: application/json" -H "User-Agent: openstacksdk/0.58.0 keystoneauth1/4.3.1 python-requests/2.26.0 CPython/3.8.10"
Starting new HTTP connection (1): 10.35.64.8:80
http://10.35.64.8:80 "GET /identity HTTP/1.1" 300 269
RESP: [300] Connection: close Content-Length: 269 Content-Type: application/json Date: Thu, 12 Aug 2021 10:23:54 GMT Location: http://10.35.64.8/identity/v3/ Server: Apache/2.4.41 (Ubuntu) Vary: X-Auth-Token x-openstack-request-id: req-7f5231d9-db05-4569-97cd-f1f8d8e538e7
RESP BODY: {"versions": {"values": [{"id": "v3.14", "status": "stable", "updated": "2020-04-07T00:00:00Z", "links": [{"rel": "self", "href": "http://10.35.64.8/identity/v3/"}], "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v3+json"}]}]}}
GET call to http://10.35.64.8/identity used request id req-7f5231d9-db05-4569-97cd-f1f8d8e538e7
Making authentication request to http://10.35.64.8/identity/v3/auth/tokens
Resetting dropped connection: 10.35.64.8
http://10.35.64.8:80 "POST /identity/v3/auth/tokens HTTP/1.1" 201 2601
{"token": {"methods": ["password"], "user": {"domain": {"id": "default", "name": "Default"}, "id": "e512007d3ceb4ca6ba7d929d854d6e73", "name": "admin", "password_expires_at": null}, "audit_ids": ["xvquFzqWSTSSGJ-IVT-aEQ"], "expires_at": "2021-08-12T11:23:55.000000Z", "issued_at": "2021-08-12T10:23:55.000000Z", "project": {"domain": {"id": "default", "name": "Default"}, "id": "89351aba4a0245f7ae35743cf9293731", "name": "admin"}, "is_domain": false, "roles": [{"id": "878281a829e947b5a733672330eb4bc6", "name": "admin"}, {"id": "4ba277b9720742f0822560b9d8b51c0d", "name": "reader"}, {"id": "e9efcd9d81fc4b8f81939272ecd465f7", "name": "member"}], "catalog": [{"endpoints": [{"id": "b70cd1cdcb8a4734b84f0b45292e41e3", "interface": "public", "region_id": "RegionOne", "url": "http://10.35.64.8/compute/v2.1", "region": "RegionOne"}], "id": "214ae70e9abe4687af52df9688acaa72", "type": "compute", "name": "nova"}, {"endpoints": [{"id": "0af5f7c3f0f04c5da0d474753542420a", "interface": "public", "region_id": "RegionOne", "url": "http://10.35.64.8/identity", "region": "RegionOne"}, {"id": "b03dc09329cf41bcad253eced66509ef", "interface": "admin", "region_id": "RegionOne", "url": "http://10.35.64.8/identity", "region": "RegionOne"}], "id": "4a704259550d43c782a6312c4e244886", "type": "identity", "name": "keystone"}, {"endpoints": [{"id": "0d1069290dee4f60bfefae84d5475810", "interface": "public", "region_id": "RegionOne", "url": "http://10.35.64.8/placement", "region": "RegionOne"}], "id": "4ca525e0606b4de29d20b43272abda14", "type": "placement", "name": "placement"}, {"endpoints": [{"id": "a58b6ba134fa4593953ff77ba3aa8756", "interface": "public", "region_id": "RegionOne", "url": "http://10.35.64.8:9696/", "region": "RegionOne"}], "id": "56c08179db6c443ea1281d25c8dcd8d3", "type": "network", "name": "neutron"}, {"endpoints": [{"id": "e31a0ba6ef0148f29566267113213694", "interface": "public", "region_id": "RegionOne", "url": "http://10.35.64.8/dns", "region": "RegionOne"}], "id": "89bb49f9a5a846a7a00405817d4d3282", "type": "dns", "name": "designate"}, {"endpoints": [{"id": "1fb48753c2154aecbe586d6167d1c6a7", "interface": "public", "region_id": "RegionOne", "url": "http://10.35.64.8/image", "region": "RegionOne"}], "id": "a84cfeb4d9754245ae57d2f6bef5dcea", "type": "image", "name": "glance"}, {"endpoints": [{"id": "cb79cfc1b5fc4cef9461f503346cb6bf", "interface": "public", "region_id": "RegionOne", "url": "http://10.35.64.8/compute/v2/89351aba4a0245f7ae35743cf9293731", "region": "RegionOne"}], "id": "ea9257ee5e2b4c7f90e7cc133c6c71e3", "type": "compute_legacy", "name": "nova_legacy"}]}}
run(Namespace(default=False, description=None, disable=False, disable_port_security=False, dns_domain='example.com.', enable=None, enable_port_security=False, external=False, internal=False, mtu=None, name=None, network='1749f7dd-e4b9-478b-bd28-a3dd7c539bd3', no_default=False, no_qos_policy=False, no_share=False, no_tag=False, physical_network=None, provider_network_type=None, qos_policy=None, segmentation_id=None, share=None, tags=None))
Network client initialized using OpenStack SDK: <openstack.network.v2._proxy.Proxy object at 0x7f7e41ffa0a0>
REQ: curl -g -i -X GET http://10.35.64.8:9696/v2.0/networks/1749f7dd-e4b9-478b-bd28-a3dd7c539bd3 -H "User-Agent: openstacksdk/0.58.0 keystoneauth1/4.3.1 python-requests/2.26.0 CPython/3.8.10" -H "X-Auth-Token: {SHA256}0b366d0d7824a66262cce8503d03539f1652189c3c34726454ca00ae14112422"
Starting new HTTP connection (1): 10.35.64.8:9696
http://10.35.64.8:9696 "GET /v2.0/networks/1749f7dd-e4b9-478b-bd28-a3dd7c539bd3 HTTP/1.1" 200 659
RESP: [200] Connection: keep-alive Content-Length: 659 Content-Type: application/json Date: Thu, 12 Aug 2021 10:23:55 GMT X-Openstack-Request-Id: req-827a2e49-8435-4c90-8316-2f84da9982b6
RESP BODY: {"network":{"id":"1749f7dd-e4b9-478b-bd28-a3dd7c539bd3","name":"net1","tenant_id":"89351aba4a0245f7ae35743cf9293731","admin_state_up":true,"mtu":1442,"status":"ACTIVE","subnets":["b7870888-7216-4f17-8aec-e1ecf29a6f8e"],"shared":false,"availability_zone_hints":[],"availability_zones":[],"ipv4_address_scope":null,"ipv6_address_scope":null,"router:external":false,"description":"","port_security_enabled":true,"tags":[],"created_at":"2021-08-11T09:55:47Z","updated_at":"2021-08-11T09:56:16Z","revision_number":2,"project_id":"89351aba4a0245f7ae35743cf9293731","provider:network_type":"geneve","provider:physical_network":null,"provider:segmentation_id":39538}}
GET call to network for http://10.35.64.8:9696/v2.0/networks/1749f7dd-e4b9-478b-bd28-a3dd7c539bd3 used request id req-827a2e49-8435-4c90-8316-2f84da9982b6
REQ: curl -g -i -X PUT http://10.35.64.8:9696/v2.0/networks/1749f7dd-e4b9-478b-bd28-a3dd7c539bd3 -H "Content-Type: application/json" -H "User-Agent: openstacksdk/0.58.0 keystoneauth1/4.3.1 python-requests/2.26.0 CPython/3.8.10" -H "X-Auth-Token: {SHA256}0b366d0d7824a66262cce8503d03539f1652189c3c34726454ca00ae14112422" -d '{"network": {"dns_domain": "example.com."}}'
http://10.35.64.8:9696 "PUT /v2.0/networks/1749f7dd-e4b9-478b-bd28-a3dd7c539bd3 HTTP/1.1" 200 659
RESP: [200] Connection: keep-alive Content-Length: 659 Content-Type: application/json Date: Thu, 12 Aug 2021 10:23:55 GMT X-Openstack-Request-Id: req-20be4550-489e-4f8a-8efd-11fe0a4ea604
RESP BODY: {"network":{"id":"1749f7dd-e4b9-478b-bd28-a3dd7c539bd3","name":"net1","tenant_id":"89351aba4a0245f7ae35743cf9293731","admin_state_up":true,"mtu":1442,"status":"ACTIVE","subnets":["b7870888-7216-4f17-8aec-e1ecf29a6f8e"],"shared":false,"availability_zone_hints":[],"availability_zones":[],"ipv4_address_scope":null,"ipv6_address_scope":null,"router:external":false,"description":"","port_security_enabled":true,"tags":[],"created_at":"2021-08-11T09:55:47Z","updated_at":"2021-08-11T09:56:16Z","revision_number":2,"project_id":"89351aba4a0245f7ae35743cf9293731","provider:network_type":"geneve","provider:physical_network":null,"provider:segmentation_id":39538}}
PUT call to network for http://10.35.64.8:9696/v2.0/networks/1749f7dd-e4b9-478b-bd28-a3dd7c539bd3 used request id req-20be4550-489e-4f8a-8efd-11fe0a4ea604
clean_up SetNetwork:
END return value: 0

Note:
After redeploying Devstack with DNS enabled, it means enabling "q-dns" in localrc:

# Neutron
ENABLED_SERVICES+=,q-svc,neutron,q-dns

everything works as expected and "dns_domain" is properly set:
stack@seal08:~/devstack$ openstack zone list --all
+--------------------------------------+----------------------------------+--------------+---------+------------+--------+--------+
| id | project_id | name | type | serial | status | action |
+--------------------------------------+----------------------------------+--------------+---------+------------+--------+--------+
| f6922edf-611f-4ba2-9bd8-e40eb7cade7d | 89351aba4a0245f7ae35743cf9293731 | example.com. | PRIMARY | 1628670413 | ACTIVE | NONE |
+--------------------------------------+----------------------------------+--------------+---------+------------+--------+--------+
stack@seal08:~/devstack$
stack@seal08:~/devstack$
stack@seal08:~/devstack$ openstack network list

+--------------------------------------+----------------------------------+----------------------------------------------------------------------------+
| ID | Name | Subnets |
+--------------------------------------+----------------------------------+----------------------------------------------------------------------------+
| 65dd5e84-33c6-4b70-aad9-64c6f2f72d6d | private | 03bb2ab9-1bff-4fea-ae6b-04506cab5122, c65d6919-6c3f-4c7a-a888-1a60d7366f12 |
| 8f7ec778-a6f2-4358-abb3-2d3b880870fa | tempest-test-network--1234138305 | fd6e1a7c-eefb-49d8-8f0f-9e22ac070608 |
| bf2e9b00-a52f-44a3-8369-9cf132276ebd | public | 4a253538-673d-41cc-b3e6-928cdb19c762, 7a5e6ccd-f46a-4551-a3e9-b8df36428ce4 |
| d38e2fed-f784-47e8-b0f1-dddb56e27905 | shared | d02072b0-b3bc-47d9-b82a-e305ee1c3e92 |
+--------------------------------------+----------------------------------+----------------------------------------------------------------------------+
stack@seal08:~/devstack$
stack@seal08:~/devstack$ openstack network set --dns-domain example.com. 8f7ec778-a6f2-4358-abb3-2d3b880870fa -v
START with options: network set --dns-domain example.com. 8f7ec778-a6f2-4358-abb3-2d3b880870fa -v
/usr/local/lib/python3.8/dist-packages/barbicanclient/__init__.py:57: UserWarning: The secrets module is moved to barbicanclient/v1 directory, direct import of barbicanclient.secrets will be deprecated. Please import barbicanclient.v1.secrets instead.
  warnings.warn("The %s module is moved to barbicanclient/v1 "
command: network set -> openstackclient.network.v2.network.SetNetwork (auth=True)
Using auth plugin: password
END return value: 0
stack@seal08:~/devstack$
stack@seal08:~/devstack$
stack@seal08:~/devstack$ openstack network show 8f7ec778-a6f2-4358-abb3-2d3b880870fa
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | |
| created_at | 2021-08-11T09:37:06Z |
| description | |
| dns_domain | None |
| id | 8f7ec778-a6f2-4358-abb3-2d3b880870fa |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | None |
| is_vlan_transparent | None |
| mtu | 1442 |
| name | tempest-test-network--1234138305 |
| port_security_enabled | True |
| project_id | f4cd701eb82a46c28918886ad1594b7c |
| provider:network_type | geneve |
| provider:physical_network | None |
| provider:segmentation_id | 19626 |
| qos_policy_id | None |
| revision_number | 2 |
| router:external | Internal |
| segments | None |
| shared | False |
| status | ACTIVE |
| subnets | fd6e1a7c-eefb-49d8-8f0f-9e22ac070608 |
| tags | |
| updated_at | 2021-08-11T09:37:07Z |
+---------------------------+--------------------------------------+

Tags: dns ovn
Revision history for this message
Arkady Shtempler (ashtempl) wrote :
affects: designate → neutron
Revision history for this message
Miguel Lavalle (minsel) wrote :

Is this with Neutron's master branch?

Revision history for this message
Dr. Jens Harbott (j-harbott) wrote :

IIUC neutron generally does not fail on unknown parameters, but silently ignores them, so this would be the expected behavior.

Changed in neutron:
status: New → Incomplete
tags: added: dns ovn
Revision history for this message
Arkady Shtempler (ashtempl) wrote :

Miguel - yes it was Neutron master branch.

Revision history for this message
Launchpad Janitor (janitor) wrote :

[Expired for neutron because there has been no activity for 60 days.]

Changed in neutron:
status: Incomplete → Expired
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Bug attachments

Remote bug watches

Bug watches keep track of this bug in other bug trackers.