Як скопіювати файли з ansible щодо ролі?


78

У мене є завдання копіювання всередині ролі, і я очікував, що srcмісце розташування буде відносно самої ролі, а не книжки ігор, яка викликає ролі.

Як мені зробити цю роботу та використовувати файли із myfrole/filesзавдання всередині myrole/tasks, я не хочу включати ім'я ролі як частину шляху, оскільки це не має великого сенсу. Якщо я це зроблю, це зламається, якщо я дублюю роль.

Відповіді:


160

Якщо ви не вказали жодного шляху взагалі, просто ім'я файлу, Ansible автоматично вибере його з filesкаталогу ролі.

- copy:
    src: foo.conf
    dest: /etc/foo.conf

Крім того, починаючи з Ansible 1.8, існує змінна, role_pathяку ви можете використовувати у своєму завданні копіювання .

- copy:
    src: "{{ role_path }}/files/foo.conf"
    dest: /etc/foo.conf

Що робити, якщо ви не використовуєте ролі? (Ви завжди повинні використовувати ролі?)
alex

1
@alex Ви могли б використовувати {{ playbook_dir }}. Якщо ви повинні використовувати ролі, це залежить від розміру вашого проекту та від того, чи ваша книжка ігор повинна виконувати лише одну дрібну справу чи більше. Особисто я не бачив обгрунтованого випадку, щоб не використовувати ролі, окрім швидкого тестування чогось.
udondan

29

Вам не потрібно буде вказувати шлях до файлу для копіювання, якщо він зберігається в filesкаталозі.

Ось як повинна виглядати ваша роль:

my-awesome-role
├───files
│       my-awesome-file
└───tasks
        main.yml

І ось спосіб викликати копію в tasks/main.yml:

- copy:
    src: my-awesome-file
    dest: '{{ some_destination }}'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.