如何解决将本地目录复制到具有相同目录名称的远程主机
我有三个具有以下结构的本地目录:
$ 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
。
有人可以帮忙吗?提前致谢!
解决方法
你这样做是错误的。您的游戏已经在您组中的每台机器上循环播放。此处不需要循环(除非您只需要源目录中的文件子集)。
copy
模块能够复制整个树,但如果您有很多文件,则性能会很差。如果是这种情况,请查看更适合该情况的 syncrhonize
module。
我的感觉是您缺少一些有关可以在游戏中使用的内部 ansible 变量的知识。作为第一个介绍,我建议您阅读the documentation section on magic variables。我将在下面使用的(如@JBone 评论中已经报告的那样)是 inventory_hostname
这是您的固定剧本(根据我的理解和未经测试)。请注意 /
值中的结尾 src:
并阅读 corresponding description in the documentation
如果路径是目录,则递归复制。在这种情况下,如果路径以“/”结尾,则仅将该目录的内部内容复制到目的地。否则,如果不以“/”结尾,则复制包含所有内容的目录本身。
---
- hosts: remote_cluster
name: copy local directories to related nodes
gather_facts: false
tasks:
- name: copy task
ansible.builtin.copy:
src: 'key/{{ inventory_hostname }}/'
dest: '~/.ssh/'
tags:
- copy
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。