可以使用UNC路径在Windows框之间复制文件

时间:2017-08-14 20:42:38

标签: python-2.7 ansible

我正在尝试使用ansible来安装ODBC驱动程序,该驱动程序存储在共享文件夹中。但是,似乎领先的斜杠“\\”会导致一些解析问题,而Ansible无法找到该文件。我想知道是否有任何工作来执行这样的任务。我没有问题在目标Windows框上执行复制命令,不应该有任何权限问题。

剧本:

---
# This play-book is part of VM Checkout
# This job will install SQL ODBC Driver
# This job depends on access to \\company\software\Utilities
- name: Install SQL ODBC Driver From Microsoft
  hosts: '{{ remote_host }}'
  tasks:
  - name: Fetch ODBC Driver From Share
    win_shell: Copy-Item "\\Company\\us410_software\\Utilities\\msodbcsql_x64.msi" D:\Software

  - name: Install ODBC Driver
    win_msi:
      path: D:\Software\msodbcsql_x64.msi
      wait: yes

我得到的错误:

"changed": true,
    "cmd": "Copy-Item \"\\\\Company\\\\us410_software\\\\Utilities\\\\msodbcsql_x64.msi\" D:\\Software",
    "delta": "0:00:01.368157",
    "end": "2017-08-14 08:25:41.869527",
    "failed": true,
    "rc": 1,
    "start": "2017-08-14 08:25:40.501370",
    "stderr": "Copy-Item : Access is denied\r\nAt line:1 char:65\r\n+ [Console]::InputEncoding = New-Object Text.UTF8Encoding $false; Copy-Item \r\n\"\\\\820 ...\r\n+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n~~~\r\n    + CategoryInfo          : PermissionDenied: (\\\\Company\\...odbcsql_x005F_x64 \r\n   .msi:String) [Copy-Item], UnauthorizedAccessException\r\n    + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.Powe \r\n   rShell.Commands.CopyItemCommand\r\n \r\nCopy-Item : Cannot find path \r\n'\\\\Company\\\\us410_software\\\\Utilities\\\\msodbcsql_x005F_x64.msi' because it does \r\nnot exist.\r\nAt line:1 char:65\r\n+ [Console]::InputEncoding = New-Object Text.UTF8Encoding $false; Copy-Item 

3 个答案:

答案 0 :(得分:0)

我认为您可能只需要更正输入

win_shell: Copy-Item 
"\\\\\\\\Company\\\\us410_software\\\\Utilities\\\\msodbcsql_x64.msi" 
D:\Software

斜杠是yaml中引号内的特殊字符,双斜线转换为单斜杠,因此您需要其中4个来表示yaml中典型UNC路径的开始。

如果这不能解决问题,那么我怀疑您正在使用Kerberos身份验证从Ansible访问您的Windows计算机并遇到双跃点问题。在我发现这个http://www.absolutejam.co.uk/blog/ansible-windows-credssp/并切换到CredSSP之前,我自己一直在努力解决同样的问题。这解决了我的问题,所有内置的Ansible模块都运行良好。在win_copy和win_file等模块中使用UNC路径没有问题。

按照上述链接中的说明为CredSSP的Windows计算机做好准备,然后使用Ansible文档http://docs.ansible.com/ansible/latest/intro_windows.html#credssp在服务器上启用它。

答案 1 :(得分:0)

尝试使用成为参数,它对我有用。

- name: Fetch ODBC Driver From Share
    win_shell: Copy-Item "\\Company\\us410_software\\Utilities\\msodbcsql_x64.msi" D:\Software
    become: yes
    become_method: runas
    become_user: domain\user_id
    vars:
      ansible_become_password: "ChangePassword"

答案 2 :(得分:0)

您可能正在进入第二跳身份验证方案。有多种解决方法(通过使用域用户或credssp)。

如果您已经以域用户身份进行连接,请确保您使用的是pywinrm==0.2.0或更高版本,并将ansible_winrm_kerberos_delegation=true添加到有问题的Windows主机的清单变量中。

如果您可以选择使用CredSSP,请按照此处的说明进行操作:https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html#credssp