Bo's Oracle Station

查看: 1412|回复: 0

要结合ansible事实变量和主机清单变量

[复制链接]

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2020-12-5 16:32:56 | 显示全部楼层 |阅读模式
  1. 生成主机文件
  2. 将一个初始模板文件从 http://classroom.example.com/content/hosts.j2 下载到/home/student/ansible
  3. 完成该模板,以便用它生成以下文件:针对每个清单主机包含一行内容,其格式与/etc/hosts 相同
  4. 创建名为/home/student/ansible/hosts.yml 的 playbook,它将使用此模板在 dev 主机组中的主机上生成文件/etc/myhosts 。
  5. 该 playbook 运行后, dev 主机组中主机上的文件/etc/myhosts 应针对每个受管主机包含一行内容:
  6. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  7. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  8. 172.25.250.10 servera.lab.example.com servera
  9. 172.25.250.11 serverb.lab.example.com serverb
  10. 172.25.250.12 serverc.lab.example.com serverc
  11. 172.25.250.13 serverd.lab.example.com serverd
  12. 注:清单主机名称的显示顺序不重要。
复制代码

不正确的做法(只用事实变量):
  1. [student@workstation ansible]$ cat hosts.j2
复制代码
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

{% for host in groups['all'] %}
{{ ansible_default_ipv4['address'] }} {{ ansible_fqdn }} {{ ansible_hostname }}
{% endfor %}


hosts.yml:
  1. ---
  2. - name: Create myhosts
  3.   hosts: dev
  4.   tasks:
  5.   - name: Create myhosts
  6.     template:
  7.       src: hosts.j2
  8.       dest: /etc/myhosts
复制代码
  1. [student@workstation ansible]$ ansible  dev -m shell -a 'cat /etc/myhosts'
复制代码
servera | CHANGED | rc=0 >>
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

172.25.250.10 servera.lab.example.com servera
172.25.250.10 servera.lab.example.com servera
172.25.250.10 servera.lab.example.com servera
172.25.250.10 servera.lab.example.com servera



结合了静态的清单和动态的事实(可以实现在A机上看到B机的实际情况,A机和B机都是受管节点,他们之间互相“检举”):

https://www.botangdb.com/forum.php?mod=viewthread&tid=1491&page=1&extra=#pid2549

host.j2:
  1. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  2. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

  3. {% for host in groups['all'] %}
  4. {{ hostvars[host]['ansible_default_ipv4']['address'] }} {{ hostvars[host]['ansible_fqdn'] }} {{ hostvars[host]['ansible_hostname'] }}
  5. {% endfor %}

复制代码

hosts.yml:
  1. ---
  2. - name: Create myhosts
  3.   hosts: all
  4.   tasks:
  5.   - name: Create myhosts
  6.     template:
  7.       src: hosts.j2
  8.       dest: /etc/myhosts
  9.     when:
  10.       ansible_hostname in groups['dev']
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Bo's Oracle Station   

GMT+8, 2024-4-29 07:54 , Processed in 0.033588 second(s), 24 queries .

快速回复 返回顶部 返回列表