Masitepe 10 kupita ku YAML Zen

Tonse timakonda Ansible, koma Ansible ndi YAML. Pali mitundu yambiri yamafayilo osinthira: mindandanda yamakhalidwe, ma parameter-value pairs, mafayilo a INI, YAML, JSON, XML ndi ena ambiri. Komabe, pazifukwa zingapo mwa zonsezi, YAML nthawi zambiri imakhala yovuta kwambiri. Makamaka, ngakhale imatsitsimula minimalism komanso kuthekera kochititsa chidwi kogwira ntchito ndi mikhalidwe yotsogola, mawu a YAML amatha kukhala okwiyitsa ndi njira yake ya Python ngati indentation.

Masitepe 10 kupita ku YAML Zen

Ngati YAML ikukwiyitsani, mutha - ndipo muyenera! - tengani njira 10 zotsatirazi kuti muchepetse kukhumudwa kwanu kufika pamlingo wovomerezeka ndikuyamba kukondana ndi YAML. Monga kuyenerana ndi mndandandawu, maupangiri athu khumi adzawerengedwa kuyambira pachiyambi, tidzawonjezera kusinkhasinkha ndi machitidwe auzimu momwe tingafune πŸ˜‰

0. Pangani mkonzi wanu kugwira ntchito

Ziribe kanthu kuti muli ndi zolemba zotani, mwina pali pulogalamu yowonjezera imodzi yogwirira ntchito ndi YAML. Ngati mulibe, pezani ndikuyiyika nthawi yomweyo. Nthawi yomwe mumasaka ndikukhazikitsa imalipira kangapo nthawi iliyonse mukasintha YAML.

Mwachitsanzo, mkonzi atomu imathandizira YAML mwachisawawa, koma kwa GNU Emacs muyenera kukhazikitsa zina, mwachitsanzo, yaml-mode.

Masitepe 10 kupita ku YAML Zen

Emacs mu YAML mode ndi malo owonetsera.

Ngati mkonzi yemwe mumakonda alibe mawonekedwe a YAML, ndiye kuti zovuta zina zitha kuthetsedwa pogwira ntchito ndi zosintha. Mwachitsanzo, Gedit yokhazikika ya GNOME ilibe mawonekedwe a YAML, koma mwachisawawa imawunikira mawu a YAML ndikukulolani kuti musinthe ntchito ndi ma indentations:

Masitepe 10 kupita ku YAML Zen

Kukhazikitsa ma indents mu Gedit.

Pulogalamu yowonjezera ma drawspaces ya Gedit, imawonetsa mipata ngati madontho, kuchotsa kusamvetsetsana ndi milingo yolowera.

Mwanjira ina, patulani nthawi yophunzira za mkonzi wanu womwe mumakonda. Dziwani zomwe iye kapena gulu lake lachitukuko angapereke pogwira ntchito ndi YAML, ndikugwiritsa ntchito izi. Inu ndithudi simudzanong'oneza bondo.

1. Gwiritsani ntchito linter

Momwemo, zilankhulo zamapulogalamu ndi zilankhulo zolembera zimagwiritsa ntchito mawu odziwikiratu. Makompyuta ndi abwino kulosera, ndichifukwa chake lingaliro la litera. Ngati pazaka 40 zakukhalapo zidakudutsani ndipo simugwiritsabe ntchito YAML linter, ndiye nthawi yoti muyese yamllint.

Ikani yamllint Mutha kugwiritsa ntchito wowongolera phukusi la Linux. Mwachitsanzo, mu Red Hat Enterprise Linux 8 kapena Fedora zachitika motere:

$ sudo dnf install yamllint

Kenako mumangoyendetsa yamllint, ndikudutsa fayilo ya YAML kuti muwone. Izi ndi zomwe zimawoneka ngati mutapereka fayilo yokhala ndi cholakwika ku linter:

$ yamllint errorprone.yaml
errorprone.yaml
23:10     error    syntax error: mapping values are not allowed here
23:11     error    trailing spaces  (trailing-spaces)

Manambala kumanzere si nthawi, koma makonzedwe a zolakwika: mzere ndi nambala ya mzere. Kufotokozera kwa cholakwikacho sikungakuuzeni chilichonse, koma mukudziwa komwe kuli. Ingoyang'anani malo awa mu code, ndipo mwinamwake zonse zidzamveka bwino.

