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.
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
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:
Fa'atulaga indents i Gedit.
Se mea fa'apipi'i
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
Faʻamau
$ 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
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
{
"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
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.
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
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
# 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