1. 首先是中文文档http://www.ansible.com.cn/docs/playbooks_variables.html#valid-variable-names
写的还是不错的。基本的东西讲的很清楚。
2. 关于ansible的playbook的简单使用
因为我们现在用到的基本是playbook,所以重点介绍以下playbook.
playbook 由一系列小任务组成,一个任务就是一个task. 如果task之间关联性比较强,还可以组成block.
role 的概念实际上我认为是一种对playbook的最佳实践。role最主要的部分依然是一组task, 组成部分是handlers, templates 等。这样从功能上看就是一个独立,完整的小模块。 role可以被playbook引用。
值得一提的是,ansible中有大量的module可以直接使用,功能强大。这里先不举例介绍了。
http://www.ansible.com.cn/docs/modules_core.html
一个最简单的playbook的示例, ./ansible/playbook.yml
---
- hosts: localhost
gather_facts: yes #默认打开的,不写也是打开的.no 关闭
roles:
- network_try
它所引用的role, 它的路径 ./ansible/roles/network_try/tasks/main.yml
---
- name: print Hello
shell: echo {{ var1 }} >> /tmp/1.txt
- name: print 2
shell: echo {{ ansible_hostname }} >> /tmp/1.txt
roles 中出现了变量,变量是采用Jinja2 的样式,{{ }} 包起来,如果在一行中变量打头出现的话, 为防止歧义 需要用“”包起来,“{{ var }}”. 在playbook. 变量的使用有几种方式。
1. 第一种就是通过Gathering Facts 的方式,实际上是ansible 自动聚合的很多主机信息。执行以下命令,可以看到打印出的很多信息,这些信息可以在role中直接使用。
#ansible hostname -m setup
ansible localhost -m setup
2. 执行命令的时候从外部传入. 如举例的playbook文件,其执行命令如下,实际上--extra-vars后边可以跟一个json.
ansible-playbook playbook.yml ansible-playbook playbook.yml --extra-vars "var1='Hello World'"
3. 可以编写本地文件,存放变量,然后在role/playbook中引入文件,使用变量。