Replace a line in a config file with ansible

后端 未结 4 1578
执念已碎
执念已碎 2021-02-07 08:18

I am new to ansible.

Is there a simple way to replace the line starting with option domain-name-servers in /etc/dhcp/interface-br0.conf with mo

相关标签:
4条回答
  • 2021-02-07 08:58

    You can use the lineinfile Ansible module to achieve that.

      - name: replace line
        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
    

    The regexp option tells the module what will be the content to replace.

    The line option replaces the previously found content with the new content of your choice.

    The backrefs option guarantees that if the regexp does not match, the file will be left unchanged.

    0 讨论(0)
  • 2021-02-07 09:14

    we can use lineinfile module to replace a line

    using ad-hoc command:

    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"
    

    using 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
    

    for more we can check for other options: in lineinfile module

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

    0 讨论(0)
  • 2021-02-07 09:20

    You can use Replace Module. Please refer to 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
    

    Run

    ansible-playbook httpd-replace-hostname.yml
    

    You can check out the result successfully as below.

    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 
    
    0 讨论(0)
  • 2021-02-07 09:22

    I created a role dhcp with the following main.yaml:

    ---
    - 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
    
    0 讨论(0)
提交回复
热议问题