
我需要一點小小的幫助。
在下面的範例中,我需要替換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
不使用管道。
是的,這就是情況和預期的行為。請參閱範例
-
命令不會透過 shell 進行處理,因此諸如「 」、「」、「」、「」、「」和「 」
$HOSTNAME
之類的變數和操作將無法運作。使用*
<
>
|
;
&
ansible.builtin.shell如果您需要這些功能,請使用模組。 -
它幾乎一模一樣ansible.builtin.指令
/bin/sh
模組,但透過遠端節點上的shell ( ) 運行命令。
所以請給我這個任務的解決方案
不會有“那個解決方案”,但您可以從最優選到最不優選的方法查看以下列表:
- 使用
package_facts
模組以便將包資訊作為事實獲取 - 評價
zypper
模組以管理 SUSE 和 openSUSE 上的套件 - 在其他語法中使用該
zypper
命令不需要grep
和或awk
類似 - 或者編寫自己的自訂模組
- 或使用
script
模組以便在傳輸後在遠端節點上運行本地腳本
或者,至少,只保留shell
帶有管道的命令(以及您目前給出的範例)