我正在尝试在每个目录中创建多个目录(具有不同的名称)和文件。
我有一个名为目录的变量,其中包含目录和文件名,如下所示:
directories:
- directory: dir1
static_files:
files:
- file1
- file2
- directory: dir2
static_files:
files:
- file1
- file2
Run Code Online (Sandbox Code Playgroud)
这是我能够使用 with_subelments 提出的解决方法,但有两个任务似乎有效。然而,我相信必须有一个只有一项任务的解决方案来实现这一目标。
- name: Creates directories
file:
path: "/tmp/{{ item[0].directory }}"
state: directory
recurse: yes
mode: 0755
owner: user
group: group
become: true
with_subelements:
- "{{ directories }}"
- static_files.files
- name: Creates files
file:
path: "/tmp/{{ item[0].directory }}/{{ item[1] }}"
state: touch
mode: 0644
owner: user
group: group
become: true
with_subelements:
- "{{ directories }}"
- static_files.files
Run Code Online (Sandbox Code Playgroud)
我可能缺少一个可以完成这项工作的模块。我也尝试利用这个解决方案,但没有任何运气如何使用单个任务在ansible中的同一目录中创建目录和文件
我的问题是,如果可能的话,如何通过单个任务来实现这一目标?任何其他解决方案和方法也都很棒。
预期结果:
/tmp/dir1/file1
/tmp/dir1/file2
/tmp/dir2/file1
/tmp/dir2/file2
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏。
创建结构
\n my_files: |\n {% filter from_yaml %}\n {% for dir in directories %}\n - [{{ dir.directory}}, directory]\n {% for file in dir.static_files.files %}\n - [{{ dir.directory }}/{{ file }}, touch]\n {% endfor %}\n {% endfor %}\n {% endfilter %}\nRun Code Online (Sandbox Code Playgroud)\n给出
\n my_files:\n - [dir1, directory]\n - [dir1/file1, touch]\n - [dir1/file2, touch]\n - [dir2, directory]\n - [dir2/file1, touch]\n - [dir2/file2, touch]\nRun Code Online (Sandbox Code Playgroud)\n列表的迭代
\n - file:\n path: "/tmp/{{ item.0 }}"\n state: "{{ item.1 }}"\n loop: "{{ my_files }}"\nRun Code Online (Sandbox Code Playgroud)\n创建目录和文件
\nTASK [file] ***************************************************************\nchanged: [localhost] => (item=[\'dir1\', \'directory\'])\nchanged: [localhost] => (item=[\'dir1/file1\', \'touch\'])\nchanged: [localhost] => (item=[\'dir1/file2\', \'touch\'])\nchanged: [localhost] => (item=[\'dir2\', \'directory\'])\nchanged: [localhost] => (item=[\'dir2/file1\', \'touch\'])\nchanged: [localhost] => (item=[\'dir2/file2\', \'touch\'])\nRun Code Online (Sandbox Code Playgroud)\nshell> tree /tmp/dir1\n/tmp/dir1\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file1\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file2\n\n0 directories, 2 files\nRun Code Online (Sandbox Code Playgroud)\nshell> tree /tmp/dir2\n/tmp/dir2\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file1\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file2\n\n0 directories, 2 files\nRun Code Online (Sandbox Code Playgroud)\n此任务不是幂等的。当您再次运行它时,文件将被触及,并且访问和修改时间都将被更新。如果您不想更改时间,请将参数access_time和modification_time设置为“保留”
\n my_files: |\n {% filter from_yaml %}\n {% for dir in directories %}\n - [{{ dir.directory}}, directory]\n {% for file in dir.static_files.files %}\n - [{{ dir.directory }}/{{ file }}, touch, preserve, preserve]\n {% endfor %}\n {% endfor %}\n {% endfilter %}\nRun Code Online (Sandbox Code Playgroud)\n给出
\n my_files:\n - [dir1, directory]\n - [dir1/file1, touch, preserve, preserve]\n - [dir1/file2, touch, preserve, preserve]\n - [dir2, directory]\n - [dir2/file1, touch, preserve, preserve]\n - [dir2/file2, touch, preserve, preserve]\nRun Code Online (Sandbox Code Playgroud)\n使参数access_time和modification_time可选
\n - file:\n path: "/tmp/{{ item.0 }}"\n state: "{{ item.1 }}"\n access_time: "{{ item.2|d(omit) }}"\n modification_time: "{{ item.3|d(omit) }}"\n loop: "{{ my_files }}"\nRun Code Online (Sandbox Code Playgroud)\n这使得任务幂等
\nTASK [file] ***************************************************************\nok: [localhost] => (item=[\'dir1\', \'directory\'])\nok: [localhost] => (item=[\'dir1/file1\', \'touch\', \'preserve\', \'preserve\'])\nok: [localhost] => (item=[\'dir1/file2\', \'touch\', \'preserve\', \'preserve\'])\nok: [localhost] => (item=[\'dir2\', \'directory\'])\nok: [localhost] => (item=[\'dir2/file1\', \'touch\', \'preserve\', \'preserve\'])\nok: [localhost] => (item=[\'dir2/file2\', \'touch\', \'preserve\', \'preserve\'])\nRun Code Online (Sandbox Code Playgroud)\n用于测试的完整剧本示例
\n- hosts: localhost\n\n vars:\n\n directories:\n - directory: dir1\n static_files: \n files: \n - file1\n - file2\n - directory: dir2\n static_files: \n files: \n - file1\n - file2\n\n my_files: |\n {% filter from_yaml %}\n {% for dir in directories %}\n - [{{ dir.directory}}, directory]\n {% for file in dir.static_files.files %}\n - [{{ dir.directory }}/{{ file }}, touch, preserve, preserve]\n {% endfor %}\n {% endfor %}\n {% endfilter %}\n\n tasks:\n\n - debug:\n var: my_files\n\n - file:\n path: "/tmp/{{ item.0 }}"\n state: "{{ item.1 }}"\n access_time: "{{ item.2|d(omit) }}"\n modification_time: "{{ item.3|d(omit) }}"\n loop: "{{ my_files }}"\nRun Code Online (Sandbox Code Playgroud)\n \n
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |