在远程服务器上定义 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。

相关内容