Using variables in ansible PlayBook


  • همانند تمام زبان‌های برنامه نویسی، در زبان 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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *