Подтвердить что ты не робот

Почему Ansible не читает шаблоны в относительном пути?

Я использую Ansible, и у меня есть некоторые проблемы с шаблоном. Вот вывод ошибки при выполнении:

$ ansible-playbook -i hosts site.yml 

PLAY [users] ****************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [10.0.3.240]

TASK: [templates] ************************************************************* 
fatal: [10.0.3.240] => {'msg': 'unable to read /home/robe/Desktop/ansible_demo/fig.conf.j2', 'failed': True}
fatal: [10.0.3.240] => {'msg': 'unable to read /home/robe/Desktop/ansible_demo/fig.conf.j2', 'failed': True}

FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/home/robe/site.retry

10.0.3.240                 : ok=1    changed=0    unreachable=1    failed=0 

Это моя структура проекта:

$ tree
.
├── ansible.cfg
├── hosts
├── roles
│   └── users
│       ├── files
│       ├── handlers
│       │   └── main.yml
│       ├── tasks
│       │   └── main.yml
│       ├── templates
│       │   └── fig.conf.j2
│       └── vars
│           └── main.yml
├── site.yml
└── Vagrantfile

Это мой код сайта .yml:

---
- hosts: users
  remote_user: root
  sudo: True
  tasks:
  - name: templates
    template: src="fig.conf.j2" dest="/home/vagrant/fig.conf"

Затем, почему Ansible не смотрит в каталог шаблонов и он выглядит только в корневом каталоге.

4b9b3361

Ответ 1

Ansible будет искать в каталоге role/users/templates только тогда, когда вы явно используете роль "users", которую вы не используете в своем примере. Чтобы сделать то, что вы хотите, вам нужно изменить свой site.yml, чтобы он выглядел примерно так:

- hosts: users
  remote_user: root
  sudo: True
  roles:
    - { role: users }

Тогда в role/users/tasks/main.yml вы должны иметь:

- name: templates
  template: src="fig.conf.j2" dest="/home/vagrant/fig.conf"

Роль в site.yml сообщает Ansible, что нужно запускать файл yaml role/users/tasks/main.yml. Задачи, которые ссылаются на файлы или шаблоны в этой роли, по умолчанию будут искать роли/пользователи/файлы и роли/пользователи/шаблоны для этих файлов/шаблонов. Возможно, вы захотите прочитать больше о ролях в документации Ansible, чтобы лучше понять, как они сочетаются друг с другом.

Ответ 2

Если вы хотите получить доступ к файлу шаблона "fig.conf.j2" из site.yml, вам нужно создать каталог шаблонов помимо site.yml и поместить в него файл "fig.conf.j2".

Согласно вашей текущей структуре каталогов, так как каталог шаблонов находится внутри роли. Вам нужно получить доступ к шаблону из tasks/main.yml внутри этой роли