Dingana 10 mankany YAML Zen

Tia an'i Ansible daholo isika, fa ny Ansible dia YAML. Misy endrika maro ho an'ny fisie fichier: lisitry ny soatoavina, mpivady sanda parameter, rakitra INI, YAML, JSON, XML sy ny maro hafa. Na izany aza, noho ny antony maromaro amin'izy rehetra, ny YAML dia heverina ho sarotra indrindra. Indrindra indrindra, na dia eo aza ny minimalisma mamelombelona sy ny fahaizany manaitra amin'ny fiasana amin'ny soatoavina ambaratongam-pahefana, ny syntax YAML dia mety hanelingelina amin'ny fomba fiasa mitovy amin'ny Python amin'ny indentation.

Dingana 10 mankany YAML Zen

Raha mahasosotra anao ny YAML dia azonao atao—ary tokony hataonao izany! - Raiso ireto dingana 10 manaraka ireto mba hampihenana ny fahasorenanao ho amin'ny ambaratonga azo ekena ary ho raiki-pitia amin'ny YAML. Araka ny mahamety an'ity lisitra ity, ny toro-hevitra folo ataontsika dia ho voaisa hatrany am-boalohany, hampiana fisaintsainana sy fanao ara-panahy araka izay tiantsika 😉

0. Ataovy miasa ny mpamoaka lahatsoratrao

Na inona na inona tonian-dahatsoratra anananao, mety misy plugin iray farafahakeliny hiasa amin'ny YAML. Raha tsy manana ianao dia tadiavo ary apetraho avy hatrany. Ny fotoana lany amin'ny fikarohana sy ny fametrahana dia handoa imbetsaka isaky ny mila manova YAML ianao.

Ohatra, editor Atom manohana ny YAML amin'ny alàlan'ny default, fa ho an'ny GNU Emacs dia tsy maintsy mametraka fonosana fanampiny ianao, ohatra, yaml-mode.

Dingana 10 mankany YAML Zen

Emacs amin'ny fomba YAML ary mampiseho toerana.

Raha tsy manana fomba YAML ny mpanonta tianao indrindra, dia azo vahana ny olana sasany amin'ny fiasana amin'ny toe-javatra. Ohatra, ny tonian-dahatsoratra GNOME mahazatra Gedit dia tsy manana fomba YAML, fa amin'ny alàlan'ny default dia manasongadina syntax YAML izy ary ahafahanao manamboatra asa miaraka amin'ny indentations:

Dingana 10 mankany YAML Zen

Fametrahana indents ao amin'ny Gedit.

Plugin iray drawspaces ho an'ny Gedit, dia mampiseho ny habaka ho teboka, manala ny tsy mazava amin'ny haavon'ny indentation.

Иными словами, потратьте время на изучение своего любимого редактора. Выясните, что он сам или его сообщество разработки предлагают для работы с YAML, и используйте эти возможности. Вы точно об этом не пожалеете.

1. Mampiasà linter

Ny tsara indrindra, ny fiteny fandaharana sy ny fiteny marika dia mampiasa syntax azo vinavinaina. Solosaina dia tsara amin'ny predictability, izay no mahatonga ny foto-kevitra ny lintera. Raha nandalo anao tao anatin'ny 40 taona nisiany izy ary mbola tsy mampiasa linter YAML ianao, dia izao no fotoana hanandramana yamllint.

mametraka yamllint можно с помощью штатного менеджера пакетов Linux. Например, в Red Hat Enterprise Linux 8 na Fedora dia natao toy izao:

$ sudo dnf install yamllint

Avy eo dia mihazakazaka yamllint fotsiny ianao, mandalo ny rakitra YAML hojerena. Toy izao ny endriny raha mandefa rakitra misy hadisoana amin'ny linter ianao:

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

Ny isa eo amin'ny ankavia dia tsy ny fotoana, fa ny fandrindrana ny lesoka: laharana sy tsanganana. Ny famaritana ny fahadisoana dia mety tsy hilaza na inona na inona aminao, fa fantatrao tsara ny toerana misy azy. Jereo fotsiny ity toerana ity ao amin'ny kaody, ary azo inoana fa hazava ny zava-drehetra.

Когда yamllint не находит ошибок в файле, на экран ничего не выводится. Если вас пугает такая тишина и хочется немного больше обратной связи, то можно запускать линтер с условной командой echo через двойной амперсанд (&&), вот так:

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

Ao amin'ny POSIX, ampersand indroa mirehitra raha toa ka miverina 0 ny baiko teo aloha. Ary i yamllint dia mamerina fotsiny ny isan'ny lesoka hita, ka izany no mahatonga an'ity fananganana fepetra ity.

2. Soraty amin'ny Python fa tsy YAML

