2017-02-26 5 views
3

環境変数としてシェルコマンドの出力をAnabledに設定したいと思います。bashコマンドのコマンド出力から環境変数を設定する

私はそれを達成するために、次のでした:

- name: Copy content of config.json into variable 
    shell: /bin/bash -l -c "cat /storage/config.json" 
    register: copy_config 
    tags: something 

- name: set config 
    shell: "echo $TEMP_CONFIG" 
    environment: 
    TEMP_CONFIG: "{{copy_config}}" 
    tags: something 

をしかし、私は、次のコマンドを実行して行うときに何とかansible実行後、:私の端末で

echo ${TEMP_CONFIG} 

をそれが空の結果を提供します。

ご協力いただければ幸いです。

答えて

5

少なくとも二つの問題があります。

  1. あなたは、あなたが上記のタスクの結果を登録し、再度stdoutを印刷する必要がある変数

    - name: set config 
        shell: "echo $TEMP_CONFIG" 
        environment: 
        TEMP_CONFIG: "{{copy_config.stdout}}" 
        tags: something 
    
  2. としてcopy_config.stdoutを渡す必要がありますso:

    - name: set config 
        shell: "echo $TEMP_CONFIG" 
        environment: 
        TEMP_CONFIG: "{{copy_config.stdout}}" 
        tags: something 
        register: shell_echo 
    
    - debug: 
        var: shell_echo.stdout 
    
  3. yoこのようにして、変数を非関連プロセスに渡すことはできません。したがって、結果をrcファイルに登録しないかぎり(~/.bash_profileはBashを使用している場合に対話型ログインを使用しています)、TEMP_CONFIGという値を他のシェルプロセスが見ることはできません。これがシステムの仕組みです。

+0

私はポイント2と3に関して質問がありますが、なぜそれを登録してstd.outをエコーアウトする必要がありますか?それの目的は何ですか?私は '環境をやっていると思った: TEMP_CONFIG:" {{copy_config.stdout}} "は.bash_profileファイルにこれを追加しますが、どうして明示的に追加する必要がありますか? – Spaniard89

+0

'Stdout'サブキーを参照する必要があります。なぜなら、これはAnatileがコマンドのstdoutを格納する場所ですからです。いいえ、 '.bash_profile'に何も追加しません。モジュールで指定されたコマンドの環境を設定するだけです。 – techraf

関連する問題