Saya melakukan banyak ulasan untuk kode orang lain di Ansible dan banyak menulis sendiri. Saat menganalisis kesalahan (baik orang asing maupun milik saya), serta sejumlah wawancara, saya menyadari kesalahan utama yang dilakukan pengguna yang Mungkin - mereka naik ke tingkat kesulitan tanpa menguasai yang mendasar.
Untuk memperbaiki ketidakadilan universal ini, saya memutuskan untuk menulis pengantar untuk Ansible bagi mereka yang sudah mengetahuinya. Saya peringatkan Anda, ini bukan menceritakan kembali tentang para lelaki, ini sudah lama dibaca dengan banyak surat dan tanpa gambar.
Tingkat pembaca yang diharapkan - beberapa ribu baris jame telah ditulis, sudah menjadi sesuatu dalam produksi, tetapi "entah bagaimana semuanya bengkok."
Nama
Kesalahan utama dari pengguna Ansible adalah tidak tahu apa yang disebut. Jika Anda tidak tahu nama-namanya, Anda tidak dapat memahami apa yang tertulis dalam dokumentasi. Contoh hidup: pada sebuah wawancara, seseorang yang tampaknya menyatakan bahwa ia menulis banyak hal di Ansible, tidak dapat menjawab pertanyaan "elemen apa yang terdiri dari buku pedoman itu?" Dan ketika saya diminta bahwa "sebuah jawaban diharapkan bahwa buku pedoman itu terdiri dari permainan", maka ada komentar mematikan "kami tidak menggunakan ini." Orang-orang menulis dalam Kemungkinan untuk uang dan tidak menggunakan permainan. Sebenarnya digunakan, tetapi tidak tahu apa itu.
Jadi mari kita mulai dengan yang sederhana: apa yang disebut. Mungkin Anda tahu ini, tetapi mungkin tidak, karena Anda tidak memperhatikan ketika membaca dokumentasi.
ansible-playbook memainkan playbook. Playbook adalah file dengan ekstensi yml / yaml, di dalamnya ada sesuatu seperti ini:
---
- hosts: group1
roles:
- role1
- hosts: group2,group3
tasks:
- debug:
Kami telah menyadari bahwa seluruh file ini adalah buku pedoman. Kita dapat menunjukkan di mana peran berada, di mana tugas berada. Tapi di mana bermain? Dan bagaimana bermain berbeda dari peran atau buku pedoman?
Dokumentasi memiliki semuanya. Dan mereka melewatkannya. Pemula - karena ada terlalu banyak dan Anda tidak dapat mengingat semuanya sekaligus. Berpengalaman - karena "hal-hal sepele". Jika Anda berpengalaman, baca kembali halaman-halaman ini setidaknya sekali setiap setengah tahun, dan kode Anda akan menjadi kelas yang lebih baik.
Jadi, ingat: buku pedoman adalah daftar permainan dan import_playbook
.
Ini satu sandiwara:
- hosts: group1
roles:
- role1
dan ini juga permainan lain:
- hosts: group2,group3
tasks:
- debug:
Apa itu bermain? Kenapa dia?
Play — playbook, play play / , . delegate_to
, lookup-, network-cli- , jump- .. . , . , . , .
"-" "-" — play. . . play. , hosts , roles/tasks — .
, ? ?
, play, ", ". , , .
. monitoring, . monitoring ( . play). , , , . delegate? iptables. delegate? / , . delegate! , include_role
, include_role
delegate_to
. ...
— - monitoring, " " — : .
? , , "x" X Y "y", : play, Y y. - "x", . .
, . ! , DRY , .
. , ( , ) , . , - .
: — . , . — . play. , play?
, . Play (, ) , .
, , ( , ) . . play. , , , .
COBOL jinja. — , . "" — .
: , , control flow. delegate_to
. meta: end host/play
. ! , ? delegate_to
. . , , , . , :
play play .
play role. tasks vs role.
play:
- hosts: somegroup
pre_tasks:
- some_tasks1:
roles:
- role1
- role2
post_tasks:
- some_task2:
- some_task3:
, foo. foo: name=foobar state=present
. ? pre? post? role?
… tasks?
— play. , play , "".
play: hosts, play pre_tasks, tasks, roles, post_tasks. play .
: pre_tasks
, roles
, tasks
, post_tasks
. tasks
roles
, best practices , tasks
, roles
. roles
, pre_tasks
/post_tasks
.
, : pre_tasks
, roles
, post_tasks
.
: foo
? ? ? , — pre post?
, , " ". . : play pre_tasks
post_tasks
( tasks, roles), - , post_tasks
pre_tasks
?
, , . ?
… . : flush' . .. pre_tasks
, , notify. , notify . post_tasks
.
, post_tasks
pre_tasks
, , , handler'. , pre_tasks
-, post_tasks
- , pre_tasks
, "" .
, pre_tasks
post_tasks
? , , ( ) . post_tasks
( ).
Ansible , meta: flush_handlers
, flush_handlers, play? , meta: flush_handlers , when
block
.. , "" . — pre/roles/post — .
, , 'foo'. ? pre, post roles? , , foo. , foo pre, post — — .
" " , play — tasks, tasks. roles — ( task). , tasks roles .
, , .
( )
, . foo, bar baz. , ? : ? , ?… ?
( ) — , — . ? , side causes, side effects, .
, . ? side effects — , — -. side causes? . " " — - . -, . play vars . play . (set_fact
/register
). " ". " " " ".
: ansible - -. — side effect . Rust, , — unsafe
. — . : " ", " , ". . .
: — .
? -, default values (/default/main.yaml
), - .
default values? , , role defaults — ( ). , - , — . ( — |d(your_default_here)
, — ).
? , . , (.. ), ( , - — include_vars
{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml
.). files/
, templates/
. , (library/
). , playbook' ( ), , , .
: , ( galaxy). .
, : ( ) .
: ? "" / , ( ). — . — , . , . "" ( ) , .
import_role , , , .
, , galaxy.yml, include_role
— , , .
: . — . ?
, :
- hosts: group1
tasks:
- foo:
notify: handler1
handlers:
- name: handler1
bar:
handler' rolename/handlers/main.yaml. Handler' play: pre/post_tasks handler' , handler' . , "-" handler' wtf, handler'. ( best practices — handler').
, () (/ when
), — (notify changed). ? , , , changed, handler. , handler changed ? , - changed , . , . , . , .
(, .., 'basic ansible' ). : , .service
-, daemon_reload
state=started
. , , . , . . restarted ( restarted, .. ), state=started, , .. .
handler' , . — skipped ok — . — task' , handler' changed, .. — . , . , , . — changed- .
. , notify , ? , , , .
… handler' , . - ( ) . — .
, listen
, handler notify handler', handler import_tasks ( include_role c with_items), -, include_role .. — "").
WTF, , . delegate_to
notify, delegate_to
, .. , play. ( , , delegate_to
).
reusable roles. , , ansible-galaxy install
. . , : . include_vars
, 100500 corner case . , , , " ". — , ( 1).
if' ( — when
include_vars
), . , , , , . galaxy ( !) when
, "" . , galaxy — - . , — - , , - " galaxy". , , - when
'… . 5 , - .
- variabel grup, plugin host_group_vars, hostvars. Cara mengikat simpul Gordian dari spageti. Variabel lingkup dan prioritas, Model memori yang memungkinkan. "Jadi di mana nama pengguna untuk basis data disimpan?"
jinja: {{ jinja }}
- nosql notype nosense soft plasticine. Itu ada di mana-mana, bahkan di mana Anda tidak mengharapkannya. Sedikit pro!!unsafe
dan yaml enak.