Rydyn ni i gyd yn caru Ansible, ond Ansible yw YAML. Mae yna lawer o fformatau ar gyfer ffeiliau ffurfweddu: rhestrau o werthoedd, paramedr-gwerth paramedr, ffeiliau INI, YAML, JSON, XML, a llawer o rai eraill. Fodd bynnag, am sawl rheswm, o bob un ohonynt, mae YAML yn aml yn cael ei ystyried yn arbennig o anodd. Yn benodol, er gwaethaf ei finimaliaeth adfywiol a'i phosibiliadau trawiadol ar gyfer gweithio gyda gwerthoedd hierarchaidd, gall cystrawen YAML fod yn annifyr gyda'i ddull Python-debyg o fewnoli.
Os yw YAML yn eich pwyllo, fe allwch chi - a dylech chi! - cymerwch y 10 cam nesaf i leihau eich llid i lefel dderbyniol a charu YAML. Fel sy'n gweddu i'r rhestr hon, bydd ein deg awgrym yn cael eu rhifo o'r dechrau, rydym yn ychwanegu myfyrdod ac arferion ysbrydol fel y dymunir 😉
0. Gwnewch i'ch golygydd weithio
Nid oes ots pa olygydd testun sydd gennych, mae'n debyg bod o leiaf un ategyn YAML ar ei gyfer. Os nad oes gennych un, darganfyddwch a gosodwch ar unwaith. Bydd yr amser a dreuliwch yn chwilio ac yn tweaking yn talu ar ei ganfed lawer gwaith bob tro y bydd angen i chi olygu YAML.
Er enghraifft, golygydd
Emacs yn y modd YAML ac yn dangos bylchau.
Os nad oes gan eich hoff olygydd fodd YAML, yna gellir datrys rhai o'r problemau trwy weithio gyda'r gosodiadau. Er enghraifft, nid oes gan y golygydd testun rhagosodedig ar gyfer GNOME, Gedit, fodd YAML, ond yn ddiofyn mae'n amlygu cystrawen YAML ac yn caniatáu i chi addasu mewnoliad:
Gosod mewnoliadau yn Gedit.
Mae ategyn
Mewn geiriau eraill, cymerwch yr amser i ddysgu'ch hoff olygydd. Darganfyddwch beth sydd ganddo ef neu ei gymuned ddatblygu i'w gynnig ar gyfer gweithio gyda YAML, a manteisiwch ar y cyfleoedd hynny. Yn bendant ni fyddwch yn difaru.
1. Defnyddiwch leinin
Yn ddelfrydol, mae ieithoedd rhaglennu ac ieithoedd marcio yn defnyddio cystrawen rhagweladwy. Mae cyfrifiaduron yn dda am ragweladwyedd, a dyna pam yn ôl yn 1978 y cododd y cysyniad
I osod
$ sudo dnf install yamllint
Yna rydych chi'n rhedeg yamllint, gan basio ffeil YAML iddo i'w brofi. Dyma sut mae'n edrych os byddwch chi'n pasio ffeil gyda gwall i'r lint:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
Nid yr amser yw'r rhifau ar y chwith, ond cyfesurynnau'r gwall: rhif y rhes a'r golofn. Efallai na fydd y disgrifiad o'r gwall yn dweud dim wrthych, ond rydych chi'n gwybod yn union ble mae. Edrychwch ar y lle hwn yn y cod, ac mae'n debyg y bydd popeth yn dod yn glir.
Pan na fydd yamllint yn canfod unrhyw wallau mewn ffeil, nid oes dim yn cael ei argraffu i'r sgrin. Os yw distawrwydd o'r fath yn eich dychryn a'ch bod chi eisiau ychydig mwy o adborth, yna gallwch chi redeg y lint gyda'r gorchymyn amodol adlais trwy ampersand dwbl (&&), fel hyn:
$ yamllint perfect.yaml && echo "OK"
OK
Yn POSIX, mae'r ampersand dwbl yn tanio os a dim ond os bydd y gorchymyn blaenorol yn dychwelyd 0. Ac mae yamllint yn dychwelyd nifer y gwallau a ddarganfuwyd, a dyna pam mae'r holl waith adeiladu amodol hwn yn gweithio.
2. Ysgrifennwch yn Python, nid YAML
Os yw YAML wir yn eich pwyllo, peidiwch ag ysgrifennu ynddo, yn llythrennol. Mae'n digwydd mai YAML yw'r unig fformat sy'n cael ei dderbyn gan y cais. Ond yn yr achos hwn, nid oes angen creu ffeil YAML. Ysgrifennwch ar yr hyn yr ydych yn ei hoffi, ac yna trosi. Er enghraifft, mae llyfrgell wych ar gyfer Python
Hunan-drosi
Yn yr achos hwn, mae'r ffeil ddata hefyd yn sgript Python sy'n cynhyrchu YAML. Mae'r dull hwn orau ar gyfer setiau data bach. Yn syml, rydych chi'n ysgrifennu data JSON i newidyn Python, yn ei ragddodi â chyfarwyddeb fewnforio, ac yn ychwanegu tair llinell ar ddiwedd y ffeil i weithredu'r allbwn.
#!/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
Nawr rydym yn rhedeg y ffeil hon yn Python ac yn cael y ffeil output.yaml fel allbwn:
$ 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
Mae hyn yn berffaith ddilys YAML, ond bydd yamllint yn eich rhybuddio nad yw'n dechrau gyda -. Wel, gellir cywiro hyn yn hawdd â llaw, neu ei addasu ychydig gan y sgript Python.
Trosi trwy sgriptiau
Yn yr achos hwn, rydym yn ysgrifennu yn JSON yn gyntaf, ac yna'n rhedeg y trawsnewidydd fel sgript Python ar wahân, sy'n cynhyrchu YAML fel allbwn. O'i gymharu â'r dull blaenorol, mae'r dull hwn yn graddio'n well, gan fod y trawsnewid yn ddata gwahanu.
Yn gyntaf, gadewch i ni greu ffeil JSON example.json, er enghraifft, gallwch chi ei gymryd o
{
"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"
}
}
}
}
}
Nesaf, gadewch i ni greu sgript trawsnewidydd syml a'i gadw fel json2yaml.py. Mae'r sgript hon yn mewngludo'r modiwlau YAML a JSON Python, yn llwytho ffeil JSON a bennir gan y defnyddiwr, yn cyflawni'r trosiad, ac yn ysgrifennu'r data i'r ffeil 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()
Cadw'r sgript hon i lwybr y system a rhedeg yn ôl yr angen:
$ ~/bin/json2yaml.py example.json
3. Dosberthwch lawer ac aml
Weithiau mae'n helpu i edrych ar broblem o ongl wahanol. Os ydych chi'n ei chael hi'n anodd cynrychioli perthnasoedd rhwng data yn YAML, gallwch chi eu trawsnewid dros dro yn rhywbeth mwy cyfarwydd.
Er enghraifft, os ydych chi'n gyfforddus yn gweithio gyda rhestrau geiriadur neu JSON, yna gellir trosi YAML i JSON gyda dim ond dau orchymyn mewn cragen Python rhyngweithiol. Gadewch i ni ddweud bod gennych chi ffeil YAML mydata.yaml, yna dyma sut olwg fyddai arno:
$ 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.'}
Mae llawer o enghreifftiau eraill ar y pwnc hwn. Yn ogystal, mae yna lawer o drawsnewidwyr ar-lein a pharsers lleol ar gael. Felly mae croeso i chi ailfformatio'r data pan fyddwch chi'n gweld dim ond mishmash annealladwy ynddo.
4. Darllenwch y manylebau
Gan ddod yn ôl i YAML ar ôl seibiant hir, mae'n ddefnyddiol gwirio
5. Pseudoconfigs
Wrth ysgrifennu llyfr neu erthygl, mae bob amser yn syniad da braslunio amlinelliad rhagarweiniol yn gyntaf, o leiaf ar ffurf tabl cynnwys. Yr un peth ag YAML. Yn fwyaf tebygol, mae gennych syniad o ba ddata y dylid ei ysgrifennu i ffeil YAML, ond nid ydych yn deall mewn gwirionedd sut i'w cysylltu â'i gilydd. Felly, cyn cerflunio YAML, lluniwch ffug-ffurfwedd.
Mae pseudoconfig fel ffug-god lle nad oes rhaid i chi boeni am strwythur na mewnoliad, perthnasoedd rhiant-plentyn, etifeddiaeth, a nythu. Felly y mae yma: rydych yn tynnu llun iteriadau o'r data fel y maent yn ymddangos yn eich pen.
Pseudoconfig rhestru rhaglenwyr (Martin a Tabitha) a'u sgiliau (ieithoedd rhaglennu: Python, Perl, Pascal a Lisp, Fortran, Erlang, yn y drefn honno).
Ar ôl llunio ffug-ffurfwedd ar ddarn o bapur, dadansoddwch ef yn ofalus ac, os yw popeth mewn trefn, fformatiwch ef fel ffeil YAML dilys.
6. Dilema'r Tabiau neu'r Gofodau
Mae'n rhaid i chi ddatrys cyfyng-gyngor
Mewn unrhyw olygydd testun arferol, gallwch sefydlu auto-disodli tabiau ar gyfer nifer penodol o fylchau, felly mae'r gwrthryfel ymlynwyr yr allwedd Tab ni allwch ofni.
Fel y mae pob caswr YAML yn ymwybodol iawn, nid oes gwahaniaeth rhwng tabiau a bylchau ar y sgrin. A phan nad yw rhywbeth yn weladwy, mae'n cael ei gofio, fel rheol, yn olaf, ar ôl iddo gael ei ddatrys, ei wirio a dileu pob problem bosibl arall. Mae awr o amser yn cael ei wastraffu yn chwilio am dab neu floc o leoedd yn dweud bod angen i chi greu polisi ar frys ar gyfer defnyddio un neu'r llall, ac yna gweithredu gwiriad concrit wedi'i atgyfnerthu i weld a yw'n cydymffurfio (er enghraifft, trwy fachyn Git i gorfodi rhediad trwy'r lint).
7. Mae llai yn well (neu mae mwy yn llai)
Mae rhai pobl yn hoffi ysgrifennu yn YAML oherwydd ei fod yn pwysleisio strwythur. Ar yr un pryd, maent yn defnyddio mewnoliadau i amlygu blociau o ddata. Mae'n fath o sgam i ddynwared ieithoedd marcio sy'n defnyddio amffinyddion penodol.
Dyma enghraifft o strwythur o'r fath gan
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
I rai, mae'r opsiwn hwn yn helpu i ddadelfennu strwythur YAML yn eu pennau, tra i eraill, i'r gwrthwyneb, mae'n eu cythruddo gyda màs o fewnoliadau diangen, yn eu barn nhw.
Ond os mai chi yw perchennog y ddogfen YAML ac yn gyfrifol am ei chynnal, yna chi a dim ond chi Dylai benderfynu sut i ddefnyddio mewnoliad. Os bydd mewnoliad mawr yn eich cythruddo, cadwch ef i'r lleiaf posibl yn unol â manyleb YAML. Er enghraifft, gellir ailysgrifennu'r ffeil uchod o'r ddogfennaeth Ansible fel hyn heb unrhyw golled:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. Defnyddiwch fylchau
Os ydych chi'n ailadrodd yr un camgymeriadau wrth lenwi ffeil YAML, mae'n gwneud synnwyr mewnosod templed gwag ynddo fel sylw. Yna y tro nesaf gallwch chi gopïo hwn yn wag a nodi data go iawn yno, er enghraifft:
---
# - <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. Defnyddiwch Rywbeth Gwahanol
Os nad oes gan y cais rwystr arnoch chi, yna efallai y byddai'n werth newid YAML i fformat arall. Dros amser, gall ffeiliau cyfluniad dyfu'n rhy fawr, ac yna mae'n well eu trosi'n sgriptiau Lua neu Python syml.
Mae YAML yn beth gwych y mae llawer o bobl yn ei garu oherwydd ei finimaliaeth a'i symlrwydd, ond mae'n bell o fod yr unig offeryn yn eich arsenal. Felly weithiau gallwch chi ei wrthod. Mae'n hawdd dod o hyd i lyfrgelloedd dosrannu ar gyfer YAML, felly os ydych chi'n cynnig opsiynau mudo cyfleus, bydd eich defnyddwyr yn goroesi gwrthodiad o'r fath yn gymharol ddi-boen.
Os na allwch wneud heb YAML, yna cymerwch y 10 awgrym hyn ar waith a threchwch eich atgasedd tuag at YAML unwaith ac am byth!
Ffynhonnell: hab.com