Even with that I got Module failure. It has to do with the ansible parsing
different over WinRM and ssh as Matt Davis suggested below.
"module_stdout": "\u001b[?1h\u001b={\"msg\":\"test\"}\r\n",
"msg": "MODULE FAILURE",
Thanks for looking into this though.
On Friday, October 21, 2016 at 12:18:55 PM UTC-5, Matt Martz wrote:
>
> The first thing I notice is that ansible requires that modules return
> JSON, and in your case, you are just returning "test".
>
> So maybe what you want to try is something like:
>
> #!/usr/bin/powershell
> # WANT_JSON
> # POWERSHELL_COMMON
> $result = New-Object psobject
> Set-Attr $result "msg" "test"
> Exit-Json $result
>
>
> On Fri, Oct 21, 2016 at 9:50 AM, Rajendra Adhikari <[email protected]
> <javascript:>> wrote:
>
>> Has anybody successfully run powershell on Linux as an ansible module?
>> Well, I have an ansible on one machine ServerAnsible. And, I have a
>> powershell and powercli core installed on my linux machine ServerPS. I
>> would like to execute ansible module written in powershell from ansible
>> machine to the powershell machine. I followed the ansible doc here,
>> http://docs.ansible.com/ansible/intro_windows.html#developers-supported-modules-and-how-it-works
>>
>> But it looks like it is specific to Windows or works only when Powershell
>> is on Windows machine.
>> My end goal is to develop a vmware powercli modules that are delegated
>> through a linux box running powershell and powercli instead of Windows
>> machine.
>> Here are what I did:
>> Powershell machine: ServerPS
>> Ansible machine: ServerAnsible
>>
>> File mymodule.ps1 at module directory:
>> *#!/usr/bin/powershell*
>> *# POWERSHELL_COMMON*
>> *# WANT_JSON*
>>
>> *$resullt = Get-Date*
>>
>> *Exit-Json $result*
>>
>> ServerAnsible$ansible ServerPS -m mymodule.ps1
>> ServerPS | FAILED! => {
>> "changed": false,
>> "failed": true,
>> "module_stderr": "",
>> "module_stdout":
>> "\u001b[?1h\u001b=\u001b[39;49m\u001b[31m\u001b[39;49m\u001b[31mThe
>> variable '$result' cannot be retrieved because it has not been
>> set.\u001b[39;49m\u001b[39;49m\r\n\u001b[39;49m\u001b[31m\u001b[39;49m\u001b[31mAt
>>
>> /home/******/.ansible/tmp/ansible-tmp-1477059401.24-235352349739057/mymod\u001b[39;49m\u001b[39;49m\r\n\u001b[39;49m\u001b[31m\u001b[39;49m\u001b[31mules.ps1:233
>>
>> char:11\u001b[39;49m\u001b[39;49m\r\n\u001b[39;49m\u001b[31m\u001b[39;49m\u001b[31m+
>>
>> Exit-Json
>> $result\u001b[39;49m\u001b[39;49m\r\n\u001b[39;49m\u001b[31m\u001b[39;49m\u001b[31m+
>>
>>
>> ~~~~~~~\u001b[39;49m\u001b[39;49m\r\n\u001b[39;49m\u001b[31m\u001b[39;49m\u001b[31m
>>
>> + CategoryInfo : InvalidOperation: (result:String) [],
>> RuntimeExc
>> \u001b[39;49m\u001b[39;49m\r\n\u001b[39;49m\u001b[31m\u001b[39;49m\u001b[31m
>>
>> eption\u001b[39;49m\u001b[39;49m\r\n\u001b[39;49m\u001b[31m\u001b[39;49m\u001b[31m
>>
>> + FullyQualifiedErrorId :
>> VariableIsUndefined\u001b[39;49m\u001b[39;49m\r\n\u001b[39;49m\u001b[31m\u001b[39;49m\u001b[31m
>>
>> \u001b[39;49m\u001b[39;49m\r\n",
>> "msg": "MODULE FAILURE",
>> "parsed": false
>> }
>>
>> or, if I set the variable as:
>> #!/usr/bin/powershell
>> # POWERSHELL_COMMON
>> # WANT_JSON
>>
>>
>> $result="test"
>> $resullt = Get-Date
>>
>> Exit-Json $result
>>
>> I am getting something like:
>> ServerPS | FAILED! => {
>> "changed": false,
>> "failed": true,
>> "module_stderr": "",
>> "module_stdout": "\u001b[?1h\u001b=\"test\"\r\n",
>> "msg": "MODULE FAILURE",
>> "parsed": false
>> }
>>
>> With verbose mode, looks like ansible is pushing the file to the remote
>> server at least and trying to execute the powershell module.
>> <ServerPS> ESTABLISH SSH CONNECTION FOR USER: *******
>> <ServerPS> SSH: EXEC ssh -C -q -o ControlMaster=auto -o
>> ControlPersist=60s -o StrictHostKeyChecking=no -o
>> KbdInteractiveAuthentication=no -o
>> PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey
>> -o PasswordAuthentication=no -o User=******* -o ConnectTimeout=10 -o
>> ControlPath=/home/*******/.ansible/cp/ansible-ssh-%h-%p-%r ServerPS
>> '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo
>> $HOME/.ansible/tmp/ansible-tmp-1477059699.61-150822866162574 `" && echo
>> ansible-tmp-1477059699.61-150822866162574="` echo
>> $HOME/.ansible/tmp/ansible-tmp-1477059699.61-150822866162574 `" ) && sleep
>> 0'"'"''
>> <ServerPS> PUT /tmp/tmpGt6Vr_ TO
>> /home/*******/.ansible/tmp/ansible-tmp-1477059699.61-150822866162574/mymodules.ps1
>> <ServerPS> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o
>> ControlPersist=60s -o StrictHostKeyChecking=no -o
>> KbdInteractiveAuthentication=no -o
>> PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey
>> -o PasswordAuthentication=no -o User=******* -o ConnectTimeout=10 -o
>> ControlPath=/home/*******/.ansible/cp/ansible-ssh-%h-%p-%r '[ServerPS]'
>> <ServerPS> ESTABLISH SSH CONNECTION FOR USER: *******
>> <ServerPS> SSH: EXEC ssh -C -q -o ControlMaster=auto -o
>> ControlPersist=60s -o StrictHostKeyChecking=no -o
>> KbdInteractiveAuthentication=no -o
>> PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey
>> -o PasswordAuthentication=no -o User=******* -o ConnectTimeout=10 -o
>> ControlPath=/home/*******/.ansible/cp/ansible-ssh-%h-%p-%r -tt ServerPS
>> '/bin/sh -c '"'"'LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
>> LC_MESSAGES=en_US.UTF-8 /usr/bin/powershell
>> /home/*******/.ansible/tmp/ansible-tmp-1477059699.61-150822866162574/mymodules.ps1;
>>
>> rm -rf
>> "/home/*******/.ansible/tmp/ansible-tmp-1477059699.61-150822866162574/" >
>> /dev/null 2>&1 && sleep 0'"'"''
>>
>> Here is the powershell machine where I have a working powershell:
>> [*******@ServerPS unixVMtool]$ powershell
>> PowerShell
>> Copyright (C) 2016 Microsoft Corporation. All rights reserved.
>>
>> PS /home/*******/unixVMtool> $PSVersionTable.PSVersion
>> Major Minor Patch Label
>> ----- ----- ----- -----
>> 6 0 0 alpha
>> PS /home/*******/unixVMtool> Get-Date | ConvertTo-Json
>> {
>> "value": "2016-10-21T07:32:26.261558-07:00",
>> "DisplayHint": 2,
>> "DateTime": "Friday, October 21, 2016 7:32:26 AM"
>> }
>> PS /home/*******/unixVMtool>
>>
>>
>> Wondering if powershell ansible module can even be run on powershell on
>> Linux ?
>>
>> Any help on this is appreciated.
>>
>> Thanks.
>>
>> --
>> 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 [email protected] <javascript:>.
>> To post to this group, send email to [email protected]
>> <javascript:>.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/ansible-project/ac34b114-d5fe-4c0f-b9c7-60f8cfe211b4%40googlegroups.com
>>
>> <https://groups.google.com/d/msgid/ansible-project/ac34b114-d5fe-4c0f-b9c7-60f8cfe211b4%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> --
> Matt Martz
> @sivel
> sivel.net
>
--
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/f9f86930-431c-491e-a647-e40bd2f8b730%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.