部署存在于角色文件夹中的所有角色

时间:2019-05-17 07:54:18

标签: 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文件中。

有没有办法告诉我可以基本上安装roles/文件夹中存在的所有角色?

1 个答案:

答案 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_first05_do_it命名,要么q.v。 “充满危险”