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].
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/ac34b114-d5fe-4c0f-b9c7-60f8cfe211b4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.