news 2026/10/22 2:09:48

管理变量(一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
管理变量(一)

Ansible 变量简介

Ansible 支持利用变量来存储值,并在 Ansible 项目的所有文件中重复使用这些值。这可以简化项目的创建和维护,并减少错误的数量。

通过变量,您可以轻松地在 Ansible 项目中管理给定环境的动态值。例如,变量可能包含下面这些值:

  • 要创建的用户
  • 要安装的软件包
  • 要重新启动的服务
  • 要删除的文件
  • 要从互联网检索的存档

命名变量

变量的名称必须以字母开头,并且只能含有字母、数字和下划线。

定义变量

可在 Ansible 项目中的多个位置定义变量。如果在两个位置设置了同名变量,并且变量值不同,则通过优先级来决定要使用哪个值。

您可以设置会影响一组主机的变量,也可以设置只会影响个别主机的变量。有些变量是 Ansible 可以根据系统配置来设置的事实。还有些变量则可在 playbook 中设置,然后影响该 playbook 中的一个 play,或者仅影响该 play 中的一项任务。您还可通过--extra-vars或-e选项并指定变量值。

可在ansible‑navigator run命令行上设置额外变量,这些值将覆盖相应变量名称的所有其他值。

以下按优先级从低到高排列定义变量的方法:

  • 在清单中定义的组变量
  • 在清单或 playbook 所在目录的group_vars子目录中定义的组变量
  • 在清单中定义的主机变量
  • 在清单或 playbook 所在目录的host_vars子目录中定义的主机变量
  • 在运行时中发现的主机事实
  • playbook 中的 play 变量(vars和vars_files)
  • 任务变量
  • 在命令行中定义的额外变量

例如,设置为影响all主机组的变量会被设置为影响单个主机的同名变量覆盖。

建议选择全局唯一的变量名称,以避免考虑优先级规则。然而,有时您可能希望使用优先级来为不同的主机或主机组进行除默认设置以外的其他设置。

如果在多个级别上定义了相同名称的变量,则采用优先级别最高的变量。较窄范围(如主机变量或任务变量)优先于较宽范围(如组变量或 play 变量)。通过清单定义的变量将被 playbook 定义的变量覆盖。在命令行中使用--extra‑vars或-e选项定义的额外变量拥有最高优先级。

在 Playbook 中定义变量

编写 play 时,您可以定义自己的变量,然后在任务中调用这些值。例如,您可以使用值httpd来定义名为web_package的变量。然后,任务可以使用ansible.builtin.dnf模块调用该变量来安装 httpd 软件包。

您可以通过多种方式定义 playbook 变量。一种常见方式是将变量放在 play 开头的vars块中:

- hosts: all vars: user: joe home: /home/joe

也可以在外部文件中定义 playbook 变量。此时不使用 playbook 的 play 中的 vars 块,可以改为使用vars_files指令,后面跟上相对于 playbook 位置的外部变量文件名称列表:

- hosts: all vars_files: - vars/users.yml

而后,可以使用 YAML 格式在这些文件中定义 playbook 变量:

user: joe home: /home/joe

在 Playbook 中使用变量

在声明了变量后,您可以在任务中使用变量。若要引用变量,可将变量名称放在双括号{{ }}内。在任务执行时,Ansible 会将变量替换为其值。

vars: user: joe tasks: # This line will read: Creates the user joe - name: Creates the user {{ user }} user: # This line will create the user named Joe name: "{{ user }}"
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 2:07:16

WSL使用Ubuntu 24.04安装Libradtran

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/22 2:03:23

带过新人、做过 code review,写进简历之前先想清楚会被怎么问

这类经历有个尴尬的位置:写了像凑数,不写又觉得少了一块。「指导新人成长,参与团队代码 review,多次进行技术分享」,这一行几乎每份三年以上的简历都有,评审者也几乎都会跳过。 先说评审者的真实判断&#…

作者头像 李华
网站建设 2026/10/22 2:00:53

UniMate 完整上手:一句话让任意 3D 骨架生成动画

UniMate 完整上手:一句话让任意 3D 骨架生成动画 【免费下载链接】UniMate [SIGGRAPH Asia 2026] UniMate: One Unified Model to Animate Diverse Skeletons 项目地址: https://gitcode.com/GitHub_Trending/un/UniMate 你有没有遇到过这种情况:…

作者头像 李华