Ansible copy file module to Windows host fails

761 views
Skip to first unread message

Jeffrey Liu

unread,
Dec 16, 2014, 9:42:23 AM12/16/14
to ansible...@googlegroups.com
Hi All, 

I'm running Ansible 1.8.2 on a CentOS 6.6 server.

I'm trying to copy a file to a windows host, but the copy module fails.  The weird thing is that I do see that it does PUT the file over to the remote windows host, but it fails when it tries to execute the powershell to rename the file to the destination directory.
If I abort the command before it removes the temporary files I can confirm the remote "source" file is the actual file.   It looks like the failure is on the remote end to rename the file.   Any ideas if this can be fixed?  It's a rather important feature for me to be able to distribute powershell scripts for remote execution.

Thanks!


[jklee@l99app09 poc]$ cat testcopy.yml
#  ansible-playbook -i hosts testcopy.yml --extra-vars="source='list-installed-programs.ps1' d='C:\Users\jklee\list-installed-programs.ps1'"
---
- hosts: windowsTest
  gather_facts: false
  tasks:
  - name: Test copy
    #copy: src=files/NewRelicServerMonitor_x64_3.3.2.0.msi dest=C:\Users\Administrator\NewRelicServerMonitor_x64_3.3.2.0.msi
    copy: src="{{ source }}" dest="{{ d }}"


[jklee@l99app09 poc]$ ansible-playbook -i hosts testcopy.yml --extra-vars="source='list-installed-programs.ps1' d='C:\Users\jklee\list-installed-programs.ps1'"
 -vvv

PLAY [windowsTest] ************************************************************

