如何在AnsiblePlaybook中使用变量

来自菜鸟教程
跳转至:导航、​搜索

Ansible 支持使用变量来更好地自定义任务和剧本的执行。 通过这种方式,可以将相同的剧本用于不同的目标和环境。

变量可以来自不同的来源,例如剧本文件本身或剧本中导入的外部变量文件。 特殊优先规则 将适用于定义同名变量的多个变量源。

为了了解变量在实践中是如何工作的,我们将创建一个新的测试手册,它将打印两个变量的值,usernamehome_dir。 在 ansible-practice 目录中创建一个名为 playbook-02.yml 的新文件:

nano ~/ansible-practice/playbook-02.yml

然后将以下行添加到新的剧本文件中:

~/ansible-practice/playbook-02.yml

---
- hosts: all
  vars:
    - username: sammy
    - home: /home/sammy   
  tasks:
    - name: print variables
      debug:
        msg: "Username: {{ username }}, Home dir: {{ home }}"

完成编辑后保存并关闭文件。

playbook 的 vars 部分定义了将在该 play 范围内注入的变量列表。 所有任务以及可能包含在 playbook 中的任何文件或模板都可以访问这些变量。

要从您的清单文件中在服务器上尝试此 playbook,请使用您之前在运行我们的第一个示例时使用的相同连接参数运行 ansible-playbook。 同样,我们将使用名为 inventory 的清单文件和 sammy 用户连接到远程服务器:

ansible-playbook -i inventory playbook-02.yml -u sammy

你会看到这样的输出:

Output
PLAY [all] ***********************************************************************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************************************************************
ok: [203.0.113.10]

TASK [print variables] ***********************************************************************************************************************************************************************
ok: [203.0.113.10] => {
    "msg": "Username: sammy, Home dir: /home/sammy"
}

PLAY RECAP ***********************************************************************************************************************************************************************************
203.0.113.10              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

print variables 任务将使用 debug 模块打印我们在 playbook 的 vars 部分中定义的两个变量的值。