Skip to content

Instantly share code, notes, and snippets.

@longtian
Last active October 10, 2017 09:31
Show Gist options
  • Save longtian/eb0e78d7dad97763dc9d439c27f5bf7b to your computer and use it in GitHub Desktop.
Save longtian/eb0e78d7dad97763dc9d439c27f5bf7b to your computer and use it in GitHub Desktop.
Ansible 知识点拾遗

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

并且配置不会被合并

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment