CodeBlanks Logo Icon CodeBlanks

Validation

CRD doğrulama kurallarını öğrenirsin.

Validation

CRD'nin openAPIV3Schema'sı API sunucusunda doğrulama yapar: türler, zorunlu alanlar, sınırlar, izinli değerler. Geçersiz nesne kaydedilmeden reddedilir; denetleyicinin bozuk veriyle uğraşması önlenir:

spec:
  type: object
  required: [veritabani, takvim]
  properties:
    veritabani: {type: string, minLength: 1}
    takvim:     {type: string, pattern: "^[0-9*/,-]+( [0-9*/,-]+){4}$"}
    saklamaGun: {type: integer, minimum: 1, maximum: 365, default: 7}
    tur:        {type: string, enum: [tam, artimli]}

CEL kuralları

Alanlar arası kurallar için şemaya CEL ifadeleri (x-kubernetes-validations) yazılır. Webhook yazmadan karmaşık doğrulama yapılabilir:

spec:
  type: object
  x-kubernetes-validations:
    - rule: "self.tur != 'artimli' || self.saklamaGun <= 30"
      message: "artımlı yedekler en fazla 30 gün saklanır"

$ kubectl apply -f yedek.yaml
The Yedek "magaza-gece" is invalid: spec: Invalid value: artımlı yedekler en fazla 30 gün saklanır

Uygulama Doğrulamayı sıkılaştır

Bir CRD doğrulama tanımının spec özelliğini yaz (spec: ile başlayarak): type: object; required: [veritabani, takvim]; properties altında veritabani (type: string), takvim (type: string) ve saklamaGun (type: integer, minimum: 1, maximum: 365).

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
spec:
  type: object
  required: [veritabani, takvim]
  properties:
    veritabani:
      type: string
    takvim:
      type: string
    saklamaGun:
      type: integer
      minimum: 1
      maximum: 365

Beklenen çıktı

customresourcedefinition.apiextensions.k8s.io/yedekler.ornek.com configured
$ kubectl apply -f hatali-yedek.yaml
The Yedek "deneme" is invalid: spec.saklamaGun: Invalid value: 500: spec.saklamaGun in body should be less than or equal to 365

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 saklamaGun: 500 olan bir Yedek uygulanırsa ne olur?

  • API sunucusu "must be less than or equal to 365" hatasıyla reddeder Doğru cevap
  • 365'e kırpılır
  • Kaydedilir, denetleyici düzeltir
  • Yok sayılır

Açıklama: Doğrulama kaydetmeden önce yapılır.

2 Zorunlu alanları belirt.

Soru
spec:
  type: object
  ____: [veritabani, takvim]
Cevap
spec:
  type: object
  required: [veritabani, takvim]

Açıklama: required, OpenAPI'de zorunlu alan listesidir.

3 Eşleştir.

Kavram Anlamı
required Zorunlu alanlar
minimum/maximum Sayı sınırı
enum İzinli değerler
x-kubernetes-validations CEL kuralı

Uzman bölümündeki tüm dersler