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
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.
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
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
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