Ansible: كيفية تحديث مخزون المضيف في وقت التشغيل وإضافة وقفة أثناء تنفيذ Playbook؟
نشرت: 2022-02-14 في Crunchify ، قمنا بنشر عدد كبير من البرامج التعليمية حول Ansible وسيركز هذا البرنامج على How to Refresh Host Inventory
في وقت التشغيل Add a Pause
أثناء تنفيذ المهام.
لنفكر في سيناريو إنشاء Amazon EC2 VM البسيط:
- أنت تقوم بتشغيل برنامج نصي من Amazon EC2 Ansible والذي ينتج عنه جهاز افتراضي وتقوم بالتقاط عناوين IP العامة بشكل ديناميكي في النص.
- أثناء التنفيذ - أنت تضيف IP العام لهذا الجهاز الظاهري إلى ملف
hosts
ضمن مجموعة[crunchify]
. - في المهمة اللاحقة ، استخدم عنوان IP العام المُضاف حديثًا والذي تمت إضافته إلى ملف المضيفين وقم بتثبيت Java عليه.
- إذا كنت لا تستخدم
refresh_inventory
، فلن تلتقط عنوان IP المُضاف حديثًا وسترى الفشل كما هو مذكور أدناه.
1 2 |
PLAY [ crunchify ] ************************************* skipping : no hosts matched |
بالإضافة إلى ذلك ، هل لديك أي من الأسئلة أدناه؟
- كيفية إعادة تحميل
dynamic inventory
- خطوات تحديث المخزون الديناميكي الجديرة بالثقة
- هل يمكنني تحديث مخزون المضيفين واستخدام مضيفين جدد في
same playbook
؟ - فشل Ansible Dynamic Inventory في الحصول على أحدث معلومات EC2 - لماذا؟
هيا بنا نبدأ:
الخطوة 1
اتبع البرنامج التعليمي تمامًا حول كيفية spawn Amazon EC2 VM instance remotely using Ansible
؟
كيفية إنشاء مثيل Amazon EC2 وبدء تشغيله وتكوينه باستخدام برنامج Ansible Script البسيط؟ (تفرخ VM عن بعد)
الخطوة 2
ابحث عن المهمة أدناه في ملف crunchify-ec2.yml
.
1 2 3 4 5 6 |
- name : Add the newly created EC2 instance ( s ) to the local host group local_action : lineinfile path = hosts regexp = { { item . public_ip } } insertafter = "[crunchify]" line = { { item . public_ip } } with_items : '{{ec2_crunchify.instances}}' |
كما ترى هنا ، بعد إنشاء Amazon EC2 VM
، فإننا نلتقط عنوان IP العام لجهاز VM ونخزنه في ملف hosts
إذا كان لديك بعض المهام الإضافية في نفس .yml file
فلن يتم تحميل عناوين IP تلقائيًا. ما عليك سوى إضافة السطر أدناه إلى Ansible Playbook الخاص بك وسوف يقوم تلقائيًا بتحديث كل قائمة الجرد الخاصة بك.
1 |
- meta : refresh_inventory |
بنفس الطريقة إذا كنت تريد إضافة الانتظار فقط أضف السطر التالي:
1 2 |
- pause : minutes : 1 |
ستقدم العلامة أعلاه فترة انتظار طويلة إلى كتاب اللعب Ansible الخاص بك.
تحديث Ansible Playbook لـ Amazon EC2 مع الانتظار وتحديث التعريف
هذا هو نموذج الاختبار الخاص بي Ansible Playbook:
اسم الملف: crunchify-Refresh-hostfile-pause-1min.yml
1 2 3 4 5 6 7 8 9 10 11 |
--- - name : Refresh Host Inventory at Runtime and Add a Pause while Executing Playbook hosts : local connection : local gather_facts : True tasks : - meta : refresh_inventory - pause : minutes : 1 |
انتاج:
ما عليك سوى تشغيل Ansible Playbook مرة أخرى وسترى نتيجة ناجحة على النحو التالي.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
bash - 3.2 $ ansible - playbook - vvv - i . / hosts crunchify - refresh - hostfile - pause - 1min.yml config file = None configured module search path = [ u '/Users/crunchify/.ansible/plugins/modules' , u '/usr/share/ansible/plugins/modules' ] ansible python module location = / Library / Python / 2.7 / site - packages / ansible executable location = / usr / local / bin / ansible - playbook python version = 2.7.16 ( default , Jul 14 2019 , 03 : 47 : 49 ) [ GCC 4.2.1 Compatible Apple LLVM 11.0.0 ( clang - 1100.0.32.4 ) ( - macos10 . 15 - objc - s No config file found ; using defaults / Users / crunchify / Documents / ansible / hosts did not meet host_list requirements , check plugin documentation if this is unexpected / Users / crunchify / Documents / ansible / hosts did not meet script requirements , check plugin documentation if this is unexpected Parsed / Users / crunchify / Documents / ansible / hosts inventory source with ini plugin PLAYBOOK : crunchify - refresh - hostfile - pause - 1min.yml ************************************************************************************************************************ 1 plays in crunchify - refresh - hostfile - pause - 1min.yml PLAY [ Refresh Host Inventory at Runtime and Add a Pause while Executing Playbook . ] ***************************************************************************************************** TASK [ Gathering Facts ] ***************************************************************************************************************************************************** task path : / Users / crunchify / Documents / ansible / crunchify - refresh - hostfile - pause - 1min.yml : 2 < localhost > ESTABLISH LOCAL CONNECTION FOR USER : crunchify < localhost > EXEC / bin / sh - c 'echo ~crunchify && sleep 0' < localhost > EXEC / bin / sh - c '( umask 77 && mkdir -p "` echo /Users/crunchify/.ansible/tmp/ansible-tmp-1567083207.3-89685003930906 `" && echo ansible-tmp-1567083207.3-89685003930906="` echo /Users/crunchify/.ansible/tmp/ansible-tmp-1567083207.3-89685003930906 `" ) && sleep 0' Using module file / Library / Python / 2.7 / site - packages / ansible / modules / system / setup . py < localhost > PUT / Users / crunchify / . ansible / tmp / ansible - local - 47439Jkp0pq / tmpa9O5B0 TO / Users / crunchify / . ansible / tmp / ansible - tmp - 1567083207.3 - 89685003930906 / AnsiballZ_setup . py < localhost > EXEC / bin / sh - c 'chmod u+x /Users/crunchify/.ansible/tmp/ansible-tmp-1567083207.3-89685003930906/ /Users/crunchify/.ansible/tmp/ansible-tmp-1567083207.3-89685003930906/AnsiballZ_setup.py && sleep 0' < localhost > EXEC / bin / sh - c 'python /Users/crunchify/.ansible/tmp/ansible-tmp-1567083207.3-89685003930906/AnsiballZ_setup.py && sleep 0' < localhost > EXEC / bin / sh - c 'rm -f -r /Users/crunchify/.ansible/tmp/ansible-tmp-1567083207.3-89685003930906/ > /dev/null 2>&1 && sleep 0' ok : [ localhost ] META : ran handlers / Users / crunchify / Documents / ansible / hosts did not meet host_list requirements , check plugin documentation if this is unexpected / Users / crunchify / Documents / ansible / hosts did not meet script requirements , check plugin documentation if this is unexpected Parsed / Users / crunchify / Documents / ansible / hosts inventory source with ini plugin META : inventory successfully refreshed TASK [ pause ] *************************************************************************************************************************************************************** task path : / Users / crunchify / Documents / ansible / crunchify - refresh - hostfile - pause - 1min.yml : 10 Pausing for 60 seconds ( ctrl + C then 'C' = continue early , ctrl + C then 'A' = abort ) ok : [ localhost ] = > { "changed" : false , "delta" : 60 , "echo" : true , "rc" : 0 , "start" : "2019-08-29 07:53:28.064115" , "stderr" : "" , "stdout" : "Paused for 1.0 minutes" , "stop" : "2019-08-29 07:54:28.064686" , "user_input" : "" } META : ran handlers META : ran handlers PLAY RECAP * **************************************************************************************************************************************************************** localhost : ok = 2 changed = 0 unreachable = 0 failed = 0 |
هذا هو. تهانينا. لقد قمت بتشغيل Ansible Playbook بنجاح.

إذا كنت تبحث عن جميع دروس Ansible ، فالرجاء اتباع صفحة Ansible Archive.