本文分享使用 Ansible 的 Jinja2 模版文件生成服务器的 /etc/hosts 文件的方法。
1.配置主机名
首先最好把所有主机名重新改名,避免名称重复产生的问题。Ansible 的任务配置如下:
---
- name: change hostname
shell: hostnamectl set-hostname {{hostname|quote}}
参考的 Ansible Inventory 文件如下,上面的 hostname 从下面对应位置获取:
10.211.55.122 hostname=sdw2
10.211.55.120 hostname=mdw ansible_ssh_port=22
10.211.55.121 hostname=sdw1 ansible_ssh_port=22
172.16.25.129 hostname=app1
2.设置 Jinja2 模版文件
模版文件内容如下,主要是使用了全局的 hostvars 获取所有配置主机的变量:default_ipv4 和 hostname.
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
{% for host in groups['all'] %}
{{ hostvars[host]['ansible_facts']['default_ipv4']['address'] }} {{ hostvars[host]['ansible_facts']['hostname'] }}
{% endfor %}
对应的 Ansible 任务配置如下:
---
- name: update configure file for etc-hosts
ansible.builtin.template:
src: templates/hosts.j2
dest: /etc/hosts
owner: root
group: root
mode: 0644
End~