将bash命令评估为有效变量

时间:2019-10-25 09:07:58

标签: ansible

我想创建命令的同义字词:

apt-get install linux-headers-$(uname -r)

要求:linux-headers-$(uname -r)程序包必须通过Ansible变量进行配置。

在外部文件中,配置了很多软件包。现在,其名称像linux-headers-$(uname -r)那样懒惰地求值的软件包必须分别通过shell任务处理。

我正在寻找一种方法来消除此类异常,并将其与其他异常一样存储在变量列表中。

2 个答案:

答案 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的烟斗。这是我根据变量pipereplace实现的解决方案:

该软件包在外部文件中的描述为:

---
- 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"
}