ወደ YAML Zen 10 ደረጃዎች

ሁላችንም አንሲብን እንወዳለን፣ ግን Ansible ግን YAML ነው። ለማዋቀር ፋይሎች ብዙ ቅርጸቶች አሉ፡ የእሴቶች ዝርዝሮች፣ ፓራሜትር-እሴት ጥንዶች፣ INI ፋይሎች፣ YAML፣ JSON፣ XML እና ሌሎች ብዙ። ሆኖም፣ በብዙ ምክንያቶች፣ ከሁሉም፣ YAML ብዙውን ጊዜ በተለይ ከባድ እንደሆነ ይታሰባል። በተለይም፣ ምንም እንኳን መንፈስን የሚያድስ ዝቅተኛነት እና ከተዋረድ እሴቶች ጋር ለመስራት የሚያስችሉ አስደናቂ እድሎች ቢኖሩም፣ የ YAML አገባብ በፓይዘን መሰል የመግባት አገባቡ ሊያናድድ ይችላል።

ወደ YAML Zen 10 ደረጃዎች

YAML ቢያናድድህ ትችላለህ - እና አለብህ! - ብስጭትዎን ወደ ተቀባይነት ደረጃ ለመቀነስ እና YAMLን ለመውደድ የሚቀጥሉትን 10 እርምጃዎች ይውሰዱ። በዚህ ዝርዝር መሰረት አስር ምክሮቻችን ከባዶ ይቆጠራሉ፣ እንደተፈለገ ማሰላሰል እና መንፈሳዊ ልምምዶችን እንጨምራለን 😉

0. አርታዒዎ እንዲሰራ ያድርጉ

ምንም አይነት የጽሁፍ አርታኢ እንዳለህ ምንም ለውጥ አያመጣም፣ ለእሱ ቢያንስ አንድ የ YAML ፕለጊን ሊኖር ይችላል። ከሌለዎት ወዲያውኑ ይፈልጉ እና ይጫኑት። በመፈለግ እና በማበጀት የምታጠፋው ጊዜ YAML ን ለማርትዕ በምትፈልግበት ጊዜ ሁሉ ብዙ ጊዜ ይከፍላል።

ለምሳሌ አርታኢ አቶም YAMLን በነባሪነት ይደግፋል፣ ለጂኤንዩ ኢማክ ግን ተጨማሪ ፓኬጆችን መጫን አለብህ፣ ለምሳሌ፣ yaml-mode.

ወደ YAML Zen 10 ደረጃዎች

Emacs በ YAML ሁነታ እና ቦታዎችን ያሳያል።

የእርስዎ ተወዳጅ አርታኢ የ YAML ሁነታ ከሌለው አንዳንድ ችግሮች ከቅንብሮች ጋር በመስራት ሊፈቱ ይችላሉ። ለምሳሌ የGNOME ነባሪ የጽሑፍ አርታኢ የ YAML ሁነታ የለውም፣ ነገር ግን በነባሪ የ YAML አገባብ አጉልቶ ያሳያል እና መግባቱን እንዲያበጁ ይፈቅድልዎታል፡

ወደ YAML Zen 10 ደረጃዎች

በGedit ውስጥ ገባዎች በማዘጋጀት ላይ።

ተሰኪ መሳል ቦታዎች ለGedit ክፍተቶችን እንደ ነጥብ ያሳያል፣ ከመግቢያ ደረጃዎች ጋር ያሉ ጥርጣሬዎችን ያስወግዳል።

በሌላ አነጋገር የሚወዱትን አርታኢ ለመማር ጊዜ ይውሰዱ። እሱ ወይም የእሱ የልማት ማህበረሰቡ ከYAML ጋር ለመስራት ምን እንደሚያቀርቡ ይወቁ እና እነዚህን እድሎች ይጠቀሙ። በእርግጠኝነት አትቆጭም።

1. ሊንተርን ይጠቀሙ