Yamllint ikapeza palibe cholakwika mufayilo, palibe chomwe chimasindikizidwa pazenera. Ngati kukhala chete koteroko kukuwopsyezani ndipo mukufuna kuyankhanso pang'ono, ndiye kuti mutha kuyendetsa linter ndi lamulo lokhazikika la echo kudzera pawiri ampersand (&&), monga chonchi:

$ yamllint perfect.yaml && echo "OK"
OK

Mu POSIX, ma ampersand amawotcha ngati ndipo pokhapokha ngati lamulo lapitalo libweza 0. Ndipo yamllint imangobweza kuchuluka kwa zolakwika zomwe zapezeka, chifukwa chake kumanga kokhazikikaku kumagwira ntchito.

2. Lembani mu Python, osati YAML

Ngati YAML ikukwiyitsani, musalembe mmenemo, kwenikweni. Zimachitika kuti YAML ndiye mtundu wokhawo womwe pulogalamuyo imamvetsetsa. Koma ngakhale zili choncho, sikofunikira kupanga fayilo ya YAML. Lembani zomwe mumakonda ndikutembenuza. Mwachitsanzo, pali laibulale yayikulu ya Python pyyaml ndi njira ziwiri zosinthira: kudzitembenuza nokha ndi kutembenuka kudzera muzolemba.

Kutembenuka mtima

Pankhaniyi, fayilo ya data ndi Python script yomwe imapanga YAML. Njirayi ndiyoyenera kwambiri pamagulu ang'onoang'ono a data. Mumangolemba deta ya JSON mu mtundu wa Python, yambitsani ndi malangizo otumizira, ndipo kumapeto kwa fayilo onjezerani mizere itatu kuti mugwiritse ntchito zomwe zatuluka.

#!/usr/bin/python3	
import yaml 

d={
"glossary": {
  "title": "example glossary",
  "GlossDiv": {
	"title": "S",
	"GlossList": {
	  "GlossEntry": {
		"ID": "SGML",
		"SortAs": "SGML",
		"GlossTerm": "Standard Generalized Markup Language",
		"Acronym": "SGML",
		"Abbrev": "ISO 8879:1986",
		"GlossDef": {
		  "para": "A meta-markup language, used to create markup languages such as DocBook.",
		  "GlossSeeAlso": ["GML", "XML"]
		  },
		"GlossSee": "markup"
		}
	  }
	}
  }
}

f=open('output.yaml','w')
f.write(yaml.dump(d))
f.close

Tsopano tikuyendetsa fayiloyi ku Python ndikupeza fayilo ya output.yaml:

$ python3 ./example.json
$ cat output.yaml
glossary:
  GlossDiv:
	GlossList:
	  GlossEntry:
		Abbrev: ISO 8879:1986
		Acronym: SGML
		GlossDef:
		  GlossSeeAlso: [GML, XML]
		  para: A meta-markup language, used to create markup languages such as DocBook.
		GlossSee: markup
		GlossTerm: Standard Generalized Markup Language
		ID: SGML
		SortAs: SGML
	title: S
  title: example glossary

Izi ndizovomerezeka za YAML, koma yamllint ikukuchenjezani kuti sizikuyamba ndi -. Chabwino, izi zitha kukonzedwa mosavuta pamanja kapena kusinthidwa pang'ono mu Python script.

Kutembenuka kudzera m'malemba

Pankhaniyi, timalemba koyamba mu JSON, kenako ndikuyendetsa chosinthira ngati cholembera cha Python, chomwe chimatulutsa YAML ngati zotuluka. Poyerekeza ndi njira yapitayi, njira iyi imakula bwino, popeza kutembenuka kumasiyana ndi deta.

Choyamba, tiyeni tipange fayilo ya JSON example.json, mwachitsanzo, mutha kuichotsa json.org:

{
	"glossary": {
	  "title": "example glossary",
	  "GlossDiv": {
		"title": "S",
		"GlossList": {
		  "GlossEntry": {
			"ID": "SGML",
			"SortAs": "SGML",
			"GlossTerm": "Standard Generalized Markup Language",
			"Acronym": "SGML",
			"Abbrev": "ISO 8879:1986",
			"GlossDef": {
			  "para": "A meta-markup language, used to create markup languages such as DocBook.",
			  "GlossSeeAlso": ["GML", "XML"]
			  },
			"GlossSee": "markup"
			}
		  }
		}
	  }
	}

Kenako tipanga chosinthira chosavuta ndikuchisunga pansi pa dzina json2yaml.py. Zolembazi zimalowetsamo ma module a YAML ndi JSON Python, ndikuyika fayilo ya JSON yodziwika ndi ogwiritsa ntchito, imatembenuza, ndikulemba datayo ku fayilo ya output.yaml.

