Ansible 如何使用多文件剧本中的角色

Ansible 如何使用多文件剧本中的角色,ansible,ansible-galaxy,Ansible,Ansible Galaxy,我的剧本组织如下(为了这个问题简化): 我的简化deploy.yml是: --- - name: Everything I need hosts: somewhere roles: - web 我的简化角色/web/tasks/main.yml是 --- - name: Various things that work become: yes [whatever] - name: the thing that I have a problem with becom

我的剧本组织如下(为了这个问题简化):

我的简化
deploy.yml
是:

---
- name: Everything I need
  hosts: somewhere
  roles:
    - web
我的简化
角色/web/tasks/main.yml

---
- name: Various things that work
  become: yes
  [whatever]

- name: the thing that I have a problem with
  become: yes
  davidedelvento.nbextension: name=foo state=present
这在以下情况下失败:

ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.
因此,我尝试将
角色/web/tasks/main.yml
更改为

---
- name: Various things that work
  become: yes
  [whatever]

- name: the thing that I have a problem with
  become: yes
  roles:
    - { role: davidedelvento.nbextension, name: foo, state: present}
这也会以同样的方式失败。我理解失败(因为我无法从任务中调用角色,而我正在这样做——但错误可能更清楚……)

然而,我不清楚如何才能实现我想要的,也就是说,在那个时候做nbextension正在做的任何事情。我可以将该角色从
roles/web/tasks/main.yml
移动到
roles/web/meta/main.yml
,这是可行的,但它是在
各种有效的事情之前执行的,我需要在之后执行。如何做到这一点

请注意,我写道,然而同样的问题也发生在银河系其他类似角色身上

编辑:还请注意,扩展名已正确安装,可以从独立的单文件剧本(例如)中使用

---
- name: Example
  hosts: all
  become: yes
  roles:
    - { role: davidedelvento.nbextension, name: foo, state: present}
但是,我需要它来“集成”到上面描述的“web”角色的更大项目中(我有更多的角色,我没有展示)


EDIT2:请注意,用于此问题的galaxy ansible角色已重命名为,但正如我所说,任何角色的问题(和解决方案)都是相同的。好的,因此我找到了两种处理此问题的方法

  • 将角色分为两个(或更多)部分,并将银河系的角色用作它需要预先准备的事情的依赖项。一般来说,我喜欢这个想法,但在我的特定用例中我不喜欢,因为我需要为真正的一个角色创建3个角色
  • 使用时,需要注意的是,目前它“标记为预览”,也就是说,它不保证有向后兼容的界面。但是,它在我当前的设置中运行良好:
  • 
    -名字:我不再有问题的东西
    变成:是的
    包括以下角色:
    名称:davidelvento.nbextension
    有以下项目:
    -福
    -酒吧
    回路控制:
    循环变量:名称
    

    您将动作模块与角色混合在一起。以至于我放弃了想知道你拥有什么和你想要什么。这是两件不同的事情。没有名为
    davidedelvento.nbextension
    的模块,也没有名为
    role
    的模块,因此Ansible在其错误消息中是正确的。如上所述,我不太确定您试图实现什么,但您混淆了一些概念。我可以看到davidedelvento.nbextension在ansible galaxy中扮演一个角色,所以我假设您已经安装了它(ansible galaxy install davidedelvento.nbextension)。然后你应该能够使用符号
    角色:davidedelvento.nbextension
    @techraf:我是ansible的新手,所以我可能做错了什么,这就是它不起作用的原因,也是我在这里提问的原因。。。我想要的是非常简单的:我想要在完成各种事情之后安装一个nbextension(使用我在galaxy上发布并链接的galaxy角色)。那么,我如何做到这一点呢?由于nbextension是一个角色,而我发布的这个文件是一个任务,我不能从任务中调用角色,我认为我应该做一些不同的事情,但是什么?@NickBrown请查看我在编辑中添加的其他信息。正如我所说,是的,该角色已正确安装,并且在“单独”使用时可以工作。然而,我学会了使用我正在使用的目录结构,现在web角色执行任务目录中的事情,我不能调用nbextension角色。在我在问题中描述的“无论什么”之后,我可以做什么不同的事情来完成nbextension,并且仍然保持事情的正常(即不是包含所有内容的巨型剧本)?这个问题并不表明您试图安装的角色在任何地方都被使用,除了最后的“独立”示例之外,您似乎也没有在
    角色中引用它:
    块中的任何位置。
    ---
    - name: Example
      hosts: all
      become: yes
      roles:
        - { role: davidedelvento.nbextension, name: foo, state: present}