2017-05-17 15 views
1

文字列と{{item}}を条件付きで結合する方法がわかりません。条件付きの結合文字列と変数

- name: enable repos 
    command: "subscription-manager repos --enable {{ item }}" 
    when: enable_repo_{{ item }} == 'yes' 
    with_items: 
    - rhel-7-server-rpms 
    - rhel-7-server-optional-rpms 
    - rhel-7-server-extras-rpms 
    - rhel-7-server-satellite-tools-6.2-rpms 
    - rhel-7-server-thirdparty-oracle-java-rpms 
    - jws-3-for-rhel-7-server-rpms 

私は取得していますエラーは次のとおりです:これも可能か

ここに私のタスクブロックですサポートされている場合、私はわからないんだけど、私は文字列を連結するにはどうすればよい

TASK [satellite_client : enable repos] ***************************************** 
fatal: [10.187.15.31]: FAILED! => {"failed": true, "msg": "The conditional check 'enable_repo_item == 'yes'' failed. The error was: error while evaluating conditional (enable_repo_item == 'yes'): 'enable_repo_item' is undefined\n\nThe error appears to have been in '/home/marcp/git/satellite_client/tasks/main.yml': line 21, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: enable repos\n^here\n"} 

PLAY RECAP ********************************************************************* 
10.187.15.31    : ok=1 changed=0 unreachable=0 failed=1 

{ {item}}これを別の方法で行うべきですか?

+0

可能な複製(http://stackoverflow.com/questions/ [文字列からAnsible変数を作成する方法] 40956212/how-to-create-able-variable-from-string) –

+0

あなたのコードをリファクタリングし、複数の変数の代わりに 'enabled_repos'リストを作成するようアドバイスします。おかげさまで –

+0

私はfreenode #ansibleから同じアドバイスを得た – Marc

答えて

1

whenの条件は、Jinja2式であると考えられます(暗黙的に{{ ... }}で囲まれているため、内部に表現されている別のJinja2を開くことはできません)。

あなたはvars辞書を使用し、連結文字列として変数の名前を渡すことができます:

when: vars['enable_repo_' + item] == 'yes' 
+1

コンスタンチンが目を覚ますのを待っていて、 'vars'辞書を使っていることが書かれていないと文句を言う;) – techraf

+0

ちょうど試しました。コードは実行されますが、defaults/main.ymlに "enable_repo_xxx:yes"が設定されていてもタスクはスキップされます。私は、連結の結果が文字列として取られていると思われます。 – Marc

+0

トラブルシューティングに 'debug'モジュールや' -vvv'を使います。 – techraf