1.在使用 --tags 的时候,如果一个 task 始终需要执行,可以指定 tags 是 always
- name: make sure haproxy is running
service: name=haproxy state=started enabled=true
tags: always
2.role 的 hosts 默认使用另一个 role 的 hosts 可以这么写
[group_a]
h1
h2
[group_b]
- hosts: group_a
roles:
- a
- hosts: group_b
roles:
- b
- {
role: a,
when: groups:'a' | count == 0 // 当 group_a 下面没有主机的时候,为 group_b 的主机赋予 a 角色
}
3.如果需要把变量保存到目标主机的某个文件上,且这个文件内容只有这一个变量,可以使用 copy 的 content 属性,不给 src 参数即可
4.Ansible Template 使用的 Jinja2 支持在模板里设置 API 选项,例如
jinja2: lstrip_blocks
#jinja2: lstrip_blocks: True
global
maxconn {{ global.maxconn }}
tune.ssl.default-dh-param 2048
5.Ansible 提速大法
ssh_pipeline > facts_cache
6.字符串正则匹配使用 match 和 search
"var | match('a.*')
7.验证 controoler 上是否存在某个文件使用 is_file
when: 'mypath | is_file'
其它的还有 is_dir, is_abs, is_link, exists 等
8.验证命令是否成功
when: result | success
9.限制某个软件的最低版本
- name: install or upgrade docker
shell: curl https://releases.rancher.com/install-docker/{{ docker_version }}.sh | sh
when: not docker_installed|success or
not docker_installed_version.stdout|search(docker_version|string)
10.某些没有副作用的 command 可以设置 changed_when: false,这样就不会被统计成 changed
11.ansible 配置文件的优先级
ANSIBLE_CONFIG > ansible.cfg > .ansible.cfg > /etc/ansible/ansible.cfg
并且配置不会被合并