ファイルの内容を読み取って変数に格納し、まだ存在しない場合は別のファイルに挿入しようとしています。
だから、私がこれを試みようとしている方法は次のとおりです:
# Create a variable that represents the path to the file that you want to read from
ssh_public_key_file: '../../jenkins_master/files/{{ hostvars[inventory_hostname]["environment"] }}/id_rsa.pub'
# Create a variable that represents the contents of this file:
ssh_public_key: "{{ lookup('file', '{{ ssh_public_key_file }}') }}"
次に、これらの変数をAnsibleプレイブックで次のように使用します。
- name: Install SSH authorized key
lineinfile: create=yes dest=~/.ssh/authorized_keys line=" {{ ssh_public_key }}" mode=0644
しかし、プレイブックを実行しようとすると、次のエラーメッセージが表示されます。
could not locate file in lookup: {{ ssh_public_key_file }}
誰かが解決策を推奨したり、私が間違ったことを提案したりできますか?
おかげで、
セーン
行を次のように変更する必要があります。
# Create a variable that represents the contents of this file:
ssh_public_key: "{{ lookup('file', ssh_public_key_file) }}"
変数と文字列を連結する必要がある場合は、次のようにすることができます。
# Example with two variables
ssh_public_key: "{{ lookup('file', var_1+var_2) }}"
# Example with string and variable
ssh_public_key: "{{ lookup('file', '~/config/'+var_1) }}"
。 。
まず、あなたのssh_public_key_file
変数が正しく設定されています。次のようなタスクを追加すると、何が表示されますか?
- name: display variable
debug: var=ssh_public_key_file
出力が次のように見える場合、変数は適切に定義されていません(たとえば、「環境」ファクトがホストに存在しない)。
ok: [localhost] => {
"ssh_public_key_file": "../../jenkins_master/files/{{ hostvars[inventory_hostname][\"environment\"] }}/id_rsa.pub"
}
ただし、すべてが適切に定義されている場合、出力には変数が正しい値に置き換えられたことが表示されます。
ok: [localhost] => {
"ssh_public_key_file": "../../jenkins_master/files/foo/id_rsa.pub"
}
あなたがそれを確認したら、私はあなたのssh_public_key
変数。デバッグモジュールを使用してその値を出力するだけです。公開鍵ファイルの内容として表示されます。
私が強くお勧めするもう1つのことは、lineinfileをまったく使用しないことです。 SSHキーを使用しているため、代わりに authorized_key モジュールを使用することをお勧めします。これは、authorized_keysファイルを管理するよりクリーンな方法です。