ansible - 部署角色文件夹中的所有角色
问题描述
我的目录结构如下所示:
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
文件中。
有没有一种方法可以告诉 ansible 基本上安装roles/
文件夹中存在的所有角色?
解决方案
虽然我认为这是一个坏主意,但我很好奇它是否真的可能,答案似乎是肯定的:
- 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
但 qv “充满危险”
推荐阅读
- python - 使用python删除JSON中的键时如何正确保持结构?
- list - 在格式化列表中保留引号
- swift - 为现有的苹果转换类别添加更多转换单位
- database-design - 为每个帐户有多个用户的应用程序设计 Firestore 数据库
- ruby-on-rails - 模块方法未定义方法的rspec测试委托
- python - 从数组中的每一列中减去不同的数字
- c# - 一起编写 ModbusClient 和 ModbusServer 时出现问题
- rest-assured - 如何使用放心的方式做出正确的获取请求?
- sqlite - 使用带有列类型的 json 格式的 sqlite porter 插件导入 sqlite db
- c# - ASP.NET MVC OnChange 剃刀