كيفية استخدام وحدة Ansible lineinfile لإدارة ملفات النصوص

أنسيبل هو أداة تلقائية مستخدمة على نطاق واسع يمكنها إدارة مئات العقد في وقت واحد. أنسيبل لديه العديد من الميزات الرائعة، واحدة منها هي قدرته على إدارة سطر واحد داخل ملف على العقد البعيدة باستخدام وحدة Ansible lineinfile.

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

في هذا البرنامج التعليمي، ستتعلم ما هي وحدة Ansible lineinfile، وكيف تعمل، وكيفية استخدامها لإدارة ملفات النص.

المتطلبات المسبقة

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

  • مضيف تحكم أنسيبل – سيتم استخدام أنسيبل v2.9.24 على جهاز Ubuntu 18.04.5 LTS في هذا البرنامج التعليمي.
  • A remote computer to run commands. You’ll need an inventory file set up and one or more hosts already configured to run Ansible command and playbooks on. The remote Linux computer will be called myserver, and the tutorial will use an inventory group called web.
  • يجب أن يكون Apache قد تم تثبيته بالفعل على الكمبيوتر البعيد إذا كنت ترغب في متابعة البرنامج التعليمي بالضبط.

تعديل ملف نصي باستخدام وحدة Ansible lineinfile.

لنبدأ هذا البرنامج التعليمي بتشغيل وحدة Ansible lineinfile باستخدام أوامر ad hoc. الأوامر ad hoc هي وسيلة سريعة لاختبار أو تشغيل أمر واحد على جهاز بعيد.

قم بتسجيل الدخول إلى جهاز التحكم الخاص بـ Ansible وقم بتشغيل الأمر التالي. يستخدم هذا الأمر وحدة lineinfile (-m) للاتصال بجهاز الويب وتمرير وسيطة (-a) وهي الأمر الذي يجب تنفيذه.

في هذا الحالة، تقوم وحدة lineinfile بتحديث إدخال المضيف المحلي بربط عنوان الآي بي 127.0.0.1 بـ myapache في ملف /etc/hosts. عن طريق ربط 127.0.0.1 بـ myapache يتيح لك التنقل إلى صفحة اختبار Apache محليًا على HTTP://myapache:80

  • path يشير إلى موقع الملف.
  • regexp يجد التعبير العادي، إذا كان موجودًا في الملف ويحدث بـ 127.0.0.1 myapache المحدد في المعلمة line.
  • –become العلم يسمح لك بتشغيل الأمر كمستخدم متميز.
  • المجموعة web هي مجموعة الجرد التي تحتوي على جميع الخوادم.
  • ansible.builtin.lineinfile أو ببساطة lineinfile هو اسم الوحدة.
ansible web -m ansible.builtin.lineinfile -a "path=/etc/hosts regexp='^127\.0\.0\.1'  line='127.0.0.1 myapache' state=present" --become

بعد تنفيذ الأمر، يجب أن ترى رسالة تم التغيير تؤكد أن السطر قد تم تحديثه بنجاح على الجهاز البعيد.

Running the ad hoc command with ansible lineinfile module

تسجيل الدخول إلى العقد البعيد باستخدام عميل SSH والتحقق مما إذا كان الملف /etc/hosts قد تم تحديثه بالقيمة الجديدة باستخدام أمر cat.

كما يمكنك رؤية أدناه، تم تحديث إدخال localhost بنجاح بقيمة 127.0.0.1 myapache على الجهاز البعيد.

Verifying the host file on remote machine

تعديل ملفات نصية متعددة داخل سيناريو تشغيل

العمل مع أمر فردي لإدارة السطور على جهاز بعيد قد يكون مقبولًا، ولكنه سيكون صعبًا إذا كان لديك سطور في ملفات متعددة أو سطور متعددة في ملف لإدارته. بدلاً من استخدام أوامر فورية، افكر في استخدام وحدة Ansible lineinfile ضمن السيناريو باستخدام الأمر ansible-playbook.

الآن، دعونا نتعلم كيفية استخدام وحدة Ansible lineinfile ضمن السيناريو وتعديل بعض السطور.

بفرض أنك قد سجلت بالفعل في جهاز تحكم Ansible:

1. أنشئ دليلاً يسمى ansible_lineinfile_module_demo في دليل المستخدم الخاص بك. سيحتوي هذا الدليل على سيناريو الذي ستستخدمه لاستدعاء وحدة lineinfile.

mkdir ~/ansible_lineinfile_module_demo
cd ~/ansible_lineinfile_module_demo

2. إنشاء ملف آخر يُسمى my_playbook.yml في الدليل ~/ansible_lineinfile_module_demo ولصق محتويات ملف التشغيل YAML التالية فيه. هذا الملف التشغيل يحتوي على مهام متعددة تستخدم وحدة Ansible lineinfile لإدارة الأسطر في ملفات التكوين المختلفة لـ Apache على الجهاز البعيد.

