10 քայլ դեպի YAML Zen

Մենք բոլորս սիրում ենք Ansible-ը, բայց Ansible-ը YAML-ն է: Կան կազմաձևման ֆայլերի բազմաթիվ ձևաչափեր՝ արժեքների ցուցակներ, պարամետր-արժեք զույգեր, INI ֆայլեր, YAML, JSON, XML և շատ ուրիշներ: Այնուամենայնիվ, բոլորից մի քանի պատճառներով YAML-ը հաճախ համարվում է հատկապես դժվար: Մասնավորապես, չնայած իր թարմացնող մինիմալիզմին և հիերարխիկ արժեքների հետ աշխատելու տպավորիչ հնարավորություններին, YAML-ի շարահյուսությունը կարող է զայրացնել իր Python-ի նման մոտեցման հետքերով:

10 քայլ դեպի YAML Zen

Եթե ​​YAML-ը ձեզ բարկացնում է, կարող եք և պետք է: – կատարեք հետևյալ 10 քայլերը՝ ձեր հիասթափությունը ընդունելի մակարդակի իջեցնելու և YAML-ին սիրահարվելու համար: Ինչպես վայել է այս ցանկին, մեր տասը խորհուրդները կհամարակալվեն զրոյից, մենք կավելացնենք մեդիտացիա և հոգևոր պրակտիկա ըստ ցանկության 😉

0. Ստիպեք ձեր խմբագրին աշխատել

Կարևոր չէ, թե ինչ տեքստային խմբագրիչ ունեք, հավանաբար կա առնվազն մեկ պլագին YAML-ի հետ աշխատելու համար: Եթե ​​չունեք, անմիջապես գտեք և տեղադրեք: Որոնման և տեղադրման վրա ծախսված ժամանակը շատ անգամ կվճարի ամեն անգամ, երբ դուք պետք է խմբագրեք YAML-ը:

Օրինակ՝ խմբագիր Ատոմ լռելյայն աջակցում է YAML-ին, սակայն GNU Emacs-ի համար դուք պետք է տեղադրեք լրացուցիչ փաթեթներ, օրինակ. yaml-ռեժիմ.

10 քայլ դեպի YAML Zen

Emacs-ը YAML ռեժիմում և բացատների ցուցադրում:

Եթե ​​ձեր սիրելի խմբագրիչը չունի YAML ռեժիմ, ապա որոշ խնդիրներ կարելի է լուծել՝ աշխատելով կարգավորումների հետ։ Օրինակ, ստանդարտ GNOME տեքստային խմբագրիչ Gedit-ը չունի YAML ռեժիմ, բայց լռելյայնորեն այն կարևորում է YAML շարահյուսությունը և թույլ է տալիս կարգավորել աշխատանքը ինտացիաներով.

10 քայլ դեպի YAML Zen

Gedit-ում նահանջների տեղադրում:

Փլագին գծապատկերներ Gedit-ի համար բացատները ցուցադրում է կետերի տեսքով՝ վերացնելով երկիմաստությունները ներքևման մակարդակներով:

Այլ կերպ ասած, ժամանակ տրամադրեք ձեր սիրելի խմբագրի մասին սովորելուն: Պարզեք, թե ինչ է առաջարկում նա կամ նրա զարգացման համայնքը YAML-ի հետ աշխատելու համար և օգտագործեք այդ հնարավորությունները: Դուք հաստատ չեք փոշմանի։

1. Օգտագործեք լիսեռ

Իդեալում, ծրագրավորման լեզուները և նշագրման լեզուները օգտագործում են կանխատեսելի շարահյուսություն: Համակարգիչները լավ են կանխատեսելիության մեջ, ինչի պատճառով էլ հասկացությունը lintera. Եթե ​​իր գոյության 40 տարիների ընթացքում այն ​​անցել է ձեր կողքով, և դուք դեռ չեք օգտագործում YAML linter, ապա ժամանակն է փորձել yamllint:

Տեղադրելու համար յամլինտ Դուք կարող եք օգտագործել ստանդարտ Linux փաթեթի կառավարիչ: Օրինակ՝ մեջ Red Hat Enterprise Linux- ը 8 կամ Fedora դա արվում է այսպես.

