Ansible变量

定义变量规则:由字母/数字/下划线组成,变量需要以字母开头,ansible内置的关键字不能作为变量。

ansible中,可以将变量简化为三个范围:

  1. Global范围(高):从命令行和ansible配置设置的变量。

  2. play范围(中):set_facts,register,在play和相关结构中设置的变量。

  3. Host范围(低):inventory的变量,在主机组和个别主机上设置的变量。

-e > set_facts > register > vars(vars_files) > 事实变量 > inventory

内置变量不参与排序

三个范围的变量优先级由高到低,如果变量重复定义,则以优先级高的为准。

注册和定义变量的各种方式

ansible中定义变量的方式有很多种,大致有:

  1. 将模块的执行结果注册为变量

  2. 直接定义字典类型的变量

  3. role中文件内定义变量

  4. 命令行传递变量

  5. 借助with_items迭代将多个task的结果赋值给一个变量

  6. inventory中的主机或主机组变量

  7. 内置变量

  8. 事实变量

vars定义变量

# eg---- name: testhosts: node1vars:- aa: 11- bb: 22- cc:cc1: 33cc2: 44​tasks:- name: create debug1debug:msg: aa is {{ aa }}​- name: debug2debug:var: bb​- name: debug3debug:msg: cc1 is {{ cc.cc1 }}- name: debug4debug: var: cc.cc2

Vars_files定义变量

vim var.yml
aa: 11bb: 22cc:cc1: 33cc2: 44
# eg---- name: testhosts: node1vars_files: /home/student/ansible/var.ymltasks:- name: create debug1debug:msg: aa is {{ aa }}​- name: debug2debug:var: bb​- name: debug3debug:msg: cc1 is {{ cc.cc1 }}- name: debug4debug: var: cc.cc2

register注册变量

使用register选项,可以将当前task的输出结果赋值给一个变量。

---- name: testhosts: node1tasks:- name: touchcopy:content: "hello world\n"dest: /tmp/aa​- name: cat /tmp/aashell:cmd: cat /tmp/aa​register: i​- name: debug idebug:var: i
# 得到变量i的结果为"i": {"changed": true,"cmd": "cat /tmp/aa","delta": "0:00:00.004095","end": "2025-09-01 16:07:27.999086","failed": false,"msg": "","rc": 0,"start": "2025-09-01 16:07:27.994991","stderr": "","stderr_lines": [],"stdout": "hello world","stdout_lines": ["hello world"]}}

当剧本运行错误时,变量仍然会被注册

# 查看/tmp/bb文件,将查看结果赋值给变量i,/tmp/bb文件不存在---- name: testhosts: node1tasks:- name: cat /tmp/bbignore_errors: yesshell:cmd: cat /tmp/bb​register: i​- name: debug idebug:var: i
"i": {"changed": true,"cmd": "cat /tmp/bb","delta": "0:00:00.003762","end": "2025-09-01 16:16:04.346693","failed": true,"msg": "non-zero return code","rc": 1,"start": "2025-09-01 16:16:04.342931","stderr": "cat: /tmp/bb: No such file or directory","stderr_lines": ["cat: /tmp/bb: No such file or directory"],"stdout": "","stdout_lines": []}}

set_fact定义变量

set_fact与register的功能很相似,也是将值赋值给变量。它更像shell中变量的赋值方式,可以将某个变量的值赋值给另一个变量,也可以将字符串赋值给变量。

# 查看node1主机的所有事实变量
ansible node1 -m setup
# ansible node1 -m setup > file 将结果保存在一个文件中方便查找

常用事实变量

# ipv4地址
ansible_default_ipv4.address
# 或者 ansible_enp1s0.ipv4.address enp1s0是受控主机的网卡名称# 完全合格域名(FQDN)
ansible_fqdn# 主机名称
ansible_hostname# 内存大小
ansible_memtotal_mb# bios版本
ansible_bios_version# vda硬盘大小
ansible_devices.vda.size# 逻辑卷中卷组
ansible_lvm.vgs

通过命令传入变量

ansible-playbook 剧本名称 -e 传入的变量及其值
---
- name: testhosts: node1tasks:- name: debug1debug:var: xingming- name: debug2debug:var: age
[student@master ansible]$ ansible-playbook a.yml -e 'xingming=ldh age=23'

主机清单中的变量

# 直接在主机后面定义,只有该主机可以调用该变量
node1 a=6# 将变量写入组里,该组的成员可以调用这些变量
[web:vars]
a=1
b=2

除了可以在主机清单里定义变量外,还可以在/home/student/ansible目录下创建host_vars和host_vars目录下定义。

