tasks: - name: check if rpmforge installed shell: rpm -q rpmforge-release-0.5.3-1.el6.rf.i686 register: shell_output - name: Enable repo for htop shell: "{{ item }}" with_items: - wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm - sudo rpm -Uhv rpmforge-release-0.5.3-1.el6.rf.i686.rpm when: shell_output.stdout.find('not installed') != -1
上述任务失败:
failed: [default] => {"changed": true, "cmd": "rpm -q rpmforge-release-0.5.3-1.el6.rf.i686", "delta": "0:00:00.100877", "end": "2016-01-08 09:05:30.495234", "rc": 1, "start": "2016-01-08 09:05:30.394357", "warnings": ["Consider using yum module rather than running rpm"]} stdout: package rpmforge-release-0.5.3-1.el6.rf.i686 is not installed
标准输出包含短语“未安装”。
Ansible版本1.9.4,在OSX El Capitan上运行Vagrant&Virtualbox(最新版本为2016年1月)
Ansible看到rpm -q返回一个非零的退出代码并中止。
你会想要这样改变,以告诉Ansible不要关心退出代码:
tasks: - name: check if rpmforge installed shell: rpm -q rpmforge-release-0.5.3-1.el6.rf.i686 register: shell_output failed_when: false changed_when: false
(我还添加了changed_when所以Ansible不会告诉你有什么改变,就像它通常为每个shell任务所做的一样,因为查询RPM数据库时没有任何变化。
第二项任务很好。