በሐሳብ ደረጃ፣ የፕሮግራም አወጣጥ ቋንቋዎች እና ማርክ ቋንቋዎች ሊተነበይ የሚችል አገባብ ይጠቀማሉ። ኮምፒውተሮች በመተንበይ ረገድ ጥሩ ናቸው፣ ለዚህም ነው በ1978 ሃሳቡ የተነሳው። ሊንተር. በ 40 አመታት ውስጥ እርስዎን ካለፉ እና አሁንም የ YAML ሊንተርን ካልተጠቀሙ ያምሊንትን ለመሞከር ጊዜው አሁን ነው።

ይጫኑ ያምሊንት ቤተኛ የሊኑክስ ጥቅል አስተዳዳሪን መጠቀም ትችላለህ። ለምሳሌ በ Red Hat Enterprise Linux 8 ወይም Fedora እንደዚህ ተከናውኗል

$ sudo dnf install yamllint

ከዚያ በቀላሉ ያምሊንትን ያሂዱ፣ ለመፈተሽ የ YAML ፋይል ያስተላልፉት። ስህተት ያለበት ፋይል ወደ ሊንተር ካስተላለፉ ምን እንደሚመስል እነሆ፡-

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

በግራ በኩል ያሉት ቁጥሮች ጊዜ አይደሉም, ነገር ግን የስህተት መጋጠሚያዎች: የረድፉ እና የአምዱ ቁጥር. የስህተቱ መግለጫ ምንም ላይነግርዎት ይችላል, ነገር ግን የት እንዳለ በትክክል ያውቃሉ. ይህንን ቦታ በኮዱ ውስጥ ብቻ ይመልከቱ፣ እና ምናልባትም ሁሉም ነገር ግልጽ ይሆናል።

ያምሊንት በፋይል ውስጥ ምንም ስህተት ሲያገኝ ምንም ነገር በስክሪኑ ላይ አይታተምም። እንደዚህ አይነት ጸጥታ የሚያስፈራዎት ከሆነ እና ትንሽ ተጨማሪ ግብረመልስ ከፈለጉ፣በሚከተለው መልኩ በ echo ሁኔታዊ ትዕዛዙን ማስኬድ ይችላሉ።

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

በPOSIX ውስጥ፣ ድርብ አምፐርሳንድ የሚነድ ከሆነ እና የቀደመው ትዕዛዝ 0 ከተመለሰ ብቻ ነው። እና ያምሊንት የተገኙትን ስህተቶች ብዛት ይመልሳል፣ ለዚህም ነው ይህ አጠቃላይ ሁኔታዊ ግንባታ የሚሰራው።

2. በ YAML ሳይሆን በፓይዘን ይጻፉ

YAML በእውነት ቢያናድድህ፣ በቃ አትፃፍበት፣ በጥሬው። YAML በማመልከቻው ተቀባይነት ያለው ብቸኛው ቅርጸት ሆኖ ይከሰታል። ነገር ግን በዚህ አጋጣሚ የ YAML ፋይል መፍጠር አስፈላጊ አይደለም. በሚወዱት ላይ ይፃፉ እና ከዚያ ይለውጡ። ለምሳሌ፣ ለፓይዘን ታላቅ ቤተ መፃህፍት አለ። ፒየም እና ሁለት ሙሉ የመቀየር መንገዶች፡ እራስን መለወጥ እና በስክሪፕት መቀየር።

እራስን መለወጥ

በዚህ አጋጣሚ የውሂብ ፋይሉ 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

አሁን ይህን ፋይል በፓይዘን ውስጥ እናስኬዳለን እና የውጤት.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 ጋር እንደማይጀምር ያስጠነቅቃል -. ደህና፣ ይህ በቀላሉ በእጅ ሊስተካከል ወይም በፓይዘን ስክሪፕት በትንሹ ሊስተካከል ይችላል።

በስክሪፕቶች መለወጥ

