我想将 Ansible 控制器中存储的文件复制到大约 50 个节点,每个节点包含 3 - 5 个不同的 Web 应用程序,每个应用程序都有不同的文件路径。
Ex: source file /home/user/file
destination: /home/user/webapps/webapp_name/file
/home/user/webapps/webapp_name2/file
/home/user/webapps/webapp_name3/file
文件已隐藏
路径中唯一的区别是 Web 应用程序名称。
我该怎么做?
我尝试过通过此播放存储文件路径:
- name: Replace file
hosts: webservers
tasks:
- name: Find File Path
ansible.builtin.find:
paths: /home/user/webapps/*
patterns: '*.file'
recurse: yes
file_type: file
hidden: true
register: file_paths
- name: Create Path Dictionary
set_fact:
path: "{{ dict(path|zip(paths)) }}"
vars:
paths: "{{ file_paths.results| map(attribute='files')|list }}"
然后使用复制模块,但我无法存储任何路径以用作变量
您想要做的事情的描述与您在剧本中显然试图做的事情有点不同。忽略剧本并专注于描述,这样的事情可能会达到您想要的效果:
- name: Distribute file
hosts: all
gather_facts: false
tasks:
- name: Find webapp directories
ansible.builtin.find:
paths: /home/user/webapps/
file_type: directory
depth: 1
register: file_paths
- name: Copy file into webapps
copy:
src: myfile
dest: "{{ item.path }}/myfile"
loop: "{{ file_paths.files }}"
这会在
/home/user/webapp
目录中构建目录列表,然后将本地文件 myfile
复制到每个 webapp 目录中。