2016-03-17 18 views
21

私のプレイブックの中で、私は外部コマンドの出力を保持する変数を作りたいと思います。その後、私はその変数を2つのテンプレートで使いたいと思っています。ここで可能性:コマンドのstdoutを新しい変数に格納しますか?

は脚本の関連する部分です:

tasks: 
    - name: Create variable from command 
     command: "echo Hello" 
     register: command_output 
    - debug: msg="{{command_output.stdout}}" 

    - name: Copy test service 
     template: src=../templates/test.service.j2 dest=/tmp/test.service 
    - name: Enable test service 
     shell: systemctl enable /tmp/test.service 
    - name: Start test service 
     shell: systemctl start test.service 

とのこれが私のテンプレートであるとしましょう:

[Unit] 
Description=MyApp 
After=docker.service 
Requires=docker.service 

[Service] 
TimeoutStartSec=0 
ExecStartPre=-/usr/bin/docker kill busybox1 
ExecStartPre=-/usr/bin/docker rm busybox1 
ExecStartPre=/usr/bin/docker pull busybox 
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/sh -c "while true; do echo {{ string_to_echo }}; sleep 1; done" 

[Install] 
WantedBy=multi-user.target 

{{ string_to_echo }}に注意してください)

だから私は基本的にだ何を探しているのは、新しい変数string_to_echocommand_output.stdout(最初のタスクで生成/取得)の内容を格納する方法です。
その変数は後で複数のテンプレートで使用したいと思います。

私のテンプレートには{{command_output.stdout}}を使うことができますが、読みやすさのために.stdoutを取り除きたいと思います。

答えて

22

あなたはstore the content as a factに持っている:

- set_fact: 
    string_to_echo: "{{ command_output.stdout }}" 
+0

。迅速な回答をいただきありがとうございます! :) – Forivin

18

事実を設定する必要はありません。

- shell: cat "hello" 
     register: cat_contents 

    - shell: echo "I cat hello" 
     when: cat_contents.stdout == "hello" 
3

私はAnsibleで初心者だけど、私は次の解決策を示唆している:

playbook.yml

... 
vars: 
    command_output_full: 
    stdout: will be overriden below 
    command_output: {{ command_output_full.stdout }} 
... 
... 
... 
tasks: 
    - name: Create variable from command 
    command: "echo Hello" 
    register: command_output_full 
    - debug: msg="{{ command_output }}" 

をそれが仕事(と私のために動作します)必要がありますAnsibleは、遅延評価を使用しているため、 。しかし、それは打ち上げ前に妥当性をチェックしていると思われるので、私はバーでcommand_output_full.stdoutを定義しなければなりません。

そして、もしそれがvarsセクションにそのようなヴァースが多すぎるなら、それは醜く見えます。

0

あなたはOSのバージョンを比較するために、例えば、テキストの結果を比較するために、複雑なコマンドを保存するよりも場合は、多分これはあなたを助けることができる:

仕事をしているようだ
tasks: 
     - shell: echo $(cat /etc/issue | awk {'print $7'}) 
     register: echo_content 

     - shell: echo "It works" 
     when: echo_content.stdout == "12" 
     register: out 
     - debug: var=out.stdout_lines 
関連する問題