我有这个角色结构:
roles/
- a/
- tasks/
- main.yml
- k8s.yml
- templates/
- mytemplate.yml.j2
- b/
- tasks/
- main.yml
- k8s.yml
- templates/
- mytemplate.yml.j2
在我的Playbook中,我需要动态添加一个角色,但需要运行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尝试查找相对于playbook目录的模板,而不是角色目录):
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
覆盖myproject/library/
模块,将其添加到rolename
,但我无法使其正常工作。
有没有办法实现这个目标?
编辑:如果在命令行上将set_fact
变量设置为额外的var,则该playbook工作正常,但在使用select yyyy,mm,
@s:=@s+sisapokok sisapokok,
@t:=@t+sisajasa sisajasa
from
(
select yyyy,mm,sum(sisapokok) sisapokok,sum(sisajasa) sisajasa
from
(
select year(tanggal) yyyy,month(tanggal) mm, sisapokok,sisajasa
from transaksi t
join
(
select year(tanggal) yyyy,month(tanggal) mm,idpinj,max(transid) maxid
from `transaksi`
where status in(3,4)
group by year(tanggal),month(tanggal),idpinj
) s on s.maxid = transid
) t
group by yyyy,mm
) u
,(select @s:=0,@t:=0) r
order by yyyy,mm
+------+------+-----------+----------+
| yyyy | mm | sisapokok | sisajasa |
+------+------+-----------+----------+
| 2018 | 1 | 2000 | 2003 |
| 2018 | 2 | 5000 | 2303 |
| 2018 | 3 | 13000 | 3103 |
+------+------+-----------+----------+
3 rows in set (0.00 sec)
进行设置时失败。< / p>
答案 0 :(得分:0)
我可以使用hostvars
- include_role:
name: "{{ hostvars[inventory_hostname]['rolename'] }}"
tasks_from: k8s
这样我可以在ansible 2.5发布之前使其工作