我试图将文件路径列表传递给角色,以便它可以使用with_items
处理它们。该用例具有通用角色(logstash),可以为其提供一组配置文件,它们将放置在主机上的正确目录中。
角色使用(理想情况下)
- hosts: logstash
roles:
- role: logstash
logstash_conf_files:
- ../analytics/logstash/*.conf
角色中的任务
- name: Create Logstash configuration files.
template:
src: "{{ item }}"
dest: "/etc/logstash/conf.d/{{ item | basename }}"
with_items: logstash_conf_files
notify: restart logstash
我知道我可以在logstash_conf_files
的列表中明确列出文件名,但我宁愿让它从一组目录中自动获取它们。如果配置文件位于角色内部,它也可以工作,但这会使角色不可重用。
推荐的实现方法是什么?
编辑:如果我使用相对于roles/logstash/files/
的目录,@ tedder42&#39的解决方案有效:
- hosts: logstash
roles:
- role: logstash
logstash_conf_files: ../../../../analytics/logstash/*.conf
在角色任务中:
- name: Create Logstash configuration files.
template:
src: "{{ item }}"
dest: "/etc/logstash/conf.d/{{ item | basename }}"
with_fileglob: logstash_conf_files
答案 0 :(得分:2)
这是一个完全有效的例子。
cat glob.yml # (playbook)
---
- name: glob
connection: local
hosts: localhost
roles:
- { role: ls, list_dir: "/etc/*" }
cat roles/ls/tasks/main.yml
---
- name: list files
command: ls {{item}}
with_fileglob: list_dir
$ ansible-playbook -i hosts.ini glob.yml
PLAY [glob] *******************************************************************
GATHERING FACTS ***************************************************************
ok: [127.0.0.1]
TASK: [ls | list files] *******************************************************
changed: [127.0.0.1] => (item=/etc/afpovertcp.cfg)
changed: [127.0.0.1] => (item=/etc/aliases)
changed: [127.0.0.1] => (item=/etc/aliases.db)
changed: [127.0.0.1] => (item=/etc/asl.conf)
[...]