如何解决基于组名的Ansible复制文件
我有一个将默认脚本文件复制到目标位置的任务:
- name: copy keepalive state script
copy:
src: 'keepalived.state.sh'
dest: /usr/local/bin/keepalived.state.sh
mode: '0755'
owner: root
group: root
现在我想基于主机所在的组创建脚本,因此我将任务更改为:
- name: copy keepalive state script
copy:
src: '{{keepalived_state_script_file}}'
dest: /usr/local/bin/keepalived.state.sh
mode: '0755'
owner: root
group: root
vars:
keepalived_state_script_file: "{{ lookup('first_found',dict(files=['keepalived/' + item + '.state.sh','keepalive.state.sh'])) }}"
with_items: "{{group_names}}"
现在对于application
组中的主机,如果我将application.state.sh
文件放在keepalived
目录中,它将复制该文件而不是默认的keepalived.state.sh
,但是如果我的房东是多个这样的组的成员,则:
[application]
host1
[dc1]
host1
此任务将首先检查application
组并复制application.state.sh
,然后检查dc1
组,由于没有dc1.state.sh
,它将复制默认脚本文件,该文件是keepalived.state.sh
。
考虑到无论该主机有多少个组,每个主机将只使用一个脚本文件,如何解决该问题,以便可以获取自定义脚本而不是默认脚本?
解决方法
您的解决方案太复杂了。您尝试发明Ansibles已实现的功能:组变量。
将文件application.yml
和dc1.yml
放在group_vars
目录中。
为application
组设置一个值:
files_to_copy:
- file1
- file2
为dc1
组设置其他值:
files_to_copy:
- file3
- file4
在您的剧本中,您仅在files_to_copy
变量上进行迭代。 Ansible会注意,每台主机都会根据组成员身份获得正确的变量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。