diff --git a/lib/ansible/module_utils/powershell.ps1 b/lib/ansible/module_utils/powershell.ps1 index 5756d360f1f..58e121b95a4 100644 --- a/lib/ansible/module_utils/powershell.ps1 +++ b/lib/ansible/module_utils/powershell.ps1 @@ -101,9 +101,11 @@ Function Fail-Json($obj, $message = $null) # 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" +# Example: $attr = Get-AnsibleParam $response "code" -default "1" +#Get-AnsibleParam also supports Parameter validation to save you from coding that manually: +#Example: Get-AnsibleParam -obj $params -name "State" -default "Present" -ValidateSet "Present","Absent" -resultobj $resultobj -failifempty $true #Note that if you use the failifempty option, you do need to specify resultobject as well. -Function Get-Attr($obj, $name, $default = $null, $resultobj, $failifempty=$false, $emptyattributefailmessage) +Function Get-AnsibleParam($obj, $name, $default = $null, $resultobj, $failifempty=$false, $emptyattributefailmessage, $ValidateSet, $ValidateSetErrorMessage) { # Check if the provided Member $name exists in $obj and return it or the default. Try @@ -112,7 +114,28 @@ Function Get-Attr($obj, $name, $default = $null, $resultobj, $failifempty=$false { throw } - $obj.$name + + if ($ValidateSet) + { + if ($ValidateSet -contains ($obj.$name)) + { + $obj.$name + } + Else + { + if ($ValidateSetErrorMessage -eq $null) + { + #Auto-generated error should be sufficient in most use cases + $ValidateSetErrorMessage = "Argument $name needs to be one of $($ValidateSet -join ",") but was $($obj.$name)." + } + Fail-Json -obj $resultobj -message $ValidateSetErrorMessage + } + } + Else + { + $obj.$name + } + } Catch { @@ -131,6 +154,9 @@ Function Get-Attr($obj, $name, $default = $null, $resultobj, $failifempty=$false } } +#Alias Get-attr-->Get-AnsibleParam for backwards compat. +New-Alias -Name Get-attr -Value Get-AnsibleParam + # Helper filter/pipeline function to convert a value to boolean following current # Ansible practices # Example: $is_true = "true" | ConvertTo-Bool