If you try re-running the undercloud install, it fails when we do this step:
neutron subnet-update 4854ff1a-d12e-4dcd-a388-fff0b3c39128 --allocation-pool start=192.0.2.5,end=192.0.2.24 --gateway 192.0.2.1 --host-route destination=169.254.169.254/32,nexthop=192.0.2.1
Arguably we shouldn't need to update the subnet because nothing has changed, but we do, which makes neutron error like this:
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource [req-20b24688-df8a-4ec9-868e-9e5bae1687c6 04bd0cb3d5c040ada632e1c74f906d58 82abd5cc02aa45e19a3a4d2ea62446f4 - - -] update failed
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource Traceback (most recent call last):
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/neutron/api/v2/resource.py", line 83, in resource
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource result = method(request=request, **args)
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/neutron/api/v2/base.py", line 579, in update
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource return self._update(request, id, body, **kwargs)
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/oslo_db/api.py", line 147, in wrapper
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource ectxt.value = e.inner_exc
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 220, in __exit__
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource self.force_reraise()
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 196, in force_reraise
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb)
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/oslo_db/api.py", line 137, in wrapper
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource return f(*args, **kwargs)
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/neutron/api/v2/base.py", line 624, in _update
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource obj = obj_updater(request.context, id, **kwargs)
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/neutron/plugins/ml2/plugin.py", line 910, in update_subnet
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource context, id, subnet)
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/neutron/db/db_base_plugin_v2.py", line 680, in update_subnet
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource self._validate_subnet(context, s, cur_subnet=db_subnet)
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "/usr/lib/python2.7/site-packages/neutron/db/db_base_plugin_v2.py", line 479, in _validate_subnet
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource alloc_qry = alloc_qry.join("port", "routerport")
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/query.py", line 1946, in join
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource from_joinpoint=from_joinpoint)
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "<string>", line 2, in _join
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/base.py", line 201, in generate
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource fn(self, *args[1:], **kw)
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/query.py", line 2026, in _join
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource descriptor = _entity_descriptor(left_entity, onclause)
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/base.py", line 383, in _entity_descriptor
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource (description, key)
2016-03-02 15:43:33.784 14387 ERROR neutron.api.v2.resource InvalidRequestError: Entity '<class 'neutron.db.models_v2.Port'>' has no property 'routerport'
I'm not seeing this on stable/liberty. The code that runs the subnet-update has been there for a little while, I wonder if something in neutron changed.