
작은 도움이 하나 필요해요.
shell
아래 예에서는 모듈 로 교체해야 합니다 command
. 하지만 command
파이프로 작업하지 않아서 혼란스러워요 .
그러니 이 작업에 대한 해결책을 알려주십시오. 예:
- 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
module - 대상에서 명령을 실행합니다.명령은 셸을 통해 처리되지 않으므로 " ", " ", " ", " ", " " 및 " "와 같은 변수
$HOSTNAME
및 작업은 작동하지 않습니다. 사용*
<
>
|
;
&
ansible.buildin.shell이러한 기능이 필요한 경우 모듈을 사용하세요.shell
module – 대상에서 쉘 명령을 실행합니다.와 거의 똑같네요ansible.buildin.command
/bin/sh
모듈이지만 원격 노드의 셸( )을 통해 명령을 실행합니다 .
그러니 이 작업에 대한 해결책을 알려주십시오.
"해당 솔루션"은 없지만 가장 선호되지 않는 접근 방식부터 다음 목록을 살펴볼 수 있습니다.
- 사용
package_facts
패키지 정보를 사실로 얻기 위한 모듈 - 평가하다
zypper
SUSE 및 openSUSE에서 패키지를 관리하기 위한 모듈 - 필요 하지 않은
zypper
다른 구문에서 명령 사용grep
awk
- 또는자체 사용자 정의 모듈 작성
- 아니면
script
모듈을 전송한 후 원격 노드에서 로컬 스크립트를 실행하기 위한 모듈
또는 최소한 shell
파이프를 사용하여 명령을 유지하세요(현재 주어진 예는 그대로 유지됩니다).