Definieren des Ansible-Inventars auf einem Remote-Server

Definieren des Ansible-Inventars auf einem Remote-Server

Welche konkreten Änderungen müssen am folgenden Code vorgenommen werden, damit das Ansible Playbook weiß, wie es testFile.txtvon ServerBnach ziehen muss ServerA?

Dies sind beides Amazon Linux-Server.

Beachten Sie, dass ServerAund ServerBbeides Remote-Server sind, auf die ein zentraler Ansible-Server einwirkt.

ServerBEine von einem Playbook auf dem zentralen Ansible-Server erstellte Datei muss ServerAzur ServerBLaufzeit direkt dorthin kopiert/abgerufen werden, anstatt zum Ansible-Server zurückzukehren.

Beachten Sie auch, dass das Inventar für ServerAund ServerB(jeweils eine IP) auf dem zentralen Ansible-Server definiert ist, nicht jedoch auf dem Remote- ServerAoder dem Remote- Server ServerB.

Daher gibt das Playbook zur Laufzeit den folgenden Fehler aus, wenn es die folgende Zeile erreicht:

fatal: [ip.of.server.b]: FAILED! => {
    "msg": "'ServerA' is undefined"
}  

Welche konkreten Änderungen müssen also am folgenden Code vorgenommen werden, damit ServerAer zur Laufzeit definiert wird?

Hier ist das Spielbuch:

# 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 }}"

Antwort1

Welche konkreten Änderungen müssen also am folgenden Code vorgenommen werden, damit ServerA zur Laufzeit definiert wird?

- hosts: ServerB
  vars:
    ServerA: 192.168.0.0

Sie müssen auf die Fehlermeldung reagieren, die angibt, dass die Variable ServerAnicht definiert ist.

Ihr Code ruft die Variable aufServerA. Sie haben die Variable nicht definiert und Ansible hat keine „Tatsache“ auf diesen Namen registriert; daher ist sie nicht definiert und der Controller weiß nicht, worauf Sie sich beziehen.

Ansible-Dokumentationzeigt, dass der delegate_to:direkte Aufruf einer IP-Adresse unterstützt wird. Wenn Sie möchtenVerwenden Sie eine VariableDazu müssen Siedeklarieren Sie es selbst im Code, oder verwenden Sie eine der dynamischen Bestandsfakten.

Dies kann auch möglich sein mit demmagische Variable inventory_hostnameum Fakten zu ziehen. Ihre Ergebnisse können abweichen.

verwandte Informationen