如何在Ansible中覆盖文件

时间:2018-09-21 07:07:20

标签: ansible

我想使用Ansible在远程位置上ovrwrite文件。不论zip文件中的内容是否更改,每次我运行的playbook文件都需要在目标服务器上覆盖。

下面是我的剧本

- hosts: localhost
  tasks:
  - name: Checking if File is exsists to copy to update servers.
    stat:
      path: "/var/lib/abc.zip"
      get_checksum: False
      get_md5: False
    register: win_stat_result

  - debug:
      var: win_stat_result.stat.exists


- hosts: uploads
  tasks:
    - name: Getting VARs
      debug:
        var: hostvars['localhost']['win_stat_result']['stat']  ['exists']

    - name: copy Files to Destination Servers
      win_copy:
        src: "/var/lib/abc.zip"
        dest: E:\xyz\data\charts.zip
        force: yes
      when: hostvars['localhost']['win_stat_result']['stat']['exists']

当我运行此剧本时,它没有覆盖目标位置的文件,因为文件已经存在。我使用了force=yes,但是没有用。

3 个答案:

答案 0 :(得分:0)

也许只是在复制任务之前添加删除任务?

答案 1 :(得分:0)

尝试Ansible copy module

复制模块默认覆盖设置为dest参数的现有文件(即,强制默认为yes)。源文件可以来自您所连接的远程服务器,也可以来自您的剧本运行的本地计算机。这是一个代码段:

- name: Overwrite file if it exists, the remote server has the source file bc remote_src is set below
  copy:
    src: "/var/lib/abc.zip"
    dest: E:\xyz\data\charts.zip
    remote_src: yes

答案 2 :(得分:0)

您可以在复制新文件之前删除文件:

- name: Delete file before copy
  win_file:
    path: E:\xyz\data\charts.zip
    state: absent