phacility/phabricator · error · PhutilArgumentUsageException

No enabled blueprints exist with a blueprint class that can

Error message

No enabled blueprints exist with a blueprint class that can plausibly allocate resources to satisfy the requested lease.

What it means

A PhutilArgumentUsageException from `bin/drydock lease`: at least one blueprint implementation class can allocate the lease (the check in error 557 passed), but a DrydockBlueprintQuery for enabled (non-disabled) blueprint instances of those classes returns nothing. In other words, the install has the capability in code but no enabled blueprint configured to provide it.

Source

Thrown at src/applications/drydock/management/DrydockManagementLeaseWorkflow.php:336

    $impls = DrydockBlueprintImplementation::getAllForAllocatingLease($lease);

    if (!$impls) {
      throw new PhutilArgumentUsageException(
        pht(
          'No known blueprint class can ever allocate the specified '.
          'lease. Check that the resource type is spelled correctly.'));
    }

    $classes = array_keys($impls);

    $blueprints = id(new DrydockBlueprintQuery())
      ->setViewer($viewer)
      ->withBlueprintClasses($classes)
      ->withDisabled(false)
      ->execute();

    if (!$blueprints) {
      throw new PhutilArgumentUsageException(
        pht(
          'No enabled blueprints exist with a blueprint class that can '.
          'plausibly allocate resources to satisfy the requested lease.'));
    }

    $phids = mpull($blueprints, 'getPHID');

    if ($filter_blueprints) {
      $allowed_map = array_fuse($phids);
      $filter_map = mpull($filter_blueprints, null, 'getPHID');

      foreach ($filter_map as $filter_phid => $blueprint) {
        if (!isset($allowed_map[$filter_phid])) {
          throw new PhutilArgumentUsageException(
            pht(
              'Specified blueprint "%s" is not capable of satisfying the '.
              'configured lease.',
              $blueprint->getBlueprintName()));

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Create a blueprint of the required class: Drydock console > Blueprints > New Blueprint, pick the matching implementation type.
  2. If a matching blueprint exists but is disabled, re-enable it from the blueprint page.
  3. Re-run the lease command after the blueprint is enabled.
Defensive patterns

Strategy: validation

Validate before calling

$impls = DrydockBlueprintImplementation::getAllForAllocatingLease($probe);
$blueprints = id(new DrydockBlueprintQuery())
  ->setViewer($viewer)
  ->withBlueprintClasses(array_keys($impls))
  ->withDisabled(false)
  ->execute();
if (!$blueprints) {
  throw new RuntimeException(
    'No enabled blueprint provides this resource type; '.
    'create or enable one in the Drydock console.');
}

Prevention

When it happens

Trigger: `bin/drydock lease --type host` on a fresh install where no 'host' blueprint has been created yet, or where every host blueprint is disabled (withDisabled(false) filters them out).

Common situations: Fresh Drydock setup that has not created blueprints; all blueprints disabled during maintenance or after an incident; blueprint created but immediately disabled by an admin.

Related errors


AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21). Data as JSON: /api/errors/5b1c396586d262bc. Report an issue: GitHub.