diff options
Diffstat (limited to 'lib/ansible/module_utils/powershell.ps1')
-rw-r--r-- | lib/ansible/module_utils/powershell.ps1 | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/lib/ansible/module_utils/powershell.ps1 b/lib/ansible/module_utils/powershell.ps1 new file mode 100644 index 0000000000..5cae79df6b --- /dev/null +++ b/lib/ansible/module_utils/powershell.ps1 @@ -0,0 +1,138 @@ + +# This particular file snippet, and this file snippet only, is BSD licensed. +# Modules you write using this snippet, which is embedded dynamically by Ansible +# still belong to the author of the module, and may assign their own license +# to the complete work. +# +# Copyright (c), Michael DeHaan <michael.dehaan@gmail.com>, 2014, and others +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +# Helper function to parse Ansible JSON arguments from a file passed as +# the single argument to the module +# Example: $params = Parse-Args $args +Function Parse-Args($arguments) +{ + $parameters = New-Object psobject; + If ($arguments.Length -gt 0) + { + $parameters = Get-Content $arguments[0] | ConvertFrom-Json; + } + $parameters; +} + +# Helper function to set an "attribute" on a psobject instance in powershell. +# This is a convenience to make adding Members to the object easier and +# slightly more pythonic +# Example: Set-Attr $result "changed" $true +Function Set-Attr($obj, $name, $value) +{ + # If the provided $obj is undefined, define one to be nice + If (-not $obj.GetType) + { + $obj = New-Object psobject + } + + $obj | Add-Member -Force -MemberType NoteProperty -Name $name -Value $value +} + +# Helper function to get an "attribute" from a psobject instance in powershell. +# This is a convenience to make getting Members from an object easier and +# slightly more pythonic +# Example: $attr = Get-Attr $response "code" -default "1" +Function Get-Attr($obj, $name, $default = $null) +{ + # Check if the provided Member $name exists in $obj and return it or the + # default + If ($obj.$name.GetType) + { + $obj.$name + } + Else + { + $default + } + return +} + +# Helper function to convert a powershell object to JSON to echo it, exiting +# the script +# Example: Exit-Json $result +Function Exit-Json($obj) +{ + # If the provided $obj is undefined, define one to be nice + If (-not $obj.GetType) + { + $obj = New-Object psobject + } + + echo $obj | ConvertTo-Json + Exit +} + +# Helper function to add the "msg" property and "failed" property, convert the +# powershell object to JSON and echo it, exiting the script +# Example: Fail-Json $result "This is the failure message" +Function Fail-Json($obj, $message = $null) +{ + # If we weren't given 2 args, and the only arg was a string, create a new + # psobject and use the arg as the failure message + If ($message -eq $null -and $obj.GetType().Name -eq "String") + { + $message = $obj + $obj = New-Object psobject + } + # If the first args is undefined or not an object, make it an object + ElseIf (-not $obj.GetType -or $obj.GetType().Name -ne "PSCustomObject") + { + $obj = New-Object psobject + } + + Set-Attr $obj "msg" $message + Set-Attr $obj "failed" $true + echo $obj | ConvertTo-Json + Exit 1 +} + +# Helper filter/pipeline function to convert a value to boolean following current +# Ansible practices +# Example: $is_true = "true" | ConvertTo-Bool +Function ConvertTo-Bool +{ + param( + [parameter(valuefrompipeline=$true)] + $obj + ) + + $boolean_strings = "yes", "on", "1", "true", 1 + $obj_string = [string]$obj + + if (($obj.GetType().Name -eq "Boolean" -and $obj) -or $boolean_strings -contains $obj_string.ToLower()) + { + $true + } + Else + { + $false + } + return +} |