使用ansible的目的就是为了能让系统相对的自动化起来,我们前文所提到的内容涉及到value的地方可以看到都是写的固定的value,但我们实际工作中使用的时候肯定是没有办法这样的,因为太不灵活了。比如计算机名称、IP等等信息等等都会用到变量,所以我们今天来学习一下在ansible中如何使用变量Variables。
有效的变量名
虽然我们还不知道如何使用变量,但在开始之前我们一定要先学会什么样的变量名是有效的。
- 变量名称的组成包括字母、数字、下划线。
- 变量需要使用以字母开头
示例
pang_share
这是一个有效的变量名,同样pangshare01
也是。
变量名尽量使用英文且代表一定变量的意义,建议不要使用拼音或者字母简写。因为使用拼音或字母简写代码可读性差,容易有误解。当然了,你要非说你注释写的好,那也没毛病。
变量使用
我们使用前面演示debug的代码来演示变量的使用,在yml文件中添加变量vars:并定义pang为变量key,value是“hello pangpang”。在msg输出的时候使用两个大括号来使用变量{{ pang }}
- name: hello debug hosts: pangshare-01 vars: pang: "hello pangpang" tasks: - name: hello debug debug: msg: "{{ pang }}"
代码执行完成后,我们会在输出结果中看到”hello pangpang”
在实际编写yml过程中我们不建议把所有的变量都写到一个yml文件中,应该有单独存放变量的文件然后通过调用的方式来访问变量,下面我们就来演示一下在yml文件中如何访问变量文件
vars_files
我们在playbook文件下面创建一个vars文件夹用于存放后面使用的变量文件。创建一个vars.yml文件。并在此文件中编写变量内容
pangshare: hello www.pangshare.com
编写debug.yml,我们看到使用vars_files参数下增加列表输入vars.yml路径,在msg中输入变量名称,我们来执行一下命令看一下输出效果
- name: hello debug hosts: pangshare-01 vars_files : - "/root/ansible-code/playbook/vars/vars.yml" tasks: - name: hello debug debug: msg: "{{ pangshare }}"
变量优先级
我们来做一个测试,当我们在debug.yml文件中也创建了一个变量为pangshare
,我们在vars.yml文件中也创建了一个变量为pangshare
,但是两个变量的value不一样,我们来看一下当遇到这种情况的时候他们的优先级是什么样的。
# vars.yml pangshare: hello www.pangshare.com
# debug.yml - name: hello debug hosts: pangshare-01 vars: pangshare: "hello pangpang" vars_files : - "/root/ansible-code/playbook/vars/vars.yml" tasks: - name: hello debug debug: msg: "{{ pangshare }}"
从上面的输出结果我们可以看到,当我们执行的debug.yml文件中包含了与vars.yml文件中重复的变量名时,ansible在执行的时候会优先执行vars.yml文件中的变量。
同理我们可以判断出,如果当我们的debug.yml中出调用了多个yml文件用于读取变量的时候,多个yml文件中出现了重名的变量应该如何处理。你说的对,当我们在yml文件中出现重名的变量时,按照程序从上往下阅读的规则,后面的变量会覆盖前面的变量,我们来看一下下面的演示。
- name: hello debug hosts: pangshare-01 vars: pangshare: "hello pangpang" vars_files : - "/root/ansible-code/playbook/vars/vars.yml" - "/root/ansible-code/playbook/vars/test.yml" tasks: - name: hello debug debug: msg: "{{ pangshare }}"
此文章为原创文章,作者:胖哥叨逼叨,如若转载,请与我联系并注明出处:https://www.pangshare.com/2410.htm