rhce8-ansible里的字典变量和列表变量
字典变量
所谓字典(dictionaries简写为dict),就是存储多个变量的容器,可以把字典理解为是一个木桶,里面存放了很多个变量。比如下图,两个木桶xx和yy,里面分别存储了好几个变量
要是使用变量的话,必须要指定是哪个木桶里的变量,比如 xx.aa。
定义字典的语法是
dict-name:
var1: value1
var2: value2
....
这里的dict-name就如同上图中的桶,里面的var1、var2如同上图中的变量aa、bb等。
注意,在字典里定义这一个个变量时,变量前面是不加 - 的,且定义变量没有先后顺序。
通过dict-name.var-name这种格式来引用变量,看下面的例子:
这里定义了一个字典userx,里面有4个变量,最后通过userx.name1引用了字典里名字为name1的这个变量,通过ansible-playbook var-2.yaml执行的结果应该为tomx1:
如果在同一个字典里出现了相同的变量名,则后面定义的变量的值 会覆盖前面定义的变量的值,比如把var-2.yaml里userx字典的内容改为:
字典userx里有两个name1,则后面定义的name1的值会生效,运行的结果应该是tomy2:
不过因为这里变量出现了重复,当运行的时候会出现提示:
[WARNING]: While constructing a mapping from /root/rh294/var-2.yaml, line 6, column 7, found a duplicate dict key (name1). Using last defined value only.
列表变量
如同上面讲的字典,在一个列表里也可以定义多个变量,定义列表的语法:
列表里的每个元素都可以有多个值(当然每个元素里也可能只有一个值),每个元素的第一个值前面要含有 ”-” 。要引用这里某个元素则用list-name[N],这里N是指第几个元素减一,比如要引用第一个元素则是list-name[0], 引用第3个元素则是list-name[2]。看下面的例子:
这里列表userx定义了3个元素,现在要引用第1个元素,用userx[0]来表示,运行结果如下:
列表里每个元素都是一个字典,所以如果引用某个元素里的某个值,可以用list-name[N].var-name来引用。比如现在要引用上例中第1个元素里job这个变量,则可以用userx[0].job,修改yaml文件如下:
根据分析,第一个元素里job的值应该是job1,通过执行命令ansible-playbook var-3.yaml并查看运行结果来验证: