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
-
hosts: localhost
tasks: -
name: lineinfile
lineinfile:
path: ./hosts
regexp: ‘^(.)\bserver-rack(\d+)-test-server-(\d+)\b(.)$’
line: ‘\1 server-rack\2-test-server-\3.corp.company.com \4’
backrefs: yes
Have a look at https://docs.python.org/2/library/re.html for further details
regards
Luca