phacility/phabricator · error · Exception

This blueprint ("%s") does not define any Almanac Service PH

Error message

This blueprint ("%s") does not define any Almanac Service PHIDs.

What it means

DrydockAlmanacServiceHostBlueprintImplementation::loadServices() reads the blueprint's `almanacServicePHIDs` field to know which Almanac services provide hosts. When the field is empty it throws this Exception before any query runs. It is a blueprint configuration error: the blueprint was created without pointing it at any Almanac service.

Source

Thrown at src/applications/drydock/blueprint/DrydockAlmanacServiceHostBlueprintImplementation.php:214

        ),
        'required' => true,
      ),
      'credentialPHID' => array(
        'name' => pht('Credentials'),
        'type' => 'credential',
        'credential.provides' =>
          PassphraseSSHPrivateKeyCredentialType::PROVIDES_TYPE,
        'credential.type' =>
          PassphraseSSHPrivateKeyTextCredentialType::CREDENTIAL_TYPE,
      ),
    );
  }

  private function loadServices(DrydockBlueprint $blueprint) {
    if (!$this->services) {
      $service_phids = $blueprint->getFieldValue('almanacServicePHIDs');
      if (!$service_phids) {
        throw new Exception(
          pht(
            'This blueprint ("%s") does not define any Almanac Service PHIDs.',
            $blueprint->getBlueprintName()));
      }

      $viewer = $this->getViewer();
      $services = id(new AlmanacServiceQuery())
        ->setViewer($viewer)
        ->withPHIDs($service_phids)
        ->withServiceTypes($this->getAlmanacServiceTypes())
        ->needActiveBindings(true)
        ->execute();
      $services = mpull($services, null, 'getPHID');

      if (count($services) != count($service_phids)) {
        $missing_phids = array_diff($service_phids, array_keys($services));
        throw new Exception(
          pht(

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Edit the blueprint and set `almanacServicePHIDs` to one or more Almanac service PHIDs
  2. Create the Almanac services first (with active bindings of the right service type) if none exist
  3. Copy the PHIDs exactly from the Almanac service detail pages (PHID form, e.g. HSVC...)
Defensive patterns

Strategy: validation

Validate before calling

$phids = $blueprint->getFieldValue('almanacServicePHIDs');
if (!$phids) {
  // Do not enable/lease against this blueprint until services are configured.
  throw new Exception('Blueprint lacks almanacServicePHIDs');
}

Prevention

When it happens

Trigger: A Drydock host blueprint of this type whose `almanacServicePHIDs` field is null or an empty list attempts to allocate a resource (or otherwise call loadServices()).

Common situations: Creating the blueprint from the UI/CLI and skipping the services field; a blueprint created by script where the field key was misspelled so it saved empty; services were cleared during reconfiguration while leases were still being requested.

Related errors


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