def execute(self, display_name, data_volume_size, data_volume_type, config):
        if data_volume_size:
            logging.debug("creating a data volume for instance %s, %d" % (display_name, data_volume_size))
            nc = get_openstack_cinder_client(config)
            volume_name = '%s-data' % display_name

            volume = nc.volumes.create(
                size=data_volume_size,
                name=volume_name,
                volume_type=data_volume_type,
            )
            self.volume_id = volume.id
            retries = 0
            while nc.volumes.get(volume.id).status not in ('available',):
                logging.debug("...waiting for volume to be ready")
                time.sleep(5)
                retries += 1
                if retries > 30:
                    raise RuntimeError('Volume creation %s is stuck')

            return volume.id
        else:
            logging.debug("no root volume defined")
            return None