我在自定义角色中定义了Ansible任务:
- name: Connect to db
script: "shell.sh --url={{ db_conn }}"
在playbook中定义的变量 db_conn :
vars :
db_host: "localhost"
db_port: 5432
db_conn: "http://{{ db_host }}:{{ db_port }}"
Ansible以错误终止:
变量将新参数插入模块args。如果变量包含相同的符号,请务必引用变量(例如:" {{var}}")。
答案 0 :(得分:2)
这是variable precedence的问题。我猜你在角色的db_conn
文件中定义了vars/main.yaml
变量?
如果是,则db_conn
被视为角色变量,并且优先于 playbook vars (不会被 playbook vars )。
使用您想要覆盖的变量创建角色时,请确保将它们定义为defaults,以确保它们不仅会被覆盖,而且可以清楚地与其他您想要覆盖它们的人通信。
以防万一文档不够,here is the source code which defines variable precedence from github。