说起变量,ansible中的变量,差不多等于salt-stack里面的pillar+grains吧
ansible中的变量主要来源于,楼主总结了一下,大概有这么几个地方吧
Inventory(host vars,group vars)
playbook里面
命令行
playbook执行task过程中产生结果,可以register起来,作为变量给下面的task使用
roles里面
来自于nodes上面的facts
这些类型的变量,1-4一般来说都是咱们用户自己定义的,而5facts则主要是ansible从nodes上面拉取过来的,当然facts也可以自己定义。
下面咱们就来看看,这些变量是怎么玩的吧?
先看看Inventory里面的变量吧,这个第二篇的时候写过,再写一下吧
再看看playbooks里面的变量吧
OK,大伙也看到了playbooks里面可以定义变量,也可以导入外部的文件里面的变量
好,大伙再一块看看命令行里面的变量吧。
命令行,传递变量给playbooks大概有三种方式吧
看看第1种方式吧,比较简单了。
第2种方式,以json的格式传递变量。
第3种方法,传入json文件。不过,第二种,第三种方法,一般用于变量形式较复杂的情况。不过,一般估计很少用吧,因为在命令行传遍了本来就不多用吧,还是第一种命令行传递方式稍微常用点。
OK,第四种方法,register task的结果,作为变量,给下面的task使用
看一下,小例子。这个比较简单,就不打印结果了。
OK,定义变量的第五种方法,在roles里面。
这个就不多说了。上一篇刚写过。
第六种方法,从nodes获取facts,facts和salt-stack里面的grains差不多,主要是nodes本身的一个系统信息,bios信息,网络,硬盘等等信息。。不过楼主观察了下,facts比salt-stack中的grains获取的信息。要更多一些。
OK,咱们在这里说怎么从nodes上获取facts,前面咱们不是说了,可以自己定义facts吗?
自定义facts有多种方法,有能力的同学,可以直接去修改,setup这个模块。不过官方的东西,咱们还是不要随便改了。
第二种方法,定义在nodes上面,默认定义在/etc/ansible/fact.d/*fact里面。
咱们定义在这里面文件的格式,有三种格式吧,分别是ini格式,json格式,或者可执行文件,不过他们返回的必须是json格式。
看个例子吧
先看看咱们定义的文件内容分别为json,ini,及可执行的脚本的三个文件吧
OK,在node上创建文件夹并把测试的fact文件传送过去。修改lss.fact这个文件的属性为其它组可执行的权限,否则待会执行不了,楼主用-s参数试了下,也执行不了
好,这种自定义的方法,就算是说完了。还有一种自定义的方法,其实就是自定义模块,只不过这个模块,返回一个facts格式的结果罢了。
好,咱们在ansible的module里面,自定义一个文件夹,放咱们自己的module,然后丢给自定义的module进去
OK,看到了吧,这里面是从chengge这个模块里面得到了一个输出结果,但是我们咋用呢?
其实,我们想用模块里返回的facts,那么显然,我们使用之前,肯定要先执行以下我们自定义的module
OK,看看这个例子吧
先看看playbooks
再看看,执行结果
本文出自 “西风” 博客,请务必保留此出处http://lixcto.blog.51cto.com/4834175/1433138
ansible(五)variables(一)定义,布布扣,bubuko.com
原文地址:http://lixcto.blog.51cto.com/4834175/1433138