$ sudo dnf install yamllint

Այնուհետև դուք պարզապես գործարկում եք yamllint՝ փոխանցելով այն YAML ֆայլը՝ ստուգելու համար: Ահա թե ինչ տեսք կունենա, եթե սխալով ֆայլը փոխանցեք linter-ին.

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

Ձախ կողմում գտնվող թվերը ոչ թե ժամանակը, այլ սխալի կոորդինատներն են՝ տողի և սյունակի համարը: Սխալի նկարագրությունը կարող է ձեզ ոչինչ չասել, բայց դուք հստակ գիտեք, թե որտեղ է այն: Պարզապես նայեք այս տեղը կոդի մեջ, և, ամենայն հավանականությամբ, ամեն ինչ պարզ կդառնա:

Երբ yamllint-ը ֆայլում սխալներ չի գտնում, ոչինչ չի տպվում էկրանին: Եթե ​​նման լռությունը ձեզ վախեցնում է, և դուք մի փոքր ավելի շատ արձագանք եք ուզում, ապա կարող եք գործարկել լինտերը պայմանական echo հրամանով կրկնակի նշանի (&&) միջոցով, այսպես.

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

POSIX-ում կրկնակի ամպերսանդը գործարկվում է, եթե և միայն այն դեպքում, երբ նախորդ հրամանը վերադարձնում է 0: Իսկ yamllint-ը պարզապես վերադարձնում է հայտնաբերված սխալների քանակը, ինչի պատճառով այս ամբողջ պայմանական կոնստրուկցիան աշխատում է:

2. Գրեք Python-ով, ոչ թե YAML-ով

Եթե ​​YAML-ն իսկապես ջղայնացնում է ձեզ, պարզապես մի գրեք դրա մեջ, բառացիորեն: Պատահում է, որ YAML-ը միակ ձևաչափն է, որը հավելվածը հասկանում է: Բայց նույնիսկ այս դեպքում անհրաժեշտ չէ ստեղծել YAML ֆայլ: Գրեք այն, ինչ ձեզ դուր է գալիս, ապա փոխարկեք: Օրինակ, Python-ի համար հիանալի գրադարան կա պյամլ և փոխակերպման երկու եղանակ՝ ինքնավերափոխում և փոխակերպում սկրիպտների միջոցով:

Ինքնափոխություն

Այս դեպքում տվյալների ֆայլը նաև Python-ի սցենար է, որը ստեղծում է YAML: Այս մեթոդը լավագույնս համապատասխանում է փոքր տվյալների հավաքածուներին: Դուք պարզապես գրում եք JSON-ի տվյալները Python փոփոխականի մեջ, նախաբանում այն ​​ներմուծման հրահանգով և ֆայլի վերջում ավելացնում եք երեք տող՝ արդյունքն իրականացնելու համար:

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

Այժմ մենք գործարկում ենք այս ֆայլը Python-ում և ստանում 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

Սա լիովին վավեր է YAML-ով, բայց yamllint-ը կզգուշացնի ձեզ, որ այն չի սկսվում -ով: Դե, սա կարելի է հեշտությամբ շտկել ձեռքով կամ մի փոքր փոփոխել Python սկրիպտում:

Փոխակերպում սկրիպտների միջոցով

Այս դեպքում մենք նախ գրում ենք JSON-ով, այնուհետև գործարկում ենք փոխարկիչը որպես առանձին Python սկրիպտ, որը արտադրում է YAML որպես ելք։ Նախորդ մեթոդի համեմատ այս մեթոդը ավելի լավ է մասշտաբվում, քանի որ փոխակերպումը տվյալներից առանձին է:

Նախ, եկեք ստեղծենք JSON ֆայլ example.json, օրինակ, կարող եք վերցնել այն 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"
			}
		  }
		}
	  }
	}

Այնուհետև մենք կստեղծենք փոխարկիչի պարզ սցենար և կպահենք այն json2yaml.py անունով: Այս սկրիպտը ներմուծում է և՛ YAML, և՛ JSON Python մոդուլները և բեռնում է օգտագործողի կողմից նշված JSON ֆայլը, կատարում է փոխարկումը և տվյալները գրում 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()

