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
- Edit the blueprint and set `almanacServicePHIDs` to one or more Almanac service PHIDs
- Create the Almanac services first (with active bindings of the right service type) if none exist
- 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
- Create and bind Almanac services first, then configure the blueprint with their PHIDs
- When scripting blueprint creation, assert the services field saved non-empty
- Copy service PHIDs from the Almanac service detail pages to avoid typos
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
- Some of the Almanac Services defined by this blueprint could
- Unable to allocate any binding as a resource.
- Repository PHID "%s" does not exist.
- Repository ("%s") has unsupported VCS ("%s").
- When creating a new Drydock blueprint via the Conduit API, y
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/4f74b3d355aa2052.
Report an issue: GitHub.