需要对下面的代码进行哪些具体更改,以便 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。