web-dev-qa-db-fra.com

Remplacer une ligne dans un fichier de configuration avec ansible

Je suis nouveau à ansible.

Existe-t-il un moyen simple de remplacer la ligne commençant par option domain-name-servers dans /etc/dhcp/interface-br0.conf par plus d'adresses IP?

  option domain-name-servers 10.116.184.1,10.116.144.1;

Je veux ajouter ,10.116.136.1

5
rubo77

Vous pouvez utiliser le module lineinfile Ansible pour y parvenir.

  - name: replace line
    lineinfile: 
      dest: /etc/dhcp/interface-br0.conf 
      regexp: '^(.*)option domain-name-servers(.*)$' 
      line: 'option domain-name-servers 10.116.184.1,10.116.144.1,10.116.136.1;'
      backrefs: yes

L'option regexp indique au module quel sera le contenu à remplacer.

L'option line remplace le contenu précédemment trouvé par le nouveau contenu de votre choix.

9
SegFault

J'ai créé un rôle dhcp avec le main.yaml suivant:

---
- name: add all dns servers
  lineinfile:
    dest: /etc/dhcp/interface-br0.conf
    regexp: '^\s*option domain-name-servers.*$'
    line: '  option domain-name-servers 10.116.184.1,10.116.144.1,10.116.136.1;'
    backrefs: yes
  become: true
1
rubo77

Vous pouvez utiliser le module de remplacement. Veuillez vous reporter à http://docs.ansible.com/ansible/latest/modules/replace_module.html .

#example
vim httpd-replace-hostname.yml

---
- hosts: <Your ansible Host>
  tasks:
  - name: hostname was used instead of path.
    replace:
      path: /etc/hosts
      regexp: '(\s+)old\.name\.com(\s+.*)?$'
      replace: '\new.name.com\2'
      backup: yes

Courir

ansible-playbook httpd-replace-hostname.yml

Vous pouvez vérifier le résultat avec succès comme ci-dessous.

PLAY [Your hosts] ***************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************
ok: [hostname.name.com]

TASK [hostname was used instead of path.] ***************************************************************************************************************************************
ok: [hostname.name.com]

TASK [Replace after the expression till the end of the file] ********************************************************************************************************************
changed: [hostname.name.com]

PLAY RECAP **********************************************************************************************************************************************************************
hostname.name.com : ok=3    changed=1    unreachable=0    failed=0 
1
Shirley

nous pouvons utiliser le module lineinfile pour remplacer une ligne

en utilisant commande ad-hoc:

ansible <Host> -m lineinfile -a "path=/etc/dhcp/interface-br0.conf regexp=''^(.*)option domain-name-servers(.*)$'' line='1option domain-name-servers 10.116.184.1,10.116.144.1,10.116.136.1;' backrefs: yes"

en utilisant ansible playbook:

- name: replacing a line in file
  lineinfile: 
    path: /etc/dhcp/interface-br0.conf 
    regexp: '^(.*)option domain-name-servers(.*)$' 
    line: 'option domain-name-servers 10.116.184.1,10.116.144.1,10.116.136.1;'
    backrefs: yes

pour plus d'informations, nous pouvons rechercher d'autres options: dans le module lineinfile

https://docs.ansible.com/ansible/latest/modules/lineinfile_module.html

0
Javeed Shakeel