ሁላችንም አንሲብን እንወዳለን፣ ግን Ansible ግን YAML ነው። ለማዋቀር ፋይሎች ብዙ ቅርጸቶች አሉ፡ የእሴቶች ዝርዝሮች፣ ፓራሜትር-እሴት ጥንዶች፣ INI ፋይሎች፣ YAML፣ JSON፣ XML እና ሌሎች ብዙ። ሆኖም፣ በብዙ ምክንያቶች፣ ከሁሉም፣ YAML ብዙውን ጊዜ በተለይ ከባድ እንደሆነ ይታሰባል። በተለይም፣ ምንም እንኳን መንፈስን የሚያድስ ዝቅተኛነት እና ከተዋረድ እሴቶች ጋር ለመስራት የሚያስችሉ አስደናቂ እድሎች ቢኖሩም፣ የ YAML አገባብ በፓይዘን መሰል የመግባት አገባቡ ሊያናድድ ይችላል።
YAML ቢያናድድህ ትችላለህ - እና አለብህ! - ብስጭትዎን ወደ ተቀባይነት ደረጃ ለመቀነስ እና YAMLን ለመውደድ የሚቀጥሉትን 10 እርምጃዎች ይውሰዱ። በዚህ ዝርዝር መሰረት አስር ምክሮቻችን ከባዶ ይቆጠራሉ፣ እንደተፈለገ ማሰላሰል እና መንፈሳዊ ልምምዶችን እንጨምራለን 😉
0. አርታዒዎ እንዲሰራ ያድርጉ
ምንም አይነት የጽሁፍ አርታኢ እንዳለህ ምንም ለውጥ አያመጣም፣ ለእሱ ቢያንስ አንድ የ YAML ፕለጊን ሊኖር ይችላል። ከሌለዎት ወዲያውኑ ይፈልጉ እና ይጫኑት። በመፈለግ እና በማበጀት የምታጠፋው ጊዜ YAML ን ለማርትዕ በምትፈልግበት ጊዜ ሁሉ ብዙ ጊዜ ይከፍላል።
ለምሳሌ አርታኢ
Emacs በ YAML ሁነታ እና ቦታዎችን ያሳያል።
የእርስዎ ተወዳጅ አርታኢ የ YAML ሁነታ ከሌለው አንዳንድ ችግሮች ከቅንብሮች ጋር በመስራት ሊፈቱ ይችላሉ። ለምሳሌ የGNOME ነባሪ የጽሑፍ አርታኢ የ YAML ሁነታ የለውም፣ ነገር ግን በነባሪ የ YAML አገባብ አጉልቶ ያሳያል እና መግባቱን እንዲያበጁ ይፈቅድልዎታል፡
በGedit ውስጥ ገባዎች በማዘጋጀት ላይ።
ተሰኪ
በሌላ አነጋገር የሚወዱትን አርታኢ ለመማር ጊዜ ይውሰዱ። እሱ ወይም የእሱ የልማት ማህበረሰቡ ከYAML ጋር ለመስራት ምን እንደሚያቀርቡ ይወቁ እና እነዚህን እድሎች ይጠቀሙ። በእርግጠኝነት አትቆጭም።
1. ሊንተርን ይጠቀሙ
በሐሳብ ደረጃ፣ የፕሮግራም አወጣጥ ቋንቋዎች እና ማርክ ቋንቋዎች ሊተነበይ የሚችል አገባብ ይጠቀማሉ። ኮምፒውተሮች በመተንበይ ረገድ ጥሩ ናቸው፣ ለዚህም ነው በ1978 ሃሳቡ የተነሳው።
ይጫኑ
$ 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 ፋይልን ለምሳሌ ለምሳሌ ከሱ መውሰድ ትችላለህ
{
"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 ስንመለስ፣ መመርመር ጠቃሚ ነው።
5. Pseudoconfigs
አንድ መጽሐፍ ወይም ጽሑፍ በሚጽፉበት ጊዜ፣ ቢያንስ በይዘት ሠንጠረዥ መልክ በቅድሚያ የቅድሚያ ዝርዝርን መቅረጽ ሁልጊዜ ጥሩ ሐሳብ ነው። ከ YAML ጋር ተመሳሳይ። ምናልባትም ፣ ምን ውሂብ ወደ YAML ፋይል መፃፍ እንዳለበት ሀሳብ አለዎት ፣ ግን እርስ በእርስ እንዴት እንደሚዛመዱ በትክክል አይረዱም። ስለዚህ YAML ከመቅረጽዎ በፊት የውሸት ውቅረት ይሳሉ።
Pseudoconfig ስለ መዋቅር ወይም መግባት፣ የወላጅ እና የልጅ ግንኙነት፣ ውርስ እና ጎጆ መጨነቅ የማይፈልጉበት እንደ pseudocode ነው። ስለዚህ እዚህ ነው፡ በጭንቅላታችሁ ላይ ሲታዩ የውሂብ ድግግሞሾችን ይሳሉ።
Pseudoconfig የፕሮግራም አዘጋጆች ዝርዝር (ማርቲን እና ታቢታ) እና ችሎታቸው (የፕሮግራም ቋንቋዎች፡ Python፣ Perl፣ Pascal እና Lisp፣ Fortran፣ Erlang፣ በቅደም ተከተል)።
በወረቀት ላይ የውሸት ማዋቀርን ከሳሉ በኋላ በጥንቃቄ ይተንትኑት እና ሁሉም ነገር በሥርዓት ከሆነ ልክ እንደ YAML ፋይል ይቅረጹት።
6. የ Tabs ወይም Spaces አጣብቂኝ
አንድ አጣብቂኝ መፍታት አለብህ
በማንኛውም መደበኛ የጽሑፍ አርታኢ ውስጥ ለተወሰኑ የቦታዎች ብዛት የትሮችን በራስ መተካት ማቀናበር ይችላሉ ፣ ስለሆነም የቁልፉ ተከታዮች ማመፅ። ትር ልትፈራ አትችልም።
እያንዳንዱ የ 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