1. 胖哥叨逼叨首页
  2. OpenSource
  3. Ansible

Ansible由浅入深 – 变量的使用

使用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”

Ansible由浅入深 – 变量的使用
变量输出结果

在实际编写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 }}"
Ansible由浅入深 – 变量的使用
变量输出结果

变量优先级

我们来做一个测试,当我们在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 }}"
Ansible由浅入深 – 变量的使用
变量输出结果

从上面的输出结果我们可以看到,当我们执行的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 }}"
Ansible由浅入深 – 变量的使用
变量输出结果

此文章为原创文章,作者:胖哥叨逼叨,如若转载,请与我联系并注明出处:https://www.pangshare.com/2410.htm

发表评论

电子邮件地址不会被公开。 必填项已用*标注