如何在Ansible Playbook中使用变量

203 阅读1分钟

Ansible支持使用变量来更好地定制任务和playbook的执行。这样一来,就可以在不同的目标和环境下使用同一个playbook。

变量可以来自不同的源头,比如游戏手册文件本身或在游戏手册中导入的外部变量文件。在处理定义有相同名称的变量的多个变量源时,将适用特殊的优先规则

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

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

然后在新的 playbook 文件中添加以下几行。

~/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的范围。所有任务以及可能包含在游戏手册中的任何文件或模板,都可以访问这些变量。

要在你的清单文件中的服务器上尝试这个游戏规则,用你之前在运行第一个例子时使用的相同连接参数运行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 部分定义的两个变量的值。