If I try to update Keystone::User resource without any changing properties, next error raised:
2016-04-04 14:18:57.675 INFO heat.engine.resource [-] UPDATE: KeystoneUser "user" [61fe9716d0954083a6ebe9a47da80641] Stack "user" [8183ed66-e873-4eda-9310-91269ca42dd7]
2016-04-04 14:18:57.675 TRACE heat.engine.resource Traceback (most recent call last):
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/opt/stack/heat/heat/engine/resource.py", line 704, in _action_recorder
2016-04-04 14:18:57.675 TRACE heat.engine.resource yield
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/opt/stack/heat/heat/engine/resource.py", line 1154, in update
2016-04-04 14:18:57.675 TRACE heat.engine.resource prop_diff])
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/opt/stack/heat/heat/engine/scheduler.py", line 297, in wrapper
2016-04-04 14:18:57.675 TRACE heat.engine.resource step = next(subtask)
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/opt/stack/heat/heat/engine/resource.py", line 747, in action_handler_task
2016-04-04 14:18:57.675 TRACE heat.engine.resource handler_data = handler(*args)
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/opt/stack/heat/heat/engine/resources/openstack/keystone/user.py", line 225, in handle_update
2016-04-04 14:18:57.675 TRACE heat.engine.resource new_password=password
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/opt/stack/heat/heat/engine/resources/openstack/keystone/user.py", line 139, in _update_user
2016-04-04 14:18:57.675 TRACE heat.engine.resource return self.client().users.update(**values)
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/usr/local/lib/python2.7/dist-packages/debtcollector/renames.py", line 45, in wrapper
2016-04-04 14:18:57.675 TRACE heat.engine.resource return f(*args, **kwargs)
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/usr/local/lib/python2.7/dist-packages/positional/__init__.py", line 94, in inner
2016-04-04 14:18:57.675 TRACE heat.engine.resource return func(*args, **kwargs)
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/usr/local/lib/python2.7/dist-packages/keystoneclient/v3/users.py", line 146, in update
2016-04-04 14:18:57.675 TRACE heat.engine.resource log=False)
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/usr/local/lib/python2.7/dist-packages/keystoneclient/base.py", line 225, in _update
2016-04-04 14:18:57.675 TRACE heat.engine.resource **kwargs)
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/usr/local/lib/python2.7/dist-packages/keystoneauth1/adapter.py", line 185, in patch
2016-04-04 14:18:57.675 TRACE heat.engine.resource return self.request(url, 'PATCH', **kwargs)
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/usr/local/lib/python2.7/dist-packages/keystoneauth1/adapter.py", line 331, in request
2016-04-04 14:18:57.675 TRACE heat.engine.resource resp = super(LegacyJsonAdapter, self).request(*args, **kwargs)
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/usr/local/lib/python2.7/dist-packages/keystoneauth1/adapter.py", line 98, in request
2016-04-04 14:18:57.675 TRACE heat.engine.resource return self.session.request(url, method, **kwargs)
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/usr/local/lib/python2.7/dist-packages/positional/__init__.py", line 94, in inner
2016-04-04 14:18:57.675 TRACE heat.engine.resource return func(*args, **kwargs)
2016-04-04 14:18:57.675 TRACE heat.engine.resource File "/usr/local/lib/python2.7/dist-packages/keystoneclient/session.py", line 420, in request
2016-04-04 14:18:57.675 TRACE heat.engine.resource raise exceptions.from_response(resp, method, url)
2016-04-04 14:18:57.675 TRACE heat.engine.resource BadRequest: {} does not have enough properties (HTTP 400) (Request-ID: req-d178485a-beb1-4a97-812f-2c2dff6c9ac3)
Need to check that we do not pass empty values to users.update method.
Fix proposed to branch: master /review. openstack. org/301059
Review: https:/