📜  如何在 ansible playbook 中定义变量 (1)

📅  最后修改于: 2023-12-03 15:38:12.893000             🧑  作者: Mango

如何在 Ansible playbook 中定义变量

在 Ansible playbook 中,定义变量是非常常见的。变量可以用于替换 playbook 中的值,使 playbook 更加灵活和可复用。

在 Ansible playbook 中,可以通过多种方式定义变量。下面我们将逐一介绍这些方式。

直接在 playbook 中定义变量

在 playbook 的 vars 中,直接定义变量即可。

- hosts: servers
  vars:
    my_var: "Hello World"
  tasks:
  - name: Print var
    debug:
      msg: "{{ my_var }}"

这里我们定义了一个名为 my_var 的变量,它的值是 "Hello World"。在任务 Print var 中,我们使用了 debug 模块打印了这个变量的值。

通过 inventory 文件定义变量

在 inventory 文件中,可以为每个主机定义变量。这些变量可以在 playbook 中使用。

[web]
web1
web2

[db]
db1
db2

[all:vars]
my_var: "Hello World"

这里我们定义了一个名为 my_var 的变量,它的值是 "Hello World"。它被定义在了 all:vars 中,表示它将应用于所有主机。

通过外部文件定义变量

在 Ansible 中,可以通过外部文件(如 YAML 或 JSON 文件)来定义变量。

# vars.yml
my_var: "Hello World"
- hosts: servers
  vars_files:
    - vars.yml
  tasks:
  - name: Print var
    debug:
      msg: "{{ my_var }}"

这里我们在一个名为 vars.yml 的文件中定义了一个名为 my_var 的变量。在 playbook 中,我们使用 vars_files 指令加载了这个文件,然后在任务 Print var 中,通过 debug 模块打印了变量的值。

通过命令行参数定义变量

在运行 playbook 时,可以通过命令行参数来定义变量。这些变量将覆盖 playbook 中定义的变量。

- hosts: servers
  vars:
    my_var: "Hello World"
  tasks:
  - name: Print var
    debug:
      msg: "{{ my_var }}"
ansible-playbook -i inventory_file playbook.yml --extra-vars "my_var=Hi there!"

这里我们定义了一个名为 my_var 的变量,并在 playbook 中使用。在运行 playbook 时,通过 --extra-vars 参数覆盖了这个变量的值,变量的值变成了 "Hi there!"。

总结

在 Ansible playbook 中,定义变量是非常常见的。我们可以通过多种方式来定义变量,使 playbook 更加灵活和可复用。在这篇文章中,我们介绍了如何直接在 playbook 中定义变量、通过 inventory 文件定义变量、通过外部文件定义变量,以及通过命令行参数定义变量。