ansible playbook中的变量定义与引用

Ansible playbook中变量的定义与引用有很多种方法,这里在本地环境测试验证,并整理如下。

测试环境:

使用自己的Mac笔记本上安装ansible作为控制服务器,VMware Fusion虚拟机上运行了一个Centos7的虚拟机(192.168.243.146)作为远程被控主机

测试用playbook如下:

cat test.yml
---
- hosts: test
  remote_user: root
  tasks:
      - name: debug
        debug: msg="The {{ inventory_hostname }} Value is {{ keyvalue }}"

1 在Inventory文件中定义变量

将变量定义在inventory文件(默认为etc/ansible/hosts文件)中,如下定义一个名为keyvalue的变量:

---
# 针对单个主机定义变量
192.168.243.146 keyvalue=centos

[test]
192.168.243.146

# 组定义变量
[test:vars]
keyvalue=vmware centos7

如上所示,有针对单个主机定义变量和组定义变量两种方式。
1)组定义变量的作用范围是组下的所有主机
2)当两种定义方式同时存在时,ansible会优先采用单个主机定义的变量值

2 通过host_vars和group_vars目录来定义变量

/etc/ansible/目录是linux系统上ansible默认的配置文件目录(Mac系统上的话,其默认配置目录是在/usr/local/etc/ansible/),在该目录下创建host_vars和group_vars两个目录用来存放定义变量的文件。如:
针对单个主机的变量

cat host_vars/192.168.243.146
---
keyvalue: 192.168.243.146@host_vars

针对test组的变量

cat group_vars/test
---
keyvalue: test@group_vars

同样,单个主机定义的变量优先级高于组定义的变量。经过实验,和1中介绍的变量定义方法相比,ansible使用变量的优先级顺序从高到低为:
host_vars下定义变量
inventory中单个主机定义变量
group_vars下定义变量
inventory中组定义变量

3 通过ansible-playbook命令行传入

在执行playbook命令时,通过-e选项传入参数:

ansible-playbook test.yml -e "keyvalue=inputed"

此外,ansible-playbook还支持yaml和json文件的方式传入变量:

cat vars.yml
---
keyvalue: vars@yaml
cat vars.json
{"keyvalue": "vars@json"}

这里写图片描述
这种方式传入的变量,比1和2中介绍的变量定义的优先级都要高。

4 在playbook的yaml文件中使用vars字段定义

cat test.yml
---
- hosts: test
  remote_user: root
  vars:
      keyvalue: vars in playbook
  tasks:
      - name: debug
        debug: msg="The {{ inventory_hostname }} Value is {{ keyvalue }}"

通过vars字段,直接在playbook中定义变量。优先级高于1和2定义方法,低于3中命令行传入方法。

5 在playbook的yaml文件中使用vars_files字段定义

cat test.yml
---
- hosts: test
  remote_user: root
  vars_files:
      - vars.yml
  tasks:
      - name: debug
        debug: msg="The {{ inventory_hostname }} Value is {{ keyvalue }}"

通过vars_files字段,直接在playbook中引入定义变量的文件,支持yaml和json两种文件格式的定义变量。优先级高于1和2定义方法,低于3中命令行传入方法。

6 使用register传递变量

register方式用于在task之间传递变量。

cat register.yml
---
- hosts: test
  remote_user: root
  tasks:
      - name: register test
        shell: hostname
        register: info
      - name: display info
        debug: msg="Hostname is {{ info }}"

这里写图片描述
register定义的info变量在第二个task中用来查看前一个task中执行的hostname命令的结果。可以看到playbook运行后的结果中,info返回的是一段python字典数据,如果只想看到stdout部分的信息的话,可以通过info[‘stdout’]来引用。

cat register.yml
---
- hosts: test
  remote_user: root
  tasks:
      - name: register test
        shell: hostname
        register: info
      - name: display info
        debug: msg="Hostname is {{ info['stdout'] }}"

这里写图片描述

7 使用vars_prompt交互式传入变量

在playbook中定义vars_prompt的变量名和交互式提示信息,就可以实现在运行playbook时,通过交互的传入变量值。

cat prompt.yml
---
- hosts: test
  remote_user: root
  vars_prompt:
      - name: "var1"
        prompt: "input value for var1"
        private: no
      - name: "var2"
        prompt: "input value for var2"
        private: yes
        default: 'test var2'
  tasks:
      - name: display var1
        debug: msg="The value of var1 is {{ var1 }}"
      - name: display var2
        debug: msg="The value of var2 is {{ var2 }}"

运行结果为:
这里写图片描述
private字段用来定义交互时是否回显输入的值,默认private为yes;default用来定义变量的默认值。

参考资料:
《Ansible自动化运维 技术与实践》4.2节

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ansible Playbook是一种用于自动化配置、部署和管理IT基础设施的工具。它使用YAML语法来描述一系列任务和配置,以实现对远程主机的自动化操作。 下面是Ansible Playbook的一些基本语法要点: 1. YAML格式:Playbook使用YAML格式来定义任务和配置。YAML是一种人类可读的数据序列化格式,它使用缩进和冒号来表示层级关系。 2. 主机和组:Playbook可以指定要操作的主机或主机组。可以使用IP地址、主机名或主机组名称来标识主机。 3. 任务:Playbook由一个或多个任务组成。每个任务定义了要在远程主机上执行的操作,如安装软件包、配置文件等。 4. 模块:任务使用模块来执行具体的操作。模块是Ansible提供的可重用代码块,用于执行各种任务,如文件操作、服务管理、包管理等。 5. 变量Playbook可以使用变量来传递参数和配置信息。变量可以在Playbook定义,也可以从外部文件加载。 6. 条件和循环:Playbook支持条件语句和循环语句,可以根据条件执行不同的任务或重复执行某个任务。 7. 触发器:Playbook可以根据特定的事件触发执行,如定时任务、文件变化等。 8. 错误处理:Playbook可以定义任务失败时的处理方式,如忽略错误、终止执行等。 9. 角色:Playbook可以使用角色来组织和复用任务和配置。角色是一种可重用的Playbook组件,可以在多个Playbook引用。 以上是Ansible Playbook的基本语法要点,通过编写Playbook,可以实现对远程主机的自动化配置和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值