Generate /etc/hosts with Ansible

inventory file

[servers]
master ansible_ssh_host=172.18.23.69
node1 ansible_ssh_host=172.18.23.70
node2 ansible_ssh_host=172.18.23.71
node3 ansible_ssh_host=172.18.23.72

templates/etc/hosts.j2

{% for item in ansible_play_batch %}
{{ hostvars[item].ansible_ssh_host }}       {{ item }}.example.com
{% endfor %}

playbook task

- hosts: servers
  gather_facts: False
  tasks:
  - name: update /etc/hosts file
    become: true
    blockinfile:
      dest: /etc/hosts
      content: "{{ lookup('template', 'templates/etc/hosts.j2') }}"
      state: present