# host_vars中定义有两种,以node1举例
vim node1 # 这里node1是与主机清单inventory写的保持一致,如果主机清单写的是IP地址,这里也写IP地址
a: 11# 或者
vim node1.yml
a: 22
# node1的优先级大于node1.yml的优先级

内置变量

groups # 主机清单中的分组情况
groups_names # 显示主机的主机组的名称
groups.all # 所有清单主机
inventroy_dir # 主机清单inventory的路径
inventory_hostname # 显示主机清单主机名称

with_items叠加变量

可以给一个变量赋予多个值

---
- name: testhosts: node1tasks: - name: echo itemshell:cmd: echo "{{ item }}"with_items:- a- b- cregister: i- name: echo adebug:var: i.results[0].stdout- name: echo bdebug:var: i.results[1].stdout- name: echo cdebug:var: i.results[2].stdout

管理机密

Ansible可能需要访问密码或者API密钥等敏感数据,以便配置受控主机。通常,此信息可能以纯文本形式存储在清单变量或其他ansible文件中。但若如此,任何有权访问ansible文件的用户或者存储这些ansible文件的版本控制系统都能够访问此数据敏感数据。这显然存在安全风险。

使用ansible随附的ansible vault可以加密和解密任何由ansible使用的结果化数据文件。若要使用ansible vault,可通过一个名为ansible-vault的命令行工具创建、编辑、加密、解密和查看文件。Ansible vault可以加密任何由ansible使用的结构化数据文件。这可能包括清单变量、playbook中含有的变量文件、在执行playbook时作为参数传递的变量文件,或者ansible角色中定义的变量。

ansible-vault --helpansible-vault create # 创建新的加密文件
ansible-vault encrypt # 对已有文件进行加密
ansible-vault decrypt # 解密加密文件,直接解密。加入 --output=新的名称,解密文件并存放为其他名称。此时新文件为解密状态,原文件仍为加密状态
ansible-vault view # 查看加密文件内容
ansible-vault edit # 编辑加密文件       
ansible-vault rekey # 修改加密文件的密码  

加密过的文件无法使用cat查看、vim编辑以及ansible-playbook运行。

# 运行加密文件
ansible-playbook --ask-vault-pass

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97905.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97905.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/97905.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch 核心特性与应用指南

最近在准备面试,正把平时积累的笔记、项目中遇到的问题与解决方案、对核心原理的理解,以及高频业务场景的应对策略系统梳理一遍,既能加深记忆,也能让知识体系更扎实,供大家参考,欢迎讨论。一、核心优势 Ela…

力扣115:不同的子序列

力扣115:不同的子序列题目思路代码题目 给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数。 测试用例保证结果在 32 位有符号整数范围内。 思路 首先我们来考虑特殊情况,当s串的长度小于t串时s串肯定就没有t串了。其他情况我们就需…

2004-2023年各省生活垃圾无害化处理率数据(无缺失)

2004-2023年各省生活垃圾无害化处理率数据(无缺失) 1、时间:2004-2023年 2、来源:国家统计局、统计年鉴 3、指标:生活垃圾无害化处理率 4、范围:30省 5、指标解释:生活垃圾无害化处理率指报…

【Python练习题】Python小白必练100题答案-第21-40题

练习题直达链接Python小白必练100题答案-第1-20题点我直达Python小白必练100题答案-第21-40题点我直达Python小白必练100题答案-第41-60题点我直达Python小白必练100题答案-第61-80题点我直达Python小白必练100题答案-第81-97题点我直达目录专栏导读循环结构 字符串操作第三部…

添加⽂件--场景⼆

添加⽂件–场景⼆ 学习到这⾥,我们已经清楚了如何向仓库中添加⽂件,并且对于⼯作区、暂存区、版本库也有了⼀定的认识。那么我们再展⽰⼀种添加⽂件的场景,能加深对⼯作区、暂存区、版本库的理解,⽰例如下: roothcss-e…

华为网路设备学习-31(BGP协议 六)

BGP路由属性的几种常见使用方法: 29章是 BGP路由汇总 与 as-path-filter(正则表达式) 30章是 Community 的使用方法 本章是 ip前缀列表ip-prefix 、 路由过滤 filter-policy 和路由策略 route-policy 一、在BGP中的 ip前缀列表&#xf…

Windows PostgreSQL JDBC驱动安装包位置

要在Windows系统上获取PostgreSQL JDBC驱动安装包(后缀为.jar的文件),可通过以下官方及常用渠道获取,具体位置如下: ###🔧 1. 官方网站下载(推荐) 下载地址:https://jdb…

