
Мне нужна небольшая помощь.
В примере ниже мне нужно заменить shell
на command
module. Но я запутался, так как command
это не работает с pipe.
Поэтому, пожалуйста, дайте мне решение этой задачи. Например:
- name: Get the version
become: true
run_once: true
shell: zypper pa | grep eric-odl | awk -F {'print $4'}
register: odl_version
Как мне разделить эту задачу, если вывод каждой команды зависит от следующей команды?
решение1
Мне нужно заменить
shell
модульcommand
.
Возможно, вы сможете предоставить более подробную информацию о том, почему и чего вы пытаетесь достичь.
В настоящее время я полагаю, что, согласно man zypper
вашей попытке,
пакеты (pa) [опции] [репозиторий]...
Список всех доступных пакетов или всех пакетов из указанных репозиториев. Аналогично
zypper search -s -t package
.
сначала и хотелось бы продолжить с чем-то потом.
Но меня смущает,
command
что это не работает с трубой.
Правильно, это так и есть, это предполагаемое поведение. Смотрите пример.
command
модуль – Выполнение команд на целяхКоманда(ы) не будут обработаны через оболочку, поэтому переменные, такие как
$HOSTNAME
"*
", "<
", ">
", "|
", ";
" и "&
" не будут работать. Используйтеansible.builtin.shellмодуль, если вам нужны эти функции.shell
модуль – Выполнение команд оболочки на целевых объектахЭто почти точь-в-точь какansible.встроенная.командамодуль, но запускает команду через оболочку (
/bin/sh
) на удаленном узле.
Пожалуйста, дайте мне решение этой задачи.
«Того самого решения» не будет, но вы можете взглянуть на следующий список подходов, отсортированный от наиболее к наименее предпочтительному:
- С использованием
package_facts
модуль для получения информации о пакете в виде фактов - Оценивать
zypper
модуль для управления пакетами в SUSE и openSUSE - Использование
zypper
команды в другом синтаксисе, который не требуетgrep
и илиawk
как в - Илинаписание собственного пользовательского модуля
- Или используя
script
модуль для запуска локального скрипта на удаленном узле после его передачи
Или, по крайней мере, просто придерживайтесь shell
команд с вертикальными линиями (и вашего примера в том виде, в котором он есть сейчас)