በዚህ አጋጣሚ፣ መጀመሪያ በJSON እንጽፋለን፣ እና መቀየሪያውን እንደ የተለየ የፓይዘን ስክሪፕት እናስኬዳለን፣ ይህም YAML እንደ ውፅዓት ያዘጋጃል። ከቀዳሚው ዘዴ ጋር ሲነፃፀር ፣ ልወጣው የተከፋፈለ ስለሆነ ይህ ዘዴ በተሻለ ሁኔታ ይመዘናል።

መጀመሪያ፣ የ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 ፋይል ይጭናል፣ ለውጡን ያከናውናል እና ውሂቡን ወደ ውፅዓት.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 በይነተገናኝ Python ሼል ውስጥ በሁለት ትዕዛዞች ብቻ ወደ JSON ሊቀየር ይችላል። የ 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 ስንመለስ፣ መመርመር ጠቃሚ ነው። yaml.org እና ዝርዝር መግለጫዎችን (ዝርዝሮችን) እንደገና ያንብቡ። በ YAML ላይ ችግሮች ካጋጠሙዎት ግን እጆችዎ ዝርዝር መግለጫው ላይ ካልደረሱ ታዲያ ይህንን ሁኔታ ለማስተካከል ጊዜው አሁን ነው። ዝርዝር መግለጫዎቹ በሚገርም ሁኔታ ለመጻፍ ቀላል ናቸው፣ እና የአገባብ መስፈርቶች በብዙ ምሳሌዎች ተገልጸዋል። ምዕራፍ 6.

5. Pseudoconfigs

አንድ መጽሐፍ ወይም ጽሑፍ በሚጽፉበት ጊዜ፣ ቢያንስ በይዘት ሠንጠረዥ መልክ በቅድሚያ የቅድሚያ ዝርዝርን መቅረጽ ሁልጊዜ ጥሩ ሐሳብ ነው። ከ YAML ጋር ተመሳሳይ። ምናልባትም ፣ ምን ውሂብ ወደ YAML ፋይል መፃፍ እንዳለበት ሀሳብ አለዎት ፣ ግን እርስ በእርስ እንዴት እንደሚዛመዱ በትክክል አይረዱም። ስለዚህ YAML ከመቅረጽዎ በፊት የውሸት ውቅረት ይሳሉ።

Pseudoconfig ስለ መዋቅር ወይም መግባት፣ የወላጅ እና የልጅ ግንኙነት፣ ውርስ እና ጎጆ መጨነቅ የማይፈልጉበት እንደ pseudocode ነው። ስለዚህ እዚህ ነው፡ በጭንቅላታችሁ ላይ ሲታዩ የውሂብ ድግግሞሾችን ይሳሉ።

ወደ YAML Zen 10 ደረጃዎች

Pseudoconfig የፕሮግራም አዘጋጆች ዝርዝር (ማርቲን እና ታቢታ) እና ችሎታቸው (የፕሮግራም ቋንቋዎች፡ Python፣ Perl፣ Pascal እና Lisp፣ Fortran፣ Erlang፣ በቅደም ተከተል)።

በወረቀት ላይ የውሸት ማዋቀርን ከሳሉ በኋላ በጥንቃቄ ይተንትኑት እና ሁሉም ነገር በሥርዓት ከሆነ ልክ እንደ YAML ፋይል ይቅረጹት።

6. የ Tabs ወይም Spaces አጣብቂኝ

