如果没有安装(rpm)包,我如何让Ansible执行一个shell脚本?是不是有可能利用yum模块?
我不认为yum模块将有助于在这种情况下。它目前有3个州:不在,现在和最新。因为它听起来像你不想实际安装或删除包(至少在这一点上),那么你需要在两个手动步骤。第一个任务将检查包是否存在,然后第二个任务将根据第一个命令的输出调用一个命令。
如果使用“rpm -q”来检查包是否存在,那么对于存在的包,输出将如下所示:
# rpm -q httpd httpd-2.2.15-15.el6.centos.1.x86_64
并像这样如果包不存在:
# rpm -q httpdfoo package httpdfoo is not installed
所以你的ansible任务看起来像这样:
- name: Check if foo.rpm is installed command: rpm -q foo.rpm register: rpm_check - name: Execute script if foo.rpm is not installed command: somescript when: rpm_check.stdout.find('is not installed') != -1
rpm命令也将退出,如果程序包存在,则返回0,如果程序包未找到,则返回1,因此另一种可能性是使用:
when: rpm_check.rc == 1