ansible - 在 ansible 中获取 Caller Playbook 目录名称
问题描述
我有两本剧本pb1.yml
和dir/pb2.yml
. 我pb2.yml
从pb1.yml
剧本打电话。我需要打印调用pb2.yml
剧本的目录的名称。
cat pb1.yml
---
- hosts: localhost
tasks:
- debug: var={{ playbook_dir |basename }}
- import_playbook: dir/pb2.yml
cat dir/pb2.yml
---
- hosts: localhost
tasks:
- debug: var={{ playbook_dir |basename }}
在下面的示例中,我能够获取的目录名称,pb2.yml
但我有兴趣知道pb1.yml
from的目录名称pb2.yml
。
home/monk>ansible-playbook pb1.yml
PLAY [localhost] *******************************************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************************
ok: [localhost]
TASK [debug] ***********************************************************************************************************************************************************
ok: [localhost] => {
"samples": "VARIABLE IS NOT DEFINED!"
}
PLAY [localhost] *******************************************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************************
ok: [localhost]
TASK [debug] ***********************************************************************************************************************************************************
ok: [localhost] => {
"dir": "VARIABLE IS NOT DEFINED!"
}
PLAY RECAP *************************************************************************************************************************************************************
localhost : ok=4 changed=0 unreachable=0 failed=0
预期结果:
来自 pb2.yml,打印/home/monk/
解决方案
变量被正确扩展并且使用参数打印的值msg
- debug:
msg: "{{ playbook_dir|basename }}"
, 或者变量var
不带扩展打印参数
- debug:
var: playbook_dir|basename
解释
代码{{ playbook_dir|basename }}
分别计算为“sample”或“dir”
tasks:
- debug: var={{ playbook_dir|basename }}
此类变量未定义,播放将失败
"samples": "VARIABLE IS NOT DEFINED!
从调试中引用
var:要调试的变量名。与 msg 选项互斥。请注意,此选项已在 Jinja2 上下文中运行并具有隐式 {{ }} 包装,因此除非您正在寻找双插值,否则不应使用 Jinja2 分隔符。
“双插值”实际上是“间接寻址”。下面的戏
- hosts: localhost
vars:
x: y
y: z
tasks:
- debug:
var: "{{ x }}"
给
ok: [localhost] => {
"y": "z"
}