我正在尝试使用 Ansible 检查是否安装了特定的软件包。这是我的任务
- name: check whether a package called {{ pkg_name }} is installed or not
ansible.builtin.debug:
msg: "{{ ansible_facts.packages['pkg_name'] }} is installed"
when: "pkg_name in ansible_facts.packages"
pkg_name是我定义的变量,我尝试了与ansible_facts的不同组合,例如:
"{{ ansible_facts.packages['pkg_name'] }} is installed"
"{{ ansible_facts.packages.{{ pkg_name }} }} is installed"
,但是这些方法都不起作用。但是,如果我只是放置字符串而不是变量,它就可以正常工作。例如,
ansible_facts.packages['httpd']
检查变量的正确语法是什么? 另外,确认一下,我可以传递一个数组给它来同时检查多个包吗?
{{ ansible_facts.packages[pkg_name] }}
when: pkg_name in ansible_facts.packages
用于测试的完整剧本示例
shell> cat pb.yml
- hosts: foo
tasks:
- package_facts:
manager: auto
- debug:
msg: "{{ ansible_facts.packages[item].0.name }} is installed."
when: item in ansible_facts.packages
loop:
- openssh
- http
给予
shell> ansible-playbook pb.yml
PLAY [foo] ************************************************************************************
TASK [package_facts] **************************************************************************
ok: [foo]
TASK [debug] **********************************************************************************
ok: [foo] => (item=openssh) =>
msg: openssh is installed.
skipping: [foo] => (item=http)
PLAY RECAP ************************************************************************************
foo: ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0