10 laasaga i le YAML Zen

Matou te fiafia uma i le Ansible, ae o le Ansible o le YAML. E tele faʻatulagaga mo faila faʻatulagaina: lisi o tau, paʻu-taua, faila INI, YAML, JSON, XML ma le tele o isi. Ae ui i lea, mo le tele o mafuaʻaga mai ia mea uma, YAML e masani ona manatu e sili ona faigata. Aemaise lava, e ui lava i lona faʻamalieina o le laʻititi ma le faʻamalosia gafatia mo le galue i tulaga faʻapitoa, o le YAML syntax e mafai ona ita i lona Python-pei o le faʻaogaina.

10 laasaga i le YAML Zen

Afai e ita oe YAML, e te mafaia-ma e tatau! - fai laasaga nei e 10 e faʻaitiitia ai lou le fiafia i se tulaga talia ma faʻafeiloaʻi i le YAML. E tusa ai ma lenei lisi, o a matou fautuaga e sefulu o le a faanumera mai le amataga, matou te faʻaopoopoina le mafaufau loloto ma faʻataʻitaʻiga faaleagaga i le loto 😉

0. Ia galue lau faatonu

E le afaina po o le a le tusitala o tusitusiga o loʻo ia te oe, atonu o loʻo i ai se tasi faʻapipiʻi mo le galue ma YAML. Afai e leai sau tasi, su'e ma fa'apipi'i vave. O le taimi e fa'aalu e su'e ai ma fa'atūina o le a totogi fa'atele i taimi uma e te fa'asa'o ai le YAML.

Mo se faataitaiga, faatonu atomu lagolagoina le YAML i le faaletonu, ae mo GNU Emacs e tatau ona e faʻapipiʻi isi afifi, mo se faʻataʻitaʻiga, yaml-faiga.

10 laasaga i le YAML Zen

Emacs ile YAML mode ma faʻaalia avanoa.

Afai o lau faʻatonu e sili ona e fiafia i ai e leai se YAML mode, ona mafai lea ona foia nisi o faʻafitauli e ala i le galue i tulaga. Mo se faʻataʻitaʻiga, o le Gedit text editor masani e leai se YAML mode, ae e le mafai ona faʻamaonia le YAML syntax ma faʻatagaina oe e faʻapipiʻi galuega ma faʻailoga:

10 laasaga i le YAML Zen

Fa'atulaga indents i Gedit.

Se mea fa'apipi'i avanoa tusi mo Gedit, fa'aalia avanoa e pei o togitogi, fa'ate'aina fa'alilolilo fa'atasi ai ma tulaga fa'amau.

I se isi faaupuga, faʻaalu se taimi e aʻoaʻo ai e uiga i lau faʻatonu e sili ona e fiafia i ai. Su'e mea o lo'o ofoina mai e ia po'o lana atina'e fa'alapotopotoga mo le galulue fa'atasi ma le YAML, ma fa'aoga na vaega. E mautinoa lava e te le salamō.

1. Fa'aaoga se linter

O le mea e lelei ai, o gagana fa'apolokalame ma gagana fa'ailoga e fa'aogaina ai le syntax fa'apitoa. Komipiuta e lelei i predictability, o le mafuaaga o le manatu o litera. Afai i le 40 tausaga o lona i ai ua pasia oe ma e te le faʻaaogaina se YAML linter, ona oʻo lea i le taimi e taumafai ai yamllint.

Faʻamau yamllint E mafai ona e faʻaogaina le pule faʻapipiʻi masani Linux. Mo se faataitaiga, i Red Hat Enterprise Linux 8 poʻo Fedora ua faia e pei o lenei:

$ sudo dnf install yamllint

Ona e tamo'e lea o le yamllint, pasi le faila YAML e siaki. O le mea lea e foliga mai pe a e pasi se faila ma se mea sese i le linter:

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

O numera i le agavale e le o le taimi, ae o faʻamaopoopoina o le mea sese: laina ma koluma numera. O le faʻamatalaga o le mea sese atonu e le taʻuina atu ia te oe se mea, ae e te iloa tonu le mea o iai. Naʻo le vaʻavaʻai i lenei nofoaga i le code, ma e foliga mai o le a manino mea uma.

A le maua e yamllint ni mea sese i se faila, e leai se mea e lolomi i le lau. Afai e te fefe ia te oe ma e te manaʻo i se faʻamatalaga atili, ona mafai lea ona e faʻataʻitaʻiina le linter ma le faʻatonuga echo e ala i le faalua ampersand (&&), pei o lenei:

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

I le POSIX, e mu le fa'alua ampersand pe a na'o le fa'atonuga muamua e toe fo'i mai le 0. Ma na'o le toe fa'afo'i mai e yamllint le numera o mea sese na maua, o le mea lea e aoga ai lenei fa'atonuga atoa.

2. Tusi i le Python, ae le o le YAML

