I've forked a Cinder/ZFSonLinux driver and got it working on Mitaka a few months ago.
After a lot of troubles because an accidental upgrade to Newton, I decided to scratch everything and start over, this time using Debian GNU/Linux Stretch (instead of Sid), which come by default with Newton.
But trying to create an instance, using a ZoL root volume, it fails to boot because the volume is not a bootable volume.
Creating a "stand alone" volume works fine, but it's the copying of the image (from Glance) onto the volume that fails.
Looking through the logs, adding some debugging here and there, it is because the copy_image_to_volume() is called _before_ create_export() and initialize_connection(), leaving create_volume() without a destination.
This is the excerpts from the logs:
Updating volume stats _update_volume_stats /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:231
create_volume(volume-826bed7f-8d5f-488a-9ea7-2cb96e25a267) => 826bed7f-8d5f-488a-9ea7-2cb96e25a267 create_volume /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:207
_find_iscsi_block_device(826bed7f-8d5f-488a-9ea7-2cb96e25a267) _find_iscsi_block_device /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:556
copy_image_to_volume: volume_id='826bed7f-8d5f-488a-9ea7-2cb96e25a267', dest='False' copy_image_to_volume /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:702
create_export(826bed7f-8d5f-488a-9ea7-2cb96e25a267) create_export /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:646
create_export(): Trying to share "share/VirtualMachines/Blade_Center/volume-826bed7f-8d5f-488a-9ea7-2cb96e25a267" create_export /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:649
initialize_connection(826bed7f-8d5f-488a-9ea7-2cb96e25a267) initialize_connection /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:583
_find_target: return iqn.2012-11.com.bayour:share.virtualmachines.blade.center.volume.826bed7f.8d5f.488a.9ea7.2cb96e25a267 _find_target /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:482
initialize_connection: target=iqn.2012-11.com.bayour:share.virtualmachines.blade.center.volume.826bed7f.8d5f.488a.9ea7.2cb96e25a267 initialize_connection /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:591
_login_target(10.0.3.253:3260, iqn.2012-11.com.bayour:share.virtualmachines.blade.center.volume.826bed7f.8d5f.488a.9ea7.2cb96e25a267) _login_target /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:489
_find_iscsi_block_device(826bed7f-8d5f-488a-9ea7-2cb96e25a267) _find_iscsi_block_device /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:556
_find_target: return iqn.2012-11.com.bayour:share.virtualmachines.blade.center.volume.826bed7f.8d5f.488a.9ea7.2cb96e25a267 _find_target /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:482
_find_iscsi_block_device: target=iqn.2012-11.com.bayour:share.virtualmachines.blade.center.volume.826bed7f.8d5f.488a.9ea7.2cb96e25a267 _find_iscsi_block_device /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:562
initialize_connection: block_dev=/dev/sdc initialize_connection /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:601
Updating volume stats _update_volume_stats /usr/lib/python2.7/dist-packages/cinder/volume/drivers/zol.py:231
Because this is a remote storage SAN, create_volume() does an ssh to the storage/SAN and creates the volume, the create_export() also uses ssh to create a iSCSI target on the remote storage/SAN and then initialize_connection() uses iscsiadm to login to the target on the Cinder host (which creates the device/target for copy image)..
But because all this is done _after_ attempting to copy the image to the volume, the whole thing fails..
I'm not sure what changed between Mitaka and Newton or if it's something I have failed to 'port' or configure (my cinder.conf is identical), but I've looked at the lvm.py driver as well as http://docs.openstack.org/developer/cinder/devref/drivers.html and as far as I can tell, I'm doing "The Right Thing (tm)".
The driver can be found at https://github.com/FransUrbo/Openstack-ZFS/blob/master/zol.py.
Some of the base code for this is a bit confusing and there are different ways to do it. I'm unclear on what changes may have impacted you, but looking at your driver I see the problem I think.
Take a look at the base driver copy_image_ to_volume call: /github. com/openstack/ cinder/ blob/master/ cinder/ volume/ driver. py#L785
https:/
The lvm driver IIRC is now truly just LVM, when it actually gets instantiated it's going to pick in the iscsi class from driver.py and use that, so you'll then actually end up using the call above in driver.py.
You can also check some of the other drivers that chose to implement the method themeselves. The other option is you shouldn't need to implement this at all, you can just omit it and pick up the method from the base driver.
This is all sort of confusing and needs to be cleaned up a good bit, but check those things out as I think that's where your problem lies. I would be interested in digging in to the changes that exposed this for you though.