NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

Neúspešné požiadavky vyhodia RoundlyConsulting\KubernetesApi\Exceptions\KubernetesException. Rozširuje RequestException z Laravelu — catch (RequestException), $e->response aj $e->getCode() (HTTP stav) naďalej fungujú — a pridáva metódy, ktoré Status apiservera prečítajú z tela až na požiadanie:

use RoundlyConsulting\KubernetesApi\Exceptions\KubernetesException;

try {
    $cluster->secrets()->setNamespace('shop')->setName('db')->create();
} catch (KubernetesException $e) {
    $e->status();       // 409 (also $e->getCode())
    $e->reason();       // 'AlreadyExists' — only a well-formed reason token, else null
    $e->apiMessage();   // 'secrets "db" already exists', or null
    $e->details();      // the Status details array (name, kind, causes…), or []
    $e->getMessage();   // 'secrets "db" already exists' — never the raw body
    $e->response;       // the full Laravel Response, body included
}

Správy nikdy nenesú telo odpovede

Správy výnimiek končia v logoch a vo failed_jobs, preto nikdy neobsahujú surové telo odpovede — HTML stránka z edge servera alebo proxy, ktorá vracia hlavičku Authorization, by tam inak zanechala bearer token. Súhrn tela od Laravelu, ktorý jeho handler pri report() zapisuje do správy, sa nepoužije nikdy:

Telo odpovedeSprávaSo skracovaním
Status apiservera so správousecrets "db" already existsHTTP 409 AlreadyExists
Čokoľvek iné — HTML stránka, prázdne telo…Kubernetes API request failed: HTTP 502HTTP 502
  • Všeobecná správa pridá reason zo Status, ak ho telo obsahuje v platnom tvare.
  • Nenasledované presmerovanie znie Kubernetes API request was redirected (HTTP 302 to https://login.example:8443) and the redirect was not followed — len pôvod cieľa, nikdy jeho cesta či dotaz.
  • Úspešná odpoveď, ktorú volanie nevie použiť, vyhodí KubernetesException::malformedResponse(): Malformed TokenRequest response from the Kubernetes API (HTTP 201).
  • new KubernetesException($response, ?string $message = null, bool $redacted = false) použije vlastnú správu presne tak, ako ju zadáte.

Skrátené chyby

withRedactedErrors() — alebo redact_errors v konfigurácii klastra — skráti správy na stav a dôvod, bez správy zo Status. Metódy výnimky aj $e->response telo naďalej prečítajú, pretože si oň výslovne poviete, a applyConfig() nastavenie zachová:

$cluster = Kubernetes::cluster('production')->withRedactedErrors();
// or 'redact_errors' => true on the cluster's config entry (KUBERNETES_REDACT_ERRORS)

try {
    $cluster->secrets()->setNamespace('shop')->setName('db')->create();
} catch (KubernetesException $e) {
    $e->getMessage();   // 'HTTP 409 AlreadyExists'
    $e->apiMessage();   // still 'secrets "db" already exists' — reading it is a choice
}

Žiadosti o token service accountu sú skrátené vždy, bez ohľadu na nastavenie klastra — ide o endpoint s prihlasovacími údajmi. Odmietnutý upgrade pri exec vyhodí WebSocketException so stavovým riadkom a správou zo Status apiservera (pri skracovaní len so stavovým riadkom), napríklad WebSocket upgrade failed: HTTP/1.1 403 Forbidden: pods "api" is forbidden; hlavičky ani telo odpovede v nej nikdy nie sú.

Všetky výnimky

VýnimkaKedy vznikneObsahuje
KubernetesExceptionApiserver odpovie kódom 4xx alebo 5xx, presmerovaním, ktoré sa nenasledovalo (redirectNotFollowed()), alebo úspešnou odpoveďou, ktorú volanie nevie použiť (malformedResponse()).->response (Response Laravelu), status(), reason(), apiMessage() a details(); správou je správa zo Status apiservera — nikdy surové telo odpovede.
RateLimitExceededExceptionPožiadavka by čakala dlhšie ako rate_limits.max_wait.->cluster (meno registrovaného klastra, pri ad-hoc klientovi host apiservera) a retryAfterSeconds().
KubeConfigExceptionfromKubeConfig() alebo inCluster() nevie načítať prihlasovacie údaje — vrátane neplatného YAML, nečitateľného tokenFile, používateľa, ktorý sa prihlasuje cez exec plugin, auth provider alebo meno a heslo, chýbajúceho CA certifikátu v klastri či insecure-skip-tls-verify, ktoré nie je boolean.Správu s tým, čo chýba alebo je neplatné — pri neplatnom YAML len súbor a riadok.
WebSocketExceptionexec() sa nepripojí alebo zlyhá upgrade na WebSocket.Chybu spojenia, prípadne stavový riadok upgradu so správou zo Status apiservera — nikdy surové hlavičky ani telo.
ClusterNotFoundExceptioncluster($name) dostane meno, ktoré nie je nakonfigurované ani zaregistrované.Neznáme meno klastra.
ClusterConfigurationExceptionKlaster nemá URL, closure definície nevráti Cluster, zdroj v konfigurácii je neznámy, nastavenie klastra či klienta je chybné alebo mimo rozsahu, prípadne sa zdroj použije bez klastra.Ktorý klaster, konfiguračný kľúč či zdroj je nastavený zle.
NamespaceScopeExceptionKlient alebo zdroj obmedzený na namespace má svoj namespace opustiť.->scope (pripnutý namespace).
InvalidResourceExceptionregisterResource() alebo seed() vo fake dostane triedu, ktorá nie je zdroj, alebo nepoužiteľné meno; konfigurácia resources nie je pole či uvádza triedu, ktorá nie je zdroj; alebo meno, namespace, plural či apiVersion požiadavky nemôže byť jedným segmentom cesty URL (nič sa neodošle). Vyhodia ju aj typové buildery: kľúč či hodnota labelu mimo gramatiky labelov, vstup pravidla hostu či cesty v Traefiku, subjekt ServiceAccount v ClusterRoleBinding bez namespace, pomocník závislý od mena (Volume::fromSecret(), Job::podsSelectors(), Service::getClusterDns()) na zdroji bez mena a vstup requestToken(), ktorý by apiserver odmietol.Problémovú triedu, meno alebo hodnotu.
InvalidConfigurationExceptionKľúč rate_limits alebo traefik.group je neplatný — nerozpoznaný prepínač, necelé číslo či číslo mimo rozsahu, neznámy timespan alebo hodnota, ktorá nie je reťazec. Pochádza z package-toolkit-for-laravel.Správu s názvom kľúča a zadanou hodnotou.

404 z find() je zvyčajne signál na vytvorenie — existsOnCluster() a updateOrCreate() to riešia za vás. 409 z update() alebo updateOrCreate() znamená, že sa objekt od načítania zmenil: načítajte ho znova a pokus zopakujte.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.