2018-04-06 10:48:45 +00:00
#!powershell
2018-07-17 21:29:05 +00:00
# Copyright: (c) 2017, Erwan Quelin (@equelin) <erwan.quelin@gmail.com>
2018-04-06 10:48:45 +00:00
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# Requires -Module Ansible.ModuleUtils.Legacy
$ErrorActionPreference = 'Stop'
$params = Parse-Args -arguments $args -supports_check_mode $true
$check_mode = Get-AnsibleParam -obj $params -name " _ansible_check_mode " -type " bool " -default $false
$diff_mode = Get-AnsibleParam -obj $params -name " _ansible_diff " -type " bool " -default $false
# Modules parameters
2018-07-17 21:29:05 +00:00
$path = Get-AnsibleParam -obj $params -name " path " -type " str " -failifempty $true
$minimum_version = Get-AnsibleParam -obj $params -name " minimum_version " -type " str " -failifempty $false
2018-04-06 10:48:45 +00:00
$result = @ {
changed = $false
}
if ( $diff_mode ) {
$result . diff = @ { }
}
# CODE
# Test if parameter $version is valid
Try {
$minimum_version = [ version ] $minimum_version
}
Catch {
Fail-Json -obj $result -message " Value ' $minimum_version ' for parameter 'minimum_version' is not a valid version format "
}
# Import Pester module if available
$Module = 'Pester'
If ( -not ( Get-Module -Name $Module -ErrorAction SilentlyContinue ) ) {
If ( Get-Module -Name $Module -ListAvailable -ErrorAction SilentlyContinue ) {
Import-Module $Module
} else {
Fail-Json -obj $result -message " Cannot find module: $Module . Check if pester is installed, and if it is not, install using win_psmodule or win_chocolatey. "
}
}
# Add actual pester's module version in the ansible's result variable
$Pester_version = ( Get-Module -Name $Module ) . Version . ToString ( )
$result . pester_version = $Pester_version
# Test if the Pester module is available with a version greater or equal than the one specified in the $version parameter
If ( ( -not ( Get-Module -Name $Module -ErrorAction SilentlyContinue | Where-Object { $_ . Version -ge $minimum_version } ) ) -and ( $minimum_version ) ) {
Fail-Json -obj $result -message " $Module version is not greater or equal to $minimum_version "
}
# Testing if test file or directory exist
If ( -not ( Test-Path -LiteralPath $path ) ) {
Fail-Json -obj $result -message " Cannot find file or directory: ' $path ' as it does not exist "
}
#Prepare Invoke-Pester parameters depending of the Pester's version.
#Invoke-Pester output deactivation behave differently depending on the Pester's version
If ( $result . pester_version -ge " 4.0.0 " ) {
$Parameters = @ {
" show " = " none "
" PassThru " = $True
}
} else {
$Parameters = @ {
" quiet " = $True
" PassThru " = $True
}
}
# Run Pester tests
If ( Test-Path -LiteralPath $path -PathType Leaf ) {
if ( $check_mode ) {
$result . output = " Run pester test in the file: $path "
} else {
try {
$result . output = Invoke-Pester $path @Parameters
} catch {
Fail-Json -obj $result -message $_ . Exception
}
}
} else {
# Run Pester tests against all the .ps1 file in the local folder
$files = Get-ChildItem -Path $path | Where-Object { $_ . extension -eq " .ps1 " }
if ( $check_mode ) {
$result . output = " Run pester test(s) who are in the folder: $path "
} else {
try {
$result . output = Invoke-Pester $files . FullName @Parameters
} catch {
Fail-Json -obj $result -message $_ . Exception
}
}
}
$result . changed = $true
2018-07-17 21:29:05 +00:00
Exit-Json -obj $result