YAML

Uvod

Kao DevOps praktikanti cesto koristimo razlicite konfiguracijske fajlove da bi alatima koje koristimo proslijedili odredjene informacije i konfiguracijska podesenja. Konfiguracijski fajlovi se najcesce pisu koristeci DSL (Data Serialization Languages). U racunarstvu (eng. computing), seralizacija oznacava proces prevodjenja strukture podataka ili stanja objekata u format koji moze da pohranjuje ili prenosi i kasnije rekonstruise na nacin da je razumljiv u razlicitim racunarskim okruzenjima. Neki od najpoznatijih DSL jezika su YAML, JSON i XML. Pored potrebe da se podaci predstave na nacin koji je lako citljiv i koji moze biti ponovo rekonstruisan bilo je potrebno omoguciti razlicitim programskim jezicima i racunarskim sistemima da razmjenjuju podatke na interoperabilan nacin (interoperabilnost predstavlja sposobnost dvije ili vise komponenti ili sistema da razmjenjuju informacije i koriste informacije koje su razmijenjene).

YAML

YAML (YAML Ain’t Markup Language) pripada grupi DSL jezika koji je kreiran da bi ljudima bio jednostavan za citanje i pisanje. Pored svoje jednostavnosti za citanje i pisanje, YAML radi odlicno sa modernim programskim jezicima. YAML za struktuisanje podataka koristi indentaciju (eng. indentation), nizove, mape (parove kljuc: vrijednost / key: value pairs). Prije nego se detaljnije upoznamo sa YAML jezikom neophodno je da razumijemo sta svaki od ovih ranije pobrojanih pojmova za strukturiranja podataka predstavlja:

  • indentacija (eng. indentation) - odnosi se na nacin uredjivanja ili pomjeranja linija koda u odnosu na lijevu marginu radi vizuelne organizacije i strukturiranja blokova koda. Obicno se koristi tabulator (tab) ili niz razmaka (space) da bi se linije koda pomjerile udesno. YAML koristi indentaciju (obicno sa razmacima) za oznacavanje hijerarhijske strukture podataka. Indentacija je vazna za odredjivanje koje elemente podatka cini dio drugih elementa (blokova).

  • mape - se u YAML formatu definisu kao parovi kljuc: vrijednost (key: value). Ova struktura podataka se u nekim jezicima naziva i kao hash ili dictionary:

sarajevo: 500000
zagreb: 800000
beograd: 1700000
podgorica: 200000

Primjer mape sa setom osobina grupisanih zajedno bi bio:

sarajevo:
  drzava: "Bosna i Hercegovina"
  stanovnika: 500000
zagreb:
  drzava: "Hrvatska"
  stanovnika: 800000
beograd: 
  drzava: "Srbija"
  stanovnika: 1700000
podgorica: 
  drzava: "Crna Gora"
  stanovnika: 200000
  • sekvence (nizovi / liste) - (eng. Sequences arrays/lists) odnosno nizovi ili liste elemenata se u YAML-u predstavljaju kao lista elementa gdje svaki elemenat pocinje sa crticom i razmakom:

- sarajevo
- zagreb
- beograd
- podgorica
  • skalari (brojevi / stringovi) - predstavljaju osnovne elemente podataka kao sto su brojevi, stringovi, boolean (true/false) i null vrijednosti. U YAML-u, skalarne vrijednosti pisemo direktno. Brojevi se pisu kao brojevi, dok se stringovi pisu izmedju navodnih znakova:

broj: 123
string: "ovo je string"

Bitno je napomenuti da YAML podrzava ugnijezdjenja mapa i sekvenci sto znaci da se mape mogu koristiti kao vrijednosti unutar sekvenci i obrnuto, omogucavajuci slozenije strukture podataka. Ispod je jedan primjer slozene strukture podataka u YAML-u.

BiH:
  - grad: Sarajevo
  - stanovnika: 500000
Hrvatska:
  - grad: Zagreb
  - stanovnika: 800000
Srbija:
  - grad: Beograd
  - stanovnika: 1700000
CrnaGora:
  - grad: Podgorica
  - stanovnika: 200000

NOTE: Mape (Dictionary/Hash) su jednake bez obzira na poredak njihovih elemenata (eng. properties). U primjerima ispod mapa 1 je jednaka mapi 2.

#PRIMJER MAPE 1
sarajevo:
  drzava: "Bosna i Hercegovina"
  stanovnika: 500000
  
#PRIMJER MAPE 2
sarajevo:
  stanovnika: 500000
  drzava: "Bosna i Hercegovina"

To nije slucaj sa listama, liste su poredane (eng. ordered) kolekcije podataka sto znaci da je poredak elemenata unutar liste bitan. Na primjeru ispod dvije liste nisu jednake iz razloga sto se poredak elemenata u listama razlikuje.

# Lista 1
BiH:
  - sarajevo
  - mostar
  - tuzla
  - banjaluka
  - neum
  
# Lista 2
BiH:
  - banjaluka
  - neum
  - mostar
  - tuzla
  - sarajevo

Takodjer bitno je napomenuti da je YAML superset JSON-a sto znaci da svaki validan JSON dokument takodjer predstavlja i validan YAML dokument.

Dodatna Literatura

Ukoliko zelite prosiriti svoje znanje o YAML-u preporuka je da pogledate sljedecu dodatnu literaturu:

Last updated