#!/usr/bin/python3
import yaml
import sys
import json

OUT=open('output.yaml','w')
IN=open(sys.argv[1], 'r')

JSON = json.load(IN)
IN.close()
yaml.dump(JSON, OUT)
OUT.close()

Sungani script iyi mumayendedwe adongosolo ndikuyendetsa ngati pakufunika:

$ ~/bin/json2yaml.py example.json

3. Phunzirani zambiri komanso pafupipafupi

Nthawi zina zimakhala zothandiza kuyang'ana vuto kumbali ina. Ngati mukuvutika kuyimira maubale pakati pa data yanu mu YAML, mutha kuyisintha kwakanthawi kuti ikhale yodziwika bwino.

Mwachitsanzo, ngati ndinu omasuka kugwira ntchito ndi ndandanda wa mtanthauzira mawu kapena JSON, mutha kusintha YAML kukhala JSON ndi malamulo awiri okha mu chipolopolo cha Python. Tiyerekeze kuti muli ndi fayilo ya YAML mydata.yaml, ndiye izi ndi momwe zingawonekere:

$ python3
>>> f=open('mydata.yaml','r')
>>> yaml.load(f)
{'document': 34843, 'date': datetime.date(2019, 5, 23), 'bill-to': {'given': 'Seth', 'family': 'Kenlon', 'address': {'street': '51b Mornington Roadn', 'city': 'Brooklyn', 'state': 'Wellington', 'postal': 6021, 'country': 'NZ'}}, 'words': 938, 'comments': 'Good article. Could be better.'}

Mutha kupeza zitsanzo zina zambiri pamutuwu. Kuphatikiza apo, pali otembenuza ambiri pa intaneti ndi ma parser am'deralo omwe alipo. Chifukwa chake musazengereze kukonzanso deta mukangowona kusamvetsetsana kosamvetsetseka mmenemo.

4. Werengani zofotokozera

Kubwerera ku YAML patapita nthawi yopuma, ndizothandiza kukaona yaml.org ndikuwerenganso zofotokozera (zofotokozera). Ngati muli ndi zovuta ndi YAML, koma simunafike pazomwe zafotokozedwa, ndiye nthawi yoti mukonze izi. Mafotokozedwe ake ndi osavuta kulemba modabwitsa, ndipo zofunikira za syntax zimawonetsedwa ndi zitsanzo zambiri mu Gawo 6.

5. Pseudo-configs

Polemba buku kapena nkhani, zimakhala zothandiza nthawi zonse jambulani autilaini yoyambira, makamaka mumndandanda wazomwe zili mkati. Ndizofanana ndi YAML. Mwinamwake, muli ndi lingaliro la zomwe deta iyenera kulembedwa mu fayilo ya YAML, koma simukumvetsa momwe mungalumikizire wina ndi mzake. Chifukwa chake, musanamembe YAML, jambulani pseudo-config.

Pseudo-config ndi yofanana ndi pseudo-code, pomwe simuyenera kuda nkhawa ndi kapangidwe kake kapena indentation, maubale a makolo ndi mwana, cholowa ndi zisa. Zilinso chimodzimodzi apa: mumajambula zobwerezabwereza zomwe zimabwera m'mutu mwanu.

Masitepe 10 kupita ku YAML Zen

Olemba mapulogalamu a Pseudo-config (Martin ndi Tabitha) ndi luso lawo (zilankhulo zamapulogalamu: Python, Perl, Pascal ndi Lisp, Fortran, Erlang, motsatana).

Pambuyo pojambula pseudo-config papepala, yang'anani mosamala ndipo, ngati zonse zili bwino, imbani ngati fayilo yovomerezeka ya YAML.

6. The Tabs vs. Spaces Dilemma

Muyenera kuthetsa vutolo "ma tabu kapena mipata?". Osati padziko lonse lapansi, koma pamlingo wa bungwe lanu, kapena ntchito. Ziribe kanthu ngati kukonzanso pambuyo ndi sed script kumagwiritsidwa ntchito, kukhazikitsa okonza zolemba pamakina opanga mapulogalamu, kapena kutenga ma risiti omvera mosamalitsa malangizo a linter akuwopseza kuchotsedwa ntchito, koma mamembala onse a gulu lanu omwe m'modzi. njira kapena ina yokhudzana ndi YAML iyenera kugwiritsa ntchito mipata yokha (monga kufunikira kwa YAML).

