Ansible - 3 - 变量使用


Ansible 变量(variable)

  • Ansible的变量名仅能由字母、数字和下划线组成,且只能以字母开头。
  • Python关键字和playbook关键字都不能作为有效的变量名。
  • Ansible的变量可以被定义在playbook、inventory、yaml格式文件、角色和命令行中,也可以将任务的输出定义为变量。

Ansible 自定义变量

# 方式1:在Inventory中为主机或组定义专用变量
[groupname]
192.168.56.1 variable_name=value
[groupname:vars]
variable_name=value
[all:vars]
ansible_ssh_port="2222"

# 方式2:在playbook中通过关键字vars或vars_files定义变量
vars:
  - var_name: value
  - var_name: value
vars_files:
  - ./external_vars.yml  # 变量文件内容遵循yml格式

# 方式3:在playbook中把任务的输出通过关键字register定义为变量,然后用于其他任务
tasks:
    - name: test
      shell: /usr/bin/foo
      register: foo_result

# 方式4:在playbook中使用变量,执行palybook时通过命令行传递变量,通过“-e”或“--extra-vars”参数传递的变量优先级更高
ansible-playbook test.yml --extra-vars "hosts=Test user=anliven"

# 方式5:指定主机角色时通过 roles 传递变量,并在角色内通过` var_name `调用
roles:
  - { role: ROLE_NAME, var: value, ...}

Ansible 系统变量

# 远程主机的系统信息统称为facts
# facts信息是JSON格式的数据结构,ansible_facts是最上层,可以使用 ansible_facts 变量查看所有内容
# 此外默认情况下使用 ansible_ 前缀可以将一些fact作为顶级变量访问
# 通过 setup 模块可以查看指定主机的所有facts信息,通过使用filter参数来查看指定信息

ansible <host> -m setup  # 查看指定主机的facts信息
ansible ta -m setup | grep "xxx"  # 获取主机所有facts然后结合grep命令过滤
ansible ta -m setup -a "filter=ansible_os_family"  # 通过filter参数来查看指定信息
ansible ta -m setup -a 'filter="*mem*"' --tree ./facts  # 通过filter参数查看指定信息并按主机名保存到facts目录

Ansible 引用变量

# 普通变量
通过 {{ var_name }} 方式引用

# 关键字register或系统fact变量
- 返回结果集通常是嵌套yaml或者json的数据结构
- 通过  {{ var_name.stdout }}  或 {{ ansible_facts["eth0"]["ipv4"]["address"] }} 的方式引用

Ansible 变量优先级

# 优先级
1. 命令行中定义的变量(用-e或--extra-vars定义的变量)
2. 在Inventory中定义的连接变量(比如:ansible_ssh_user)
3. 普通变量(命令行转换、play中的变量、included的变量、role中的变量等)
4. 在Inventory中定义的其他变量
5. Facts变量

全文跳转链接

Ansible系列全文地址https://www.cnblogs.com/anliven/p/16859401.html


posted @ 2022-11-04 22:20  Anliven  阅读(250)  评论(0编辑  收藏  举报