首页 > 解决方案 > 部署角色文件夹中的所有角色

问题描述

我的目录结构如下所示:

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/文件夹中存在的所有角色?

标签: ansible

解决方案


虽然我认为这是一个坏主意,但我很好奇它是否真的可能,答案似乎是肯定的:

- 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_first05_do_it但 qv “充满危险”


推荐阅读