Պահպանեք այս սկրիպտը համակարգի ճանապարհին և գործարկեք այն ըստ անհրաժեշտության.

$ ~/bin/json2yaml.py example.json

3. Շատ ու հաճախ վերլուծիր

Երբեմն օգտակար է խնդրին այլ տեսանկյունից նայել: Եթե ​​դժվարանում եք ներկայացնել ձեր տվյալների միջև հարաբերությունները 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.'}

Այս թեմայով կարող եք գտնել բազմաթիվ այլ օրինակներ: Բացի այդ, կան բազմաթիվ առցանց փոխարկիչներ և տեղական վերլուծիչներ: Այնպես որ, մի հապաղեք վերաձեւակերպել տվյալները, երբ դրանցում միայն անհասկանալի խառնաշփոթ եք տեսնում:

4. Կարդացեք բնութագրերը

Երկար ընդմիջումից հետո վերադառնալով ՅԱՄԼ՝ օգտակար է այցելել yaml.org և նորից կարդացեք տեխնիկական բնութագրերը (սպասարկումները): Եթե ​​դուք դժվարություններ ունեք YAML-ի հետ, բայց չեք հասել ճշգրտմանը, ապա ժամանակն է շտկելու այս իրավիճակը: Տեխնիկական բնութագրերը զարմանալիորեն հեշտ են գրել, և շարահյուսական պահանջները պատկերված են մեծ թվով օրինակներով Գլուխ 6.

5. Pseudo-configs

Գիրք կամ հոդված գրելիս միշտ օգտակար է նախ ուրվագծել նախնական ուրվագիծը, գոնե բովանդակության աղյուսակի տեսքով: Նույնն է YAML-ի դեպքում: Ամենայն հավանականությամբ, դուք պատկերացում ունեք, թե ինչ տվյալներ պետք է գրվեն YAML ֆայլում, բայց իրականում չեք հասկանում, թե ինչպես դրանք կապել միմյանց հետ: Հետևաբար, նախքան YAML-ը քանդակելը, նկարեք կեղծ կոնֆիգուրացիա:

Pseudo-config-ը նման է կեղծ կոդի, որտեղ դուք չպետք է անհանգստանաք կառուցվածքի կամ խորշի, ծնող-երեխա հարաբերությունների, ժառանգության և բնադրման մասին: Նույնն է այստեղ. դուք նկարում եք տվյալների կրկնությունները, երբ դրանք առաջանում են ձեր գլխում:

10 քայլ դեպի YAML Zen

Pseudo-config ցուցակագրող ծրագրավորողներ (Martin և Tabitha) և նրանց հմտությունները (ծրագրավորման լեզուներ՝ Python, Perl, Pascal և Lisp, Fortran, Erlang, համապատասխանաբար):

Թղթի վրա կեղծ կոնֆիգուրացիա նկարելուց հետո, ուշադիր վերլուծեք այն և, եթե ամեն ինչ կարգին է, ձևաչափեք վավեր YAML ֆայլի տեսքով:

6. «Tabs vs. Spaces» երկընտրանքը

Դուք ստիպված կլինեք լուծել երկընտրանքը «ներդիրներ, թե՞ բացատներ»:. Ոչ թե գլոբալ իմաստով, այլ միայն ձեր կազմակերպության, կամ գոնե նախագծի մակարդակով։ Կարևոր չէ՝ սա ներառում է sed script-ով հետմշակում, ծրագրավորողների մեքենաների վրա տեքստային խմբագրիչների տեղադրում կամ աշխատանքից հեռացնելու սպառնալիքի տակ առևտրի հրահանգների խստիվ համապատասխանության անդորրագրերի ընդունում, բայց ձեր թիմի բոլոր անդամները, ովքեր Այս կամ այն ​​կերպ, որոնք վերաբերում են YAML-ին, պետք է օգտագործեն միայն բացատներ (ինչպես պահանջվում է YAML-ի հստակեցմամբ):

Ցանկացած նորմալ տեքստային խմբագրիչում դուք կարող եք կարգավորել ավտոմատ շտկել ներդիրները որոշակի քանակությամբ բացատների վրա, ինչը հանգեցնում է հիմնական հետևորդների ապստամբությանը: Tab պետք չէ վախենալ.

