Ansible Playbook がから
testFile.txt
にプルする方法を認識できるようにするには、以下のコードにどのような具体的な変更を加える必要がありますか?ServerB
ServerA
これらは両方とも Amazon Linux サーバーです。
ServerA
とはServerB
両方とも、中央の Ansible サーバーによって操作されるリモート サーバーであること に注意してください。
中央の Ansible サーバーから Playbook によって作成されたファイルは、Ansible サーバーに戻すのではなく、実行時 に からServerB
直接コピー/プルする必要があります。ServerA
ServerB
ServerA
また、とのインベントリServerB
(それぞれ 1 つの IP) は中央の Ansible サーバーで定義されていますが、リモートServerA
またはリモートでは定義されていないことに注意してくださいServerB
。
したがって、実行時に、プレイブックは ``以下の行に到達すると次のエラーをスローします。
fatal: [ip.of.server.b]: FAILED! => {
"msg": "'ServerA' is undefined"
}
ServerA
では、実行時に定義されるようにするには、以下のコードにどのような具体的な変更を加える必要があるのでしょうか?
プレイブックはこちらです:
# Then create a file on ServerB and copy/pull that file into ServerA
- name: File transfer example
hosts: ServerB
remote_user: server-b-user
become: true
become_method: sudo
become_user: root
tasks:
- name: Create a test file to copy
shell:
cmd: |
cat <<EOF > /path/on/ServerB/testFile.txt
this is a test file.
EOF
sudo: true
sudo_user: server-b-user
- name: Transfer conf file from master to admin
synchronize:
src: /path/on/ServerB/testFile.txt
dest: /path/on/ServerA/
mode: pull
delegate_to: "{{ ServerA }}"
答え1
では、実行時に ServerA を定義するには、以下のコードにどのような具体的な変更を加える必要があるのでしょうか?
- hosts: ServerB
vars:
ServerA: 192.168.0.0
変数ServerA
が未定義であることを示すエラー メッセージに対処する必要があります。
あなたのコードは変数を呼び出していますサーバーA変数を定義しておらず、Ansible にはその名前に登録された「ファクト」がありません。したがって、変数は未定義であり、コントローラーは参照している内容を認識しません。
Ansible ドキュメントdelegate_to:
IPアドレスを直接呼び出すことができることを示しています。変数を使用するそうするには、コード内で自分で宣言する、または動的在庫ファクトのいずれかを使用します。
これは、魔法の変数 inventory_hostname
事実を引き出すため。YMMV。