Ansible 一些有用的小Demo

摘要

将同组内机器别名设置到hosts

  • inventory

1
2
3
4
[test-mongo]
10.1.2.249 hostname=mongodb.db0
10.1.2.184 hostname=mongodb.db1
10.1.2.178 hostname=mongodb.db2
  • tasks

1
2
3
4
5
6
7
8
- name: Set static hostname in /etc/hosts
lineinfile:
path: /etc/hosts
line: "{{ item }} {{ hostvars[item].hostname | default('mongodb.db' ~ index) }}"
state: present
loop: "{{ groups[group_names[0]] }}"
loop_control:
index_var: index # 循环索引变量,从0开始,ansible>2.14+
  • 说明

1
2
3
4
5
6
7
8
9
10.1.2.249 hostname=mongodb.db03 : 这里hostname就是要设置给当前主机的变量,多个变量空格分割

groups[key] : 获取指定组内的ip数组,key为组名
group_names[0] : 获取运行当前脚本的第一个组名
hostvars[item].hostname : 获取指定ip的变量名称为hostname的值
default('mongodb.db' ~ index) : 设置缺省值,即如果没有设置hostname,则默认为mongodb.db[0~2]

# 获取除了当前主机外的ip数组
{{ groups[group_names[0]] | difference([inventory_hostname]) }}
  • 这里用到了loop,关于loop的用法可以参考官方文档