Ansible:根据主机名或角色复制文件

Tui*_*lak 13 ansible

根据主机名复制文件的最佳方法是什么?

我需要将内容不同但文件名相同的文件复制到多台机器上。

我有几个文件:

file.role1
file.role2
file.role3
Run Code Online (Sandbox Code Playgroud)

根据主机名和/或角色,我想file.roleX将其复制并重命名为file

谢谢。

Ant*_*des 36

有很多方法可以做到这一点。最简单:

- name: Copy file.role1 to host1
  copy: src=file.role1 dest=/somewhere/file
  when: inventory_hostname == "host1"
- name: Copy file.role2 to host2
  copy: src=file.role2 dest=/somewhere/file
  when: inventory_hostname == "host2"
Run Code Online (Sandbox Code Playgroud)

替代,更紧凑:

- name: Copy file to host
  copy: src=file.{{ inventory_hostname }} dest=/somewhere/file
Run Code Online (Sandbox Code Playgroud)

或者,使用模板:

- name: Copy file to host
  template: src=file dest=/somewhere/file
Run Code Online (Sandbox Code Playgroud)

模板可以是这样的:

{% if inventory_hostname == "host1" %}
{% include "file1" %}
{% endif %}
...
Run Code Online (Sandbox Code Playgroud)

如果你想要不同角色的不同文件,你为什么不简单地把这个:

- name: Copy file.role1 to file
  copy: src=file.role1 dest=/somewhere/file
Run Code Online (Sandbox Code Playgroud)

在每个角色的代码中?

没有首选的方法可以做到这一点 - 这取决于您实际尝试完成的任务。

  • [TIMTOWTDI](https://en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it) 的奖励积分! (6认同)