1.定义变量规范
先说说怎样定义变量,变量名应该由字母、数字、下划线组成,变量名需要以字母开头,ansible内置的关键字不能作为变量名。
2.定义变量,使用关键字:vars
定义变量用vars,调用变量用{{ 变量名 }}
--- - hosts: 192.168.10.2 remote_user: root vars: testvar1: testfile tasks: - name: test for var file: path: /test/{{testvar2}} state: touch
定义多个变量,如下操作:
vars: testvar1: testfile1 testvar2: testfile2
或者使用YAML的块序列语法定义,等效,如下操作:
vars:
- testvar1: testfile1 - testvar2: testfile2
关于nginx的一个案例:
使用类似“属性”的方法来定义变量,这样可以更加清晰地分辨出所设置的变量是属于谁的,也方便在使用的时候调用相应的变量。
--- - hosts: 192.168.10.2 remote_user: root vars: nginx: conf80: /etc/nginx/conf.d/80.conf conf8080: /etc/nginx/conf.d/8080.conf tasks: - name: nginx configuration file: path: "{{nginx.conf80}}" state: touch - name: nginx configuration file: path: "{{nginx.conf8080}}" state: touch
调用变量时可用的两种语法:
语法一: "{{nginx.conf80}}" 语法二: "{{nginx['conf8080']}}"
注意:关于是否在调用变量的时候使用双引号(" ")的问题:当调用变量直接被放在开头位置时候需要使用双引号,例如:path: "{{nginx.conf80}}"
当调用变量时不在开头,则不需要使用双引号,例如:path: /test/{{testvar2}}
前文中有描述过,当在playbook中为模块的参数赋值时,可以使用“冒号”,也可以使用“等号”,当使用“等号”为模块的参数赋值时,则不用考虑引用变量时是否使用“引号”的问题,示例如下:
--- - hosts: 192.168.10.2 remote_user: root vars: nginx: conf80: /etc/nginx/conf.d/80.conf conf8080: /etc/nginx/conf.d/8080.conf tasks: - name: nginx configuration file: path={{nginx.conf80}} state=touch - name: nginx configuration file: path={{nginx.conf8080}} state=touch
3.变量文件分离,使用vars_file参数
我们不在剧本中写入并调用变量,采用单独将变量写入一个文档里,实现变量文件分离,当我们需要调用某个变量文件中的变量时,只需要使用vars_file参数进行调用,被调用变量文件的路径前面要加上"-",横杠。
--- - hosts: 192.168.10.2 remote_user: root vars_files: - /playbook/nginx_vars.yml tasks: - name: nginx configuration file: path: "{{nginx.conf80}}" state: touch - name: nginx configuration file: path: "{{nginx.conf8080}}" state: touch
注意:vars关键字和vars_file关键字可以同时使用,示例如下:
vars: conf90: /etc/nginx/conf.d/9090.conf vars_files: - /playbook/nginx_vars.yml