У меня есть плейбук, похожий на приведенный ниже, в котором используется переменная base_acl . Давайте притворимся, что base_acl: «default_acl.j2 . У меня есть хост, для которого я хочу использовать другое значение base_acl . Я просмотрел документы приоритета ansible и не вижу другого способа сделать это, кроме как с помощью --extra- vars в командной строке, чего я не хочу делать.

Я попытался определить base_acl в файле host_vars (должен иметь более высокий приоритет в соответствии с приведенной выше ссылкой?) для рассматриваемого хоста, однако игра по-прежнему печатает «playbook» для значения переменной при запуске.

Есть ли способ сообщить ansible, чтобы дать host_vars приоритет над переменными playbook?

---
- hosts: all
  gather_facts: no
  vars:
    base_acl   : "playbook"
    
  tasks:
  - debug: msg="variable is {{ base_acl }}"
answer

I've tried defining base_acl in a host_vars file (should have higher precedence according to link above?) for the host in question, however the play still prints "playbook" for the variable value when run.

Из ссылки, на которую вы ссылались в своем вопросе:

...
8  - inventory file or script host vars
9  - inventory host_vars/*
10 - playbook host_vars/*
11 - host facts / cached set_facts
12 - play vars
...
22 - extra vars (for example, -e "user=my_user")(always win precedence)

Таким образом, поскольку наибольшее число побеждает и все записи, связанные с хостом (от 8 до 11), имеют меньшее число, чем 12, ваше утверждение на самом деле неверно. Единственная правильная оценка состоит в том, что дополнительная переменная всегда перекрывает все.

На самом деле есть много способов добиться того, что вы ищете. Но в вашей ситуации я бы поступил именно так.

  1. удалить запись play var в вашей книге воспроизведения
  2. введите значение по умолчанию group_vars/all.yml(либо на уровне инвентаря, либо на уровне книги):
    base_acl: "playbook"
    
  3. переопределить значение по умолчанию для каждого соответствующего хоста host_vars/<your_host>.yml(либо на уровне инвентаря, либо на уровне playbook):
    base_acl: "override value"
    

Обратите внимание, что вышеуказанное также будет работать, чтобы переопределить значение по умолчанию для определенной группы group_vars/<your_group>.yml(либо на уровне инвентаря, либо на уровне сборника).