اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

آموزش استفاده از Playbook های Ansible برای اتوماتیک کردن کارها

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    آموزش استفاده از Playbook های Ansible برای اتوماتیک کردن کارها

    در مقاله قبل از این سری آموزش های Ansible، ما توضیح دادیم که Ansible یک ابزار بدون نیاز به Agent میباشد که برای شما امکان مدیریت سریع و موثر چندین سیستم (همچنین با عنوان node هم شناخته میشود و قصد توسعه روی آنها را داریم) را از یک سیستم مجزا فراهم می آورد.

    بعد از نصب نرم افزار در ماشین کنترل کننده و ایجاد key ها به منظور ssh کردن بدون وارد کردن پسورد و کپی آنها در node ها (کلاینت ها) اکنون زمان آموزش نحوه بهینه سازی مرحله مدیریت این چنین سیستم های ریموتی با استفاده از Ansible رسیده است.
    نحوه استفاده از playbook ها در لینوکس







    محیط آزمایشی Ansible

    در طول این مقاله و همچنین مقاله بعدی، ما از محیط آزمایشی زیر استفاده خواهیم کرد. تمامی هاست ها سیستم عامل CentOS 7 میباشند.
    کد PHP:
    Controller machine (where Ansible is installed): 192.168.10.230

    Node1
    192.168.10.240
    Node2
    192.168.10.248 

    علاوه براین لطفا دقت کنید که هر 2 عدد node در بخش webserver از فایل /etc/ansible/hosts اضافه شده باشند.
    استفاده از playbook ها در ansible









    معرفی Playbook های Ansible

    همانطور که در آموزش قبلی توضیح داده شد شما میتوانید از ابزار ansible به منظور اجرا کردن دستورات در node های ریموت همانند زیر استفاده کنید.
    کد PHP:
    # ansible -a "/bin/hostnamectl --static" webservers 
    استفاده از playbook ها در ansible








    در مثال بالا ما دستور hostnamectl —static را روی node1 و node2 اجرا کردیم. برای هر کس واضح و روشن است که این روش از اجرا کردن تسک ها روی کامپیوترهای ریموت برای دستورات کوتاه به خوبی کار میکند، اما برای تسک های پیچیده تر که نیاز به پارامترهای کانفیگی ساختاری اضافه یا تعامل با سایر سرویس ها دارند این روش دردسر ساز و مشکل خواهد بود.

    به طور مثال نصب و کانفیگ WordPress روی چندین هاست - که ما در مقاله بعدی آنرا پوشش خواهیم داد. در این چنین شرایطی Playbook ها به صحنه خواهند آمد.

    Playbook ها در حقیقت فایل های متنی ساده که به فرمت YAML نوشته شده اند میباشند و شامل لیستی از آیتم ها با یک جفت key/value یا بیشتر میباشند (همچنین با عنوان یک hash یا یک dictionary شناخته میشوند).

    درون هر Playbook شما یک یا چندین گروه از هاست ها را پیدا خواهید کرد (هر کدام از این گروه ها همچنین یک Play نیز نامیده میشوند) که تسک های مورد نظر در آنها اجرا میشوند.

    یک مثال از داکیومنت های رسمی به ما کمک میکند که موارد زیر را نشان دهیم :

    1 - Host ها :
    لیستی از ماشین ها (با توجه به /etc/ansible/hosts) که تسک های زیر در آنها اجرا خواهند شد.

    2 - remote_user :
    اکانت ریموتی که برای اجرا شدن تسک ها مورد استفاده قرار خواهد گرفت.

    3 - vars :
    متغییرهایی که برای تغییر رفتار سیستم های ریموت مورد استفاده قرار میگیرند.

    4 - task ها به ترتیبی که تعریف شده اند و برای تمام ماشین هایی که با Hosts یکی باشد اجرا میشوند. درون یک play، تمامی Host ها در حقیقت Directive یکسانی برای تعریف task خواهند داشت.

    اگر شما نیاز به اجرا کردن مجموعه ای متفاوت از task های مربوطه برای یک host خاص دارید، در Playbook جاری یک play دیگر را ایجاد کنید (به عبارت دیگر هدف یک play ترسیم مجموعه ای خاص از هاست ها، برای تسک های تعریف شده میباشد).

    در این مورد، یک play جدید را با اضافه کردن دایرکتیو hosts در پایین فایل آغاز میکنیم.
    کد PHP:
    ---
    hostswebservers
      remote_user
    root
      vars
    :
        
    variable1value1
        variable2
    value2
      remote_user
    root
      tasks
    :
      - 
    namedescription for task1
        task1
    parameter1=value_for_parameter1 parameter2=value_for_parameter2
      
    namedescription for task1
        task2
    parameter1=value_for_parameter1 parameter2=value_for_parameter2
      handlers
    :
        - 
    namedescription for handler 1
          service
    name=name_of_service state=service_status
    hostsdbservers
      remote_user
    root
      vars
    :
        
    variable1value1
        variable2
    value2
    … 

    5 - handler ها در حقیقت اکشن هایی هستند که در پایان بخش تسک ها در هر play نوشته می شوند و غالبا برای restart کردن سرویس ها و یا اعمال reboot در سیستم های ریموت استفاده می شوند.
    کد PHP:
    # mkdir /etc/ansible/playbooks 

    فایلی به نام apache.yml درون آن با محتوای زیر اضافه کنید.
    کد PHP:
    ---
    hostswebservers
      vars
    :
        
    http_port80
        max_clients
    200
      remote_user
    root
      tasks
    :
      - 
    nameensure apache is at the latest version
        yum
    pkg=httpd state=latest
      
    namereplace default index.html file
        copy
    src=/static_files/index.html dest=/var/www/htmlmode=0644
        notify
    :
        - 
    restart apache
      
    nameensure apache is running (and enable it at boot)
        
    servicename=httpd state=started enabled=yes
      handlers
    :
        - 
    namerestart apache
          service
    name=httpd state=restarted 
    سپس دایرکتوری /static_files را در مسیر دایرکتوری "/" ایجاد کنید.
    کد PHP:
    # mkdir /static_files 
    که در آن فایل index.html خودمان را با محتوای زیر ذخیره خواهیم کرد.
    کد PHP:
    <!DOCTYPE html>
     <
    html lang="en">
     <
    head>
     <
    meta charset="utf-8"/>
     </
    script>
     </
    head>
     <
    body>
     <
    h1>Apache was started in this host via Ansible</h1><br>
    <
    h2>Brought to you by linux-zone.org/forums</h2>
     </
    body>
     </
    html

    اکنون زمان استفاده از این playbook به منظور اجرا کردن تسک هایی که قبلا به آن اشاره شد میباشد. شما متوجه خواهید شد که ansible به هر تسک به صورت همزمان و با استفاده از هاست خواهد پرداخت و وضعیت تسک ها را گزارش خواهد کرد.
    کد PHP:
    # ansible-playbook /etc/ansible/playbooks/apache.yml 
    اتوماتیک کردن تسک ها با استفاده از ansible








    اکنون ببینیم اگر یک مرورگر را باز کنیم و ip آدرس 192.168.10.240 و 192.168.10.248 را در آن وارد کنیم چه اتفاقی خواهد افتاد :
    نصب playbook ها در ansible








    یک مرحله جلوتر میرویم و به صورت دستی apache را روی node1 و node2 متوقف و غیرفعال میکنیم.
    کد PHP:
    # systemctl stop httpd
    # systemctl disable httpd
    # systemctl is-active httpd
    # systemctl is-enabled httpd 
    نحوه راه اندازی playbook ها در ansible








    سپس مجدد دستور زیر را اجرا میکنیم.
    کد PHP:
    # ansible-playbook /etc/ansible/playbooks/apache.yml 
    این بار تسک گزارش میدهد که وب سرور آپاچی روی هر هاست start و enable شده است.
    استفاده از playbook ها در ansible








    لطفا مثال بالا را به عنوان نگاه سریعی روی قدرت ansible در نظر بگیرید. در حالیکه موارد مطرح شده هنگامی که روی تعداد کمی از سرورها اجرا شوند، نسبتا تسک های آسانی هستند. اگر شما نیاز به انجام تسک های یکسان روی سرورهای بیشماری (شاید 100 ها سرور) داشته باشید این امر بسیار خسته کننده و وقت گیر خواهد شد.


    خلاصه

    در این پست ما نحوه اجرا کردن دستورات و پیاده سازی تسک های پیچیده روی چندین هاست ریموت به صورت همزمان و با استفاده از ansible را شرح دادیم. داکیومنت رسمی و ریپازیتوری GitHub مثال ها و راهنماهای زیادی روی نحوه استفاده از ansible (برای دستیابی به اکثر تسک های قابل تصور) فراهم آورده اند.
    کد:
    https://docs.ansible.com/ansible/index.html

    همچنین توصیه میشود مطالعه کنید : آموزش اتوماتیک کردن Task ها در هاست های لینوکسی با استفاده از Shell Script


    شنیدن نظرات سوالات و پیشنهادات ارزشمند شما باعث دلگرمی و خوشحالی ماست.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 11-01-2021, 02:58 PM.

درباره انجمن منطقه لینوکسی ها

انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

شبکه های اجتماعی
در حال انجام ...
X