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
- 1413 megtekintés
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
- A hozzászóláshoz be kell jelentkezni
ez mukodik - koszi.
- A hozzászóláshoz be kell jelentkezni
Ha ezt használod, a legszarabb lehetőséget fogadtad el :D
- A hozzászóláshoz be kell jelentkezni
kosz :-)
- A hozzászóláshoz be kell jelentkezni
én ezt úgy írtam h csak a shell lehetőségeit használtam ki, az ansible-ét nem. a lentebbi megoldások ésszerűbbek.
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
- A hozzászóláshoz be kell jelentkezni
en koszonom mindenki hozzaszolasat.
nehogy vki megharagudjek - en csak probalgatom a rendszert es mivel itt most szamomra majdnem minden uj, nem tudom, milyen lehetosegek leteznek es hogyan reagal ezekre a rendszer.
ugyhogy probalgatok tovabb ..
- A hozzászóláshoz be kell jelentkezni
Lényegesen szebb megoldás:
ignore_errors: yes
És shell helyett command használata ajánlott Ansible docs alapján.
- A hozzászóláshoz be kell jelentkezni
Vagy inkább:
failed_when: dpkg_result | failed and 'no packages found' not in dpkg_result.stdout
A másik hiba meg, hogy nem kell a shell modul, elég a command is.
De ez az egész tök fölösleges, mert az apt modul úgyis nézi, hogy fel van-e rakva az adott csomag.
- A hozzászóláshoz be kell jelentkezni
Mit is jelent pontosan ez a sor?:
failed_when: dpkg_result | failed and 'no packages found' not in dpkg_result.stdout
- A hozzászóláshoz be kell jelentkezni
ugyan játszáson túl még nem nyomkodtam ansible-t, és már egy szóra se emlékszem, de ez kis túlzással egy emberi nyelven írt angol mondat. :)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
igen, ezt akartam mondani, hogy ugyan nem ismerem az ansiblet, de tök egyértelmű, hogy mit jelent.
- A hozzászóláshoz be kell jelentkezni
Koszonom szepen a magyarazatot.
- A hozzászóláshoz be kell jelentkezni
Amúgy ennyi miért nem elég?
apt: name=ntp update_cache=yes state=present
- A hozzászóláshoz be kell jelentkezni
+1
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni