Mostly from current master, but without unit tests. This commit squashes together the following patches: https://review.openstack.org/#/c/515209/ https://review.openstack.org/#/c/524224/ https://review.openstack.org/#/c/524689/ https://review.openstack.org/#/c/526113/ https://review.openstack.org/#/c/526114/ https://review.openstack.org/#/c/526935/ https://review.openstack.org/#/c/526936/ https://review.openstack.org/#/c/527027/ https://review.openstack.org/#/c/527106/ https://review.openstack.org/#/c/528002/ https://review.openstack.org/#/c/528076/ https://review.openstack.org/#/c/528275/ https://review.openstack.org/#/c/528359/ https://review.openstack.org/#/c/529341/ https://review.openstack.org/#/c/529944/ https://review.openstack.org/#/c/531208/ https://review.openstack.org/#/c/535522/ https://review.openstack.org/#/c/535879/ https://review.openstack.org/#/c/536611/ https://review.openstack.org/#/c/539686/ Most of the work was done by Andrea Frittoli and Monty Taylor. Below is the complete list of original authors (hopefully correctly ordered by surname): Co-Authored-By: Clark Boylan <clark.boylan@gmail.com> Co-Authored-By: Andrea Frittoli <andrea.frittoli@gmail.com> Co-Authored-By: yong sheng gong <gong.yongsheng@99cloud.net> Co-Authored-By: Jens Harbott <j.harbott@x-ion.de> Co-Authored-By: Andreas Jaeger <aj@suse.com> Co-Authored-By: Monty Taylor <mordred@inaugust.com> Co-Authored-By: Dean Troyer <dtroyer@gmail.com> Change-Id: Ia93bd480f260ee2c8bf56131e59a440a176259ee