机器学习从入门到精通 - 聚类算法大比拼:K-Means、DBSCAN实战与评估陷阱

机器学习从入门到精通 - 聚类算法大比拼:K-Means、DBSCAN实战与评估陷阱 开场白:推开无监督学习的大门 朋友们,不知道你们有没有对着堆积如山、没有标签的数据发过愁?想从里面找出点规律,分组什么的,结果发…

AI 重构内容创作:从文案生成到视频剪辑,创作者该如何与 AI 协同共生?

一、引言:AI 掀起内容创作的 “重构浪潮”​行业现象引入:列举 AI 在内容创作领域的爆发式应用案例(如某平台 AI 文案工具日生成量破百万、AI 视频剪辑软件用户增长超 300%)​创作者需求变化:通过调研数据说明创作者对…

后端一次性返回十万条数据时,前端需要采用多种性能优化策略来避免页面卡顿

当后端一次性返回十万条数据时,前端需要采用多种性能优化策略来避免页面卡顿。以下是主要的优化方案: 分页加载 - 将数据分批次加载显示虚拟滚动 - 只渲染可视区域内的数据数据懒加载 - 按需加载数据Web Workers - 在后台线程处理数据时间切片 - 分散渲染…

基于-轻量级文档搜索系统的测试报告

文章目录一、项目背景二、项目功能三、测试计划(一)测试用例设计(二)测试用例实现1.功能测试2.界面测试3.兼容性测试4.易用性测试5.安全性测试一、项目背景 1.基于轻量级文档检索系统采用C技术栈来实现,同时使用了本地…

编辑器vim(Linux)

Linux下开发工具是独立的写代码——编辑器 vim编译代码——gcc/g调试——gdb、cgdb构建工具——makefile、make、cmakevim只用来写代码注意:直接用vim打开一个不存在的文件并保存退出,就会自动生成该文件vim有多种模式命令模式(Normal Mode&a…

GitLab,2025最新如何配置中的SSH key步骤

电脑右键先检查,是否有公钥 git cat ~/.ssh/id_rsa.pub下面是有,不用生成公钥,没有就要生成生成本地电脑公钥, 建议用第二种 //第一种ssh-keygen -t rsa//第二种------- 1.打开git bash,输入:ssh-keygen -t rsa -C “你的邮箱”ss…

华为HCIE证书多久续一次费?费用多少?

根据华为官方政策,华为认证HCIE的有效期为3年,有效期自证书正式发放之日起计算,考生可通过华为人才在线官网登录个人账号,在“我的证书”栏目中查询具体有效期起止时间。一、HCIE证书到期后的续证方式 1.重考对应HCIE的认证考试&a…

提升文本到图像强化学习稳定性:Pref - GRPO算法如何革新图像生成?

提升文本到图像强化学习稳定性:Pref - GRPO算法如何革新图像生成? 在文本到图像生成领域,强化学习正重塑着模型与人类偏好的对齐方式。本文聚焦于一种创新的基于成对偏好奖励的GRPO方法(Pref - GRPO),它通…

Linux UDisks守护进程曝本地提权漏洞CVE-2025-8067,PoC已发布

漏洞概述安全研究人员在Linux环境中广泛使用的磁盘管理组件UDisks守护进程中,发现了一个严重漏洞(编号CVE-2025-8067,CVSS评分8.5)。该漏洞已报告给红帽产品安全团队,并在UDisks更新版本中得到修复。技术细节该漏洞存在…

uniapp 开发上架 iOS App全流程

操作文档网址:https://ask.dcloud.net.cn/article/152 操作学习视频地址:uniapp打包上线微信小程序、安卓、IOS流程_哔哩哔哩_bilibili 第一步:注册苹果 iOS 个人开发者账号 费用说明 ‌个人开发者账号‌:适用于独立开发者或小…

Sqlsugar补充自定义模板

DBFirst默认创建所有实体CreateClassFile()的第二个参数为生成实体类命名空间//.net6以下 db.DbFirst.IsCreateAttribute().CreateClassFile("c:\\Demo\\1", "Models"); //.net6以上 string加? db.DbFirst.IsCreateAttribute().StringNullable().CreateCl…

LeetCode 392.判断子序列

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列&#x…

逻辑回归:从原理到实战的完整指南

在机器学习中,分类任务是最常见的应用场景之一。而逻辑回归(Logistic Regression),尽管名字中有“回归”,实际上是一种非常强大且广泛应用的二分类模型。它简单、高效、可解释性强,是数据科学初学者入门分类…