2016-05-04 18 views
2

私はAnsibleを使っていくつかの自動化を書こうとしていますが、後でタスクのコマンド出力の複数の部分を使う必要があるプレイブック。Ansible - コマンド出力をキャプチャしていくつかの変数として保存する方法

私は、コマンドを実行しようとしているタスクの持つ「lspciコマンドを| grepのイーサネット| grepのギガビット」

(出力の2行でなければなりません)次のようになります出力:

"02:00.0 Ethernet controller: Intel Corporation 82575EB Gigabit Network Connection (rev 02)" 
"02:00.1 Ethernet controller: Intel Corporation 82575EB Gigabit Network Connection (rev 02) 

この出力のうち、4つの情報を変数として抽出する必要があります。

var1 - 最初の行のバスが必要です。 "02"にする必要があります。

var2 - 最初の行の機能が必要です。 "0"にする必要があります。

var3 - 2行目のバスが必要です。 "02"にする必要があります。

var4 - 2行目の機能が必要です。 "1"にする必要があります

出力からこれら4つの変数に情報を抽出するにはどうすればよいですか?必ずしも4つの変数すべてを取得する単一のプレイである必要はありません。

ありがとうございました。

+0

あなたは 'register'を使用してみましたが?あなたが試したことを示し、私たちが助けることができます。 – tedder42

+0

レジスタを使用すると、文字列 – JaReg

+1

の非常に小さなサブセットだけが必要なときには出力文字列全体が必要になります。そのため、「線」と表示されるので、Jinjaでピースを抜き出すことができます。 – tedder42

答えて

1

提案のとおり、registerコマンドの出力。その後、あなたはあなたが興味のある部分を結果をループし、つかむことができる

の作業例:。

- name: Fun with lspci output 
    hosts: localhost 
    connection: local 
    tasks: 
    - name: get Gigabit Ethernet adapters 
    shell: lspci | grep Ethernet | grep Gigabit | awk '{print $1}' 
    register: eth_adapters 

    - name: use extracted info 
    debug: msg="Adapter found, bus {{item.split(':')[0]}}, function {{item.split('.')[-1]}}" 
    with_items: "{{eth_adapters.stdout_lines}}" 

項目のリストのようにコマンドの出力を得るためにeth_adapters.stdout_linesの使用に注意してください、とawk '{print $1}'はデバイスのバス情報を取得するだけです。

この例では、次の出力を生成します。

PLAY [Fun with lspci output] *************************************************** 

TASK [setup] ******************************************************************* 
ok: [localhost] 

TASK [get Gigabit Ethernet adapters] ******************************************* 
changed: [localhost] 

TASK [use extracted info] ****************************************************** 
ok: [localhost] => (item=00:00.0) => { 
    "item": "00:00.0", 
    "msg": "Adapter found, bus 00, function 0" 
} 
ok: [localhost] => (item=00:01.0) => { 
    "item": "00:01.0", 
    "msg": "Adapter found, bus 00, function 0" 
} 
ok: [localhost] => (item=00:01.1) => { 
    "item": "00:01.1", 
    "msg": "Adapter found, bus 00, function 1" 
} 
ok: [localhost] => (item=00:01.3) => { 
    "item": "00:01.3", 
    "msg": "Adapter found, bus 00, function 3" 
} 


PLAY RECAP ********************************************************************* 
localhost     : ok=3 changed=1 unreachable=0 failed=0 
関連する問題