Ansible_playbook中的变量

[TOC]

1.变量的优先级

  • extra vars——命令行中使用-e参数
  • inventory中定义的连接变量

1.1 YAML陷阱

YAML语法要求如果值以{{ foo }}开头,那么就需要将整行用双引号引起来,这是为了确认你不是想声明一个YAML字典。

  • 错误示范
---
- hosts: app_servers
  vars:
    app_path: {{ base_path }}/data/web
  • 正确示范
---
- hosts: app_servers
  vars:
    app_path: "{{ base_path }}/data/web"

Ansible-playbook变量配置方法

  • 目录结构展示
[student@Ansible_S test]$ tree
.
├── ansible.cfg
├── group_vars
│   ├── node
│   └── web
├── host_vars
│   ├── node1
│   ├── node2
│   ├── node3
│   ├── web1
│   ├── web2
│   └── web3
├── inventory
├── test_group-host_vars.yml
└── test_inventory-variable.yml

2.1在inventory主机清单中定义变量

可以直接在主机清单中定义,表明该变量仅对对应的主机或组生效,对其他主机或组无效
示例:

  • ansible.cfg
[defaults]
inventory=./inventory
remote_uesr=rhce
ask_pass=false
rules_path=./roles
[privilege_escalation]
become=true
become_user=root
become_method=sudo
become_ask_pass=false
  • inventory
[web]
web1	day=2022:06:28
[node]
node2
node3
[all:children]
web
node
[all:vars]
time= 14:00
day=2022.6.00
  • test_inventory-variable.yml
---
- name: test inventory variable
  hosts: all
  tasks: 
    - name: use inventory variable
      debug:
        msg: "Today is {{ day }}, the hosts name id {{ inventory_hostname }}, i know time is {{ time }}" #仅尝试通过debug输出测试结果,进阶使用可通过此举一反三
  • 实验结果
点击查看代码
  [student@Ansible_S test]$ ansible-playbook test_inventory-variable.yml 

PLAY [test inventory variable] **************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************
ok: [node3]
ok: [node2]
ok: [web1]

TASK [use inventory variable] ***************************************************************************************************************
ok: [node2] => {
    "msg": "Today is 2022.6.00, the hosts name id node2, i know time is 14:00"
}
ok: [web1] => {
    "msg": "Today is 2022:06:28, the hosts name id web1, i know time is 14:00"
}
ok: [node3] => {
    "msg": "Today is 2022.6.00, the hosts name id node3, i know time is 14:00"
}

PLAY RECAP **********************************************************************************************************************************
node2                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
web1                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

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

可以在常用的目录下创建这两个目录,要求是这两个目录需要同主配置文件及清单文件在同一级目录下

  • host_vars
node1: #通过vim添加文件---node1(同名与inventory中的主机)
---
name: this node1
key: redhat from node1

node2:
---
name: this node2
key: redhat from node2

# 以下类似,定义所需要的主机即可
  • group_vars
web: #通过vim添加文件---web(同名与inventory中的主机组)
---
name: web groups
key: This is web_group 

node:
---
name: node groups
key: This is node_group 
  • test_group-host_vars.yml
---
- name: test host_vars variable
  hosts: web1 #inventory中定义的主机
  tasks: 
    - debug: 
        msg: "The key is {{ key }}, this name {{ name }} "

- name: user host_vars info node2
  hosts: node2
  tasks:
    - debug:
        msg: "The key is {{ key }}, this name {{ name }}"

- name: test group_vars variable
  hosts: web #inventory中定义的主机组
  tasks: 
    - name: user group_vars info web
      debug: 
        msg: "The key is {{ key }}, this name {{ name }} "

- name: user group_vars info node
  hosts: node
  tasks:
    - debug:
        msg: "The key is {{ key }}, this name {{ name }}"

  • 实验结果
点击查看代码
[student@Ansible_S test]$ ansible-playbook test_group-host_vars.yml

PLAY [test host_vars variable] **************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************
ok: [web1]

TASK [debug] ********************************************************************************************************************************
ok: [web1] => {
    "msg": "The key is redhat from web1, this name this web1 "
}

PLAY [user host_vars info node2] ************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************
ok: [node2]

TASK [debug] ********************************************************************************************************************************
ok: [node2] => {
    "msg": "The key is redhat from node2, this name this node2"
}

PLAY [test group_vars variable] *************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************
ok: [web1]

TASK [user group_vars info web] *************************************************************************************************************
ok: [web1] => {
    "msg": "The key is redhat from web1, this name this web1 "
}

PLAY [user group_vars info node] ************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************
ok: [node2]
ok: [node3]

TASK [debug] ********************************************************************************************************************************
ok: [node2] => {
    "msg": "The key is redhat from node2, this name this node2"
}
ok: [node3] => {
    "msg": "The key is redhat from node3, this name this node3"
}

PLAY RECAP **********************************************************************************************************************************
node2                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node3                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web1                       : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
posted @   Demon丶安梓  阅读(142)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示