私のプレイブックはいつですか?
- name: Check that the SSH Key exists
local_action:
module: stat
path: "/home/{{ login_user.stdout }}/{{ ssh_key_location }}"
register: sshkey_result
- name: Generating a new SSH key for the current user it's not exists already
local_action:
module: user
name: "{{ login_user.stdout }}"
generate_ssh_key: yes
ssh_key_bits: 2048
when: sshkey_result.rc == 1 and ( github_username is undefined or github_username |lower == 'none' )
参照用のvarファイルは次のとおりです。
---
vpc_region: eu-west-1
key_name: my_github_key
ssh_key_location: .ssh/id_rsa.pub
このプレイブックを実行しようとすると、次のエラーが表示されます。
TASK: [test | Check that the SSH Key exists] **********************************
ok: [localhost -> 127.0.0.1]
TASK: [test | Generating a new SSH key for the current user it's not exists already] ***
fatal: [localhost] => error while evaluating conditional: sshkey_result.rc == 1 and ( github_username is undefined or github_username |lower == 'none' )
FATAL: all hosts have already failed -- aborting
誰かが私に単一のタスクでansibleで複数の条件を使用する方法を指摘できますか。
ありがとう
このように使用できます。
when: condition1 == "condition1" or condition2 == "condition2"
公式ドキュメントへのリンク: The When Statement 。
また、この要点を参照してください: https://Gist.github.com/marcusphi/6791404
sshkey_result.rc == 1
にはrc
属性が含まれておらず、条件全体が失敗するため、条件の問題はこの部分sshkey_result
にあります。
ファイルが存在するかどうかを確認する場合は、exists
属性を確認してください。
https://stackoverflow.com/users/1638814/nvartolomei answerに追加すると、おそらくエラーが修正されます。
厳密にあなたの質問に答えて、when:
ステートメントはおそらく正しいが、複数行で読みやすく、ロジックを満たしていることを指摘したいだけです。
when:
- sshkey_result.rc == 1
- github_username is undefined or
github_username |lower == 'none'
https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html#the-when-statement