Ansible常用变量【上】

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


在Ansible中会用到很多的变量,Ansible常用变量包括以下几种:

  1. 自定义变量------在playbook中用户自定义的变量;

  2. 系统变量------用户无须自定义,Ansible会在执行playbook之前去远程主机上搜集远程节点系统信息的变量;

在模版文件中,可以直接使用上述两种变量

  1. 注册变量------把任务的运行结果作为一个变量来使用;

  2. 额外变量------为了使playbook更灵活,通用性更强,允许用户在执行playook时传入变量的值,这时候就需要用到"额外变量"。

1. 自定义变量

用户可以在playbook中通过vars关键字自定义变量,使用时用**{{}}**引用起来即可,具体的使用场景有多种。

1.1 在playbook中定义&使用变量

在playbook中,使用vars定义一个简单变量,然后在task中引用该变量即可。

举例:创建playbook文件test.yaml定义和引用自定义变量

[root@test101 ansible-test]# cat test.yaml 
---
- name: Test playbook with custom variables
  hosts: all
  gather_facts: no      #关闭Facts,不收集系统信息
  vars:
    custom_message: "Hello, SRE"   #定义变量
  tasks:
    - name: Display custom message
      debug:
        msg: "{{ custom_message }}"  #引用变量,注意这里冒号后面以{开头的时候,{}必须加上引号,否则执行会报错
[root@test101 ansible-test]#

执行yaml文件效果:

1.2 把变量放在单独文件中

当变量较多的时候,或变量需要在多个playbook中重复使用的时候,可以把变量放到一个单独的文件中,通过关键字**"var_files"**把文件中定义的变量引用到playbook中。使用变量的方法和在本文件中定义变量的使用方法相同。

举例:

1)创建变量文件

[root@test101 ansible-test]# cat vars/custom_message.yaml 
custom_message: "Hello, SRE"
[root@test101 ansible-test]# 
[root@test101 ansible-test]#

2)修改test.yaml中引用变量的方法

[root@test101 ansible-test]# cat vars/custom_message.yaml 
custom_message: "Hello, SRE"
[root@test101 ansible-test]# 
[root@test101 ansible-test]# cat test.yaml 
---
- name: Test playbook with custom variables
  hosts: all
  gather_facts: no
  vars_files:       #引用变量文件
    - vars/custom_message.yaml    变量文件,这里是相对路径
  tasks:
    - name: Display custom message
      debug:
        msg: "{{ custom_message }}"
[root@test101 ansible-test]# 
[root@test101 ansible-test]#

执行test.yaml效果:

1.3 定义和使用复杂变量

在有些场景中,需要使用的变量不是简单的数字或者字符串,而是比较复杂的变量。比如下面的例子

举例:创建test.yaml文件定义和引用复杂变量

---
- name: Ansible playbook with variable and usage
  hosts: all
  gather_facts: no

  vars:            #定义复杂变量
    user_info:
      Name: SRE
      Age: 25
      TEL: 88888888

  tasks:
    - name: Display user information
      debug:
        msg: "Name: {{ user_info.Name }}, Age: {{ user_info.Age }}, TEL: {{ user_info.TEL }}"      #使用点号引用变量
        #msg: "Name: {{ user_info['Name'] }}, Age: {{ user_info['Age'] }}, TEL: {{ user_info['TEL'] }}"  #使用中括号引用变量

执行test.yaml效果:

2. 远程主机系统变量( Facts )

ansible会通过模块"setup"来搜集主机的系统信息,这些搜集到的信息叫做Facts。每个playbook在执行前都会默认执行setup模块,所以这些Facts信息可以直接以变量的形式使用。

查看有哪些Facts变量可以调用setup模块查看:

# ansible all -m setup -u root
或
# ansible all -m setup

2.1 引用Facts变量

系统变量可以直接引用,不需要定义,只是在引用多层变量的时候,注意一下引用的格式方法。如下面的例子:

[root@test101 ansible-test]# cat test.yaml 
---
- name: Test playbook with facts variables
  hosts: all
  tasks:
    - name: Display facts message
      debug:
        #msg: "{{ ansible_nodename }}"    #1. 引用简单的单层变量

        #msg: "{{ ansible_ens32.device  }}"    #2. 两种方式引用双层变量
        #msg: "{{ ansible_ens32['device'] }}"

        #msg: "{{ ansible_ens32.ipv4.address }}"    #3. 两种方式引用复杂的多层变量
        msg: "{{ ansible_ens32['ipv4']['address'] }}"
[root@test101 ansible-test]#

执行test.yaml效果:

2.2 关闭Facts

收集Facts信息会消耗额外的时间,如果不需要Facts信息,则可以在playbook中,通过关键字**"gather_facts"**来控制是否收集远程系统的信息。

如果不搜集系统信息,则facts变量就不能在该playbook中使用了。

如:关闭Facts见1.1中的例子。

未完待续...

感谢您的喜爱与分享

相关推荐
紫晓宁18 小时前
jmeter结合ansible分布式压测--3压测执行
分布式·jmeter·ansible
紫晓宁2 天前
jmeter结合ansible分布式压测--1数据准备
分布式·jmeter·ansible
紫晓宁2 天前
jmeter结合ansible分布式压测--2jmter环境准备
分布式·jmeter·ansible
SG.xf5 天前
ansible中的任务执行控制
ansible
赶紧回家去8 天前
Ansible基本使用
运维·ansible
我就是全世界9 天前
ansible详细介绍和具体步骤
ansible
福大大架构师每日一题9 天前
27.9 调用go-ansible执行playbook拷贝json文件重载采集器
golang·json·ansible·prometheus
SG.xf9 天前
Ansible
运维·ansible
避凉闲庭9 天前
ansible开局配置-openEuler
linux·运维·ansible·脚本·openeuler·免密登录·批量化
运维小白。。11 天前
Ansible 批量部署
ansible