gpt4 book ai didi

ansible - 我可以从具有动态名称的角色导入特定任务吗?

转载 作者:行者123 更新时间:2023-12-04 04:39:56 24 4
gpt4 key购买 nike

我有这个角色结构:

roles/
- a/
- tasks/
- main.yml
- k8s.yml
- templates/
- mytemplate.yml.j2
- b/
- tasks/
- main.yml
- k8s.yml
- templates/
- mytemplate.yml.j2

在我的剧本中,我需要动态包含一个角色,但运行 k8s.yml而不是 main.yml .像这样的东西:
- roles:
- "{{ rolename }}/k8s.yml"

有一个 include_role正是这样做的模块:
 - include_role:
name: "{{ rolename }}"
tasks_from: k8s

但是,由于 bug 而失败不允许角色中的变量 name并且将仅在 ansible 2.5 上修复 :(

另一种方法是使用 include_tasks :
include_tasks: "roles/{{ rolename }}/tasks/k8s.yml"

任务已包含并执行,但由于找不到模板(ansible 尝试查找与剧本目录相关的模板,而不是角色目录),我收到一条失败消息:
TASK [Template processing] *********************************************************************************************************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: /home/myuser/myproject/mytemplate.yml.j2
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not find or access 'mytemplate.yml.j2'\nSearched in:\n\t/home/myuser/myproject/roles/a/tasks/templates/mytemplate.yml.j2\n\t/home/myuser/myproject/roles/a/tasks/mytemplate.yml.j2\n\t/home/myuser/myproject/templates/mytemplate.yml.j2\n\t/home/myuser/myproject/mytemplate.yml.j2"}

我什至试图覆盖 include_roles带有 patched version 的模块通过将其添加到 myproject/library/ ,但我无法使其工作。

有没有办法实现这个目标?

编辑:如果 rolename变量在命令行中设置为额外的 var,但在使用 set_fact 设置时失败.

最佳答案

我能够通过使用 hostvars 来规避这个错误。 :

- include_role:
name: "{{ hostvars[inventory_hostname]['rolename'] }}"
tasks_from: k8s

这样我就可以让它工作,直到 ansible 2.5 发布

关于ansible - 我可以从具有动态名称的角色导入特定任务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49434798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com