Ansible the lineinfile, blockinfile and replace modules
Hello !!
This post is for exploring the "lineinfile" vs 'blockinfile' and "replace" modules. The replace and the lineinfile use the path parameter to mark: The file to modify. lineinfile module is used to ensure[s] a particular line is in a file, or [to] replace an existing line using a back-referenced (backref) regular expression (regex).
Use the replace module if you want to change multiple, similar lines
The "dest" parameter is used for modules creating new files like template or copy modules. Just replace dest with path and both provided examples should work as expected.
Adding lines in the file
Adding a line in a file, if a file does not exist then it will create it.
---
# Filename: adding_line.yml
- name: testing LineInFile module
hosts: localhost
tasks:
- name: Add a line to a file if the file does not exist
lineinfile:
path: /tmp/hosts
line: 192.168.1.99 ansiblectl.devopshunter.com ctl
create: yes
The execution of the above playbook gives us the, update of the file /tmp/hosts file created with the line value. check the content of the file.Screenshot 1
| Adding a line in file create if not |
Insert before
---
- name: testing inline
hosts: localhost
gather_facts: no
tasks:
- name: insert before
lineinfile:
dest: /tmp/hosts
line: 192.168.0.19 bhagathsing.devops.com bhagathsing
insertbefore: (192.168.0.18*)
| Ansible the lineinfile module using insertbefore parameter |
Insert After
---
- name: testing inline
hosts: localhost
gather_facts: no
tasks:
- name: insert after
lineinfile:
dest: /tmp/hosts
line: 192.168.0.18 freedome.devops.com freedome
insertafter: (192.*)
| lineinfile module with 'insertafter' parameter |
Removal lines in a file of httpd.conf
---
- name: testing inline
hosts: localhost
gather_facts: no
tasks:
- name: remove commented lines
lineinfile:
dest: /tmp/sample
regex: "(^#)"
state: absent
backup: yes
- name: remove tabbed commented lines
lineinfile:
dest: /tmp/sample
regex: "(#)"
state: absent
- name: remove blank lines
lineinfile:
dest: /tmp/sample
regex: "(^\n)"
state: absent
The execution of removal of lines from the httpd.conf file.
| The lineinfile module uses to remove comment lines of httpd.conf file |
Replace module
/tmp/mytest.txt Step 2: Create a playbook with the File name: test-replace.yml and the content as follows--- # Ansile replace module example - name: Ansile replace module gather_facts: no hosts: localhost become: yes tasks: - name: mytest.txt replace replace: path: /tmp/mytest.txt regexp: "ofmw" replace: "Oracle Fusion Middleware"Assume that you have inventory file having 'webserver' group with node1, node2
Step 3: Execution output is as follows:ansible-playbook test-replace.ymlExecution Screen shots:
'blockinfile' module
If you have multiple lines that need to be inserted into a file in remote box with Ansible blockinfile module. It works similar ot lineinfile module but here multiple lines can be processed.---
# Filename: file-blocking.yaml
# targets [optional] if you pass extra vars ok, otherwise localhost
- name: Creating File with blockinfile
gather_facts: no
hosts: "{{ targets | default('localhost') }}"
tasks:
- name: Create new file
file:
path: /tmp/ansible-slogun.txt
state: touch
- name: Block of text adds to file
blockinfile:
path: /tmp/ansible-slogun.txt
block: Ansible has a large collection of inbuilt modules to manage various cloud resources. The book begins with the concepts needed to safeguard your credentials and explain how you interact with cloud providers to manage resources. Each chapter begins with an introduction and prerequisites to use the right modules to manage a given cloud provider. Learn about Amazon Web Services, Google Cloud, Microsoft Azure, and other providers.
The playbook can be using no extra vars that means localhost will be target host, the executed as follows :
ansible-playbook file-blocking.yaml
Comments