apt csomag installacioja - ansible playbook

Fórumok

Sziasztok,

ansible playbook-kal jatszadozom es a kovetkezot szeretnem elerni.
Lekerdezem az inventory fajlban levo 2xIP-vel rendelkezo szervertol, vajon
letezik-e rajta egy adott apt csomag (pl. ntp) es ha nem, akkor felrakom.

cat install_ntp_package.yml
---
- hosts: myboxes
remote_user: root
sudo: yes
tasks:
- name: check if ntp package is installed on boxes
shell: dpkg-query -l 'ntp'
register: dpkg_result

- name: install ntp package if not present
apt: name=ntp update_cache=yes
when: dpkg_result.stdout != ""

Futtataskor azonban ezt a hibat kapom:

ansible-playbook -i inventory install_ntp_package.yml

PLAY [myboxes] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [192.168.33.20]
ok: [192.168.33.30]

TASK: [check if ntp package is installed on boxes] ****************************
failed: [192.168.33.30] => {"changed": true, "cmd": "dpkg-query -l 'ntp' ", "delta": "0:00:00.015564", "end": "2016-07-21 12:55:30.469289", "rc": 1, "start": "2016-07-21 12:55:30.453725"}
stderr: dpkg-query: no packages found matching ntp
failed: [192.168.33.20] => {"changed": true, "cmd": "dpkg-query -l 'ntp' ", "delta": "0:00:00.015050", "end": "2016-07-21 12:42:54.422812", "rc": 1, "start": "2016-07-21 12:42:54.407762"}
stderr: dpkg-query: no packages found matching ntp

FATAL: all hosts have already failed -- aborting

PLAY RECAP ********************************************************************
to retry, use: --limit @/home/vagrant/install_ntp_package.retry

192.168.33.20 : ok=1 changed=0 unreachable=0 failed=1
192.168.33.30 : ok=1 changed=0 unreachable=0 failed=1

Tudna vki ebben segiteni?
Koszi elore a segitseget.
Ardi

Hozzászólások

úgy látszik, a fact-ok összegyűjtésénél magára veszi ha a shell parancs hibával lép ki.
nem tudom mi a pontos syntax, de az ntp idézőjelezéséből arra következtetek, hogy shell parancssort vár, tehát megpróbálhatod ezzel:


shell: dpkg-query -l 'ntp' || true

~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack

Lényegesen szebb megoldás:

ignore_errors: yes

És shell helyett command használata ajánlott Ansible docs alapján.

Ezért jó az ansible, egyszerű.

Ez azt jelenti, hogy akkor lesz failed a taszk, ha:
- a parancs hibával lép ki (exit code != 0)
- és nincs benne a kimenetében, hogy "no packages found"

Ezzel nem feded el, ha más okból fut hibára, mint hogy nincs meg a csomag. Persze itt teljesen értelmetlen, mivel lényegében elég az apt modult használni, de sok lehetőség rejlik még a failed_when és changed_when használatában a command és shell modulokkal.

U.i.:ahogy nézem, stdout helyett stderr kellene.

Amúgy ennyi miért nem elég?

apt: name=ntp update_cache=yes state=present