我经常会用 Ansible 来部署和更新一些应用代码,但是,应用多了,我就会积累一堆的累死 playbook,例如:

[root@liqiang.io] # ls -al ./
restart-service-a.yaml
restart-service-b.yaml
restart-service-c.yaml
restart-service-d.yaml

很明显,这些都是替换一个名字就可以完成的事情,于是我就找了一下如何在 playbook 中使用变量,其实还是很简单的:

[root@liqiang.io] # cat restart-service.yaml
---
- hosts: all
  user: root
  tasks:
    - name: stop service {{name}}
      service:
        name: "{{name}}"
        state: restarted

注意:name: "{{name}}" 中的双引号是必须要的!

然后使用的时候通过 -e 参数传递:

[root@liqiang.io] # ap -i /etc/ansible/test-hosts restart-service.yml -e "name=envoy"

Reference