- همانند تمام زبانهای برنامه نویسی، در زبان Yaml نیز میتوان از متغیر استفاده نمود.
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا دو متغیر با نامهای my_hosts و my_command تعریف و مقادیری برای آنان در نظر گرفته شود.
- سپس دستور whoami بر روی تمامی خادمهای تحت مدیریت اجرا شود.
---
- name: PlayBook
hosts: '{{my_hosts}}'
gather_facts: no
vars:
my_hosts: all
my_command: whoami
tasks:
- name: run whoami command in all servers
command: '{{my_command}}'
...
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- لطفا توجه داشته باشید که متغیر باید در درون ‘{{}}’ قرار داشته باشد.
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا دو متغیر با نامهای my_hosts و my_command تعریف شود اما مقادیری برای آنان در نظر گرفته نشود.
---
- name: PlayBook
hosts: '{{my_hosts}}'
gather_facts: no
tasks:
- name: run command in all servers
command: '{{my_command}}'
...
- نکته: با توجه به این که مقادیری برای متغیرها در نظر گرفته نشده است، لذا در زمان اجرای PlayBook باید مقادیر هر متغیر مشخص شود.
ansible-playbook playbook.yaml --extra-vars "my_hosts=all my_command=whoami"
- نکته: برای معرفی و تعیین متغیر از سویچ extra-vars– استفاده میشود.
- نکته: در درون پروندههای PlayBook از آرایه نیز میتوان استفاده نمود.
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا آرایهای با نام hello تعریف شده و مقادیری برای آن در نظر گرفته میشود.
- سپس مقداری خاص از این آرایه فراخوانی میشود تا چاپ و نمایش داده شود.
- hosts: all
vars:
hello:
- World
- Asia
- South America
- North America
- Artic
- Antartic
- Oceania
- Europe
- Africa
tasks:
- name: Ansible List variable Example
debug:
msg: "{{ hello[2] }}"
- نکته: برای اشاره به اولین مقدار باید از عدد صفر شروع کرد. لذا عدد دو در مثال بالا اشاره به مقدار South America دارد.
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا آرایهای با نام hello تعریف شود و مقادیری برای آن در نظر گرفته شود.
- سپس با استفاده از حلقه کلیه مقادیر آن چاپ و نمایش داده شود.
- hosts: all
vars:
hello: [Asia, Americas, Artic, Antartic ,Oceania,Europe,Africa]
tasks:
- name: Ansible array variables example
debug:
msg: "{{ item }}"
with_items:
- "{{ hello }}"
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- نکته: امکان تعریف مقادیر متغیر به صورت کلید و مقدار نیز وجود دارد.
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا متغیری با نام python تعریف شده و مقادیر آن به صورت کلید و مقدار در نظر گرفته شود.
- سپس مقادیر این متغیر چاپ و نمایش داده شود.
- hosts: all
vars:
python:
Designer: 'Guido van Rosum'
Developer: 'Python Software Foundation'
OS: 'Cross-platform'
tasks:
- name: Ansible Dictionary Example
debug:
msg: "{{ python }}"
- نکته: لطفا به نحوهی اشاره به متغیر که به صورت رنگی مشخص شده است، دقت کنید.
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- نکته: امکان اشاره به مقادیری خاص از متغیر نیز وجود دارد.
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا متغیری با نام python تعریف شده و مقادیر آن به صورت کلید و مقدار در نظر گرفته شود.
- سپس مقادیری خاص از این متغیر چاپ و نمایش داده شود.
- hosts: all
vars:
python:
Designer: 'Guido van Rosum'
Developer: 'Python Software Foundation'
OS: 'Cross-platform'
tasks:
- name: Ansible Hash Example
debug:
msg: "{{python['Designer'] }}"
- name: Ansible Find Example
debug:
msg: "{{python.Designer }}"
- نکته: لطفا به نحوهی اشاره به متغیر که به صورت رنگی مشخص شده است، دقت کنید.
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- نکته: امکان چاپ نام کلید و مقدار آن از یک متغیر وجود دارد.
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا متغیری با نام python تعریف شده و مقادیر آن به صورت کلید و مقدار در نظر گرفته شود.
- سپس مقادیری خاص از این متغیر چاپ و نمایش داده شود.
- hosts: all
vars:
python:
Designer: 'Guido van Rossum'
Developer: 'Python Software Foundation'
OS: 'Cross-platform'
tasks:
- name: Ansible Dictionary variable Example
debug:
msg: "Key is {{ item.key}} and value is {{item.value}}"
with_dict: "{{ python }}"
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- در صورت اجرای موفقیت آمیز پروندهی PlayBook ، خروجیای مشابه زیر دریافت خواهید کرد :
PLAY [all] *******************************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************************
ok: [172.16.0.245]
TASK [Ansible Dictionary variable Example] ***********************************************************************************************************
ok: [172.16.0.245] => (item=None) => {
"msg": "Key is Designer and value is Guido van Rossum"
}
ok: [172.16.0.245] => (item=None) => {
"msg": "Key is OS and value is Cross-platform"
}
ok: [172.16.0.245] => (item=None) => {
"msg": "Key is Developer and value is Python Software Foundation"
}
PLAY RECAP *******************************************************************************************************************************************
172.16.0.245 : ok=2 changed=0 unreachable=0 failed=0
- به مواردی که به صورت رنگی مشخص شده است، دقت کنید.
- نکته: امکان تخصیص جملههای چند خطی به عنوان مقدار برای متغیر وجود دارد.
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا دو متغیر با نامهای include_newlines_example و ignore_newlines_example2 تعریف شود.
- سپس مقادیر این متغیر چاپ و نمایش داده شود.
- hosts: all
vars:
include_newlines_example: |
The new line charaters
will appear
ignore_newlines_example2: >
The new line character will
be removed. Useful when editing
lines
tasks:
- name: Ansible varible multiple line Example
debug:
msg: "{{ include_newlines_example.split('\n') }}"
- name: Ansible variables multiline Example
debug:
msg: "{{ ignore_newlines_example2.split('\n') }}"
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- در صورت اجرای موفقیت آمیز پروندهی PlayBook ، خروجیای مشابه زیر دریافت خواهید کرد :
PLAY [all] *******************************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************************
ok: [172.16.0.245]
TASK [Ansible varible multiple line Example] *********************************************************************************************************
ok: [172.16.0.245] => {
"msg": [
"The new line charaters",
"will appear ",
""
]
}
TASK [Ansible variables multiline Example] ***********************************************************************************************************
ok: [172.16.0.245] => {
"msg": [
"The new line character will be removed. Useful when editing lines",
""
]
}
- به مواردی که به صورت رنگی مشخص شده است، دقت کنید.
- به منظور مطالعهی بیشتر لینکهای زیر پیشنهاد میشود :
https://www.mydailytutorials.com/the-basics-of-ansible-variables/
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html
- آزمایش شده بر روی Ansible نسخهی 2.5.1
- آزمایش شده بر روی سیستم عامل Ubuntu 18.04