يحتوي الملف التشغيل أدناه على المهام التالية:

1. يتحقق مما إذا كان ADMIN موجودًا في ملف /etc/sudoers؛ إذا لم يكن كذلك، فإن المهمة تضيفه.

2. يضمن أن الأباتشي الافتراضي يستمع على المنفذ 8080 داخل ملف /etc/apache2/ports.conf؛ إذا وجد أي خط آخر يحتوي على منفذ آخر، فإن وحدة lineinfile تحدثه إلى المنفذ 8080. بالمثل، تحت ملف /etc/apache2/apache2.conf، تحدث MaxKeepAliveRequests إلى 1000 و KeepAliveTimeout إلى 100.

3. يضيف السطر الذي يحتوي على النص “مرحبًا هذه هي صفحتي Apache” في نهاية صفحة index.html على الخادم البعيد تحت الدليل /var/www/html.

يتم كتابة ملفات التشغيل الخاصة بـ Ansible بتنسيق YAML. لمعرفة المزيد عن YAML، انقر هنا

---
- name: Ansible lineinfile module example
# تعريف الخادم عن بعد حيث سيؤثر وحدة Ansible lineinfile
  hosts: web
  remote_user: ubuntu   # استخدام الخادم عن بعد كـ ubuntu
  become: true
  tasks:

# (المهمة-1) التحقق من ملف Sudoers إذا كانت للمسؤولين السماح بأداء جميع العمليات
    - name: Validate the sudoers file before saving
      ansible.builtin.lineinfile:
         path: /etc/sudoers
         state: present
         regexp: '^%ADMIN ALL='
         line: '%ADMIN ALL=(ALL) NOPASSWD: ALL'

# (المهمة-2) تحديث منفذ Apache الافتراضي إلى 8080
    - name: Ensure the default Apache port is 8080
      ansible.builtin.lineinfile:
         path: /etc/apache2/ports.conf
         regexp: '^Listen '
         insertafter: '^#Listen '
         line: Listen 8080

# (المهمة-3) إضافة السطر في نهاية صفحة html مرحبًا هذه هي صفحتي Apache
    - name: Add a line to a file if the file does not exist
      ansible.builtin.lineinfile:
         path: /var/www/html/index.html
         line: Hello This is my Apache Page
         create: yes

# (المهمة-4) التحقق من ملف Sudoers إذا كانت للمسؤولين السماح بأداء جميع العمليات
    - name: Ensure MaxKeepAliveRequests is set to greater than 100
      ansible.builtin.lineinfile:
         path: /etc/apache2/apache2.conf
         regexp: '^MaxKeepAliveRequests'
         line: MaxKeepAliveRequests=1000

# (المهمة-5) التحقق من ملف Sudoers إذا كانت للمسؤولين السماح بأداء جميع العمليات
    - name: Ensure KeepAliveTimeout is set to greater than 50
      ansible.builtin.lineinfile:
         path: /etc/apache2/apache2.conf
         regexp: '^KeepAliveTimeout'
         line: KeepAliveTimeout=100

3. الآن، قم باستدعاء دفتر الأعمال وتنفيذ المهام باستخدام أمر ansible-playbook لإضافة أو تحديث جميع الأسطر المحددة في دفتر الأعمال على الخادم عن بعد.

ansible-playbook my_playbook.yml 
Invoking the ansible playbook

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

4. بعد ذلك، قم بالاتصال بـ الخادم عن بعد باستخدام عميل SSH المفضل لديك.

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

# للتحقق مما إذا كان المسؤول موجودًا بامتيازات كاملة وإضافته إذا لم يكن كذلك
cat /etc/sudoers
# للتحقق مما إذا تم تحديث MaxKeepAliveRequests و KeepAliveTimeout إلى 1000 و 100، على التوالي. 
cat /etc/apache2/apache.config | grep Alive
# للتحقق مما إذا كان Apache يستمع على المنفذ 8080
cat /etc/apache2/ports.config

الصورة أدناه تؤكد أن admin تمت إضافته بالفعل في ملف sudoers.

Verifying the sudoers file

مرة أخرى، تؤكد الصورة أدناه أن Apache يستمع على Port 8080 بشكل افتراضي.

Verifying the ports for in the config file

وأخيرًا، قم بالتحقق من MaxKeepAliveRequests و KeepAliveTimeout إذا تم تحديثهما إلى 1000 و 100، على التوالي.

Verifying the MaxKeepAliveRequests and KeepAliveTimeout in the config file

الاستنتاج

وحدة Ansible lineinfile module هي طريقة رائعة لتعديل ملفات النص على الخوادم البعيدة. توفر الوحدة طريقة رائعة لإضافة وإزالة وتعديل السطور في ملفات النص ضمن سيناريوهات التشغيل الخاصة بك.

ما هي الحالات الأخرى التي ترى أنها ستستفيد من وحدة Ansible lineinfile؟

Source:
https://adamtheautomator.com/ansible-lineinfile/