2017-08-14 55 views
0

我試圖使用安全的ODBC驅動程序,它存儲在共享文件夾中。但是,它似乎是主要的斜槓「\\」導致一些解析問題,Ansible找不到該文件。我想知道是否有任何解決方法來執行此類任務。我沒有問題在目標窗口框上執行復制命令,並且不應該有任何權限問題。Ansible使用UNC路徑在窗口間複製文件

劇本:

--- 
# 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

我想你威力只需要你輸入校正到

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模塊都很好用。模塊中不再使用UNC路徑,例如win_copy和win_file。

按照上述鏈接中的說明準備CredSSP的Windows機器,然後使用Ansible文檔http://docs.ansible.com/ansible/latest/intro_windows.html#credssp在服務器上啓用它。

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"