Ansible_playbook中的变量
[TOC]
- 本次实验的用户都是用
student
普通用户并配置sudo权限,受控主机使用rhce
并配置sudo权限 - 编辑参考 https://www.cnblogs.com/lvzhenjiang/p/14385777.html 进行了实验部分的细化
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)