مدیریت بهتر متغیر ها در Ansible

بررسی متغیر ها در 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]