我对ansible有疑问。我需要使用ansible任务将网络中的一台计算机上的某些内容复制到主机(Windows)上。
我测试了许多不同的方法,包括将powerscript文件作为可完成的任务,并使用win_shell
直接包含powershell CMD-let。
在每种情况下,当我在Powershell窗口中直接在主机上调用Copy-Item时,一切正常。但是在Ansible打电话之后,我得到了
Copy-Item : Cannot find path '//[ip]/[path]/[file]' because it does not exist.
即时通讯记录到主机时,我在ansible和远程桌面连接中都使用同一用户。
有人知道会发生什么吗?
可行任务:
- name: Install 7Zip
win_shell: |
$path = '//[ip]/[path]/[file]'
Copy-Item $path -Destination "C:/[Location]"
tags:
- 7zip
[ip]
,[path]
,[file]
和[location]
只是我为了避免使用波兰文的文件夹名称和我的Intranet IP困扰所有人而设置的模拟。
在powershell命令中与在ansible中完全相同:
PS C:\Users\ansibler> $path = '//[ip]/[path]/[file]'
PS C:\Users\ansibler> Copy-Item $path -Destination "[location]"
答案 0 :(得分:3)
好,我解决了。
双跳是一个问题。解决方案是使用“ ansible_become”并在主机中重新认证用户:
vars:
ansible_become: yes
ansible_become_method: runas
ansible_become_flags: logon_type=new_credentials logon_flags=netcredentials_only
ansible_become_user: [login]
ansible_become_pass: [password]
答案 1 :(得分:0)
您正在尝试使用UNC路径,UNC路径使用反斜杠。
- name: Install 7Zip win_shell: | $path = '\\[ip]\[path]\[file]' Copy-Item $path -Destination "C:/[Location]" tags: - 7zip
复制文件的最佳方法是使用win_copy
模块。
- name: Install 7Zip win_copy: src: '\\[ip]\[path]\[file]' dest: "C:\[Location]" remote_src: True
更新:
您收到的错误是由于此处存在双跳。我可以通过在尝试复制之前映射驱动器来向您展示一种解决方法,该解决方法可以解决双跳问题。
- name: Install 7Zip win_shell: | net use \\[ip]\[path] password /user:username 2>&1 $path = '\\[ip]\[path]\[file]' Copy-Item $path -Destination "C:/[Location]" tags: - 7zip
答案 2 :(得分:0)
对我来说,它是这样工作的:
- name: Run Shell Copy Cmd
win_shell: Copy-Item '\\remote\public\foo\*' C:\Windows\Temp\bar
become: yes
become_method: runas
become_user: vagrant
vars:
ansible_become_password: "pass"
我在win_copy
模块上尝试过相同的方法,但是永远无法使其工作