איך להשתמש במודול lineinfile של Ansible לניהול קבצי טקסט

**המדריך: שימוש במודול Ansible lineinfile**

Ansible הוא כלי אוטומציה נפלא הנמצא בשימוש נרחב, המסוגל לנהל מאות נודים בפעם אחת. ל-Ansible יש המון יכולות נהדרות, ואחת מתוך כן היא היכולת לנהל שורה יחידה בקובץ על נודים רחוקים באמצעות מודול Ansible lineinfile.

מודול Ansible lineinfile הוא מודול המבצע פעולות שונות על שורה יחידה בקובץ, כמו שינוי של שורה, עדכון של שורה או הוספת שורה מסוימת.

במדריך זה, תלמד כיצד להשתמש במודול Ansible lineinfile, איך הוא פועל, וכיצד להשתמש בו לניהול קבצי טקסט.

דרישות מוקדמות

המדריך הזה יהיה מדריך שלב אחרי שלב על מודול Ansible lineinfile. אם ברצונך להתקדם, הקפד לוודא שיש לך את התקנים הבאים:

  • 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 במחשב הרחוק.

שינוי קובץ טקסט עם מודול lineinfile של Ansible.

בואו נתחיל את המדריך הזה על ידי הרצת מודול lineinfile של Ansible באמצעות פקודות רשת אד הוק. פקודות אד הוק הן דרך מהירה לבדוק או להריץ פקודה יחידה על מארח מרוחק.

התחברו לשלט של Ansible שלכם והריצו את הפקודה הבאה. הפקודה הזו משתמשת במודול lineinfile (-m) כדי להתחבר למכונת האינטרנט ולהעביר ארגומנט (-a) שהוא הפקודה לביצוע.

במקרה זה, מודול lineinfile מעדכן את ערך המארח המקומי על ידי השמת כתובת ה-IP 127.0.0.1 עם myapache בקובץ /etc/hosts. על ידי השמת 127.0.0.1 עם myapache תאפשר לך לנווט אל דף הבדיקה של אפאצ'י מקומית ב-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

לאחר הרצת הפקודה, אתם צריכים לראות הודעת CHANGED שמאשרת כי השורה עודכנה בהצלחה בשרת המרוחק.

Running the ad hoc command with ansible lineinfile module

התחברו לצומת המרוחק באמצעות לקוח SSH ווּדאו שקובץ /etc/hosts עודכן עם הערך החדש באמצעות פקודת cat.

כפי שניתן לראות למטה, ערך הלוקלהוסט עודכן בהצלחה ל 127.0.0.1 myapache על המכונה המרוחקת.

Verifying the host file on remote machine

שינוי קובצי טקסט מרובים בתוך פלייבוק

עבודה עם פקודה אד-הוק יחידה כדי לנהל שורות על מכונה מרוחקת יכולה להיות בסדר, אך זה יהיה מסובך אם יש לכם שורות בקבצים מרובים או מספר שורות בקובץ אחד לניהול. במקום להשתמש בפקודות אד-הוק, שקלו להשתמש במודול lineinfile של Ansible בתוך הפלייבוק באמצעות הפקודה ansible-playbook.

עכשיו, בואו נלמד כיצד להשתמש במודול lineinfile של Ansible בתוך הפלייבוק ולשנות כמה שורות.

בהנחה שאתם כבר מחוברים למארח השליטה של 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. מבטיח שה-Apache הברירת מחדל מאזין לפורט 8080 בקובץ /etc/apache2/ports.conf; אם נמצא שורה עם פורט אחר, מודול lineinfile מעדכן אותו לפורט 8080. באופן דומה, בקובץ /etc/apache2/apache2.conf, הוא מעדכן את MaxKeepAliveRequests ל-1000 ואת KeepAliveTimeout ל-100.

3. מוסיף שורה עם הטקסט "Hello This is my Apache Page" לסוף קובץ ה- 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: "שלום, זהו דף האפאצ'י שלי"
    - 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

למטה, תוכל לראות שלמשימה TASK יש סטטוס של changed, המעיד על כך שהשרת המרוחק לא היה במצב הנכון ונערך כדי להריץ את הפקודה. למשימה TASK שיש לה סטטוס OK, זה מראה שאין צורך בשינויים.

4. לאחר מכן, התחבר באמצעות SSH לשרת המרוחק באמצעות סוחר SSH אהוב עליך.

5. לבסוף, אמת שכל השורות המוגדרות בקובץ הפעולות my_playbook.yml עודכנו או נוספו על שרת המרוחק באמצעות פקודת cat.

# לאמת אם יש מנהל עם הרשאות מלאות ואם לא להוסיף אותו
cat /etc/sudoers
# לאמת שהגדרות MaxKeepAliveRequests ו-KeepAliveTimeout עודכנו ל-1000 ו-100 בהתאם. 
cat /etc/apache2/apache.config | grep Alive
# לאמת אם אפאצ'י מאזין בפורט 8080
cat /etc/apache2/ports.config

התמונה למטה מאשרת כי admin כבר נוסף לקובץ ה-sudoers.

Verifying the sudoers file

שוב, התמונה למטה מאשרת כי האפאצ'י מאזין ל-Port 8080 כברירת מחדל.

Verifying the ports for in the config file

לבסוף, לוודא שהגדרות ה-MaxKeepAliveRequests וה-KeepAliveTimeout עודכנו ל-1000 ו-100 בהתאמה.

Verifying the MaxKeepAliveRequests and KeepAliveTimeout in the config file

מסקנה

מודול lineinfile של Ansible הוא דרך מצוינת לשנות קבצי טקסט על מארחים מרוחקים. המודול מספק דרך מצוינת להוסיף, להסיר ולשנות שורות בקבצי טקסט בתוך ה-playbooks שלך.

אילו מקרים נוספים אתה רואה שיכולים להועיל מהמודול lineinfile של Ansible?

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