リモートサーバー上のAnsibleインベントリの定義

リモートサーバー上のAnsibleインベントリの定義

Ansible Playbook がからtestFile.txtにプルする方法を認識できるようにするには、以下のコードにどのような具体的な変更を加える必要がありますか?ServerBServerA

これらは両方とも Amazon Linux サーバーです。

ServerAとはServerB両方とも、中央の Ansible サーバーによって操作されるリモート サーバーであること に注意してください。

中央の Ansible サーバーから Playbook によって作成されたファイルは、Ansible サーバーに戻すのではなく、実行時 に からServerB直接コピー/プルする必要があります。ServerAServerB

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。

関連情報