Ansible 检查模式在复制任务时给出错误

Ansible 检查模式在复制任务时给出错误

我正在以检查模式运行剧本,这意味着我使用标志运行剧本--check。我需要将文件从一个节点传输到 ansible 控制节点,然后从控制节点传输到远程节点。我使用模块fetch将文件放到控制节点上,然后下一个任务是将刚刚得到的文件复制到远程节点。剧本的语法很简单

- name : COpy files
  become: yes
  copy:
       src: /etc/file/path
       dest: /etc/file/path

在此游戏中我收到错误

无法在 Ansible Controller 上找到或访问 /etc/filepath。如果您正在使用模块并希望文件存在于远程,请参阅 remote_src 选项

由于前一个提取命令中的文件实际上并未复制到控制节点,因此此播放是否可能在检查模式下失败?我以为任务会被跳过,但我不确定。

答案1

由于前一个获取命令中的文件实际上并未复制到控制节点,因此该播放是否可能在检查模式下失败?

您是否研究过此选项?提示:答案肯定是肯定的。

您有两种选择来解决这个问题。

  1. 您确定即使在检查模式下,从远程获取文件到本地主机也不是问题,并且不会改变整体系统状态。在这种情况下,剧本中的上一个任务应如下所示:

    - name: Get files from remote
      fetch:
        src: /my/file/path
        dest: /etc/file/path
      check_mode: false
      changed_when: false
      delegate_to: some_other_host
    

    在这种情况下,文件仍将被获取并存在以检查下一个任务。

  2. 您根本不想在检查模式下获取文件。在这种情况下,您要确保复制文件的任务不会停止您的剧本。您有两种可能的选择:

    • (我更喜欢)在检查模式下运行时完全跳过任务
      - name : Copy files
        become: yes
        copy:
          src: /etc/file/path
          dest: /etc/file/path
        when: not ansible_check_mode
      
    • 让任务运行但在检查模式下运行时忽略错误:
      - name : Copy files
        become: yes
        copy:
          src: /etc/file/path
          dest: /etc/file/path
        ignore_errors: "{{ ansible_check_mode }}"
      

相关内容