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 г.)
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 ничего не меняется.)
Вторая задача в порядке.