Afai o le YAML e matua ita ia te oe, ae aua le tusia i totonu, moni. E tupu o le YAML na o le pau lea o le faatulagaga e malamalama ai le talosaga. Ae e oʻo lava i lenei tulaga, e le manaʻomia le fatuina o se faila YAML. Tusi i luga o mea e te fiafia i ai ona liliu lea. Mo se faʻataʻitaʻiga, o loʻo i ai se faletusi sili mo Python pyyaml ma auala e lua o le liuaina: liua o le tagata lava ia ma le liua e ala i tusitusiga.

Liua e le tagata lava ia

I lenei tulaga, o le faila o faʻamatalaga o se Python script lea e gaosia ai le YAML. O lenei metotia e sili ona fetaui mo seti faʻamaumauga laiti. Naʻo lou tusiaina o faʻamaumauga a le JSON i se fesuiaiga Python, faʻamuamua i se faʻatonuga faʻaulufale mai, ma i le pito o le faila faʻaopoopo laina e tolu e faʻatino ai le gaioiga.

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

O lea matou te faʻatautaia lenei faila i le Python ma maua le faila 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

Ole YAML lelei atoatoa lea, ae o le a lapataia oe e le yamllint e le amataina i le -. Ia, e mafai ona faigofie ona faʻasaʻo ma le lima pe fai sina suiga i le Python script.

Faaliliuina e ala i tusitusiga

I lenei tulaga, matou te tusia muamua i le JSON, ona taʻavale lea o le tagata liliu mai o se tusitusiga Python ese, lea e maua ai le YAML e fai ma gaioiga. Pe a faʻatusatusa i le auala muamua, o lenei metotia e sili atu le fua, talu ai o le liua e ese mai faʻamaumauga.

Muamua, sei o tatou fatuina se faila JSON example.json, mo se faʻataʻitaʻiga, e mafai ona e ave mai 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"
			}
		  }
		}
	  }
	}

Ona matou faia lea o se tusitusiga faigofie liliu ma teu i lalo o le igoa json2yaml.py. O lenei tusitusiga e faʻaulufaleina uma YAML ma JSON Python modules, ma utaina se faila JSON faʻapitoa, faʻatino le liua, ma tusi faʻamaumauga i le faila 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()

Faasaoina le tusitusiga lenei i le auala faʻaoga ma faʻatautaia pe a manaʻomia:

$ ~/bin/json2yaml.py example.json

3. Fa'atele ma fa'atele

O nisi taimi e aoga le va'ai i se fa'afitauli mai se isi itu. Afai o loʻo e feagai ma faʻafitauli e fai ma sui o sootaga i le va o au faʻamatalaga i le YAML, e mafai ona e suia mo sina taimi i se mea e masani ai.

Mo se faʻataʻitaʻiga, afai e te fiafia e galue i lisi lolomifefiloi poʻo JSON, e mafai ona e faʻaliliu le YAML i le JSON ma naʻo le lua faʻatonuga i totonu ole atigi Python fesoʻotaʻi. Fa'apea o lo'o iai sau faila YAML mydata.yaml, ona fa'apea lea e fa'apea:

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

E mafai ona e mauaina le tele o isi faʻataʻitaʻiga i lenei autu. E le gata i lea, o loʻo i ai le tele o faʻaliliuga i luga ole laiga ma faʻasalalauga faʻapitonuʻu avanoa. O lea aua le faatuai e toe faʻaleleia faʻamaumauga pe a e vaʻaia naʻo se faʻalavelave le malamalama i totonu.

4. Faitau fa'amatalaga

Toe foʻi i le YAML pe a maeʻa se malologa umi, e aoga le asiasi yaml.org ma toe faitau fa'amatalaga (fa'amatalaga). Afai e iai ni faʻafitauli i le YAML, ae e te leʻi oʻo i le faʻamatalaga, ona oʻo lea i le taimi e faʻasaʻo ai lenei tulaga. O faʻamatalaga faʻapitoa e matua faigofie lava ona tusia, ma o manaʻoga syntax o loʻo faʻaalia i le tele o faʻataʻitaʻiga i totonu. Tala 6.

5. Pseudo-configs

Pe a tusia se tusi poʻo se tusiga, e masani lava ona aoga le tusi muamua o se otootoga muamua, a itiiti ifo i le tulaga o se laulau o mea. E tutusa lava ma le YAML. E foliga mai o loʻo ia te oe se manatu i mea e manaʻomia ona tusia i se faila YAML, ae e te le malamalama lelei pe faʻafefea ona faʻafesoʻotaʻi le tasi i le isi. O le mea lea, aʻo leʻi vaʻaia le YAML, tusi se pseudo-config.

Pseudo-config e tutusa ma le pseudo-code, lea e te le tau popole ai i le fausaga poʻo le faʻailoga, mafutaga matua-tamaiti, tofi ma faʻanofo. E tutusa lava iinei: e te tusia faʻamatalaga o faʻamaumauga pe a tulaʻi mai i lou ulu.

10 laasaga i le YAML Zen

Pseudo-config lisi polokalame (Martin ma Tabitha) ma o latou tomai (gagana polokalame: Python, Perl, Pascal ma Lisp, Fortran, Erlang, faasologa).