Ինչպես YAML-ի յուրաքանչյուր ատող լավ գիտի, դուք չեք կարող տեսնել տարբերությունը ներդիրների և բացատների միջև էկրանին: Եվ երբ ինչ-որ բան տեսանելի չէ, դա սովորաբար վերջին բանն է, որ հիշում են մարդիկ, այն բանից հետո, երբ նրանք դասավորել են, ստուգել և վերացնել մնացած բոլոր հնարավոր խնդիրները: Աղյուսակավորման կորի կամ տարածությունների բլոկի որոնման վրա ծախսված ժամանակի մեկ ժամն ուղղակի բղավում է, որ դուք շտապ պետք է քաղաքականություն ստեղծեք մեկի կամ մյուսի օգտագործման համար, այնուհետև իրականացնեք երկաթբետոնե ստուգում դրա համապատասխանության համար (օրինակ՝ միջոցով Git-ի կեռիկ՝ այն ստիպելու համար, որ այն անցնի լիսեռի միջով):

7. Less is more (կամ ավելին ավելի քիչ)

Որոշ մարդիկ սիրում են գրել YAML-ով, քանի որ այն ընդգծում է կառուցվածքը: Միևնույն ժամանակ, նրանք ակտիվորեն օգտագործում են ներքևում՝ ընդգծելու տվյալների բլոկները: Սա մի տեսակ խաբեություն է՝ ընդօրինակելու նշագծման լեզուները, որոնք օգտագործում են բացահայտ սահմանազատիչներ:

Ահա այսպիսի կառուցվածքի օրինակ Հստակ փաստաթղթեր:

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

Ոմանց համար այս տարբերակը օգնում է նրանց գլխի մեջ կարգավորել YAML կառուցվածքը, մյուսների համար, ընդհակառակը, դա նյարդայնացնում է շատ ավելորդ, իրենց կարծիքով, ներքևերով:

Բայց եթե դուք YAML փաստաթղթի սեփականատերն եք և պատասխանատու եք դրա պահպանման համար, ապա դու և միայն դու պետք է սահմանի, թե ինչպես օգտագործել նահանջը: Եթե ​​ձեզ զայրացնում է մեծ լցոնումը, պահեք այն հնարավորինս նվազագույնի` համաձայն YAML-ի բնութագրերի: Օրինակ, Ansible փաստաթղթերից վերը նշված ֆայլը կարող է վերաշարադրվել այսպես՝ առանց որևէ կորստի.

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

8. Օգտագործեք բլանկներ

Եթե ​​դուք անընդհատ կրկնում եք նույն սխալները YAML ֆայլը լրացնելիս, ապա իմաստ ունի կաղապար տեղադրել դրա մեջ որպես մեկնաբանություն։ Այնուհետև հաջորդ անգամ կարող եք պարզապես պատճենել այս ձևանմուշը և այնտեղ մուտքագրել իրական տվյալներ, օրինակ.

---
# - <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. Օգտագործեք այլ բան

Եթե ​​հավելվածը ձեզ վրա խեղդող պահոց չունի, ապա գուցե արժե փոխել YAML-ը այլ ձևաչափով: Ժամանակի ընթացքում կազմաձևման ֆայլերը կարող են գերազանցել իրենց, և այնուհետև ավելի լավ է դրանք վերածել պարզ սցենարների Lua-ում կամ Python-ում:

YAML-ը հիանալի բան է, որը շատերն են սիրում իր մինիմալիզմի և պարզության համար, բայց այն հեռու է ձեր զինանոցի միակ գործիքից: Այսպիսով, երբեմն դուք կարող եք հրաժարվել դրանից: Վերլուծական գրադարանները հեշտ է գտնել YAML-ի համար, այնպես որ, եթե դուք առաջարկում եք միգրացիայի հեշտ տարբերակներ, ձեր օգտատերերը համեմատաբար ցավալիորեն կվերապրեն այս ձախողումը:

Եթե ​​դուք չեք կարող անել առանց YAML-ի, ապա հետևեք այս 10 խորհուրդներին և մեկընդմիշտ հաղթահարեք ձեր հակակրանքը YAML-ի նկատմամբ:

Source: www.habr.com

Добавить комментарий