在 Ansible 中使用变量

Ansible 只是一个开源 IT 引擎,用于自动执行远程系统管理任务,例如供应任务、服务编排和应用程序部署,以及许多其他 IT 任务。

Ansible 没有代理,因为不需要在目标节点上安装任何软件。 它有一个名为inventory 的文件,从中可以获取有关它必须管理的节点的信息。

Ansible 使用 playbook 来描述自动化作业,而 playbook 使用 YAML,这是一种非常简单的语言,人类易于理解、阅读和编写。 YAML 是一种人类可读的数据序列化语言,经常用于配置文件。 但它可以用于许多存储数据的应用程序。 由于 YAML 是人类可读的形式,因此即使是 IT 基础架构支持人员也可以阅读该手册并在必要时对其进行故障排除。

我们将涵盖什么?

在本教程中,我们将探索 Ansible 中使用的变量,并回顾这些变量在 Ansible 剧本中的一些用例。

先决条件

要执行本教程中的各种示例,应满足以下要求:

1. 一个 Ansible 控制器节点(在我们的例子中是 Ubuntu 20.04)和一个或两个目标节点。

2. 基本了解Ansible,编写剧本。

如果您刚开始学习 Ansible,我们建议您先开始学习 Vagrant,然后使用 Vagrant 设置基本的本地测试环境。 本实验应包含一个控制器节点和两个目标节点。

Ansible 的操作

Ansible 通过连接到目标节点并向它们发送称为“Ansible 模块”的小程序来运行。 之后,Ansible 运行这些模块(通过 SSH)然后删除它们。 不需要服务器、守护程序或数据库,您的模块库可以存储在任何计算机上。

管理节点是监督整个剧本如何执行的控制节点。 它是您从中操作设置的节点。 清单文件中提供了需要运行 Ansible 模块的主机列表。 管理节点通过 SSH 连接,在主机系统上运行微型模块,并安装产品或软件。

Ansible 的美妙之处在于它在安装模块后成功删除它们。 它连接到主机系统,运行指令,如果安装成功,则删除复制到主机上然后执行的代码。

Ansible 的变量

Ansible 中使用的变量和任何其他编程语言中的变量都非常相似。 变量可以从剧本文件到达,可以传递给 CLI,或者我们可以使用“注册”关键字来存储任务的返回值。 您可以在模块参数中的任何位置使用变量,在 p 中,使用“when”语句,当然还有循环内部,方法是给它一个值并使用它们。 可以围绕变量的值放置条件,并且剧本可以相应地利用它们。

有一些规则可以使变量名有效,例如它必须以字母开头并且仅由字母、数字和下划线组成。

剧本中的变量

我们可以通过多种方式定义变量以在 Ansible 任务中使用:

1. 从命令行:在执行 ansible-playbook 命令时使用“–extra-vars”选项:

$ ansible-playbook sample.yml --extra-vars "my_vars=bar" 

2. 同样,包含变量列表的文件 (JSON/YAML) 可以传递为:

$ ansible-playbook sample.yml --extra-vars "@my_vars_file.json" 

“my_vars_file.json”文件与剧本位于同一位置。

3. 通过引入“vars”部分,可以在主剧本本身中列出变量:

---  - hosts: web  vars:  my_var2: my_val2  tasks:  # Display "Variable ‘my_var2’ is set to ‘my_val2’".  - debug: msg="Variable ‘my_var2’ is set to {{ my_var2 }}" 

4. 与上面类似,我们可以使用 ‘vars_file’ 部分来指定包含变量的文件:

---  - hosts: web  vars_files:  - my_vars.yml  tasks:  # Display "Variable ‘my_var1’ is set to ‘my_val1’".  - debug: msg="Variable ‘my_var1’ is set to {{ my_var1 }}"