أساسيات Ansible التي من دونها تكون كتب اللعب الخاصة بك مجموعة من المعكرونة

أقوم بالكثير من المراجعات لرمز شخص آخر في 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ويامل لذيذ.



All Articles