A maeʻa ona tusia se pseudo-config i luga o se fasipepa, suʻesuʻe ma le faʻaeteete ma, afai o loʻo lelei mea uma, faʻapipiʻi i le tulaga o se faila YAML aoga.

6. O le Tabs vs. Spaces Dilemma

E tatau ona e foia le faafitauli “tusi po o avanoa?”. E le o se tulaga faʻavaomalo, ae naʻo le tulaga o lau faʻalapotopotoga, poʻo se poloketi. E le afaina pe e aofia ai le faʻaogaina o le post-processing ma se sed script, faʻatūina tusitala tusitusiga i masini fai polokalame, poʻo le ave lautele o lisiti o le tausisia atoatoa o faatonuga a le linter i lalo o le taufaamatau o le faʻateʻaina, ae o tagata uma o lau 'au o loʻo i totonu. tasi le auala poʻo le isi e fesoʻotaʻi ma le YAML e tatau ona faʻaoga naʻo avanoa (pei ona manaʻomia e le YAML faʻamatalaga).

I soʻo se faʻatonu tusitusiga masani, e mafai ona e faʻapipiʻi faʻamau saʻo saʻo i se numera faʻamaonia o avanoa, o le mea lea o le fouvale o tagata autu. Taofi e le tatau ona e fefe.

E pei ona iloa lelei e tagata ita uma YAML, e le mafai ona e vaʻai i le eseesega i le va o laupepa ma avanoa i luga ole lau. Ma afai e le o vaaia se mea, e masani lava o le mea mulimuli e manatua e tagata, pe a uma ona latou faʻavasega, siaki ma faʻaumatia isi faʻafitauli uma. O le itula o le taimi e faʻaalu e suʻe ai se faʻailoga faʻapipiʻi poʻo se poloka o avanoa e naʻo le alaga e te manaʻomia faʻanatinati e fai se faiga faʻavae mo le faʻaogaina o le tasi poʻo le isi, ona faʻatino lea o se siaki sima faʻamalosia mo le tausisia (mo se faʻataʻitaʻiga, e ala i se matau Git e faʻamalosi ai i totonu o se laina).

7. Le itiiti e sili atu (pe sili atu le itiiti)

O nisi tagata e fiafia e tusi i le YAML aua e faʻamamafa ai le fausaga. I le taimi lava e tasi, latou te faʻaogaina le faʻaogaina e faʻamaonia ai poloka o faʻamaumauga. Ole ituaiga lea ole faiga ole fa'ata'ita'i gagana fa'ailoga e fa'aogaina ai fa'ama'oti fa'apitoa.

O se fa'ata'ita'iga lea o lea fausaga mai Fa'amaumauga talafeagai:

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

Mo nisi, o lenei filifiliga e fesoasoani ia i latou e faʻavasega le fausaga o le YAML io latou ulu; mo isi, i se isi itu, e faʻafefe ai i latou i le tele o mea e le manaʻomia, i o latou manatu, indents.

Ae afai o oe e ona le pepa YAML ma e nafa ma le tausiaina, ona o oe ma na o oe e tatau ona fa'amalamalama pe fa'afefea ona fa'aogaina le fa'ailoga. Afai e te ita i le tele o padding, taofi i le mea aupito maualalo e mafai e tusa ai ma le YAML faʻamatalaga. Mo se faʻataʻitaʻiga, o le faila o loʻo i luga mai le Ansible pepa e mafai ona toe tusia e pei o lenei e aunoa ma se leiloa:

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

8. Fa'aaoga avanoa

Afai e te toe faia i taimi uma ia lava mea sese pe a faʻatumu se faila YAML, e talafeagai le faʻaofiina o se faʻataʻitaʻiga i totonu o se faʻamatalaga. Ona sosoo ai lea ma le isi taimi e mafai ona e kopiina lenei mamanu ma faʻapipiʻi faʻamatalaga moni iina, mo se faʻataʻitaʻiga:

---
# - <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. Fa'aaoga se mea e ese

Afai o le talosaga e leai se taofiga ia te oe, atonu e aoga le suia o le YAML i se isi faatulagaga. I le aluga o taimi, e mafai ona sili atu faila fetuutuunai i latou lava ona sili atu lea ona lelei le faʻaliliuina i ni tusitusiga faigofie i le Lua poʻo le Python.

O le YAML o se mea sili e fiafia i ai le toʻatele o tagata ona o lona laʻititi ma le faigofie, ae e mamao ese mai le mea faigaluega e tasi i lau auupega. O nisi taimi e mafai ona e teena. E faigofie ona su'e faletusi parsing mo le YAML, o lea afai e te ofoina atu ni filifiliga faigofie mo femalagaiga, o le a sao mai au tagata fa'aoga i lenei toilalo e aunoa ma se tiga.

Afai e le mafai ona e faia e aunoa ma le YAML, ona ave lea o fautuaga nei e 10 ma faʻatoʻilaloina lou le fiafia i le YAML faʻatasi ma mo mea uma!

puna: www.habr.com

Faaopoopo i ai se faamatalaga