可靠的动态角色执行



目前我已经构建了一个庞大的剧本,其中有太多内容无法组织。我现在将这些任务分解为多个角色!也就是说,我对用一种好的方式来称呼这些角色有一些问题。

为了获得基本的理解,我有一些正在进行的预任务,这些任务是基于某个目录中的安装程序创建变量。现在你可以假设CCD_ 1只是Nuke&胡迪尼。

以下是预任务(_T(:

pre_tasks:
- pause:
prompt: "Select Installer {{ item|basename }} [y/n]"
register: selected_installers
loop: "{{ installer_types }}"
loop_control:
label: "{{ item|basename }}"
- name: Register all files
find:
paths: "{{ installer_path }}"
patterns: '*.pkg,*.dmg'
file_type: file
register: installers
- name: Register Installers Selected
set_fact:
"{{ item.item|basename|lower }}_installers": "{{ installers.files|map(attribute='path')|map('basename')|list|select('search', (item.item|basename), ignorecase=True) }}"
loop: "{{ selected_installers.results }}"
loop_control:
label: "{{ item.item|basename }}"
when: item.user_input == 'y' and
item.item == ( item.item|basename )

在此之后,我基于所选择的"角色"来调用角色;y";最初为安装程序提示。

任务:

tasks:
- name: Run Houdini Install
include_role:
name: houdini
loop: "{{ selected_installers.results }}"
loop_control:
label: "{{ item.item|basename }}"
when: item.user_input == 'y' and
item.item == "Houdini"
- name: Run Nuke Install
include_role:
name: nuke
loop: "{{ selected_installers.results }}"
loop_control:
label: "{{ item.item|basename }}"
when: item.user_input == 'y' and
item.item == "Nuke"

我可以这样做,没有问题,但最终会有一个相当大的安装程序列表,我宁愿在动态的基础上执行,而不是手动指定每个安装程序。

我不知道如何使用include_role和循环来实现这一点。

这最适合我的用例。感谢@larsks

- name: Run Install roles
include_role:
name: "{{ item.item|lower }}"
loop: "{{ selected_installers.results }}"
loop_control:
label: "{{ item.item|basename }}"
when: item.user_input == 'y' and
item.item == ( item.item|basename)

最新更新