TASK: [Test copy] *************************************************************
<w99app01.cloudapp.net> ESTABLISH WINRM CONNECTION FOR USER: jklee on PORT 5986 TO w99app01.cloudapp.net
<w99app02.cloudapp.net> ESTABLISH WINRM CONNECTION FOR USER: jklee on PORT 5986 TO w99app02.cloudapp.net
<w99app02.cloudapp.net> EXEC I f   ( T e s t - P a t h   - P a t h T y p e   L e a f   " C : \ U s e r s \ j k l e e \ l i s t - i n s t a l l e d - p r o g r a
 m s . p s 1 " )   {   $ s p   =   n e w - o b j e c t   - T y p e N a m e   S y s t e m . S e c u r i t y . C r y p t o g r a p h y . S H A 1 C r y p t o S e r
 v i c e P r o v i d e r ;   $ f p   =   [ S y s t e m . I O . F i l e ] : : O p e n ( " C : \ U s e r s \ j k l e e \ l i s t - i n s t a l l e d - p r o g r a
 m s . p s 1 " ,   [ S y s t e m . I O . F i l e m o d e ] : : O p e n ,   [ S y s t e m . I O . F i l e A c c e s s ] : : R e a d ) ;   [ S y s t e m . B i t C
 o n v e r t e r ] : : T o S t r i n g ( $ s p . C o m p u t e H a s h ( $ f p ) ) . R e p l a c e ( " - " ,   " " ) . T o L o w e r ( ) ;   $ f p . D i s p o s
 e ( ) ;   }   E l s e I f   ( T e s t - P a t h   - P a t h T y p e   C o n t a i n e r   " C : \ U s e r s \ j k l e e \ l i s t - i n s t a l l e d - p r o g
 r a m s . p s 1 " )   {   W r i t e - H o s t   " 3 " ;   }   E l s e   {   W r i t e - H o s t   " 1 " ;   }
<w99app02.cloudapp.net> EXEC ( N e w - I t e m   - T y p e   D i r e c t o r y   - P a t h   $ e n v : t e m p   - N a m e   " a n s i b l e - t m p - 1 4 1 8 7
 4 0 6 2 8 . 9 2 - 1 2 6 1 9 3 3 3 7 8 5 5 5 4 3 " ) . F u l l N a m e   |   W r i t e - H o s t   - S e p a r a t o r   ' ' ;
<w99app02.cloudapp.net> PUT /home/jklee/poc/list-installed-programs.ps1 TO C:\Users\jklee\AppData\Local\Temp\ansible-tmp-1418740628.92-126193337855543\source
<w99app01.cloudapp.net> EXEC I f   ( T e s t - P a t h   - P a t h T y p e   L e a f   " C : \ U s e r s \ j k l e e \ l i s t - i n s t a l l e d - p r o g r a
 m s . p s 1 " )   {   $ s p   =   n e w - o b j e c t   - T y p e N a m e   S y s t e m . S e c u r i t y . C r y p t o g r a p h y . S H A 1 C r y p t o S e r
 v i c e P r o v i d e r ;   $ f p   =   [ S y s t e m . I O . F i l e ] : : O p e n ( " C : \ U s e r s \ j k l e e \ l i s t - i n s t a l l e d - p r o g r a
 m s . p s 1 " ,   [ S y s t e m . I O . F i l e m o d e ] : : O p e n ,   [ S y s t e m . I O . F i l e A c c e s s ] : : R e a d ) ;   [ S y s t e m . B i t C
 o n v e r t e r ] : : T o S t r i n g ( $ s p . C o m p u t e H a s h ( $ f p ) ) . R e p l a c e ( " - " ,   " " ) . T o L o w e r ( ) ;   $ f p . D i s p o s
 e ( ) ;   }   E l s e I f   ( T e s t - P a t h   - P a t h T y p e   C o n t a i n e r   " C : \ U s e r s \ j k l e e \ l i s t - i n s t a l l e d - p r o g
 r a m s . p s 1 " )   {   W r i t e - H o s t   " 3 " ;   }   E l s e   {   W r i t e - H o s t   " 1 " ;   }
fatal: [w99app02.cloudapp.net] => module copy not found in configured module paths.  Additionally, core modules are missing. If this is a checkout, run 'git sub
module update --init --recursive' to correct this problem.
<w99app01.cloudapp.net> EXEC ( N e w - I t e m   - T y p e   D i r e c t o r y   - P a t h   $ e n v : t e m p   - N a m e   " a n s i b l e - t m p - 1 4 1 8 7
 4 0 6 3 3 . 7 8 - 5 4 5 3 2 0 4 6 4 0 1 3 1 7 " ) . F u l l N a m e   |   W r i t e - H o s t   - S e p a r a t o r   ' ' ;
<w99app01.cloudapp.net> PUT /home/jklee/poc/list-installed-programs.ps1 TO C:\Users\Jklee\AppData\Local\Temp\ansible-tmp-1418740633.78-54532046401317\source
fatal: [w99app01.cloudapp.net] => module copy not found in configured module paths.  Additionally, core modules are missing. If this is a checkout, run 'git sub
module update --init --recursive' to correct this problem.

FATAL: all hosts have already failed -- aborting

PLAY RECAP ********************************************************************
           to retry, use: --limit @/home/jklee/testcopy.retry

w99app01.cloudapp.net      : ok=0    changed=0    unreachable=1    failed=0
w99app02.cloudapp.net      : ok=0    changed=0    unreachable=1    failed=0

Matt Martz

unread,
Dec 17, 2014, 8:28:25 AM12/17/14
to ansible...@googlegroups.com
Ansible 1.8.x does not support the copy module for windows hosts.  A win_copy module was just merged into devel (which will become 1.9):

--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/d625277b-618b-455f-a747-0bf678877173%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


--
Matt Martz
@sivel
sivel.net

Jeffrey Liu

unread,
Dec 20, 2014, 12:03:54 PM12/20/14
to ansible...@googlegroups.com
Thanks.  I found out that win_copy has a pull request about to be merged into 1.9

I also found a resource for copy.ps1 which works -- I don't need all the bells and whistles and a rudimentary copy function is all that's needed for now.
Although, for the purposes of just running a powershell script, the script module works well too.

Thanks again!

To unsubscribe from this group and stop receiving emails from it, send an email to ansible-project+unsubscribe@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.

Jaime Banda

unread,
Jan 27, 2015, 1:24:06 PM1/27/15
to ansible...@googlegroups.com
Can you share your code that works an how did you did it?

Jeffrey Liu

unread,
Jan 27, 2015, 2:45:41 PM1/27/15
to ansible...@googlegroups.com
References:



Place this copy.ps1 to  /usr/lib/python2.6/site-packages/ansible/modules/core/windows/copy.ps1


Tho it's probably not needed if you can use the win_url module or if you just want to run a powershell script, the script module works too.




--
You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/sOv6_oJ0_rs/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/ef33e650-8c49-4c69-a76b-6f3a88800c47%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages