مدیریت بهتر متغیر ها در Ansible
بررسی متغیر ها در Ansible اغلب میتونه آزمایش خوبی باشه که از بروز خطاهای مختلف در حین اجرا جلوگیری کنیم. در این مطلب به بررسی روش های ساده آن میپردازیم.
حتما خیلی پیش اومده که حین اجرای Playbook های خودتون به خطاهای مربوط به متغیر ها برخورد کنید. مواردی که اکثرا اتفاقی بوده و طی سهل انگاری های کوچیک به وجود میان.
در این زمینه چندین تست مفید وجود داره که با دستورات Jinja2 انجام میشه و میتونید از اون ها برای رفع مشکلات خودتون استفاده کنید.
بررسی موجود بودن متغیر
در ابتدا میتوانیم بررسی کنیم یک متغیر موجود است ( تعریف شده ) یا خیر :
- shell: echo "The variable 'foo' is defined: '{{ foo }}'"
when: foo is defined
- fail: msg="The variable 'bar' is not defined"
when: bar is undefined
بررسی خالی بودن متغیر
گاهی اوقات ممکن است متغیر ما تعریف شده ولی مقداری برای آن ثبت نشده باشد. در این موارد شاید خطای خاصی وجود نداشته باشه ولی در حین اجرا قطعا دستورات به مشکل خواهند خورد.
- fail: msg="The variable 'bar' is empty"
when: bar|length == 0
- shell: echo "The variable 'foo' is not empty: '{{ foo }}'"
when: foo|length > 0
بررسی موجود بودن و خالی نبودن متغیر
ایده آل ترین حالت این است که متغیر موجود بوده و مقداری هم برای آن در نظر گرفته شده باشد. چنین حالتی را به روش زیر میتوانیم بررسی کنیم :
- shell: echo "The variable 'foo' is defined and not empty"
when: (foo is defined) and (foo|length > 0)
- fail: msg="The variable 'bar' is not defined or empty"
when: (bar is not defined) or (bar|length == 0)
بررسی مقدار متغیر
همچنین راه های ساده ای نیز برای بررسی مقدار متغیر وجود دارد. برای مثال یک متغیر صحیح/غلط ( Boolean ) :
- shell: echo "The variable 'foo' is 'True'"
when: foo|bool == True
- shell: echo "The variable 'bar' is 'False'"
when: bar|bool == False
نمایش متغیر ها
راه ساده دیگری برای بررسی مشکلات متغیر ها ، چاپ/نمایش اون هاست. برای چاپ پیام و همچنین مقدار یک متغیر میتوانیم از ماژول debug
استفاده کنیم.
چاپ یک متغیر
- name: "Ansible | Print a variable"
debug:
msg: "The operating system is {{ ansible_distribution }}"
چاپ یک متغیر وقتی تعریف شده باشد
- name: "Ansible | Print a variable if defined"
debug:
msg: "The 'foo' variable value is {{ foo }}"
when: foo is defined
- name: "Ansible | Print a message if a variable is undefined"
debug:
msg: "The 'bar' variable is undefined"
when: bar is not defined
چاپ چند متغیر
- name: "Ansible | Print multiple variable"
debug:
msg: |
The role is {{ host_role }}
The environment is {{ host_environment }}
چاپ کل متغیر های تعریف شده
- name: "Ansible | List all known variables and facts"
debug:
var: hostvars[inventory_hostname]