如果文件不存在,则Ansible传输文件会自动创建文件夹

时间:2020-07-11 16:59:35

标签: ansible

如果不存在,有没有办法复制文件同时创建文件夹?

下面是我要复制的代码,但是,由于它将source_code_management创建为文件而不是目录,因此无法正常工作。

- name: Transfer file
  copy:
    src: "{{ playbook_dir }}/roles/source_code_management/logger.xml"
    dest: "{{ configuration_path }}"

我希望同时创建和复制的原因是,詹金斯将通过 path / file_name

2 个答案:

答案 0 :(得分:0)

您需要在此之前添加任务以确保目录存在:

- name: Directory source code exists
  file:
    src: "{{ playbook_dir }}/roles/source_code_management"
    state: directory

这是直到现在(2.9和之前的版本)的工作方式

答案 1 :(得分:0)

遗憾的是,您无法通过Ansible一步完成此操作。

这就是说,如果您将/path/to/file存储在变量中,那么仍然有一个额外的Jinja过滤器适合该工作:过滤器dirname从类似 / path / to / file 。

如果可以的话,请首先创建目录,然后复制文件:

- name: First, create the directory
  file:
    path: "{{ configuration_path | dirname }}"
    state: directory
    recurse: yes
- name: Then, transfer the file
  copy:
    src: "{{ playbook_dir }}/roles/source_code_management/logger.xml"
    dest: "{{ configuration_path }}"