我想创建命令的同义字词:
apt-get install linux-headers-$(uname -r)
要求:linux-headers-$(uname -r)
程序包必须通过Ansible变量进行配置。
在外部文件中,配置了很多软件包。现在,其名称像linux-headers-$(uname -r)
那样懒惰地求值的软件包必须分别通过shell任务处理。
我正在寻找一种方法来消除此类异常,并将其与其他异常一样存储在变量列表中。
答案 0 :(得分:1)
使用pipe插件。例如
- set_fact:
linux_headers_pkg: "{{ 'linux-headers-' ~ lookup('pipe', 'uname -r') }}"
- debug:
var: linux_headers_pkg
给予
"linux_headers_pkg": "linux-headers-5.0.0-31-generic"
答案 1 :(得分:0)
感谢@Vladimir Botka的烟斗。这是我根据变量pipe
和replace
实现的解决方案:
该软件包在外部文件中的描述为:
---
- packages:
- name: Some Package Description,
package: linux-headers-${pipe}
pipe: uname -r
Playbook,我们得到pipe
的结果并替换为package
:
- name: test pipe
debug:
msg: "key: {{ item.package | replace('${pipe}', lookup('pipe', item.pipe)) }}"
when: item.pipe is defined
with_items: "{{ packages }}"
输出:
TASK [pipe] ******************************************************************** skipping: [default] => (item={u'packageList': [u'package1,', u'package2,', u'package3'], u'name': u'Some description 1,'}) ok: [default] => (item={u'pipe': u'uname -r', u'name': u'Some description 1,', u'package': u'linux-headers-${pipe}'}) => { "msg": "key: linux-headers-4.15.0-65-generic" }