Ana içeriğe atla Navigasyona atla Alt bilgiye atla

JSON Çıktı Referansı

rdc CLI JSON çıktı formatı, zarf şeması, hata işleme ve ajan keşif komutları için eksiksiz referans.

Tüm rdc komutları yapılandırılmış JSON çıktısı üretir. Bir betiğe pipe edin ya da doğrudan bir ajana besleyin.

JSON Çıktısını Etkinleştirme

Açık Bayrak

rdc machine status prod-1 --output json
rdc machine status prod-1 -o json

Otomatik Algılama

rdc TTY olmayan bir ortamda (boru hattı, alt kabuk veya AI ajanı tarafından başlatılmış) çalıştığında, çıktı otomatik olarak JSON’a geçer. Bayrak gerekmez.

# Produces JSON automatically
result=$(rdc machine status prod-1)

JSON Zarfı

Her JSON yanıtı tutarlı bir zarf kullanır:

{
  "success": true,
  "command": "machine query",
  "data": {
    "name": "prod-1",
    "status": "running",
    "repositories": []
  },
  "errors": null,
  "warnings": [],
  "metrics": {
    "duration_ms": 142
  }
}
AlanTürAçıklama
successbooleanKomutun başarıyla tamamlanıp tamamlanmadığı
commandstringTam komut yolu (ör. "machine query", "repo up")
dataobject | array | nullBaşarıda komuta özel veri, hatada null
errorsarray | nullBaşarısızlıkta hata nesneleri, başarıda null
warningsstring[]Yürütme sırasında toplanan önemli olmayan uyarılar
metricsobjectYürütme meta verileri

Hata Yanıtları

Başarısız komutlar, kurtarma ipuçlarıyla yapılandırılmış hatalar döndürür:

{
  "success": false,
  "command": "machine query",
  "data": null,
  "errors": [
    {
      "code": "NOT_FOUND",
      "message": "Machine \"prod-2\" not found",
      "retryable": false,
      "guidance": "Verify the resource name with \"rdc machine status\" or \"rdc repo list\""
    }
  ],
  "warnings": [],
  "metrics": {
    "duration_ms": 12
  }
}

Hata Alanları

AlanTürAçıklama
codestringMakine tarafından okunabilir hata kodu (kanonik liste için ERROR_CODES sabitlerine bakın)
messagestringİnsan tarafından okunabilir açıklama
retryablebooleanAynı komutun yeniden denenmesinin başarılı olup olamayacağı
guidancestringSerbest metin ipucu (eski. Yapılandırılmış eylem verisi için next tercih edin)
nextobject?Yapılandırılmış sonraki eylem ipucu (varsa). Aşağıya bakın

Yapılandırılmış next Eylem İpuçları

PRECONDITION_MISMATCH gibi yüksek değerli hata kodlarında, hata kullanıcıya sunulacak tam komutları içeren bir next alanı taşır. Her hata kodu bu alanı içermez; yalnızca tanımlı bir kurtarma yolu olanlar içerir. Ajanlar, next.options[].run değerini olduğu gibi kullanıcıya iletmeli, kendi komutlarını türetmemelidir. Bu, ajanın var olmayan bir komut uydurma hata modunu ortadan kaldırır. Tahmin ettiğinizden daha sık yaşanır.

{
  "errors": [{
    "code": "PRECONDITION_MISMATCH",
    "message": "--current digest mismatch (expected 3264f8ee…, got 611dfd8a…)",
    "next": {
      "summary": "Provide the current value or acknowledge rotation.",
      "options": [
        {
          "description": "Re-read current digest, then retry with --current",
          "run": "rdc repo secret get mail --key STRIPE_KEY"
        },
        {
          "description": "Skip the precondition (rotation, audited)",
          "run": "rdc repo secret set mail --key STRIPE_KEY --value <new> --mode file --rotate-secret"
        }
      ]
    }
  }]
}

Şema:

AlanTürAçıklama
next.summarystringKullanıcının karar vermesi gereken şeyin tek satırlık açıklaması
next.options[]arraySomut eylemler; her biri kullanıcının seçebileceği bir alternatiftir
next.options[].descriptionstringBu seçeneğin insan tarafından okunabilir açıklaması
next.options[].runstringTam CLI komutu. Kullanıcıya olduğu gibi iletin

Yeniden Denenebilir Hatalar

Bu hata türleri retryable: true olarak işaretlenir:

  • NETWORK_ERROR, SSH bağlantısı veya ağ hatası
  • RATE_LIMITED, Çok fazla istek, bekleyip yeniden deneyin
  • API_ERROR, Geçici arka uç hatası

Yeniden denenemez hatalar (kimlik doğrulama, bulunamadı, geçersiz argümanlar) yeniden denemeden önce düzeltici eylem gerektirir.

Çıktı Filtreleme

Çıktıyı belirli anahtarlarla sınırlamak ve token kullanımını azaltmak için --fields kullanın:

rdc machine status prod-1 --containers -o json --fields name,status,repository

Kuru Çalıştırma Çıktısı

Yıkıcı komutlar, ne olacağını önizlemek için --dry-run destekler:

rdc repo delete mail@prod-1 --dry-run -o json
{
  "success": true,
  "command": "repo delete",
  "data": {
    "dryRun": true,
    "repository": "mail",
    "machine": "prod-1",
    "guid": "a1b2c3d4-..."
  },
  "errors": null,
  "warnings": [],
  "metrics": {
    "duration_ms": 8
  }
}

--dry-run desteği olan komutlar: repo up, repo down, repo delete, snapshot delete, sync upload, sync download.

Ayrıştırma Örnekleri

Shell (jq)

status=$(rdc machine status prod-1 -o json | jq -r '.data.status')

Python

import subprocess, json

result = subprocess.run(
    ["rdc", "machine", "query", "--name", "prod-1", "-o", "json"],
    capture_output=True, text=True
)
envelope = json.loads(result.stdout)

if envelope["success"]:
    print(envelope["data"]["status"])
else:
    error = envelope["errors"][0]
    if error["retryable"]:
        # retry logic
        pass
    else:
        print(f"Error: {error['message']}")
        print(f"Fix: {error['guidance']}")

Node.js

import { execFileSync } from 'child_process';

const raw = execFileSync('rdc', ['machine', 'query', '--name', 'prod-1', '-o', 'json'], { encoding: 'utf-8' });
const { success, data, errors } = JSON.parse(raw);

if (!success) {
  const { message, retryable, guidance } = errors[0];
  throw new Error(`${message} (retryable: ${retryable}, fix: ${guidance})`);
}