变量的命名
和大多数编程语言类似,ansible的变量允许使用字母数字下划线来取,但是变量名始终以字母开头。
yaml语法可以定义一个字典:
foo:
field1: 1
field2: 2
调用可以使用括号和点:
foo['field1']
foo.field1
点有时候会和python的某些属性调用冲突,所以尽量使用括号法。
变量的定义
- 变量可以在inventory中定义
[atlanta]
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909
- 变量可以在playbook中定义
- hosts: webservers
vars:
http_port: 80
这将很利于阅读playbook
- 变量可以在roles和incloud的结构中定义
在主目录中建立group_vars目录,在其中写入yaml格式定义的变量。
使用变量
My amp goes to {{ max_amp_value }}
这是简单的例子,双大括号内部就是变量名。
在playbook中,同样的使用:template: src=foo.cfg.j2 dest={{ remote_install_path }}/foo.cfg
注意
在yaml语法中,如果你需要引用变量作为一行的开头,你要加上双引号,否则不能调用变量而是创建字典。
这是错的:
- hosts: app_servers
vars:
app_path: {{ base_path }}/22
这是对的:
- hosts: app_servers
vars:
app_path: "{{ base_path }}/22"
从系统获取变量:facts
有一种变量不是手动定义的,而是从系统获取的,facts就是这种变量的集合。
要获得一台主机的facts,使用这个命令:ansible hosts -m setup
这将会返回很多的内容的,其实就是facts变量的组成的字典。
例如:"ansible_distribution": "CentOS"
这一项{{ansible_distribution}}
的值就是“CentOS”。