phacility/phabricator · error · PhutilArgumentUsageException
No device or service named "%s" exists.
Error message
No device or service named "%s" exists.
What it means
thaw resolves the `--promote`/`--demote` target by name: first against Almanac devices (AlmanacDeviceQuery), then against Almanac services (AlmanacServiceQuery). A name matching neither an Almanac device nor a service cannot be promoted or demoted, so the workflow aborts with this PhutilArgumentUsageException.
Source
Thrown at src/applications/repository/management/PhabricatorRepositoryManagementThawWorkflow.php:78
if ($promote && $demote) {
throw new PhutilArgumentUsageException(
pht('Specify either --promote or --demote, but not both.'));
}
$target_name = nonempty($promote, $demote);
$devices = id(new AlmanacDeviceQuery())
->setViewer($viewer)
->withNames(array($target_name))
->execute();
if (!$devices) {
$service = id(new AlmanacServiceQuery())
->setViewer($viewer)
->withNames(array($target_name))
->executeOne();
if (!$service) {
throw new PhutilArgumentUsageException(
pht('No device or service named "%s" exists.', $target_name));
}
if ($promote) {
throw new PhutilArgumentUsageException(
pht(
'You can not "--promote" an entire service ("%s"). Only a single '.
'device may be promoted.',
$target_name));
}
$bindings = id(new AlmanacBindingQuery())
->setViewer($viewer)
->withServicePHIDs(array($service->getPHID()))
->execute();
if (!$bindings) {
throw new PhutilArgumentUsageException(
pht(View on GitHub (pinned to 5720a38cfe)
Solutions
- Look up the exact name in the Almanac console (Infrastructure > Almanac > Devices / Services) and pass that object's name.
- If the device does not exist yet, create/bind it in Almanac before thawing.
- Verify you are connected to the cluster environment that actually owns these devices.
Example fix
# before ./bin/repository thaw --promote web-01.internal # DNS name, not an Almanac device # Usage exception: No device or service named "web-01.internal" exists. # after: use the Almanac device name ./bin/repository thaw --promote repo-host-01
Defensive patterns
Strategy: validation
Validate before calling
# Confirm the name exists as an Almanac device or service before thawing
name='repo-host-01'
found=$(mysql -N -B phabricator_almanac -e \
"SELECT (SELECT COUNT(*) FROM almanac_device WHERE name = '$name')
+ (SELECT COUNT(*) FROM almanac_service WHERE name = '$name')")
[ "$found" -ge 1 ] || { echo "no Almanac device/service named $name" >&2; exit 1; }
./bin/repository thaw --promote "$name" Prevention
- Use Almanac object names, not DNS hostnames or IPs, as thaw targets.
- Maintain a mapping of cluster hosts to their Almanac device names in runbooks.
When it happens
Trigger: Passing a hostname, IP, repository callsign, or typo'd name that is not an Almanac device or service object name; referencing a device defined in a different Phabricator/Almanac installation.
Common situations: Confusing the physical hostname with the Almanac device name; typos; devices not yet created in the Almanac console; running against the wrong environment's database.
Related errors
- You can not "--promote" an entire service ("%s"). Only a sin
- Service "%s" is not bound to any devices.
- You must choose a device to --promote or --demote.
- Specify either --promote or --demote, but not both.
- No such device "%s" exists!
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/ea042081a9e4b317.
Report an issue: GitHub.