'Create a block device, attach it to the local host, create an ``ext4``
filesystem on the device and mount it.
Operations are performed synchronously.
See ``IStateChange.run`` for general argument and return type
documentation.
:returns: An already fired ``Deferred`` with result ``None`` or a
failed ``Deferred`` with a ``DatasetExists`` exception if a
blockdevice with the required dataset_id already exists.'

def run(self, deployer, state_persister):

    api = deployer.block_device_api
    try:
        check_for_existing_dataset(api, self.dataset_id)
    except:
        return fail()
    return self._create_volume(deployer)
