Using lineinfile module in ansible PlayBook


  • با استفاده از این ماژول می‌توان پرونده‌های متنی را ویرایش یا متنی را درون آن‌ها اضافه کرد.
  • کاربرد این ماژول را تقریبا مثل ابزار sed در سیستم عامل لینوکس می‌توان در نظر گرفت.

  • به عنوان مثال کد زیر باعث می‌شود تا :
    • اطمینان حاصل شود از این که مقدار enforcing برای کلید SELINUX در پرونده‌ی config در مسیر etc/selinux/ قرار گرفته است.
---
- name: PlayBook 
  hosts: centos-servers
  gather_facts: no
  tasks:
  - name: Ensure SELinux is set to enforcing mode
    lineinfile:
     path: /etc/selinux/config
     regexp: '^SELINUX='
     line: SELINUX=enforcing
...
  • به مواردی که به صورت رنگی مشخص شده است، دقت کنید.
  • به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml

  • به عنوان مثال کد زیر باعث می‌شود تا :
    • اطمینان حاصل شود از این که گروهی با نام wheel در پرونده‌ی sudoers در مسیر etc/ وجود ندارد.
---
- name: PlayBook 
  hosts: centos-servers
  gather_facts: no
  tasks:
  - name: Make sure group wheel is not in the sudoers configuration
    lineinfile:
     path: /etc/sudoers
     state: absent
     regexp: '^%wheel'
...
  • به مواردی که به صورت رنگی مشخص شده است، دقت کنید.
  • به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml

  • به عنوان مثال کد زیر باعث می‌شود تا :
    • ابتدا بررسی شود آیا عبارت 127.0.0.1 در پرونده‌ی hosts واقع در مسیر etc/ وجود دارد یا خیر.
    • سپس در صورتی که آن عبارت وجود نداشت، عبارت localhost بعد از عبارت 127.0.0.1 نوشته شود.
    • سپس کاربر root به عنوان owner و group این پرونده لحاظ شود.
    • در نهایت سطح دسترسی این پرونده بر روی عدد 0644 تنظیم شود.
---
- name: PlayBook 
  hosts: centos-servers
  gather_facts: no
  tasks:
  - name: Replace a localhost entry with our own
    lineinfile:
     path: /etc/hosts
     regexp: '^127\.0\.0\.1'
     line: 127.0.0.1 localhost
     owner: root
     group: root
     mode: '0644'
...
  • به مواردی که به صورت رنگی مشخص شده است، دقت کنید.
  • به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml

  • به عنوان مثال کد زیر باعث می‌شود تا :
    • ابتدا بررسی شود آیا عبارت Listen در داخل پرونده‌ی httpd.conf در مسیر etc/httpd/conf/ وجود دارد یا خیر.
    • سپس مقدار 8080 برای آن لحاظ شود.
---
- name: PlayBook 
  hosts: centos-servers
  gather_facts: no
  tasks:
  - name: Ensure the default Apache port is 8080
    lineinfile:
     path: /etc/httpd/conf/httpd.conf
     regexp: '^Listen '
     insertafter: '^#Listen '
     line: Listen 8080
...
  • به مواردی که به صورت رنگی مشخص شده است، دقت کنید.
  • به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml

  • به عنوان مثال کد زیر باعث می‌شود تا :
    • ابتدا برسی شود آیا پرونده‌ی testfile در مسیر tmp/ وجود دارد یا خیر.
    • سپس در صورتی که این پرونده وجود نداشت، پرونده‌ای با این نام ایجاد شود.
    • سپس عبارت مشخص شده در زیر درون آن ریخته شود.
---
- name: PlayBook 
  hosts: centos-servers
  gather_facts: no
  tasks:
  - name: Add a line to a file if the file does not exist, without passing regexp
    lineinfile:
     path: /tmp/testfile
     line: 192.168.1.99 foo.lab.net foo
     create: yes
...
  • به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml

  • به عنوان مثال کد زیر باعث می‌شود تا :
    • در درون پرونده‌ی ansible.cfg بعد از عبارت [defaults] جمله‌ای خاص اضافه شود.
- hosts: all
  tasks:
  - name: Ansible lineinfile insert after example
    lineinfile:
     dest: /root/ansible.cfg
     line: 'inventory = /home/fedora/inventory.ini'
     insertafter: '\[defaults\]'
  • به مواردی که به صورت رنگی مشخص شده است، دقت کنید.
  • به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml

  • به عنوان مثال کد زیر باعث می‌‌شود تا :
    • قبل از عبارت library# جمله‌ای خاص اضافه شود.
- hosts: all
  tasks:
  - name: Ansible lineinfile insertbefore example
    lineinfile:
     dest: /root/ansible.cfg
     line: 'inventory = /home/mdtutorials/inventory.ini'
     insertbefore: '#library'
  • به مواردی که به صورت رنگی مشخص شده است، دقت کنید.
  • به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml

  • به عنوان مثال کد زیر باعث می‌شود تا :
    • جمله‌ای با مضمون خاص از پرونده‌ی remote_server.txt پاک شود.
- hosts: all
  tasks:
    - name: Ansible lineinfile remove line example
      lineinfile:
        dest: /home/mdtutorials2/remote_server.txt
        line: Removed lines.
        state: absent
  • به مواردی که به صورت رنگی مشخص شده است، دقت کنید.
  • به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml

  • به عنوان مثال کد زیر باعث می‌شود تا :
    • هر خطی که با عبارت DevOps شروع می‌شود، پاک شود.
- hosts: all
  tasks:
    - name: Ansible lineinfile regexp example
      lineinfile:
        dest: /home/mdtutorials2/remote_server.txt
        regexp: '^DevOps'
        state: absent
  • به مواردی که به صورت رنگی مشخص شده است، دقت کنید.
  • به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml

  • به منظور مطالعه‌ی بیشتر لینک‌های زیر پیشنهاد می‌شود :
https://www.mydailytutorials.com/ansible-lineinfile-module-examples/
https://docs.ansible.com/ansible/latest/modules/lineinfile_module.html

  • آزمایش شده بر روی Ansible نسخه‌ی 2.5.1
  • آزمایش شده بر روی سیستم عامل Ubuntu 18.04

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

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