Noctis
Noctis

Reputation: 1

who i can remplace multiple line in a cfg

I would like some help to be able to replace several lines in a cfg file with the ansible module lineinfile

- name: "[MODIFY /etc/zabbix/zabbix.agentd.conf]
  lineinfile:
    path: /etc/zabbix/zabbix.agentd.conf]
    insertafter: "{{ item}}"
  with_items:
    - line 99
    - line 77
    line: "{{ item }}"
  with_items:
    - set number
    - :colorschem murphy
  become: yes
  become_method: sudo


Upvotes: 0

Views: 41

Answers (2)

eduprado
eduprado

Reputation: 81

This might be a good time to use templates:

- name: MODIFY /etc/zabbix/zabbix.agentd.conf
  template:
    src: template/zabbix.agentd.conf.j2
    dest: /etc/zabbix/zabbix.agentd.conf

The file zabbix.agentd.conf.j2 should be a copy of the file you want to copy at the dest path. Your variable goes in the j2 file and can be change at each interaction.

Example:

vi zabbix.agentd.conf.j2

line 1 my file
line 2
line 3
.
.
line 99 {{ set number }}

Upvotes: 0

Vladimir Botka
Vladimir Botka

Reputation: 68189

A: It's not possible to use two loops (with_items) in one task.

Put the configuration data into one loop. Try the task below

- name: MODIFY /etc/zabbix/zabbix.agentd.conf
  lineinfile:
    path: /etc/zabbix/zabbix.agentd.conf
    line: "{{ item.line }}"
    insertafter: "{{ item.after }}"
  loop:
    - line: 'line 99'
      after: 'set number'
    - line: 'line 77'
      after: 'colorschem murphy'
  become: yes
  become_method: sudo

Q: I want replaces line 99 by set number

A: Use replace module.

- name: MODIFY /etc/zabbix/zabbix.agentd.conf
  replace:
    path: /etc/zabbix/zabbix.agentd.conf
    regexp: "{{ item.regexp }}"
    replace: "{{ item.replace }}"
  loop:
    - regexp: 'line 99'
      replace: 'set number'
  become: yes
  become_method: sudo

(not tested)

Upvotes: 1

Related Questions