Muzolemba zilizonse zodziwika bwino, mutha kusintha ma tabo owongolera okha ku malo angapo, kotero kupanduka kwa otsatira makiyi. Tab simuyenera kuchita mantha.

Monga aliyense wodana ndi YAML amadziwa bwino, simungathe kuwona kusiyana pakati pa ma tabo ndi malo pazenera. Ndipo pamene chinachake sichikuwoneka, nthawi zambiri chimakhala chinthu chomaliza chomwe anthu amakumbukira, atakonza, kufufuza ndi kuthetsa mavuto ena onse omwe angakhalepo. Ola la nthawi yomwe yatha kufunafuna njira yokhotakhota kapena malo angapo amangokuwa kuti mukufunika kupanga ndondomeko yogwiritsira ntchito imodzi kapena inayo, ndiyeno tsatirani cheke chokhazikika cha konkire kuti mugwirizane nazo (mwachitsanzo, mbedza ya Git kuti muyikakamize kudzera pa linter).

7. Zochepa ndi zambiri (kapena zambiri ndi zochepa)

Anthu ena amakonda kulemba mu YAML chifukwa imatsindika kapangidwe kake. Nthawi yomweyo, amagwiritsa ntchito indentation kuti awonetse midadada ya data. Uwu ndi mtundu wachinyengo kutsanzira zilankhulo zomwe zimagwiritsa ntchito mawu ofotokozera.

Nachi chitsanzo cha kapangidwe kotereku kuchokera Zolemba zovomerezeka:

# Employee records
-  martin:
        name: Martin D'vloper
        job: Developer
        skills:
            - python
            - perl
            - pascal
-  tabitha:
        name: Tabitha Bitumen
        job: Developer
        skills:
            - lisp
            - fortran
            - erlang

Kwa ena, njirayi imawathandiza kukonza mapangidwe a YAML m'mitu yawo; kwa ena, m'malo mwake, zimawakwiyitsa ndi zambiri zosafunikira, m'malingaliro awo, ma indents.

Koma ngati ndinu eni chikalata cha YAML ndipo muli ndi udindo wochisunga, ndiye inu ndi inu nokha iyenera kufotokozera momwe mungagwiritsire ntchito indentation. Ngati mukukwiyitsidwa ndi ma padding akulu, sungani momwe mungathere malinga ndi mawonekedwe a YAML. Mwachitsanzo, fayilo yomwe ili pamwambapa kuchokera ku zolemba za Ansible ikhoza kulembedwanso motere popanda kutaya kulikonse:

---
- martin:
   name: Martin D'vloper
   job: Developer
   skills:
   - python
   - perl
   - pascal
- tabitha:
   name: Tabitha Bitumen
   job: Developer
   skills:
   - lisp
   - fortran
   - erlang

8. Gwiritsani ntchito zomwe simunatchulepo

Ngati mumabwereza zolakwika zomwezi nthawi zonse mukadzaza fayilo ya YAML, ndizomveka kuyika template mmenemo ngati ndemanga. Kenako nthawi ina mutha kungotengera template iyi ndikuyika zenizeni pamenepo, mwachitsanzo:

---
# - <common name>:
#   name: Given Surname
#   job: JOB
#   skills:
#   - LANG
- martin:
  name: Martin D'vloper
  job: Developer
  skills:
  - python
  - perl
  - pascal
- tabitha:
  name: Tabitha Bitumen
  job: Developer
  skills:
  - lisp
  - fortran
  - erlang

9. Gwiritsani ntchito zina

Ngati pulogalamuyo ilibe chotchinga pa inu, ndiye kuti kungakhale koyenera kusintha YAML kukhala mtundu wina. M'kupita kwa nthawi, mafayilo osinthika amatha kudziposa okha ndipo ndi bwino kuwasintha kukhala zolemba zosavuta mu Lua kapena Python.

YAML ndichinthu chabwino chomwe anthu ambiri amakonda chifukwa cha minimalism yake komanso kuphweka kwake, koma ili kutali ndi chida chokhacho chomwe chili mu zida zanu. Choncho nthawi zina mukhoza kukana. Malaibulale ophatikizira ndiosavuta kupeza a YAML, chifukwa chake ngati mupereka njira zosavuta zosamukira, ogwiritsa ntchito anu apulumuka kulepheraku mosavutikira.

Ngati simungathe kuchita popanda YAML, tengani malangizo 10 awa ndikugonjetsa kusakonda kwanu kwa YAML kamodzi!

Source: www.habr.com

Kuwonjezera ndemanga