Update nodes /etc/hosts file from a master file

95 views
Skip to first unread message

ecr...@gmail.com

unread,
Apr 28, 2019, 5:39:07 AM4/28/19
to Ansible Project
I hope I am posting this to the correct area...

I'm really new to Ansible and am in the process of trying to learn it.
Question: Does Ansible have the ability to look at a master file that contains host file information and deploy information from that master file to the /etc/hosts file on all the nodes in my environment so that when I add a new host all that I need to do is update that master file and redeploy to all my nodes appending, or replacing, that existing /etc/hosts file?

Thanks.

Kunalsing Thakur

unread,
Apr 28, 2019, 5:43:06 AM4/28/19
to Ansible Project
If I understand correctly the master file you are talking about is playbook term in ansible. The playbook has all information related to hosts and deployment instruction. You can give the Input in playbook and it will modify the stuff accordingly.

--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/9a0cbe4c-98b9-4609-a3a8-843fbdbcd326%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

ecr...@gmail.com

unread,
Apr 28, 2019, 5:46:18 AM4/28/19
to Ansible Project
Actually, I am referring to the master file outside the playbook.
In other words I just have a plain text master file with all my host entries. Then, I create a playbook that references that master file to send to all nodes as reference to update their /etc/hosts file.
Is that possible?


On Sunday, April 28, 2019 at 5:43:06 AM UTC-4, Kunalsing Thakur wrote:
If I understand correctly the master file you are talking about is playbook term in ansible. The playbook has all information related to hosts and deployment instruction. You can give the Input in playbook and it will modify the stuff accordingly.

On Sun, 28 Apr 2019, 15:09 <ecr...@gmail.com wrote:
I hope I am posting this to the correct area...

I'm really new to Ansible and am in the process of trying to learn it.
Question: Does Ansible have the ability to look at a master file that contains host file information and deploy information from that master file to the /etc/hosts file on all the nodes in my environment so that when I add a new host all that I need to do is update that master file and redeploy to all my nodes appending, or replacing, that existing /etc/hosts file?

Thanks.

--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible...@googlegroups.com.

Kunalsing Thakur

unread,
Apr 28, 2019, 5:53:36 AM4/28/19
to Ansible Project
Yes. Use copy module. I hope so you are referring to inventory file which has all node details.
Like below

/etc/ansible/inventory
[all]
host1
host2
host3

/etc/ansible/playbook/master
host entry files


/etc/ansible/playbook/test.yaml

host: all
tasks:
   - name: copying host file to all nodes
     copy:
         src: /etc/ansible/playbook/master
         dest: /etc/hosts
         mode: 0755
       

To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.

To post to this group, send email to ansible...@googlegroups.com.
Message has been deleted

ecr...@gmail.com

unread,
Apr 29, 2019, 4:57:56 AM4/29/19
to Ansible Project
No, I'm not referring to the inventory file, it will be a separate file that will have other hosts. However, you have pointed me in the right direction, thank you for that.
Here is what I have come up with and this works, but my problem now is that every time there are new servers added, the existing servers will get the same hosts records all the time so there will be duplicates in the /etc/hosts. I haven't been able to figure out how to look at the existing servers in the host file and only add new servers.:

--- # Copy hosts file
- hosts: all
  become: yes
  tasks:
  - name: update hosts template file
    copy:
      src: /home/ansible/hostfile 
      dest: /tmp/hostfile
      owner: root
      group: root
      mode: 0644
      backup: yes

  - name: Append template file to master host file
    shell: cat /tmp/hostfile >> /etc/hosts

  - name: Delete temp file
    file:
      path: /tmp/hostfile
      state: absent


This works, but my problem now is that every time there are new servers added, the existing servers will get the same hosts records all the time so there will be duplicates in the /etc/hosts. I haven't been able to figure out how to look at the existing servers in the host file and only add new servers.

Kunalsing Thakur

unread,
Apr 29, 2019, 5:07:56 AM4/29/19
to Ansible Project
Why do you need that to append. If you have hosts file you can use copy to replace that role in every hosts file.  I assume you have DNS server

To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.

To post to this group, send email to ansible...@googlegroups.com.

ecr...@gmail.com

unread,
Apr 29, 2019, 5:30:12 AM4/29/19
to Ansible Project
I do not have a DNS server, hence the need to manually update the /etc/hosts file. This a small network with less than 50 clients.

Kunalsing Thakur

unread,
Apr 29, 2019, 5:38:32 AM4/29/19
to Ansible Project
Can you show me one example of your hosts file from one of node

To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.

To post to this group, send email to ansible...@googlegroups.com.

Jonathan Lozada De La Matta

unread,
Apr 29, 2019, 6:37:45 AM4/29/19
to ansible...@googlegroups.com
Hello,

I think you should use templating and jinja2 a bit in here. Will make the file easier to control and avoid appending. You can also use NetworkManager (if you use that).


For more options, visit https://groups.google.com/d/optout.


--

Jonathan lozada de la matta

AUTOMATION PRACTICE



 

ecr...@gmail.com

unread,
Apr 30, 2019, 3:40:14 AM4/30/19
to Ansible Project
I think I found a way to do what I want to do. It's dirty but it works:


--- # Copy hosts file
- hosts: all
  become: yes
  tasks:
  - name: update hosts template file
    copy:
      src: /home/ansible/hostfile 
      dest: /tmp/hostfile
      owner: root
      group: root
      mode: 0644
      backup: yes

  - name: create master template file
    shell: diff /tmp/hostfile /etc/hosts | grep '< ' | sed 's/< //' > /tmp/masterhosts

  - name: Append template file to master host file
    shell: cat /tmp/masterhosts >> /etc/hosts

  - name: Delete temp file
    file:
      path: /tmp/hostfile
      state: absent

  - name: Delete master temp file
    file:
      path: /tmp/masterhosts
      state: absent


On Monday, April 29, 2019 at 6:37:45 AM UTC-4, Jonathan Lozada De La Matta wrote:
Hello,

I think you should use templating and jinja2 a bit in here. Will make the file easier to control and avoid appending. You can also use NetworkManager (if you use that).

--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages