Method to reproduce: 1. Create test user with _member_ role. 2. Create test flavor 3. Booted instance using test user with test flavor. 4. Go to the flavor in horizon and click on Edit Flavor. Don’t change anything and hit save. 5. test user with _member_ role will no longer be able to query data with cli. root@node-1:~# nova show dab20e1a-6958-485b-9987-487bda35044a ERROR (CommandError): No flavor with a name or ID of 'd0243cb9-924c-4cbf-ac96-1bc27ea4ec38' exists. 2016-08-24 17:34:36.953 4899 INFO nova.osapi_compute.wsgi.server [req-854be766-c547-417a-948c-3dea2b0ddb57 None] 192.168.0.1 "GET /v2/241e763e4cb2405293f071edc65caefd/flavors/d0243cb9-924c-4cbf-ac96-1bc27ea4ec38 HTTP/1.1" status: 200 len: 719 time: 0.0253959 2016-08-24 17:34:37.166 4899 ERROR nova.api.openstack [req-4dedb763-11f1-446e-8bf2-841900f58670 None] Caught error: Flavor d0243cb9-924c-4cbf-ac96-1bc27ea4ec38 could not be found. 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack Traceback (most recent call last): 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/nova/api/openstack/__init__.py", line 124, in __call__ 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack return req.get_response(self.application) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/webob/request.py", line 1320, in send 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack application, catch_exc_info=False) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/webob/request.py", line 1284, in call_application 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack app_iter = application(self.environ, start_response) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__ 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack return resp(environ, start_response) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/keystonemiddleware/auth_token.py", line 748, in __call__ 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack return self._call_app(env, start_response) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/keystonemiddleware/auth_token.py", line 684, in _call_app 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack return self._app(env, _fake_start_response) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__ 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack return resp(environ, start_response) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__ 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack return resp(environ, start_response) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/routes/middleware.py", line 131, in __call__ 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack response = self.app(environ, start_response) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__ 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack return resp(environ, start_response) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__ 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack resp = self.call_func(req, *args, **self.kwargs) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack return self.func(req, *args, **kwargs) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/nova/api/openstack/wsgi.py", line 910, in __call__ 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack content_type, body, accept) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/nova/api/openstack/wsgi.py", line 975, in _process_stack 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack action_result = self.dispatch(meth, request, action_args) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/nova/api/openstack/wsgi.py", line 1059, in dispatch 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack return method(req=request, **action_args) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/nova/api/openstack/compute/contrib/flavorextraspecs.py", line 93, in index 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack return self._get_extra_specs(context, flavor_id) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/nova/api/openstack/compute/contrib/flavorextraspecs.py", line 52, in _get_extra_specs 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack flavor = objects.Flavor.get_by_flavor_id(context, flavor_id) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/nova/objects/base.py", line 156, in wrapper 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack result = fn(cls, context, *args, **kwargs) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/nova/objects/flavor.py", line 142, in get_by_flavor_id 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack read_deleted) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/nova/db/api.py", line 1473, in flavor_get_by_flavor_id 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack return IMPL.flavor_get_by_flavor_id(context, id, read_deleted) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/nova/db/sqlalchemy/api.py", line 143, in wrapper 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack return f(*args, **kwargs) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack File "/usr/lib/python2.7/dist-packages/nova/db/sqlalchemy/api.py", line 4506, in flavor_get_by_flavor_id 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack raise exception.FlavorNotFound(flavor_id=flavor_id) 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack FlavorNotFound: Flavor d0243cb9-924c-4cbf-ac96-1bc27ea4ec38 could not be found. 2016-08-24 17:34:37.166 4899 TRACE nova.api.openstack 2016-08-24 17:34:37.172 4899 INFO nova.api.openstack [req-4dedb763-11f1-446e-8bf2-841900f58670 None] http://192.168.0.1:8774/v2/691d29ab0ed249a1a6c41bcd376ee2ff/flavors/d0243cb9-924c-4cbf-ac96-1bc27ea4ec38/os-extra_specs returned with HTTP 404 2016-08-24 17:34:37.181 4899 INFO nova.osapi_compute.wsgi.server [req-4dedb763-11f1-446e-8bf2-841900f58670 None] 192.168.0.1 "GET /v2/691d29ab0ed249a1a6c41bcd376ee2ff/flavors/d0243cb9-924c-4cbf-ac96-1bc27ea4ec38/os-extra_specs HTTP/1.1" status: 404 len: 291 time: 0.0 336580 6. Change test user role to admin role and issue is no longer present: root@node-1:~# nova flavor-show d0243cb9-924c-4cbf-ac96-1bc27ea4ec38 +----------------------------+--------------------------------------+ | Property | Value | +----------------------------+--------------------------------------+ | OS-FLV-DISABLED:disabled | False | | OS-FLV-EXT-DATA:ephemeral | 0 | | disk | 0 | | extra_specs | N/A | | id | d0243cb9-924c-4cbf-ac96-1bc27ea4ec38 | | name | test_test | | os-flavor-access:is_public | False | | ram | 64 | | rxtx_factor | 1.0 | | swap | | | vcpus | 1 | +----------------------------+--------------------------------------+ root@node-1:~# nova show dab20e1a-6958-485b-9987-487bda35044a +--------------------------------------+----------------------------------------------------------+ | Property | Value | +--------------------------------------+----------------------------------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-AZ:availability_zone | nova | | OS-EXT-SRV-ATTR:host | node-5.domain.tld | | OS-EXT-SRV-ATTR:hypervisor_hostname | node-5.domain.tld | | OS-EXT-SRV-ATTR:instance_name | instance-00000011 | | OS-EXT-STS:power_state | 1 | | OS-EXT-STS:task_state | - | | OS-EXT-STS:vm_state | active | | OS-SRV-USG:launched_at | 2016-08-24T16:45:53.000000 | | OS-SRV-USG:terminated_at | - | | accessIPv4 | | | accessIPv6 | | | config_drive | | | created | 2016-08-24T16:45:45Z | | flavor | test_test (d0243cb9-924c-4cbf-ac96-1bc27ea4ec38) | | hostId | c5ff9f2d0e96f2446f471953d67c06f9ad49fa1a5411247f2d9796e3 | | id | dab20e1a-6958-485b-9987-487bda35044a | | image | TestVM (cc38f569-903c-43b2-a217-a2ae9f6b1fbf) | | key_name | - | | metadata | {} | | name | flavortest | | net04 network | 192.168.111.9 | | os-extended-volumes:volumes_attached | [] | | progress | 0 | | security_groups | default | | status | ACTIVE | | tenant_id | 691d29ab0ed249a1a6c41bcd376ee2ff | | updated | 2016-08-24T16:45:53Z | | user_id | c6a8089224c2423192280424f78c2548 | +--------------------------------------+----------------------------------------------------------+ 1. Users should have view access to flavors that are previously deleted owned by tenant by default - I am unsure how to fix this via policy.json after a few tests will need help. 2. When modifying access and setting extra_specs in horizon flavor uuid should not change to match behavior from cli. 3. When no changes are made after hitting Edit Flavor, the flavor should not be deleted and recreated with new uuid. 4. This should also possibly apply to renaming of flavors as well.