- همانند تمام زبانهای برنامه نویسی، در زبان Yaml نیز میتوان از شروط در حالات مختلف استفاده نمود.
- برای درک بهتر این مبحث، مثالهایی در زیر جمع آوری شده است.
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا بررسی شود آیا توزیع از مشتقات RedHat است یا خیر.
- سپس آخرین نسخه از سرویس httpd بر روی آن نصب یا بروز رسانی میشود.
--- - name: PlayBook name hosts: centos-servers gather_facts: yes tasks: - name: install httpd package yum: name=httpd state=latest when: ansible_os_family == "RedHat" ...
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- نکته: توجه داشته باشید از آن جایی که از متغیر ansible_os_family استفاده کردیم، انتظار میرود که مقدار کلید gather_facts بر روی yes تنظیم شده باشد.
- نکته: با استفاده از کلمهی when تعیین کردیم در صورتی که ماژول yum فراخوانی شود که مقدار متغییر ansible_os_family برابر با RedHat باشد.
- نکته: مقدار متغییر (در مثال بالا RedHat) به حروف بزرگ و کوچک حساس میباشد. یعنی RedHat و redhat دو کلمهی جدا از هم در نظر گرفته میشود.
- نکته: در صورتی که شرط برقرار نباشد، فرآیند مربوطه اصطلاحا به صورت skipping یا تعلیق در خواهد آمد.
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا بررسی شود که توزیع از جنس Debian ، Ubuntu یا CentOS است.
- سپس متناسب با آن، متنی با مضمون نام توزیع چاپ شود.
--- - name: PlayBook name hosts: all gather_facts: yes tasks: - debug: msg="host is centos" when: ansible_distribution=="CentOS" - debug: msg="host is debian" when: ansible_distribution=="Debian" - debug: msg="host is ubuntu" when: ansible_distribution=="Ubuntu" ...
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- نکته: توجه داشته باشید از آن جایی که از متغیر ansible_distribution استفاده کردیم، انتظار میرود که مقدار کلید gather_facts بر روی yes تنظیم شده باشد.
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا بررسی شود آیا توزیع از جنس Debian است یا خیر.
- سپس متنی متناسب با آن چاپ شود.
--- - name: PlayBook name hosts: all gather_facts: yes tasks: - name: echo msg debug: msg="I am Debian !" when: ansible_facts['distribution'] == "Debian" # note that all variables can be used directly in conditionals without double curly braces ...
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- نکته: در مثال بالا به نحوه استفاده از متغیر توجه کنید.
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا بررسی شود آیا توزیع از جنس Debian است یا خیر.
- سپس بررسی میشود آیا نسخه توزیع برابر با ۱۰ است یا خیر.
- در نهایت متنی متناسب با پاسخ، چاپ خواهد شد.
--- - name: PlayBook name hosts: all gather_facts: yes tasks: - name: "Find only debian 10" debug: msg="I am Debian 10 !" when: - ansible_facts['distribution'] == "Debian" - ansible_facts['distribution_major_version'] == "10" ...
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- نکته: در مثال بالا از دو شرط به صورت هم زمان استفاده کردیم لذا زمانی شرط اجرا میشود که هر دو شرط صحیح و برقرار باشد. به بیان دیگر در این مثال به “و منطقی” پرداخته شده است.
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا بررسی شود آیا توزیع از جنس Debian است یا خیر.
- سپس بررسی میشود آیا توزیع از جنس Ubuntu است یا خیر.
- در نهایت در صورتی که یکی از شروط صدق کرد، متنی دلخواه چاپ شود.
--- - name: PlayBook name hosts: all gather_facts: yes tasks: - name: "Find debian base" debug: msg="debian base" when: (ansible_facts['distribution'] == "Debian") or (ansible_facts['distribution'] == "Ubuntu") ...
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- نکته: در کد بالا از دو شرط به صورت همزمان استفاده کردیم اما زمانی شرط اجرا میشود که تنها یکی از شروط برقرار باشد. به بیان دیگر در این مثال به “یا” پرداخته شده است.
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا با استفاده از دستور ls بررسی شود آیا پروندهای با نام null.file در پوشهی tmp/ وجود دارد یا خیر.
- سپس خروجی دستور ls درون متغیری با نام result_variable ریخته شود.
- در نهایت متناسب با خروجی دستور ls متنی با مضمون fail یا succeed چاپ شود.
--- - name: PlayBook name hosts: debian-servers gather_facts: yes tasks: - command: ls /tmp/null.file register: result_variable # This is just a variable name ignore_errors: True - debug: msg="fail" when: result_variable is failed # In older versions of ansible use ``success``, now both are valid but succeeded uses the correct tense. - debug: msg="succeed" when: result_variable is succeeded ...
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا بررسی شود آیا توزیع از جنس Debian است یا خیر.
- سپس بررسی شود آیا نسخهی توزیع بالاتر از ۶ است یا خیر.
- در نهایت متناسب با پاسخ، متنی چاپ شود.
--- - name: PlayBook name hosts: debian-servers gather_facts: yes tasks: - name: "finding version greater than 6" debug: msg="finding version greater than 6" when: ansible_facts['distribution'] == "Debian" and ansible_facts['distribution_major_version'] | int >= 6 ...
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- نکته: در مثال بالا از دو شرط به صورت هم زمان استفاده کردیم لذا زمانی شرط اجرا میشود که هر دو شرط صحیح و برقرار باشد. به بیان دیگر در این مثال به “و منطقی” پرداخته شده است.
- به منظور مطالعهی بیشتر لینک زیر پیشنهاد میشود :
https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html
- Conditionals – لوکال
- آزمایش شده بر روی Ansible نسخهی 2.5.1
- آزمایش شده بر روی سیستم عامل Ubuntu 18.04