在遠端伺服器上定義 Ansible 庫存

在遠端伺服器上定義 Ansible 庫存

需要對下面的程式碼進行哪些具體更改,以便 Ansible Playbook 知道如何testFile.txtServerBinto 中拉取ServerA

這些都是 Amazon Linux 伺服器。

請注意,ServerAServerB都是由中央 Ansible 伺服器操作的遠端伺服器。

Playbook 從中央 Ansible 伺服器建立的檔案ServerB需要在執行時間直接複製/拉入,ServerAServerB不是返回 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。

相關內容