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}