አንድ አጣብቂኝ መፍታት አለብህ "ትሮች ወይስ ክፍተቶች?". በአለምአቀፍ ደረጃ ሳይሆን በድርጅትዎ ደረጃ ወይም ቢያንስ በፕሮጀክት ደረጃ ብቻ ነው. ይህ በሴድ ስክሪፕት ድህረ-ሂደትን ማከናወንን፣ በፕሮግራመሮች ማሽኖች ላይ የጽሑፍ አርታኢዎችን ማቀናበር ወይም የሊንደር መመሪያዎችን በጥብቅ ለማክበር ደረሰኞችን ሙሉ በሙሉ ከሥራ መባረርን ማስፈራሪያ መውሰድን የሚያካትት ከሆነ ምንም ለውጥ የለውም ፣ ግን ሁሉም የቡድንዎ አባላት አንድ ወይም ሌላ ከ YAML ጋር የሚዛመዱ ቦታዎችን ብቻ መጠቀም አለባቸው (በ YAML ዝርዝር ውስጥ እንደተፈለገው)።

በማንኛውም መደበኛ የጽሑፍ አርታኢ ውስጥ ለተወሰኑ የቦታዎች ብዛት የትሮችን በራስ መተካት ማቀናበር ይችላሉ ፣ ስለሆነም የቁልፉ ተከታዮች ማመፅ። ትር ልትፈራ አትችልም።

እያንዳንዱ የ YAML ጠላፊ ጠንቅቆ እንደሚያውቅ፣ በስክሪኑ ላይ በትሮች እና ክፍተቶች መካከል ምንም ልዩነት የለም። እና አንድ ነገር በማይታይበት ጊዜ, እንደ አንድ ደንብ, በመጨረሻው ይታወሳል, ከተጣራ በኋላ, ከተጣራ በኋላ ሁሉንም ሌሎች ሊሆኑ የሚችሉ ችግሮችን ያስወግዳል. የቦታዎች ትርን ወይም ብሎክን ለመፈለግ የሚባክን አንድ ሰአት ብቻ አንዱን ወይም ሌላውን ለመጠቀም ፖሊሲን በአስቸኳይ መፍጠር እንዳለቦት ይጮኻል እና ከዚያ ለማክበር የተጠናከረ ኮንክሪት ፍተሻን ይተግብሩ (ለምሳሌ ፣ በጂት መንጠቆ ወደ በሊንተር በኩል እንዲሮጥ ያስገድዱ).

7. ያነሰ የተሻለ ነው (ወይም ብዙ ያነሰ ነው)

አንዳንድ ሰዎች በ 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 ዝርዝር መሰረት በተቻለ መጠን በትንሹ ያስቀምጡት። ለምሳሌ ፣ከላይ ያለው ፋይል ካለምንም ኪሳራ እንደገና እንደዚህ ሊፃፍ ይችላል።

---
- 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 ወደ ሌላ ቅርጸት መቀየር ጠቃሚ ሊሆን ይችላል። በጊዜ ሂደት, የማዋቀሪያ ፋይሎች ከራሳቸው ሊበልጡ ይችላሉ, እና ከዚያ ወደ ቀላል የሉአ ወይም የፓይዘን ስክሪፕቶች መለወጥ የተሻለ ነው.

YAML ለዝቅተኛነቱ እና ቀላልነቱ ብዙ ሰዎች የሚወዱት ታላቅ ነገር ነው፣ ነገር ግን በጦር መሣሪያዎ ውስጥ ካለው ብቸኛው መሳሪያ የራቀ ነው። ስለዚህ አንዳንድ ጊዜ እምቢ ማለት ይችላሉ. ለYAML የመተንተን ቤተ-ፍርግሞችን ማግኘት ቀላል ነው፣ ስለዚህ ምቹ የፍልሰት አማራጮችን ካቀረብክ፣ ተጠቃሚዎችህ ከእንዲህ ዓይነቱ ውድመት በአንፃራዊ ህመም ያለምንም ህመም ይተርፋሉ።

ያለ YAML ማድረግ ካልቻሉ እነዚህን 10 ምክሮች ወደ አገልግሎት ይውሰዱ እና ለ YAML ያለዎትን አለመውደድ ለአንዴና ለመጨረሻ ጊዜ ያሸንፉ!

ምንጭ: hab.com

አስተያየት ያክሉ