我的目录结构如下:
ls -tlrh
total 0
-rw-r--r-- 1 user wheel 5B 17 May 09:50 playbook.yml
drwxr-xr-x 2 user wheel 64B 17 May 09:50 roles
角色文件夹包含许多正确定义的角色。
我当前的剧本看起来像:
---
- hosts: all
roles:
- common
- webservers
- app1
- app2
- app3
.
.
.
- appN
现在,我的问题是每次我将新角色添加到roles/
文件夹时,都必须手动将其添加到我的playbook.yml
文件中。
有没有办法告诉我可以基本上安装roles/
文件夹中存在的所有角色?
答案 0 :(得分:0)
虽然我认为这是一个坏主意,但我很好奇它是否确实可行,答案似乎是肯定的:
- hosts: all
pre_tasks:
- delegate_to: localhost
run_once: yes
set_fact:
role_list: '["{{ lookup("pipe", "/bin/ls -1 roles") | replace(newline, sep) }}"]'
vars:
newline: "\n"
sep: '", "'
tasks:
- include_role:
name: '{{ item }}'
with_items: '{{ role_list }}'
我期望fileglob
查找变得如此简单,但是它只处理单个子文件 ,而不是目录
“生产级”版本可以使用find roles -type d -maxdepth 0
或类似的健全性检查来避免在没有实际作用的情况下抢占roles
目录中的某些内容,但可以追溯到“我认为这是个坏主意”部分
在您的问题中类似地暗示,所有角色都是根据其排序顺序应用的,要么最终以角色01_do_it_first
和05_do_it
命名,要么q.v。 “充满危险”