Welche konkreten Änderungen müssen am folgenden Code vorgenommen werden, damit das Ansible Playbook weiß, wie es
testFile.txt
vonServerB
nach ziehen mussServerA
?
Dies sind beides Amazon Linux-Server.
Beachten Sie, dass ServerA
und ServerB
beides Remote-Server sind, auf die ein zentraler Ansible-Server einwirkt.
ServerB
Eine von einem Playbook auf dem zentralen Ansible-Server erstellte Datei muss ServerA
zur ServerB
Laufzeit direkt dorthin kopiert/abgerufen werden, anstatt zum Ansible-Server zurückzukehren.
Beachten Sie auch, dass das Inventar für ServerA
und ServerB
(jeweils eine IP) auf dem zentralen Ansible-Server definiert ist, nicht jedoch auf dem Remote- ServerA
oder 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
ServerA
er 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 ServerA
nicht 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_hostname
um Fakten zu ziehen. Ihre Ergebnisse können abweichen.