我正在使用 Ansible 部署我的项目,并尝试检查是否安装了指定的包,但我的任务有问题,以下是任务:
- name: Check if python-apt is installed
command: dpkg -l | grep python-apt
register: python_apt_installed
ignore_errors: True
问题是这样的:
$ ansible-playbook -i hosts idempotent.yml
PLAY [lxc-host] ***************************************************************
GATHERING FACTS ***************************************************************
ok: [10.0.3.240]
TASK: [idempotent | Check if python-apt is installed] *************************
failed: [10.0.3.240] => {"changed": true, "cmd": ["dpkg", "-l", "|", "grep", "python-apt"], "delta": "0:00:00.015524", "end": "2014-07-10 14:41:35.207971", "rc": 2, "start": "2014-07-10 14:41:35.192447"}
stderr: dpkg-query: error: package name in specifier '|' is illegal: must start with an alphanumeric character
...ignoring
PLAY RECAP ********************************************************************
10.0.3.240 : ok=2 changed=1 unreachable=0 failed=0
为什么这个字符是非法的'|' .
来自文档:
command- 在远程节点上执行命令
命令模块采用命令名称,后跟一系列命令
以空格分隔的参数。给定的命令将在所有
选定的节点。它不会通过shell进行处理,所以
像 $HOME 这样的变量和像“”、“|”和“&”这样的操作
不起作用(如果需要这些功能,请使用 shell 模块)。
shell- 在节点中执行命令
shell 模块采用命令名称,后跟空格分隔的参数列表。
它几乎与命令模块完全相同,但运行命令
通过远程节点上的 shell (/bin/sh)。
因此你必须使用shell: dpkg -l | grep python-apt
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)