Looks like the issue is https://github.com/openstack/keystone/blob/f0c2e798f7e706acbaf600bd06521a0e4c514477/keystone/api/os_federation.py#L161 needs to be it's own resource to ensure the protocol ID is required in the routing map, note that the resource object only enforces the first substitution via https://github.com/openstack/keystone/blob/f0c2e798f7e706acbaf600bd06521a0e4c514477/keystone/api/os_federation.py#L482 since it is a "resource".
Alternatively a resource_mapping can be used explicitly for each method allowing the resource object to remain combined.
Looks like the issue is https:/ /github. com/openstack/ keystone/ blob/f0c2e798f7 e706acbaf600bd0 6521a0e4c514477 /keystone/ api/os_ federation. py#L161 needs to be it's own resource to ensure the protocol ID is required in the routing map, note that the resource object only enforces the first substitution via https:/ /github. com/openstack/ keystone/ blob/f0c2e798f7 e706acbaf600bd0 6521a0e4c514477 /keystone/ api/os_ federation. py#L482 since it is a "resource".
Alternatively a resource_mapping can be used explicitly for each method allowing the resource object to remain combined.