Raha tena mahasosotra anao ny YAML dia aza soratana ao, ara-bakiteny. Izany no mitranga fa ny YAML no hany endrika azon'ny fampiharana. Saingy na amin'ity tranga ity aza dia tsy ilaina ny mamorona rakitra YAML. Soraty amin'ny zavatra tianao ary avy eo miova. Ohatra, misy tranomboky lehibe ho an'ny Python pyyaml ary fomba roa fiovam-po: fiovam-po sy fiovam-po amin'ny alalan'ny script.

Fiovam-tena

В этом случае файл с данными заодно является и Python-скриптом, который генерирует YAML. Этот способ лучше всего подходит для небольших наборов данных. Вы просто пишите JSON-данные в переменную Python, предваряете это директивой import, а в конце файла добавляете три строчки для реализации вывода.

#!/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

Ankehitriny dia mihazakazaka ity rakitra ity amin'ny Python izahay ary mahazo ny rakitra 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

Ity dia YAML tena manan-kery, fa ny yamllint dia hampitandrina anao fa tsy manomboka amin'ny -. Eny, azo ahitsy mora foana izany na ovaina kely amin'ny script Python.

Fiovam-po amin'ny alàlan'ny script

Amin'ity tranga ity, manoratra amin'ny JSON aloha isika, ary avy eo dia mihazakazaka ny converter ho script Python misaraka, izay mamokatra YAML ho vokatra. Raha ampitahaina amin'ny fomba teo aloha, ity fomba ity dia mizana tsara kokoa, satria misaraka amin'ny data ny fiovam-po.

Voalohany, andao hamorona rakitra JSON example.json, ohatra, azonao alaina amin'ny 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"
			}
		  }
		}
	  }
	}

Avy eo dia hamorona script converter tsotra isika ary tehirizo eo ambanin'ny anarana json2yaml.py. Ity script ity dia manafatra mody YAML sy JSON Python, ary mitondra rakitra JSON voatondron'ny mpampiasa, manao ny fiovam-po ary manoratra ny angona amin'ny rakitra 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()

Tehirizo ity script ity ao amin'ny lalan'ny rafitra ary tanteraho izany raha ilaina:

$ ~/bin/json2yaml.py example.json

3. Mamakafaka be sy matetika

Иногда на проблему полезно взглянуть под другим углом. Если вам трудно представить взаимосвязи между данными в YAML, можно временно преобразовать их в нечто более привычное.

Например, если вам удобно работать со словарными списками или с JSON, то YAML можно преобразовать в JSON всего двумя командами в интерактивной оболочке Python. Допустим, у вас есть YAML-файл mydata.yaml, тогда вот как это будет выглядеть:

$ 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.'}

Afaka mahita ohatra maro hafa momba ity lohahevitra ity ianao. Fanampin'izay, misy mpanova an-tserasera maro sy parser eo an-toerana misy. Koa aza misalasala manavao ny angon-drakitra rehefa mahita korontana tsy takatry ny saina ao anatiny ianao.

4. Vakio ny specs

Miverina amin'ny YAML aorian'ny fiatoana lava, ilaina ny mitsidika yaml.org ary avereno vakiana ireo fepetra (specs). Raha manana fahasahiranana amin'ny YAML ianao, nefa tsy tonga amin'ny famaritana, dia izao no fotoana hanitsiana an'io toe-javatra io. Mahagaga fa mora ny manoratra ny specs, ary ny fepetra takian'ny syntax dia aseho miaraka amin'ny ohatra marobe amin'ny Fizarana 6.

5. Pseudo-configs

Rehefa manoratra boky na lahatsoratra, dia ilaina foana ny manao sketch voalohany drafitra mialoha, fara fahakeliny, amin'ny endriky ny lisitry ny atiny. Toy izany koa ny amin'ny YAML. Azo inoana fa manana hevitra momba ny angon-drakitra tokony hosoratana amin'ny rakitra YAML ianao, saingy tsy azonao ny fomba hampifandraisana azy amin'ny tsirairay. Noho izany, alohan'ny hanaovana sokitra YAML dia manaova pseudo-config.

Ny pseudo-config dia mitovy amin'ny pseudo-code, izay tsy mila manahy momba ny rafitra na indentation, ny fifandraisan'ny ray aman-dreny, ny lova ary ny akany. Mitovy amin'izany ihany koa: manao famerimberenana ny angon-drakitra ianao rehefa mipoitra ao an-dohanao.

Dingana 10 mankany YAML Zen

Pseudo-config lisitry ny programmer (Martin sy Tabitha) sy ny fahaizany (fiteny fandaharana: Python, Perl, Pascal ary Lisp, Fortran, Erlang, tsirairay avy).

Нарисовав псевдоконфиг на листе бумаги, внимательно проанализируйте его и, если все в порядке, оформите в виде валидного YAML-файла.

