需要對下面的程式碼進行哪些具體更改,以便 Ansible Playbook 知道如何
testFile.txt
從ServerB
into 中拉取ServerA
?
這些都是 Amazon Linux 伺服器。
請注意,ServerA
和ServerB
都是由中央 Ansible 伺服器操作的遠端伺服器。
Playbook 從中央 Ansible 伺服器建立的檔案ServerB
需要在執行時間直接複製/拉入,ServerA
而ServerB
不是返回 Ansible 伺服器。
ServerA
另請注意,和的清單ServerB
(每個 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。