ααΎαααΆααα’ααααααΆαααα‘αΆαα Ansible ααα»αααα Ansible ααΊ YAML α ααΆαααααααααΆα αααΎααααααΆααα―αααΆαααααααα ααΆααααααααα αααααΈααααα αααΆαααΆαααααα-αααααααΌ α―αααΆα INI, YAML, JSON, XML αα·ααααααααααα ααααααΆαααΆααααα αααααΆααα ααα»αααα½αα ααα½ααααα»αα αααααα½αααααΆααα’αα YAML αααααααααΌαααΆαα αΆαααα»αααΆααΆααΆαααααΆαααΆαα·αααα ααΆαα·ααα αααααΈααΆααΆαααΆααααααααααΆααα·α αα½α αα·ααααααααΆααα½αα±ααα αΆααα’αΆαααααααααααΆααααααΎααΆαααΆαα½ααααααααΆααΆαα»ααααααααα ααΆααααααααααα YAML α’αΆα ααααΆαααΆαα½αααΉααα·ααΈααΆαααααααΌα Python αααα»αααΆαα αΌααααααΆααα
ααααα·αααΎ YAML ααΉαα’ααα α’αααα’αΆα
ααααΎααΆα α αΎαα’ααααα½ααα! - α’αα»ααααααα αΆαααΆαα 10 ααΆααααααααΎααααΈααΆαααααααααΆαααα
α·αααααααα’ααααααααααα·ααααα’αΆα
ααα½αααααΆα α αΎαααααΆαααααα»αα’αααααααααα αααΆαα½α YAML α ααΌα
αααααααΉααααααΈααα αααααΉαααΆαααααααααααΎαααΉαααααΌαααΆαααΆααααΆααααΈααααΌα ααΎαααΉαααααααααΆαααααΎαααΆαα· αα·αααΆαα’αα»ααααααΆααα·ααααΆαααΆαααααα π
0. ααααΎα±αααααααα·ααΈαα·ααααααααα’αααααααΎαααΆα
ααΆαα·αααΆααααα αΆα’αααΈαααα’αααααΆααααααα·ααΈαα·ααααα’αααααααααα αααα ααααΆααΆααααΆαα αα ααΆαααααααα·ααΈαααα½ααα½ααααααΆααααααΎααΆαααΆαα½α YAML α ααααα·αααΎα’ααααα·αααΆααα ααΌαααααααα α αΎαααα‘αΎαααΆααααΆααα αααααααΆαααααΆαα αααΆααααα»αααΆαααααααα αα·ααααααΎαααΉαααΌααΆααα αααΎααα ααΆααααααααα’αααααααΌαααααααα½α YAML α
α§ααΆα αααα’αααααααααα½α
Emacs αα αααα»ααααα YAML αα·ααααα αΆαα αααααα
ααααα·αααΎα’αααααααααα½ααααα’αααα αΌαα α·ααααα·αααΆααααα YAML ααααααα αΆαα½αα ααα½αα’αΆα ααααΌαααΆααααααααΆααααααααΎααΆαααΆαα½αααΆααααααα α§ααΆα ααα αααααα·ααΈααα’ααααα GNOME αααααααΆα Gedit αα·αααΆααααα YAML αα ααα»ααααααΆαααααΆαααΎα ααΆααααα ααΆααααααααααα YAML αα·αα’αα»ααααΆαα±ααα’αααααααααα ααΆααααααααααΆαααΆαααΆαα½αααΉαααΆαα αΌααααααΆααα
ααΆααααααααΆαα αΌααααααΆαααα αααα»α Gedit α
αααααα·ααΈαααα½ααα½αα
αααααΆααα·αααα α αααΆαααααα·ααααΆα’αααΈαααααα·ααΈαα·αααααααα’αααα αΌαα α·αααα ααααααααααΈα’αααΈαααααΆαα α¬αα ααααα’αα·ααααααααααααΆαααααααααΌααααααΆααααααΎααΆαααΆαα½α YAML α αΎαααααΎααααΆαααα»αααΆαααΆαααααα α’αααααααΆααααΆαα·ααααααααΆαααΆααα
1. ααααΎαα»αααααΆα
ααΆαα§ααααααα· ααΆααΆααααααααααα·ααΈ αα·αααΆααΆαααααΆααααααΎααΆααααααααααααααα’αΆα
ααααΆααααααΆαα αα»αααααΌαααααΊααα’αααα»αααΆαααααααααΆααααααΆααΌαα ααα»ααααααα·ααα
ααα‘αΎα
$ 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 αααα·αααΎαααα α»ααα αααα»αα―αααΆα ααααΆαα’αααΈααααΌαααΆαααααα»αααααΎα’ααααααααα ααααα·αααΎααΆααααααααααΆααααααααααααΎα±ααα’ααααααααααΆα α αΎαα’αααα ααααΆαααα·αααααα’ααααα·α αααααα α’αααα’αΆα ααααΎαααΆα linter αααααααΎααΆααααααααΆα’αααΌααΆαααααααααααΆαααα ampersand αααα (&&) ααΌα αααα
$ 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 ααΆα§ααΆα ααα α’αααα’αΆα
ααααΆααΈ
{
"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 αα·ααααααΆααααΈαααααΆαααΌα ααΆααΆααααααααααααα»αααΆαααααααΆ
5. Pseudo-configs
αα ααααααααααααα α¬α’ααααα ααΆαααααααΆααααααααααααα»αααΆαααΌαααΆαα ααααΌααααααααα αααΆαα αα ααΆαααααα»αααααααααΆααΆααΆαααΆαα·ααΆα ααΆααΌα ααααΆααΆαα½α YAML αααα ααΆαα αααΎα α’αααααΆααααα·αα’αααΈα’αααΈααααα·ααααααααααΌαααααααα αααα»αα―αααΆα YAML ααα»ααααα’ααααα·αααΆαα·ααααααΈααααααααΆααααΆααΆαα½αααααΆαα αα·ααα ααααα ααΌα αααααα»αααΉαααααΆαα YAML ααΌαααΌαααΌα pseudo-config α
Pseudo-config ααΊαααααααα ααΉα pseudo-code αααα’ααααα·αα αΆαααΆα ααααα½αααΆααααα’αααΈαα ααΆαααααααα α¬ααΆαα αΌααααααΆαα ααααΆαααααααͺαα»αααααΆα αα·αααΌα αααα αα·αααΆαααΆαααααα»αα ααΆααΌα ααααΆαα ααΈαααα α’αααααΌαα‘αΎααα·αααΌααα·αααααα ααΌα ααααα½αααΆααΎαα‘αΎααα αααα»αααααΆαααααα’αααα
α’αααααααααααααα·ααΈαααααΆαα α»ααααααΈ Pseudo-config (αααΆααΈα αα·αααΆαααΈααΆ) αα·αααααΆααααααα½ααα (ααΆααΆααααααααααα·ααΈα Python, Perl, Pascal αα·α Lisp, Fortran, Erlang αααααααΆ)α
αααααΆααααΈααΌαααΌα pseudo-config αα ααΎαααααΆααα½α ααΌααα·ααΆαααΆααααααα»ααααααααα α αΎαααααα·αααΎα’αααΈαααΆααααααΆααααααΆαα ααΌαααααΎαααααααααΆαααΆααΆααααααα―αααΆα YAML ααααΉαααααΌαα
6. The Tabs vs. Spaces Dilemma
α’αααααΉαααααΌααααααααΆααα·ααααα·
αα αααα»ααααααα·ααΈαα·ααααα’αααααααααααΆααΆαα½α α’αααα’αΆα ααααααα ααΆααααααααααααΆαααααααααααααααααααα·αα α ααα½αα ααααααααααΆααααααΆαα ααΌα ααααααΆααααααααα’ααααααααΆααααααΆαααααααΉα ααα α’ααααα·αα αΆαααΆα ααααααααΆα ααα
ααΌα αααα’αααααα’αα YAML αααααααΌαααΉααααΆαα αααΆαα α’ααααα·αα’αΆα ααΎαααΎαααΆααα»αααααΆαααΆαααααΆαα αα·αα ααααααα ααΎα’αααααααααααα α αΎααα ααααααα’αααΈαα½ααααααΎααα·αααΎα ααΆααααααΆααΆααΆααΏαα α»αααααααααααα»αααα αα αΆα αααααΆααααΈαα½αααααΆααααααα αα·αα·ααα αα·ααα»αααααΆαααααα αΆαααα’αΆα ααΎαααΆαααααααααα αα½ααααααααααααααΆαααααΆαα αααΆααααα»αααΆαααααααααααααααααΆααΆα α¬αααα»αααα ααααααα½αααααΆαααααααααααΆα’αααααααΌαααΆαααΆαααααΆααααΎααααΈαααααΎααααααΆααααααααΆααααΆαααααΎααααΆαααα½α α¬αααααααα α αΎααααααΆααααα’αα»ααααααΆααααα½ααα·αα·ααααααα»ααααααΆααααααΉααααααΆααααΆαα’αα»αααααΆαααΆ (α§ααΆα αααααΆαααα ααααα Git ααΎααααΈαααααααΆααΆαααα linter) α
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 α α§ααΆα ααα α―αααΆαααΆαααΎααΈα―αααΆα 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 ααααα’αααααααα αΎαααααααα!
ααααα: www.habr.com