我正在尝试使用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
答案 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。