Ah, yeah, that makes sense.
I’m not sure that it’s something we can fix particularly easily though.
lxd init doesn’t do everything in one shot, instead it does the same as running all the
lxc profile and
lxc config commands one after the other.
That means that the way that it reverts things on failure is by issuing the appropriate
remove command for the object that it created and which no longer needs to be kept around. As deleting a storage ZFS storage pool means the dataset is also destroyed, that explains the behavior you’re seeing.
Note that when specifying an existing dataset, all that’s needed to exist is the pool it sits on, if the dataset itself doesn’t exist, LXD will create it for you.