آموزش دسترسی به اطلاعات سیستم (Facts) در Ansible Playbookها

به‌طور پیش‌فرض، قبل از اجرای مجموعه‌ای از تسک‌هایی که در یک playbook تعریف شده‌اند، Ansible چند لحظه‌ای صرف جمع‌آوری اطلاعات درباره سیستم‌هایی که در حال پروویژن هستند می‌کند. این اطلاعات که به آن‌ها facts گفته می‌شود، شامل جزئیاتی مانند اینترفیس‌ها و آدرس‌های شبکه، سیستم عامل در حال اجرا روی نودهای ریموت و حافظه‌ی موجود، و موارد دیگر است.

Ansible facts را در فرمت JSON ذخیره می‌کند که آیتم‌ها در قالب nodes گروه‌بندی شده‌اند. برای بررسی اینکه چه نوع اطلاعاتی برای سیستم‌هایی که پروویژن می‌کنید در دسترس است، می‌توانید ماژول setup را با یک فرمان ad hoc اجرا کنید:
ansible all -i inventory -m setup -u sammy

این فرمان خروجی مفصل JSON حاوی اطلاعاتی درباره سرور شما تولید می‌کند. برای به‌دست آوردن زیرمجموعه‌ای از این داده‌ها، می‌توانید از پارامتر filter استفاده کرده و الگوی دلخواه را ارائه دهید. مثلاً اگر می‌خواهید اطلاعات مربوط به همه آدرس‌های IPv4 در نودهای ریموت را بدست آورید، می‌توانید از فرمان زیر استفاده کنید:
ansible all -i inventory -m setup -a "filter=*ipv4*" -u sammy

خروجی مشابه زیر خواهید دید:

Output
203.0.113.10 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "203.0.113.10", 
            "198.51.100.23"
        ], 
        "ansible_default_ipv4": {
            "address": "203.0.113.10", 
            "alias": "eth0", 
            "broadcast": "203.0.113.255", 
            "gateway": "203.0.113.1", 
            "interface": "eth0", 
            "macaddress": "06:c7:91:16:2e:b7", 
            "mtu": 1500, 
            "netmask": "203.0.113.0", 
            "network": "203.0.113.0", 
            "type": "ether"
        }
    }, 
    "changed": false
}

وقتی که facts مفیدی برای playbook خود پیدا کردید، می‌توانید آن را در playbook خود به‌روزرسانی کنید. به‌عنوان مثال، playbook زیر آدرس IPv4 اینترفیس شبکه‌ی پیش‌فرض را چاپ می‌کند. از خروجی قبلی فرمان، می‌دانیم که این مقدار از طریق ansible_default_ipv4.address در JSON خروجی Ansible قابل دسترسی است.

یک فایل جدید با نام playbook-03.yml در دایرکتوری ansible-practice خود ایجاد کنید:
nano ~/ansible-practice/playbook-03.yml

سپس خطوط زیر را به فایل playbook اضافه کنید:

---
- hosts: all
  tasks:
    - name: print facts
      debug:
        msg: "IPv4 address: {{ ansible_default_ipv4.address }}"

بعد از اینکه فایل را ذخیره و بستید، برای اجرای این playbook روی سرورهای موجود در فایل inventory خود، با استفاده از همان پارامترهای اتصال که قبلاً در مثال‌های قبلی استفاده کرده‌اید، دستور ansible-playbook را اجرا کنید. ما از فایل inventory با نام inventory و کاربر sammy برای اتصال به سرورها استفاده می‌کنیم:
ansible-playbook -i inventory playbook-03.yml -u sammy

وقتی playbook را اجرا می‌کنید، آدرس IPv4 سرور ریموت شما در خروجی به‌صورت مورد انتظار نمایش داده خواهد شد:

Output
...

TASK [print facts] ***************************************************************************************************************************************************************************
ok: [server1] => {
    "msg": "IPv4 address: 203.0.113.10"
}

...

Facts داده‌های مهمی را در بر دارند که می‌توانید برای سفارشی‌سازی بهتر playbookهای خود از آن‌ها استفاده کنید. برای یادگیری بیشتر در مورد تمام اطلاعاتی که می‌توانید از طریق facts به دست آورید، لطفاً به مستندات رسمی Ansible مراجعه کنید.

از همراهی شما با ParminCloud سپاسگزاریم.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

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

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