Appending a line in a file

Hi,
I want to add some stuff to my /etc/hosts file.
For instance, if my /etc/hosts says “server.corp”, I want to append that in all my machines to where it says “server.corp.company.com”. Then I want it to save.
What is the best module for that , and can you tell me what the play might look like?

Hi try the module lineinfile, see the manual page at https://docs.ansible.com/ansible/latest/modules/lineinfile_module.html

Thanks Luca, I sorta thought that was it, could you give a quick example on how the file would look?

Thanks kylix,
Where would the append go?

I don’t know if I got your specification correctly

anyway this is an example

fusillator@catorcio:~/Code/ansible/test$ cat lineinfile.yml

  • hosts: localhost
    tasks:

  • name: lineinfile
    lineinfile:
    path: ./hosts
    regexp: ‘^(.) server.corp\b(.)$’
    line: ‘\1 server.corp server.corp.company.com \2’
    backrefs: yes

fusillator@catorcio:~/Code/ansible/test$ cat hosts
127.0.0.1 localhost
192.168.192.168 server.corp
fusillator@catorcio:~/Code/ansible/test$ ansible-playbook lineinfile.yml

PLAY [localhost] **************************************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [lineinfile] *************************************************************************************************************************************************************************************************************************************************************
changed: [localhost]

PLAY RECAP ********************************************************************************************************************************************************************************************************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0

fusillator@catorcio:~/Code/ansible/test$ cat hosts
127.0.0.1 localhost
192.168.192.168 server.corp server.corp.company.com

regards

Luca

I don’t know if I got your specification correctly

anyway this is an example

$ cat lineinfile.yml

  • hosts: localhost
    tasks:

  • name: lineinfile
    lineinfile:
    path: ./hosts
    regexp: ‘^(.) server.corp\b(.)$’
    line: ‘\1 server.corp server.corp.company.com \2’
    backrefs: yes

$ cat hosts
127.0.0.1 localhost
192.168.192.168 server.corp
fusillator@catorcio:~/Code/ansible/test$ ansible-playbook lineinfile.yml

PLAY [localhost] **************************************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [lineinfile] *************************************************************************************************************************************************************************************************************************************************************
changed: [localhost]

PLAY RECAP ********************************************************************************************************************************************************************************************************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0

$ cat hosts
127.0.0.1 localhost
192.168.192.168 server.corp server.corp.company.com

regards

Luca

Thank you sir, I am trying to find out how that exactly would look in my file (I am new to regexp so please forgive me).
Heres what my file looks like:

cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 server-rack5-test-server-5

What I need it to change to (on a dynamic level, as in “server-rack5-test-server-5” will of course always be different"):

cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 server-rack5-test-server-5.corp.company.com

Could you help me with that?

hi, you have to find common pattern in the hostnames and forge subregexp in brakets…

for example if the changing part is the number enclose them in brackets and backreference them in line as \cardianalnumber
in the example below

\1 will reference to (.*)
\2 will reference to the first (\d+)

\3 will reference to the second (\d+)
\4 will reference to the tailing (.*)

At the moment I can’t test the playbook, anyway you try something like

Have a look at https://docs.python.org/2/library/re.html for further details

regards

Luca