mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-06-22 16:20:22 -07:00
Add PowerShell exception handling and turn on strict mode.
* Add exception handling when running PowerShell modules to provide exception message and stack trace. * Enable strict mode for all PowerShell modules and internal commands. * Update common PowerShell code to fix strict mode errors. * Fix an issue with Set-Attr where it would not replace an existing property if already set. * Add tests for exception handling using modified win_ping modules.
This commit is contained in:
parent
47d9e7ca93
commit
4b2cdadc98
9 changed files with 286 additions and 22 deletions
|
@ -0,0 +1,31 @@
|
|||
#!powershell
|
||||
# This file is part of Ansible
|
||||
#
|
||||
# Ansible is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Ansible is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# POWERSHELL_COMMON
|
||||
|
||||
$params = Parse-Args $args $true;
|
||||
|
||||
$data = Get-Attr $params "data" "pong";
|
||||
|
||||
$result = New-Object psobject @{
|
||||
changed = $false
|
||||
ping = "pong"
|
||||
};
|
||||
|
||||
# Test that Set-Attr will replace an existing attribute.
|
||||
Set-Attr $result "ping" $data
|
||||
|
||||
Exit-Json $result;
|
|
@ -0,0 +1,30 @@
|
|||
#!powershell
|
||||
# This file is part of Ansible
|
||||
#
|
||||
# Ansible is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Ansible is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# POWERSHELL_COMMON
|
||||
|
||||
$params = Parse-Args $args $true;
|
||||
|
||||
$x = $params.thisPropertyDoesNotExist
|
||||
|
||||
$data = Get-Attr $params "data" "pong";
|
||||
|
||||
$result = New-Object psobject @{
|
||||
changed = $false
|
||||
ping = $data
|
||||
};
|
||||
|
||||
Exit-Json $result;
|
|
@ -0,0 +1,30 @@
|
|||
#!powershell
|
||||
# This file is part of Ansible
|
||||
#
|
||||
# Ansible is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Ansible is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# POWERSHELL_COMMON
|
||||
|
||||
$blah = 'I can't quote my strings correctly.'
|
||||
|
||||
$params = Parse-Args $args $true;
|
||||
|
||||
$data = Get-Attr $params "data" "pong";
|
||||
|
||||
$result = New-Object psobject @{
|
||||
changed = $false
|
||||
ping = $data
|
||||
};
|
||||
|
||||
Exit-Json $result;
|
|
@ -0,0 +1,30 @@
|
|||
#!powershell
|
||||
# This file is part of Ansible
|
||||
#
|
||||
# Ansible is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Ansible is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# POWERSHELL_COMMON
|
||||
|
||||
throw
|
||||
|
||||
$params = Parse-Args $args $true;
|
||||
|
||||
$data = Get-Attr $params "data" "pong";
|
||||
|
||||
$result = New-Object psobject @{
|
||||
changed = $false
|
||||
ping = $data
|
||||
};
|
||||
|
||||
Exit-Json $result;
|
|
@ -0,0 +1,30 @@
|
|||
#!powershell
|
||||
# This file is part of Ansible
|
||||
#
|
||||
# Ansible is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Ansible is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# POWERSHELL_COMMON
|
||||
|
||||
throw "no ping for you"
|
||||
|
||||
$params = Parse-Args $args $true;
|
||||
|
||||
$data = Get-Attr $params "data" "pong";
|
||||
|
||||
$result = New-Object psobject @{
|
||||
changed = $false
|
||||
ping = $data
|
||||
};
|
||||
|
||||
Exit-Json $result;
|
|
@ -79,3 +79,68 @@
|
|||
- "not win_ping_extra_args_result|failed"
|
||||
- "not win_ping_extra_args_result|changed"
|
||||
- "win_ping_extra_args_result.ping == 'bloop'"
|
||||
|
||||
- name: test modified win_ping that throws an exception
|
||||
action: win_ping_throw
|
||||
register: win_ping_throw_result
|
||||
ignore_errors: true
|
||||
|
||||
- name: check win_ping_throw result
|
||||
assert:
|
||||
that:
|
||||
- "win_ping_throw_result|failed"
|
||||
- "not win_ping_throw_result|changed"
|
||||
- "win_ping_throw_result.msg == 'ScriptHalted'"
|
||||
- "win_ping_throw_result.exception"
|
||||
- "win_ping_throw_result.error_record"
|
||||
|
||||
- name: test modified win_ping that throws a string exception
|
||||
action: win_ping_throw_string
|
||||
register: win_ping_throw_string_result
|
||||
ignore_errors: true
|
||||
|
||||
- name: check win_ping_throw_string result
|
||||
assert:
|
||||
that:
|
||||
- "win_ping_throw_string_result|failed"
|
||||
- "not win_ping_throw_string_result|changed"
|
||||
- "win_ping_throw_string_result.msg == 'no ping for you'"
|
||||
- "win_ping_throw_string_result.exception"
|
||||
- "win_ping_throw_string_result.error_record"
|
||||
|
||||
- name: test modified win_ping that has a syntax error
|
||||
action: win_ping_syntax_error
|
||||
register: win_ping_syntax_error_result
|
||||
ignore_errors: true
|
||||
|
||||
- name: check win_ping_syntax_error result
|
||||
assert:
|
||||
that:
|
||||
- "win_ping_syntax_error_result|failed"
|
||||
- "not win_ping_syntax_error_result|changed"
|
||||
- "win_ping_syntax_error_result.msg"
|
||||
- "win_ping_syntax_error_result.exception"
|
||||
|
||||
- name: test modified win_ping that has an error that only surfaces when strict mode is on
|
||||
action: win_ping_strict_mode_error
|
||||
register: win_ping_strict_mode_error_result
|
||||
ignore_errors: true
|
||||
|
||||
- name: check win_ping_strict_mode_error result
|
||||
assert:
|
||||
that:
|
||||
- "win_ping_strict_mode_error_result|failed"
|
||||
- "not win_ping_strict_mode_error_result|changed"
|
||||
- "win_ping_strict_mode_error_result.msg"
|
||||
- "win_ping_strict_mode_error_result.exception"
|
||||
|
||||
- name: test modified win_ping to verify a Set-Attr fix
|
||||
action: win_ping_set_attr data="fixed"
|
||||
register: win_ping_set_attr_result
|
||||
|
||||
- name: check win_ping_set_attr_result result
|
||||
assert:
|
||||
that:
|
||||
- "not win_ping_set_attr_result|failed"
|
||||
- "not win_ping_set_attr_result|changed"
|
||||
- "win_ping_set_attr_result.ping == 'fixed'"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue