برنامج تعليمي غير قابل للمبتدئين: قواعد اللعبة والأوامر والأمثلة

ما هو أنسبل؟

Ansible هي أداة أتمتة وتنسيق مفتوحة المصدر لتوفير البرامج وإدارة التكوين ونشر البرامج. يمكن لـ Ansible تشغيل وتكوين الأنظمة المشابهة لنظام Unix بسهولة أيضًا Windows أنظمة لتوفير البنية التحتية كرمز. يحتوي على لغة برمجة تعريفية خاصة به لتكوين النظام وإدارته.

تحظى Ansible بشعبية بسبب بساطتها في التثبيت، وسهولة الاستخدام فيما يتعلق بالاتصال بالعملاء، وافتقارها إلى وكيل لعملاء Ansible وتعدد المهارات. يعمل عن طريق الاتصال عبر SSH للعملاء، لذلك لا يحتاج إلى وكيل خاص من جانب العميل، ومن خلال دفع الوحدات إلى العملاء، يتم بعد ذلك تنفيذ الوحدات محليًا من جانب العميل ويتم دفع الإخراج مرة أخرى إلى خادم Ansible.

نظرًا لأنه يستخدم SSH، فيمكنه الاتصال بسهولة بالعملاء باستخدام مفاتيح SSH، مما يبسط العملية برمتها. العميل ديtails، مثل أسماء المضيفين أو عناوين IP ومنافذ SSH، يتم تخزينها في ملفات تسمى ملفات المخزون. بمجرد إنشاء ملف المخزون وملؤه، يمكن لـ ansible استخدامه.

لماذا نستخدم Ansible؟

فيما يلي بعض المزايا/الفوائد المهمة لاستخدام Ansible

  • إحدى أهم مزايا Ansible هي أنه مجاني للاستخدام من قبل الجميع.
  • لا يحتاج الأمر إلى أي مهارات خاصة لمسؤول النظام لتثبيت Ansible واستخدامه، والوثائق الرسمية شاملة للغاية.
  • إن نمطيته فيما يتعلق بالمكونات الإضافية والوحدات النمطية وقوائم الجرد وأدلة اللعب تجعل من Ansible الرفيق المثالي لتنسيق البيئات الكبيرة.
  • Ansible خفيف الوزن ومتسق للغاية، ولا توجد قيود تتعلق بنظام التشغيل أو الأجهزة الأساسية.
  • كما أنه آمن جدًا نظرًا لقدراته بدون وكيل وبسبب استخدام ميزات أمان OpenSSH.
  • ميزة أخرى تشجع على اعتماد Ansible هي منحنى التعلم السلس الذي يحدده التوثيق الشامل وهيكل وتكوين سهل التعلم.

تاريخ أنسيبل

فيما يلي علامات بارزة مهمة من تاريخ غير مقبول:

  • في فبراير 2012 بدأ مشروع Ansible. تم تطويره لأول مرة بواسطة مايكل ديهان، مبتكر Cobbler وFunc، وحدة تحكم الشبكة الموحدة Fedora.
  • في البداية كانت تسمى AnsibleWorks Inc، وتم الاستحواذ على الشركة التي تمول الأداة ansible في عام 2015 بواسطة RedHat و later على، جنبا إلى جنب مع RedHat، انتقلت تحت مظلة IBM.
  • في الوقت الحاضر، يتم تضمين Ansible في توزيعات مثل Fedora Linux وRHEL وCentos وOracle Linux.

المصطلحات الهامة المستخدمة في Ansible

  • خادم غير معقول

    الجهاز الذي تم تثبيت Ansible عليه والذي سيتم من خلاله تشغيل كافة المهام وقواعد اللعبة

  • وحدة

    في الأساس، الوحدة هي أمر أو مجموعة من أوامر Ansible المشابهة والمخصصة للتنفيذ من جانب العميل

  • مهمة

    المهمة هي قسم يتكون من إجراء واحد يجب إكماله

  • النوع

    طريقة لتنظيم المهام والملفات المرتبطة بها later دعا في كتاب اللعب

  • حقيقة

    المعلومات التي يتم جلبها من نظام العميل من المتغيرات العامة باستخدام عملية جمع الحقائق

  • المعرض

    ملف يحتوي على بيانات حول خوادم العملاء غير المرئية. المعرفة في later أمثلة كملف المضيفين

  • بلايستشن

    تنفيذ كتاب اللعب

  • معالج

    المهمة التي يتم استدعاؤها فقط في حالة وجود المخطر

  • المخطر

    قسم منسوب إلى مهمة يستدعي المعالج إذا تم تغيير الإخراج

  • بطاقة

    تم تعيين الاسم على مهمة يمكن استخدامها later لإصدار تلك المهمة المحددة أو مجموعة المهام فقط.

التثبيت Ansible في لينكس

بمجرد قيامك بمقارنة خياراتك ووزنها وقررت استخدام Ansible، فإن الخطوة التالية هي تثبيته على نظامك. سنستعرض خطوات التثبيت بشكل مختلف لينكس التوزيعات، الأكثر شعبية، في البرنامج التعليمي الصغير التالي.

قم بتثبيت Ansible على أنظمة Centos/RedHat

الخطوة 1) تثبيت EPEL الريبو

[root@ansible-server ~]# sudo yum install epel-release

الخطوة 2) قم بتثبيت الحزمة غير المعقولة

[root@ansible-server ~]# sudo  yum install -y ansible

قم بتثبيت Ansible على أنظمة Centos/RedHat

قم بالتثبيت على أنظمة Ubuntu/Debian

الخطوة 1) إجراء تحديث للحزم

$ sudo apt update

الخطوة 2) قم بتثبيت الحزمة المشتركة لخصائص البرنامج

$ sudo apt install software-properties-common

الخطوة 3) قم بتثبيت الحزمة الشخصية غير المناسبة archive

$ sudo apt-add-repository ppa:ansible/ansible

الخطوة 4) تثبيت غير معقول

$ sudo apt update
$ sudo apt install ansible

أوامر مخصصة غير قابلة للتطبيق

إحدى أبسط الطرق التي يمكن من خلالها استخدام Ansible هي استخدام الأوامر المخصصة. يمكن استخدامها عندما تريد إصدار بعض الأوامر على خادم أو مجموعة من الخوادم. لا يتم تخزين الأوامر المخصصة للاستخدامات المستقبلية ولكنها تمثل طريقة سريعة للتفاعل مع الخوادم المطلوبة.

في هذا البرنامج التعليمي Ansible، سيتم تكوين ملف مضيفين لخادمين، يحتوي على host1 وhost2.

يمكنك التأكد من إمكانية الوصول إلى الأجهزة المضيفة من الخادم غير المرئي عن طريق إصدار أمر ping على كافة الأجهزة المضيفة.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping
host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

أوامر مخصصة غير قابلة للتطبيق

التفسير:

  1. حالة الأمر، في هذه الحالة، النجاح
  2. المضيف الذي تم تشغيل الأمر عليه
  3. يتم إصدار الأمر عبر المعلمة -m، في هذه الحالة، ping
  4. باستخدام المعلمة -i، يمكنك الإشارة إلى ملف المضيفين.


يمكنك إصدار نفس الأمر على مضيف محدد فقط إذا لزم الأمر.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

أوامر مخصصة غير قابلة للتطبيق

التفسير:

  1. يمكن استخدام معلمة الحد لإصدار الأوامر فقط على مضيفين محددين في ملف المضيف
  2. اسم المضيف كما هو محدد في ملف المخزون

إذا كنت بحاجة إلى نسخ ملف إلى وجهات متعددة بسرعة، فيمكنك استخدام وحدة النسخ في ansible والتي تستخدم SCP. لذلك يبدو الأمر ومخرجاته كما يلي:

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
host1 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.43-256741011164877/source",
    "state": "file",
    "uid": 0
}
host2 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.6-280302911361278/source",
    "state": "file",
    "uid": 0
}

أوامر مخصصة غير قابلة للتطبيق

التفسير:

  1. تم تحديد وحدة النسخ
  2. وسيطات الوحدة، في هذه الحالة، هي المسار المطلق للمصدر والمسار المطلق للوجهة.
  3. يعكس إخراج الأمر غير المرغوب فيه نجاح أمر النسخ وغيره من الأمورtails مثل المجموع الاختباري sha1 أو md5 للتحقق من سلامة الملف والبيانات الوصفية مثل المالك أو الحجم أو الأذونات. من السهل تثبيت حزمة على مجموعة من الخوادم. يحتوي Ansible على العديد من الوحدات التي تتفاعل مع المثبتات المستخدمة، مثل yum، وapt، وdnf، وما إلى ذلك.

في المثال التالي، ستكتشف كيفية تثبيت حزمة عبر الوحدة yum على مضيفي Centos.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [


"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.xservers.ro\n * epel: fedora.mirrors.telekom.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: remi.schlundtech.de\n * remi-safe: remi.schlundtech.de\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.leadhosts.com\n * epel: mirrors.nav.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: mirrors.uni-ruse.bg\n * remi-safe: mirrors.uni-ruse.bg\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

أوامر مخصصة غير قابلة للتطبيق

التفسير:

  1. يتم استخدام وحدة Yum في هذا المثال
  2. فهو يحدد وسيطات الوحدة، وفي هذه الحالة، ستختار اسم الحزمة وحالتها. إذا كانت الحالة غائبة، على سبيل المثال، سيتم البحث في الحزمة وإذا وجدت، تتم إزالتها
  3. عند تلوينه باللون الأصفر، سترى مخرجات الأمر ansible مع تغيير الحالة، مما يعني في هذه الحالة أنه تم العثور على الحزمة وتثبيتها.
  4. حالة أمر yum install الصادر عبر ansible. في هذه الحالة تم تثبيت الحزمة ncdu.x86_64 0:1.14-1.el7.

بالطبع، يمكن استخدام جميع خيارات مثبت yum عبر ansible، بما في ذلك التحديث أو التثبيت أو الإصدار الأحدث أو الإزالة.

في المثال أدناه، تم إصدار نفس الأمر لإزالة حزمة ncdu المثبتة مسبقًا.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

أوامر مخصصة غير قابلة للتطبيق

التفسير:

  1. يُظهر إخراج الأمر yum أنه تمت إزالة الحزمة.

ميزة أخرى مفيدة وأساسية يستخدمها Ansible للتفاعل مع خادم العميل هي جمع بعض الحقائق حول النظام. لذلك، فإنه يقوم بجلب الأجهزة والبرامج ومعلومات الإصدار من النظام ويخزن كل قيمة في متغير يمكن أن يكون later على المستخدمة.

إذا كنت بحاجة إلى معلومات مفصلة حول الأنظمة التي سيتم تعديلها عبر ansible، فيمكن استخدام الأمر التالي. تقوم وحدة الإعداد بجمع الحقائق من متغيرات النظام.

أوامر مخصصة غير قابلة للتطبيق

كتب اللعب Ansible

كتب اللعب Ansible هي طريقة إرسال الأوامر إلى الأنظمة البعيدة من خلال البرامج النصية. يتم استخدام قواعد اللعب Ansible لتكوين complex بيئات النظام لزيادة المرونة عن طريق تنفيذ برنامج نصي لنظام واحد أو أكثر. تميل كتب اللعب غير الصحيحة إلى أن تكون لغة تكوين أكثر من كونها لغة برمجة.

تستخدم أوامر قواعد اللعبة Ansible تنسيق YAML، لذلك ليست هناك حاجة إلى الكثير من بناء الجملة، ولكن يجب احترام المسافة البادئة. كما يوحي الاسم، كتاب اللعب عبارة عن مجموعة من المسرحيات. من خلال دليل التشغيل، يمكنك تعيين أدوار محددة لبعض المضيفين وأدوار أخرى لمضيفين آخرين. ومن خلال القيام بذلك، يمكنك تنسيق خوادم متعددة في سيناريوهات متنوعة جدًا، كل ذلك في دليل لعب واحد.

للحصول على كل ديtails قبل المتابعة مع أمثلة قواعد اللعب Ansible، يجب علينا أولاً تحديد المهمة. هذه هي الواجهة للوحدات غير الممكنة للأدوار وقواعد اللعب.

الآن، دعونا نتعلم قواعد اللعب Ansible من خلال مثال مع قواعد اللعبة الواحدة مع مسرحية واحدة، والتي تحتوي على مهام متعددة على النحو التالي:

---

- hosts: group1
  tasks:
  - name: Install lldpad package
    yum:
      name: lldpad
      state: latest
  - name: check lldpad service status
    service:
      name: lldpad
      state: started

كتب اللعب Ansible

في مثال Ansible playbook أعلاه، يتم استهداف المجموعة 1 من المضيفين في ملف المضيف لتثبيت حزمة lldpad باستخدام الوحدة yum وبعد ذلك يتم بدء خدمة lldpad التي تم إنشاؤها بعد التثبيت باستخدام وحدة الخدمة المستخدمة في الغالب للتفاعل مع مجموعة systemd.

التفسير:

  1. مجموعة المضيفين التي سيتم تشغيل قواعد اللعبة عليها
  2. يتم استخدام وحدة Yum في هذه المهمة لتثبيت lldpad
  3. يتم استخدام وحدة الخدمة للتحقق مما إذا كانت الخدمة قيد التشغيل بعد التثبيت

يعمل كل دليل لعب غير مقبول مع ملف المخزون. يحتوي ملف المخزون على قائمة بالخوادم مقسمة إلى مجموعات للتحكم بشكل أفضل في details مثل عنوان IP ومنفذ SSH لكل مضيف.

يبدو أدناه ملف المخزون الذي يمكنك استخدامه لمثال قواعد اللعبة Ansible. هناك مجموعتان، تسمى المجموعة 1 والمجموعة 2، تحتوي كل منهما على المضيف 1 والمضيف 2 على التوالي.

[group1]
host1 ansible_host=192.168.100.2 ansible_ssh_port=22
[group2]
host2 ansible_host=192.168.100.3 ansible_ssh_port=22

كتب اللعب Ansible

التفسير:

  1. أسم المجموعة
  2. اسم المضيف، مع عنوان IP ومنفذ ssh، في هذه الحالة، الاسم الافتراضي، 22.

مثال آخر مفيد لقواعد لعب Ansible يحتوي هذه المرة على لعبتين لمضيفين وهو المثال التالي. بالنسبة للمجموعة الأولى من المضيفين، المجموعة 1، سيتم تمكين selinux. إذا تم تمكينه، فستظهر رسالة على شاشة المضيف.

بالنسبة للمجموعة الثانية من المضيفين، سيتم تثبيت حزمة httpd فقط إذا كان ansible_os_family هو RedHat وansible_system_vendor هو HP.

Ansible_os_family وansible_system_vendor عبارة عن متغيرات تم جمعها باستخدام خيار Collect_facts ويمكن استخدامها كما في هذا المثال الشرطي.

---

- hosts: group1
  tasks:
  - name: Enable SELinux
    selinux:
      state: enabled
    when: ansible_os_family == 'Debian'
    register: enable_selinux

  - debug:
      Imsg: "Selinux Enabled. Please restart the server to apply changes."
    when: enable_selinux.changed == true

- hosts: group2
  tasks:
  - name: Install apache
    yum:
      name: httpd
      state: present
    when: ansible_system_vendor == 'HP' and ansible_os_family == 'RedHat'

كتب اللعب Ansible

التفسير:

  1. مثال على جملة متى، في هذه الحالة، عندما يكون نوع نظام التشغيل هو دبيان. يتم جمع المتغير ansible_os_family عبر وظيفة Collect_facts.
  2. يتم تسجيل مخرجات المهمة للاستخدام المستقبلي باسمenable_selinux
  3. مثال آخر على جملة متى. في هذه الحالة، سيتم عرض رسالة للمستخدم المضيف إذا كان SELinux ممكّنًا بالفعل من قبل.
  4. مثال آخر على جملة When التي تتكون من قاعدتين

إلى جانب المهام، هناك أيضًا بعض المهام المحددة التي تسمى المعالجات. يجب أن يكون للمعالجات اسم فريد في جميع أنحاء قواعد اللعبة. تعمل هذه بنفس طريقة المهمة العادية ولكن يمكن إخطار المعالج عبر المخطر.

إذا لم يتم إخطار المعالج أثناء تشغيل قواعد اللعبة، فلن يتم تشغيله. ومع ذلك، إذا قامت أكثر من مهمة بإعلام المعالج، فسيتم تشغيل ذلك مرة واحدة فقط بعد انتهاء جميع المهام.

في المثال الموضح أدناه، يمكنك أن ترى كيف أن مهمة معينة تحتوي على قسم إعلام يستدعي مهمة أخرى. إذا تم تغيير مخرجات المهمة الأولى، فسيتم استدعاء مهمة المعالج. أفضل مثال هو تغيير ملف التكوين ثم إعادة تشغيل تلك الخدمة المحددة بعد ذلك.

---

- hosts: group2
  tasks:
  - name: sshd config file modify port
    lineinfile:
     path: /etc/ssh/sshd_config
     regexp: 'Port 28675'
     line: '#Port 22'
    notify:
       - restart sshd
handlers
    - name: restart sshd
      service: sshd
        name: sshd
        state: restarted

في هذه الحالة، إذا تم تغيير المهمة الأولى، "منفذ تعديل ملف التكوين sshd"، أي أنه إذا لم يكن المنفذ 28675 في المقام الأول، فسيتم تعديله وستقوم المهمة بإعلام المعالج بنفس الاسم للتشغيل وسيقوم بإعادة تشغيل خدمة sshd.

كتب اللعب Ansible

التفسير:

  1. مثال على الإخطار
  2. مثال للمعالج

أدوار غير قابلة للتنفيذ

عند التعامل مع قواعد اللعبة الشاملة، يكون من الأسهل تقسيم المهام إلى أدوار. ويساعد هذا أيضًا في إعادة استخدام الأدوار في المستقبل. الأدوار عبارة عن مجموعة من المهام، والتي يمكن نقلها من دليل قواعد اللعبة إلى آخر، ويمكن تشغيلها بشكل مستقل ولكن فقط من خلال ملف قواعد اللعبة.

يتم تخزين الأدوار في أدلة منفصلة ولها بنية دليل معينة.

[root@ansible-server test2]# tree
.
`-- role1
    |-- defaults
    |   `-- main.yml
    |-- handlers
    |   `-- main.yml
    |-- meta
    |   `-- main.yml
    |-- README.md
    |-- tasks
    |   `-- main.yml
    |-- tests
    |   |-- inventory
    |   `-- test.yml
    `-- vars
        `-- main.yml

7 directories, 8 files

يحتوي ملف yaml الموجود في دليل الإعدادات الافتراضية على قائمة بالمتغيرات الافتراضية التي سيتم استخدامها مع دليل التشغيل. يتم استخدام دليل المعالجات لتخزين المعالجات. من المفترض أن يحتوي الدليل التعريفي على معلومات حول المؤلف وتبعيات الدور. يوجد في دليل المهام ملف yaml الرئيسي للدور.

يحتوي دليل الاختبارات على نموذج لملف قواعد اللعبة yaml ونموذج لملف المخزون ويستخدم في الغالب لأغراض الاختبار قبل إنشاء الدور الفعلي.

يحتوي دليل vars على ملف yaml الذي سيتم فيه تحديد جميع المتغيرات المستخدمة بواسطة الدور. يجب أن تحتوي قوالب الدليل وملفات الدليل على الملفات والقوالب التي ستستخدمها المهام في الدور.

لإنشاء شجرة الدليل لدور ما، يجب عليك استخدام following الأمر مع المعلمة الأخيرة، اسم الدور:

[root@ansible-server test2]# ansible-galaxy init role1

يعمل Ansible أيضًا بشكل جيد مع القوالب. كلغة للقوالب، فإنها تستخدم Jinja2.

في المثال التالي، ستكتشف كيف يبدو قالب jinja2 الأساسي وستستخدمه في أحد الأدوار.

في وقت التشغيل، اعتمادًا على مركز البيانات الذي يقع فيه الخادم الخاص بك، يمكنك الاختيار من بين أكثر من خادم أسماء واحد، كل منها يتوافق مع مركز البيانات، باستخدام المتغير "resolver_ip_addresses".

{% for resolver in resolver_ip_addresses %}
nameserver {{ resolver }}
{% endfor %}

options timeout:1
options attempts:5
options rotate

في هذا المثال، في دليل قواعد اللعبة، تم تحديد بعض المتغيرات، بما في ذلك متغير يسمى Resolver_ip_addresses بقيم مختلفة اعتمادًا على مركز البيانات.

- name: Set resolver for server
  template:
    src: dns.j2
    dest: /etc/resolv.conf
    group: root
    owner: root
    mode: "0644"
    tag: resolver	

أدوار غير قابلة للتنفيذ

التفسير:

  1. اسم القالب الذي سيتم استخدامه. يقع القالب في القوالب الموجودة في مسار الدور
  2. مسار الوجهة لاسم الملف الذي سيتم استبداله بالقالب، من جانب العميل.
  3. أذونات الملف الوجهة

يمكن أن تحتوي مهام الأدوار أيضًا على حقل علامة له اسم منسوب. يمكن لأكثر من مهمة مشاركة نفس العلامة. عند تشغيل قواعد اللعبة غير المقبولة، يمكنك تحديد العلامة أيضًا، بحيث يتم تنفيذ هذه المهام.

دراسة حالة غير قابلة للتنفيذ

في هذا القسم، سنقوم بتحليل دراسة حالة لدليل أساسي غير قابل للتنفيذ له ثلاثة أدوار. والغرض من ذلك هو إعطاء مثال عملي لما تحدثنا عنه من قبل. سيتم تكييف بعض الأمثلة المستخدمة من قبل في هذا الدليل التعليمي لقواعد اللعب Ansible واستخدامها في قواعد اللعبة هذه.

يوجد أدناه هيكل الدليل لكتاب اللعب. سيكون ملف Yaml الذي سيتم استخدامه هو p4.yml.

[root@ansible-server test_ansible]# ls -lrth
total 16K
-rw-r--r--. 1 root root   0 Jul  3 10:13 testfile
-rw-r--r--. 1 root root 203 Jul  3 13:30 p1.yml
-rw-r--r--. 1 root root 125 Jul  3 15:00 hosts
-rw-r--r--. 1 root root 488 Jul  3 16:40 p2.yml
-rw-r--r--. 1 root root 188 Jul  4 17:33 p4.yml
drwxr-xr-x. 5 root root  47 Jul  4 17:35 roles
[root@ansible-server test_ansible]# cd roles
[root@ansible-server roles]# ls -lrth
total 12K
drwxr-xr-x. 9 root root 4.0K Jul  4 12:52 httpd
drwxr-xr-x. 9 root root 4.0K Jul  4 13:55 selinux
drwxr-xr-x. 9 root root 4.0K Jul  4 16:54 resolver

يحتوي دليل التشغيل على ثلاثة أدوار، أحدها يسمى "المحلل" الذي يقوم بتعيين خادم أسماء محدد على الخوادم عن طريق نسخ ملف من الخادم إلى الوجهة /etc/resolv.conf. واحد آخر يسمى httpd، ويقوم بتثبيت حزمة httpd مع وحدة yum، والثالث يمكّن SELinux ويخطر المستخدم المسجل بإعادة تشغيل النظام. تم إنشاء كل دور باستخدام أمر ansible-galaxy.

دور المحلل، مهمة main.yml:

دراسة حالة غير قابلة للتنفيذ

دور Httpd، مهمة main.yml:

دراسة حالة غير قابلة للتنفيذ

دور Selinux، مهمة main.yml:

دراسة حالة غير قابلة للتنفيذ

فيما يلي تعريف قواعد اللعبة p4.yml. سيتم تشغيله على جميع الأجهزة المضيفة إن لم يكن غيرهاwise المحدد في سطر الأوامر، سيتم تشغيله كمستخدم جذر على المنفذ 22 (SSH)، وسيجمع الحقائق قبل تشغيل الأدوار، وسيقوم بتشغيل الأدوار الثلاثة المذكورة سابقًا. يمكن تشغيل كل دور بشكل مستقل عن طريق تحديد العلامة في سطر أوامر ansible-playbook باستخدام المعلمة –t.

---

- hosts: all
  user: root
  port: 22
  gather_facts: True
  roles:
    - { role: selinux, tags: selinux }
    - { role: httpd, tags: httpd }
    - { role: resolver, tags: resolver }

تشغيل دليل التشغيل p4.yml على مضيفين وتفسير المخرجات. يمكن تشغيل نفس الأمر باستخدام المعلمة –check للتشغيل الجاف. في حالة رغبتك في استخدام مصادقة كلمة المرور، استخدم المعلمة -k.

دراسة حالة غير قابلة للتنفيذ

التفسير:

  1. أمر Ansible-playbook الذي يقوم بتشغيل p4.yml
  2. يتخطى Playbook دور SELinux لأنه ممكّن بالفعل.
  3. اكتشف Ansible أن حزمة httpd مثبتة بالفعل، لذا فهي ترجع بشكل جيد.
  4. تم تعيين المحلل، وتم تغيير حالة محلل الدور.

ورقة الغش للأوامر Ansible

قم بتثبيت EPEL repo على أنظمة Centos/RHEL

[root@ansible-server ~]# sudo yum install epel-release

تثبيت حزمة غير معقولة على أنظمة Centos/RHEL

[root@ansible-server ~]# sudo  yum install -y ansible

قم بإجراء تحديث للحزم الموجودة على أنظمة Debian/Ubuntu

$ sudo apt update

قم بتثبيت حزمة خصائص البرنامج المشتركة على أنظمة Debian/Ubuntu

$ sudo apt install software-properties-common

قم بتثبيت الحزمة الشخصية غير المناسبة archiعلى أنظمة Debian/Ubuntu

$ sudo apt-add-repository ppa:ansible/ansible

قم بالتثبيت على أنظمة Debian/Ubuntu

$ sudo apt update
$ sudo apt install ansible

قم بإصدار أمر ping على كافة الخوادم المحددة في ملف المخزون المسمى hosts

 
[root@ansible-server test_ansible]# ansible -i hosts all -m ping

قم بإصدار أمر ping على المضيف 2 فقط

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2

انسخ الملف "testfile" على كافة الأجهزة المضيفة في ملف المخزون

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"

تثبيت حزمة ncdu على كافة المضيفين

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'

إزالة حزمة ncdu على كافة الأجهزة المضيفة

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'

قم ببناء بنية الدليل للدور المسمى role1.

[root@ansible-server test2]# ansible-galaxy init role1

قواعد التشغيل الجافة p4.yml

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check

قم بتشغيل p4.yml playbook مع مصادقة كلمة المرور لجميع المضيفين

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k

نبذة عامة

في عالم التكنولوجيا التي تتغير باستمرار بوتيرة سريعة ومتناميةwing وبسرعة لا تصدق في نفس الوقت، يجب على مسؤولي النظام ومهندسي المطورين التفكير في طرق مختلفة حول كيفية أتمتة المهام الروتينية وتنسيق مجموعات كبيرة من الخوادم.

في حين أن هناك الكثير بديل ل Ansible (Chef، Puppet) التي تفعل الشيء نفسه مع بعض الاختلافات، تمكنت Ansible من التفوق عليها جميعًا بفضل بساطتها وتحسين الأمان، والأهم من ذلك منحنى التعلم السلس. نظرًا لهذه الصفات والاعتماد السريع لـ Ansible، أنشأنا برنامجًا تعليميًا مليئًا بالأمثلة حتى تتمكن من الحصول على تجربة أولى أكثر سلاسة في العمل مع Ansible.

في هذا البرنامج التعليمي لأساسيات Ansible، قمنا بوصف ansible وتحدثنا قليلًا عن تاريخه. لقد ذكرنا نقاط القوة في Ansible والمزايا التي يمكن أن تقدمها ansible لأتمتة وتنسيق البنى التحتية ذات الأحجام المختلفة. لقد حددنا المصطلحات الأساسية المستخدمة غير المقبولة وحددنا بنية أدلة اللعب Ansible. أمثلة شاملة مصحوبة بجميع المعلومات مع شرح مفصل.