我正在以检查模式运行剧本,这意味着我使用标志运行剧本--check
。我需要将文件从一个节点传输到 ansible 控制节点,然后从控制节点传输到远程节点。我使用模块fetch
将文件放到控制节点上,然后下一个任务是将刚刚得到的文件复制到远程节点。剧本的语法很简单
- name : COpy files
become: yes
copy:
src: /etc/file/path
dest: /etc/file/path
在此游戏中我收到错误
无法在 Ansible Controller 上找到或访问 /etc/filepath。如果您正在使用模块并希望文件存在于远程,请参阅 remote_src 选项
由于前一个提取命令中的文件实际上并未复制到控制节点,因此此播放是否可能在检查模式下失败?我以为任务会被跳过,但我不确定。
答案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
在这种情况下,文件仍将被获取并存在以检查下一个任务。
您根本不想在检查模式下获取文件。在这种情况下,您要确保复制文件的任务不会停止您的剧本。您有两种可能的选择:
- (我更喜欢)在检查模式下运行时完全跳过任务
- 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 }}"
- (我更喜欢)在检查模式下运行时完全跳过任务