解决 Ansible win_copy 无法复制源文件因不存在而失败的问题

121次阅读
没有评论

问题描述

在运行 Ansible 的 molecule 测试时,你尝试从网络 UNC 路径复制二进制文件到虚拟机(VM)中,但是遇到了以下错误:

Cannot copy src file: '\\\\someshare.example.com\\somefolder\\mysql_hg.exe' as it does not exist

这是任务的代码示例:

- name: Copy mysql_hg binary from network share
  ansible.windows.win_copy:
    src: "\\\\someshare.example.com\\somefolder\\mysql_hg.exe"
    dest: "C:\\Windows\\Temp\\mysql_hg.exe"
    remote_src: True
  vars:
    ansible_become: True
    ansible_become_method: runas
    ansible_become_flags: logon_type=new_credentials logon_flags=netcredentials_only
    ansible_become_user: "someaduser@example.com"
    ansible_become_password: "adpass of someaduser"

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1:确认源文件存在

首先,你需要确保源文件的路径是正确的,文件也确实存在于该路径中。在你的代码示例中,源文件路径为 \\someshare.example.com\somefolder\mysql_hg.exe。请确保以下几点:
1. 确认文件路径:检查文件路径是否正确,网络共享是否可访问。
2. 文件存在性:确保文件 mysql_hg.exe 存在于路径 \\someshare.example.com\somefolder\ 中。

方案2:验证权限和凭证

如果源文件存在并且路径正确,接下来你需要确保 Ansible 具有足够的权限来访问源文件。同时,验证一下你提供的凭证是否正确。

方案3:确认远程主机连接

在你的 Ansible 任务中,你使用了 remote_src: True,这意味着 Ansible 将在远程主机上查找源文件。确保目标 VM 可以访问网络共享,并且具有足够的权限来复制文件。

方案4:检查 WinRM 连接

确保 Ansible 可以通过 WinRM 与目标 VM 建立连接。你可以尝试手动使用 WinRM 连接来验证。

方案5:使用 smb 模块

尝试使用 Ansible 的 smb 模块来进行文件复制,它适用于从共享路径复制文件。

以下是一个可能的示例代码片段:

- name: Copy mysql_hg binary using smb
  ansible.builtin.smb:
    src: "\\someshare.example.com\somefolder\mysql_hg.exe"
    dest: "C:\\Windows\\Temp\\mysql_hg.exe"
    user: "someaduser@example.com"
    password: "adpass of someaduser"

方案6:检查错误信息

根据错误信息,系统报告无法复制源文件因其不存在。确保你在路径中指定的源文件名称与实际文件名称匹配,并且路径没有拼写错误。

方案7:使用网络驱动器映射

如果复制网络共享中的文件仍然遇到问题,你可以尝试使用网络驱动器映射的方法。首先,将网络路径映射为一个本地驱动器,然后使用映射后的本地路径进行复制操作。

总结

通过确认源文件的存在、验证权限和凭证、检查远程连接以及使用适当的模块,你应该能够解决 Ansible win_copy 复制源文件不存在的问题。如果问题仍然存在,请仔细检查每个步骤,并确保配置正确。

正文完