6. The Tabs vs. Spaces Dilemma

Tsy maintsy mamaha ny olana ianao "tabs sa habaka?". Tsy amin'ny heviny manerantany, fa amin'ny ambaratongan'ny fikambananao, na farafaharatsiny tetikasa. Tsy maninona na tafiditra ao anatin'izany ny fampiasana ny fanodinana aorian'ny script sed, ny fametrahana tonian-dahatsoratra amin'ny masinin'ny mpandrindra, na ny fandraisana eran'izao tontolo izao amin'ny fanarahana hentitra ny torolalan'ny linter eo ambanin'ny fandrahonana ho voaroaka, fa ny mpikambana rehetra ao amin'ny ekipanao izay Ny fomba iray na hafa mifandraika amin'ny YAML dia tsy maintsy mampiasa habaka fotsiny (araka ny takian'ny YAML famaritana).

Amin'ny tonian-dahatsoratra mahazatra rehetra, azonao atao ny manamboatra tabilao manitsy mandeha ho azy amin'ny habaka voafaritra, noho izany ny fikomian'ny mpanaraka fototra. Tab tsy mila matahotra ianao.

Araka ny fantatry ny mankahala YAML rehetra dia tsy hitanao ny fahasamihafana misy eo amin'ny tabilao sy habaka eo amin'ny efijery. Ary rehefa misy zavatra tsy hita, dia matetika no tadidin'ny olona, ​​rehefa avy nandamina, nanamarina ary nanafoana ny olana hafa rehetra mety hitranga. Ny ora iray lany amin'ny fitadiavana curve tabula na habaka iray dia mikiakiaka fotsiny fa mila mamorona politika ianao amin'ny fampiasana ny iray na ny iray hafa, ary avy eo dia manatanteraka fanamarinana simenitra nohamafisina amin'ny fanarahana azy (ohatra, amin'ny alàlan'ny Git hook hanery azy amin'ny linter).

7. Kely dia be (na mihoatra dia kely)

Ny olona sasany dia tia manoratra amin'ny YAML satria manantitrantitra ny rafitra. Mandritra izany fotoana izany, mampiasa indentation izy ireo mba hanasongadinana ireo sakana misy angona. Ity dia karazana fisolokiana maka tahaka ireo fiteny marika izay mampiasa fetra mazava.

Ity misy ohatra momba ny rafitra toy izany avy amin'ny Documentation azo atao:

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

Ho an'ny sasany, ity safidy ity dia manampy azy ireo handamina ny rafitra YAML ao an-dohany; ho an'ny hafa, ny mifanohitra amin'izany, dia mahasosotra azy ireo amin'ny tsy ilaina, araka ny hevitr'izy ireo, indents.

Fa raha tompon'ny antontan-taratasy YAML ianao ary tompon'andraikitra amin'ny fitazonana azy, dia ianao ary ianao ihany tsy maintsy mamaritra ny fomba fampiasana indentation. Raha sosotra amin'ny padding lehibe ianao dia tehirizo amin'ny faran'izay kely indrindra araka ny famaritana YAML. Ohatra, ny rakitra etsy ambony avy amin'ny antontan-taratasy Ansible dia azo soratana toy izao tsy misy fatiantoka:

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

8. Mampiasà banga

Raha averinao foana ny fahadisoana mitovy amin'ny famenoana rakitra YAML, dia misy dikany ny mampiditra môdely ao aminy ho fanehoan-kevitra. Avy eo amin'ny manaraka dia azonao atao ny mandika ity môdely ity ary mampiditra angona tena izy ao, ohatra:

---
# - <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. Mampiasà zavatra hafa

Raha tsy manana stranglehold anao ny fampiharana, dia mety ho mendrika ny hanova ny YAML amin'ny endrika hafa. Rehefa mandeha ny fotoana, dia mety hihoatra lavitra noho izany ny rakitra fikirakirana ary tsara kokoa ny mamadika azy ireo ho script tsotra amin'ny Lua na Python.

YAML dia zavatra lehibe tian'ny olona maro noho ny minimalisma sy ny fahatsorany, saingy lavitra ny hany fitaovana ao amin'ny arsenalinao. Noho izany indraindray dia afaka mandà izany ianao. Mora hita ho an'ny YAML ny tranomboky famakiam-boky, ka raha manolotra safidy mora fifindra-monina ianao, dia ho tafavoaka velona amin'ity tsy fahombiazana ity ny mpampiasa anao.

Raha tsy afaka manao tsy misy YAML ianao, dia raiso ireto torohevitra 10 ireto ary reseo indray mandeha sy ho an'ny rehetra ny tsy fitiavanao ny YAML!

Source: www.habr.com

Add a comment