Ansible Command module mówi, że ' / ' jest nielegalnym znakiem
Używam Ansible do wdrożenia mojego projektu i próbuję sprawdzić, czy dany pakiet jest zainstalowany, ale mam problem z zadaniem it, oto zadanie:
- name: Check if python-apt is installed
command: dpkg -l | grep python-apt
register: python_apt_installed
ignore_errors: True
I tu jest problem:
$ ansible-playbook -i hosts idempotent.yml
PLAY [lxc-host] ***************************************************************
GATHERING FACTS ***************************************************************
ok: [10.0.3.240]
TASK: [idempotent | Check if python-apt is installed] *************************
failed: [10.0.3.240] => {"changed": true, "cmd": ["dpkg", "-l", "|", "grep", "python-apt"], "delta": "0:00:00.015524", "end": "2014-07-10 14:41:35.207971", "rc": 2, "start": "2014-07-10 14:41:35.192447"}
stderr: dpkg-query: error: package name in specifier '|' is illegal: must start with an alphanumeric character
...ignoring
PLAY RECAP ********************************************************************
10.0.3.240 : ok=2 changed=1 unreachable=0 failed=0
Dlaczego ten znak jest nielegalny '|' .
2 answers
Z doc:
Command - wykonuje polecenie na zdalnym węźle
Moduł polecenia przyjmuje nazwę polecenia, po której następuje lista argumenty rozdzielone spacjami. Podane polecenie zostanie wykonane na wszystkich wybrane węzły. Nie będzie przetwarzany przez powłokę, więc zmienne takie jak $HOME i operacje takie jak "", "|", and " & " will nie działa (użyj modułu powłoki, jeśli potrzebujesz tych funkcji).
Shell - wykonuje polecenie w węzły
Moduł powłoki pobiera nazwę polecenia, po której następuje lista argumentów rozdzielonych spacjami. Jest prawie dokładnie jak moduł command, ale uruchamia polecenie poprzez powłokę (/bin / sh) na zdalnym węźle.
Dlatego musisz użyć shell: dpkg -l | grep python-apt
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-30 10:58:22
Przeczytaj o module poleceń w dokumentacji Ansible :
Nie będzie przetwarzany przez powłokę, więc .. operacje takie jak "", "|", and " & " will not work
Zgodnie z zaleceniami, użyj modułu powłoki :
- name: Check if python-apt is installed
shell: dpkg -l | grep python-apt
register: python_apt_installed
ignore_errors: True
Jeśli to coś warte, możesz sprawdzić / potwierdzić instalację w środowisku Debiana używając apt
komendy:
- name: ensure python-apt is installed
apt: name=python-apt state=present
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-11 16:48:33