在ansible中使用变量,能让咱们的工做变得更加灵活,在ansible中,变量的使用方式有不少种。nginx
变量的定义:bash
变量名应该有字母,数字,下划线组成,变量名须要以字母开头,ansible内置的关键字不能做为变量名。ide
在playbook中使用变量:3d
若是咱们想要在某个paly中定义变量,了一借组vars关键字,示例以下:blog
上例,使用vars关键字,表示在当前play中进行变量的相关设置。it
vars关键字的下一级定义定义了一个变量,变量名为testvar1,变量值为testfileclass
当咱们须要使用testvar1的变量时,则须要应用这个变量,引用方式是两个大括号。test
也能够定义多个变量:变量
除了上面语法,使用yaml的块序列语法也能够定义变量,事例以下:file
还能够用相似“属性”的方式定义变量,示例以下:
对于上面,咱们引用变量的方式有两种:
语法一:"{{nginx.conf80}}" 语法二:"{{nginx['conf8080']}}"
仔细观察,上例中,咱们在引用变量时使用了双引号,而在第一个示例中没有用双引号,这是由于第一个示例中的变量在被引用时,并无处于”开头的位置“,第一个示例中变量被引用时以下:
#path: /testdir/{{ testvar1 }}
当file模块的path参数引用对应的变量时,先引入了/testdir/,而后才引用了’testvar1‘变量。
而在上述示例中引用变量,变量被引用时以下,处于’开头的位置‘,这种状况下,咱们引用变量时必须使用双引号引发被引用的变量,不然报语法错误。
path:"{{ nginx.conf80 }}"
当咱们在playbook中为模块的参数赋值时,咱们使用”冒号,也可使用”等号“,当使用等号位模块的参数赋值时,则不用考虑引用变量时是否使用”引号“的问题,示例以下:
除了可以在play中直接定义变量,咱们还能够在某个文件中定义变量,而后再在playbook引入对应的文件,引入文件后,playbook便可使用文件中定义的变量,你可能会问,为何要画蛇添足呢?
这是由于在某些工做场景颇有用,好比:你想让别人阅读你的playbook,却不想让别人看到某些值,可使用这种方法,由于别人在阅读playbook时,只能看到引入的变量名,不能看到相应的值,这种将变量分离到某个文件中的作法就作”变量文件分离“,”变量文件分离“除了可以隐藏某些值,还可以让你将不一样类的信息放在不一样的文件中,而且让这些信息与剧本主体分开。
例子,定义一个专门用来存放nginx相关变量的文件(文件名nginx_vars.yaml):
定义完相关变量后,便可在playbook中引入文件中的变量,在playbook中引入包含变量的文件时,须要使用”vars_files“关键字,被引入的文件须要以”-“开头,以yaml中块序列语法引用,示例以下:
上例中使用"var_files"关键字引入了对应的变量文件,而后使用了文件中定义的变量。固然也能够引用多个变量文件,每一个被引入的文件都须要以“-”开头。
“var”关键字和“var_files”关键字能够同时使用,以下:
var: - conf90: /etc/nginx/conf.d/90.conf vars_files: - /testdir/ansible/nginx_vars.yml