如何在ansible剧本的主机规范中使用变量?

如何在ansible剧本的主机规范中使用变量?,ansible,ansible-playbook,Ansible,Ansible Playbook,我想让一个剧本从如下变量中查找主机: --- - hosts: "{{ project_prefix }}_web" sudo: yes roles: - common - ansible-role 不幸的是,我得到的结果如下: ___________________________________ < PLAY [{{ project_prefix }}_web] > -----------------------------------

我想让一个剧本从如下变量中查找主机:

---
- hosts: "{{ project_prefix }}_web"
  sudo: yes
  roles:
    - common
    - ansible-role
不幸的是,我得到的结果如下:

___________________________________
< PLAY [{{ project_prefix }}_web] >
 -----------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||


skipping: no hosts matched
___________________________________

-----------------------------------
\   ^__^
\(oo)\_______
(__)\       )\/\
||----w|
||     ||
跳过:没有匹配的主机
如果我硬编码一个hosts值,它就会找到它们

我不想有一个任务叫做ansible_剧本


好吧,你的代码应该已经运行了。变量展开应用于 主机标记值。是否可以在调试打印值之前添加播放
project\u前缀
在使用它之前?确认变量已设置

我想问题已经解决了,但这里有一些解释

  • ansible variable expansion在未定义变量时将变量的名称(我认为像Jinja2)作为值返回
  • 有时(我认为当表达式只有变量时,比如
    {{var}}
    ),它会给出一个更清晰的消息,比如
    var:undefined variable
    (而不是返回变量的名称作为它的值)

总而言之,当您在/中看到变量名作为其值时,很可能是因为它没有定义。

AFAIK您的代码应该可以工作。变量扩展应用于主机标记值。能否在使用项目前缀之前添加一个play before以调试其打印值?来确认它已经设置好了。现场。重要的是要包括设置这些变量的文件。谢谢