أقوم بالكثير من المراجعات لرمز شخص آخر في Ansible وأكتب الكثير بنفسي. في سياق تحليل الأخطاء (الغرباء وأخطائي) ، بالإضافة إلى عدد من المقابلات ، أدركت الخطأ الرئيسي الذي يرتكبه مستخدمو Ansible - فهم يصعدون إلى صعوبة دون إتقان الخطأ الأساسي.
لتصحيح هذا الظلم العالمي ، قررت أن أكتب مقدمة لـ Ansible لأولئك الذين يعرفون ذلك بالفعل. أحذركم ، هذا ليس رواية للرجل ، هذا قراءة طويلة مع العديد من الحروف ولا صور.
مستوى القارئ المتوقع - تمت كتابة عدة آلاف من خطوط الجيم بالفعل ، بالفعل شيء في الإنتاج ، ولكن "بطريقة ما كل شيء معوج".
الأسماء
الخطأ الرئيسي لمستخدم Ansible هو عدم معرفة ما يسمى. إذا كنت لا تعرف الأسماء ، فلا يمكنك فهم ما هو مكتوب في الوثائق. مثال حي: في مقابلة ، الشخص الذي بدا أنه أعلن أنه كتب الكثير في Ansible ، لم يتمكن من الإجابة على السؤال "ما العناصر التي يتكون منها كتاب اللعب؟" وعندما اقترحت أن "الجواب هو أن كتاب اللعب يتكون من اللعب" ، فإن التعليق القاتل "نحن لا نستخدم هذا" يتبعه. يكتب الناس في Ansible من أجل المال ولا يستخدمون اللعب. إنهم يستخدمونه بالفعل ، لكنهم لا يعرفون ما هو.
لنبدأ بسيطًا: ما يطلق عليه. ربما تعرف هذا ، أو ربما لا ، لأنك لم تنتبه عند قراءة الوثائق.
ansible-playbook ينفذ playbook. كتاب التشغيل هو ملف بامتداد yml / yaml ، بداخله شيء مثل هذا:
---
- hosts: group1
roles:
- role1
- hosts: group2,group3
tasks:
- debug:
لقد أدركنا بالفعل أن هذا الملف بأكمله عبارة عن كتاب تشغيل. يمكننا أن نظهر أين توجد الأدوار وأين توجد المهام. لكن أين اللعب؟ وكيف يختلف اللعب عن الدور أو كتاب اللعب؟
الوثائق لديها كل شيء. ويفتقدونه. للمبتدئين - لأن هناك الكثير ولا يمكنك تذكر كل شيء دفعة واحدة. من ذوي الخبرة - لأن "الأشياء التافهة". إذا كنت من ذوي الخبرة ، فأعد قراءة هذه الصفحات مرة واحدة على الأقل كل نصف عام ، وستصبح التعليمات البرمجية الخاصة بك فئة أفضل.
لذلك ، تذكر: كتاب اللعب هو قائمة اللعب و import_playbook
.
هذه مسرحية واحدة:
- hosts: group1
roles:
- role1
وهذه مسرحية أخرى أيضًا:
- hosts: group2,group3
tasks:
- debug:
ما هو اللعب؟ لماذا هل هي؟
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 , - .
- متغيرات المجموعة ، البرنامج المساعد host_group_vars ، hostvars. كيفية ربط عقدة جوردي من السباغيتي. متغيرات النطاق والأسبقية ، نموذج الذاكرة Ansible. "إذن أين لا يزال يتم تخزين اسم المستخدم لقاعدة البيانات؟"
jinja: {{ jinja }}
- nosql نوع البلاستيسين لينة هراء. إنه في كل مكان ، حتى في المكان الذي لا تتوقعه فيه. قليلا المؤيد!!unsafe
ويامل لذيذ.