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

How can I use a variable in a hosts spec of an ansible playbook?

我想让剧本从这样的变量中查找主机:

---
- hosts: "{{ project_prefix }}_web"
  sudo: yes
  roles:
    - common
    - ansible-role

不幸的是,我得到的输出如下:

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


skipping: no hosts matched

如果我硬编码主机值,它会找到它们。

我不想有任务调用ansible_playbook。

AFAIK your code should have worked. Variable expansion is applied to hosts tag value. Can you add a play before to debug print value of project_prefix before using it? To confirm the variable is set.

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

  • ansible 变量扩展 returns 变量的名称(我认为像 Jinja2)作为未定义变量时的值。
  • 有时(我认为当表达式只有像 {{var}} 这样的变量时)它会给出像 var: undefined variable 这样更清晰的消息(而不是返回变量的名称作为它的值)。

总而言之,当您看到变量的名称 in/as 是值时,很可能是因为它未定义。