【发布时间】:2021-07-24 09:01:13
【问题描述】:
我有三个本地目录,结构如下:
$ tree .
|_ inventory
|_ deploy.yml
|_ key
|_ node1
| |_ ... # several files, like id_rsa.pub etc
|_ node2
| |_ ... # several files, like id_rsa.pub etc
|_ node3
|_ ... # several files, like id_rsa.pub etc
我的库存文件在下面:
[remote_cluster]
node1 ansible_host=192.168.100.100
node2 ansible_host=192.168.100.101
node3 ansible_host=192.168.100.102
我要做的是将目录从我的本地机器复制到主机名与目录名称相同的远程机器上,例如,将node1复制到名为node1的远程机器上。我真的不想硬编码这个特性,因为 remote_cluster 节点的数量并不总是三个。未来可能会增加或减少。
我搜索了一些示例,但没有一个符合我的目标。而且我也做了一些尝试,也没有成功:
- hosts: remote_cluster
name: copy local directories to related nodes
gather_facts: False
tasks:
- name: copy task
ansible.builtin.copy:
src: '{{ item.src }}'
dest: '{{ item.dest }}'
with_items:
- { src: 'key/{{hostvar}}/', dest: '~/.ssh/'}
tags:
- copy
在我看来,ansible 可能能够通过某个变量或其他东西来识别哪个远程主机当前正在执行任务。但是我没有弄清楚这个魔术变量的名称是什么。为了清楚起见,我暂时将变量名替换为 hostvar。
有人可以帮忙吗?提前致谢!
【问题讨论】:
-
如果我对问题的理解正确,您应该将
hostvar替换为inventory_hostname
标签: ansible ansible-inventory ansible-facts