def execute(self, display_name, image, flavor, security_group, extra_sec_groups,
                root_volume_id, nics, userdata, config):
        logging.debug("provisioning instance %s" % display_name)
        nc = get_openstack_nova_client(config)
        sgs = [security_group]
        if extra_sec_groups:
            sgs.extend(extra_sec_groups)
        try:
            if len(root_volume_id):
                bdm = {'vda': '%s:::1' % (root_volume_id)}
            else:
                bdm = None
            instance = nc.servers.create(
                display_name,
                image.id,
                flavor.id,
                key_name=display_name,
                security_groups=sgs,
                block_device_mapping=bdm,
                nics=_format_nics(nics),
                userdata=userdata,)

        except Exception as e:
            logging.error("error provisioning instance: %s" % e)
            raise e

        self.instance_id = instance.id
        logging.debug("instance provisioning successful")
        return instance.id