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

  1. Look up the exact name in the Almanac console (Infrastructure > Almanac > Devices / Services) and pass that object's name.
  2. If the device does not exist yet, create/bind it in Almanac before thawing.
  3. 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

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


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