win_msi: Add check_mode and removes options (#26086)
This PR includes: - Add support for the removes option - Add check_mode support (which does test MSI file, creates, removes) - Simplify codepull/4420/head
parent
bb7ebc6a55
commit
58b348ddf5
|
@ -19,13 +19,13 @@
|
||||||
# WANT_JSON
|
# WANT_JSON
|
||||||
# POWERSHELL_COMMON
|
# POWERSHELL_COMMON
|
||||||
|
|
||||||
# TODO: Add check-mode support
|
$params = Parse-Args $args -supports_check_mode $true
|
||||||
|
$check_mode = Get-AnsibleParam -obj $params -name "_ansible_check_mode" -type "bool" -default $false
|
||||||
$params = Parse-Args $args
|
|
||||||
|
|
||||||
$path = Get-AnsibleParam -obj $params -name "path" -type "path" -failifempty $true
|
$path = Get-AnsibleParam -obj $params -name "path" -type "path" -failifempty $true
|
||||||
$state = Get-AnsibleParam -obj $params -name "state" -type "str" -default "present" -validateset "present","absent"
|
$state = Get-AnsibleParam -obj $params -name "state" -type "str" -default "present" -validateset "absent","present"
|
||||||
$creates = Get-AnsibleParam -obj $params -name "creates" -type "path"
|
$creates = Get-AnsibleParam -obj $params -name "creates" -type "path"
|
||||||
|
$removes = Get-AnsibleParam -obj $params -name "removes" -type "path"
|
||||||
$extra_args = Get-AnsibleParam -obj $params -name "extra_args" -type "str" -default ""
|
$extra_args = Get-AnsibleParam -obj $params -name "extra_args" -type "str" -default ""
|
||||||
$wait = Get-AnsibleParam -obj $params -name "wait" -type "bool" -default $false
|
$wait = Get-AnsibleParam -obj $params -name "wait" -type "bool" -default $false
|
||||||
|
|
||||||
|
@ -33,35 +33,31 @@ $result = @{
|
||||||
changed = $false
|
changed = $false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($creates -ne $null) -and ($state -ne "absent") -and (Test-Path $creates)) {
|
if (-not (Test-Path -Path $path)) {
|
||||||
Exit-Json $result
|
Fail-Json $result "The MSI file ($path) was not found."
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-not (Test-Path $path)) {
|
if ($creates -and (Test-Path -Path $creates)) {
|
||||||
Fail-Json $result "Cannot find $path."
|
Exit-Json $result "The 'creates' file or directory ($creates) already exists."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($removes -and -not (Test-Path -Path $removes)) {
|
||||||
|
Exit-Json $result "The 'removes' file or directory ($removes) does not exist."
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not $check_mode) {
|
||||||
|
|
||||||
$logfile = [IO.Path]::GetTempFileName()
|
$logfile = [IO.Path]::GetTempFileName()
|
||||||
if ($state -eq "absent") {
|
if ($state -eq "absent") {
|
||||||
|
Start-Process -FilePath msiexec.exe -ArgumentList "/x `"$path`" /qn /log $logfile $extra_args" -Verb Runas -Wait:$wait
|
||||||
if ($wait) {
|
|
||||||
Start-Process -FilePath msiexec.exe -ArgumentList "/x `"$path`" /qn /l $logfile $extra_args" -Verb Runas -Wait
|
|
||||||
} else {
|
} else {
|
||||||
Start-Process -FilePath msiexec.exe -ArgumentList "/x `"$path`" /qn /l $logfile $extra_args" -Verb Runas
|
Start-Process -FilePath msiexec.exe -ArgumentList "/i `"$path`" /qn /log $logfile $extra_args" -Verb Runas -Wait:$wait
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if ($wait) {
|
|
||||||
Start-Process -FilePath msiexec.exe -ArgumentList "/i `"$path`" /qn /l $logfile $extra_args" -Verb Runas -Wait
|
|
||||||
} else {
|
|
||||||
Start-Process -FilePath msiexec.exe -ArgumentList "/i `"$path`" /qn /l $logfile $extra_args" -Verb Runas
|
|
||||||
}
|
}
|
||||||
|
$result.log = Get-Content $logfile | Out-String
|
||||||
|
Remove-Item $logfile
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$result.changed = $true
|
$result.changed = $true
|
||||||
$result.log = Get-Content $logfile | Out-String
|
|
||||||
Remove-Item $logfile
|
|
||||||
|
|
||||||
Exit-Json $result
|
Exit-Json $result
|
|
@ -25,15 +25,14 @@ ANSIBLE_METADATA = {'metadata_version': '1.0',
|
||||||
'status': ['deprecated'],
|
'status': ['deprecated'],
|
||||||
'supported_by': 'community'}
|
'supported_by': 'community'}
|
||||||
|
|
||||||
|
|
||||||
DOCUMENTATION = r'''
|
DOCUMENTATION = r'''
|
||||||
---
|
---
|
||||||
module: win_msi
|
module: win_msi
|
||||||
version_added: "1.7"
|
version_added: '1.7'
|
||||||
short_description: Installs and uninstalls Windows MSI files
|
short_description: Installs and uninstalls Windows MSI files
|
||||||
description:
|
description:
|
||||||
- Installs or uninstalls a Windows MSI file that is already located on the
|
- Installs or uninstalls a Windows MSI file that is already located on the
|
||||||
target server
|
target server.
|
||||||
options:
|
options:
|
||||||
path:
|
path:
|
||||||
description:
|
description:
|
||||||
|
@ -41,30 +40,33 @@ options:
|
||||||
required: true
|
required: true
|
||||||
extra_args:
|
extra_args:
|
||||||
description:
|
description:
|
||||||
- Additional arguments to pass to the msiexec.exe command
|
- Additional arguments to pass to the msiexec.exe command.
|
||||||
state:
|
state:
|
||||||
description:
|
description:
|
||||||
- Whether the MSI file should be installed or uninstalled
|
- Whether the MSI file should be installed or uninstalled.
|
||||||
choices:
|
choices: [ absent, present ]
|
||||||
- present
|
|
||||||
- absent
|
|
||||||
default: present
|
default: present
|
||||||
creates:
|
creates:
|
||||||
description:
|
description:
|
||||||
- Path to a file created by installing the MSI to prevent from
|
- Path to a file created by installing the MSI to prevent from
|
||||||
attempting to reinstall the package on every run
|
attempting to reinstall the package on every run.
|
||||||
|
removes:
|
||||||
|
description:
|
||||||
|
- Path to a file removed by uninstalling the MSI to prevent from
|
||||||
|
attempting to re-uninstall the package on every run.
|
||||||
|
version_added: '2.4'
|
||||||
wait:
|
wait:
|
||||||
version_added: "2.1"
|
|
||||||
description:
|
description:
|
||||||
- Specify whether to wait for install or uninstall to complete before continuing.
|
- Specify whether to wait for install or uninstall to complete before continuing.
|
||||||
choices:
|
type: bool
|
||||||
- true
|
default: 'no'
|
||||||
- false
|
version_added: '2.1'
|
||||||
default: false
|
|
||||||
notes:
|
notes:
|
||||||
- Check-mode support is currently not supported.
|
- This module is not idempotent and will report a change every time.
|
||||||
- Please look into M(win_package) instead, this package will be deprecated in Ansible v2.3.
|
Use the C(creates) and C(removes) options to your advantage.
|
||||||
author: "Matt Martz (@sivel)"
|
- Please look into M(win_package) instead, this package will be deprecated in the future.
|
||||||
|
author:
|
||||||
|
- Matt Martz (@sivel)
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = r'''
|
EXAMPLES = r'''
|
||||||
|
@ -75,10 +77,18 @@ EXAMPLES = r'''
|
||||||
- name: Install an MSI, and wait for it to complete before continuing
|
- name: Install an MSI, and wait for it to complete before continuing
|
||||||
win_msi:
|
win_msi:
|
||||||
path: C:\7z920-x64.msi
|
path: C:\7z920-x64.msi
|
||||||
wait: true
|
wait: yes
|
||||||
|
|
||||||
- name: Uninstall an MSI file
|
- name: Uninstall an MSI file
|
||||||
win_msi:
|
win_msi:
|
||||||
path: C:\7z920-x64.msi
|
path: C:\7z920-x64.msi
|
||||||
state: absent
|
state: absent
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
RETURN = r'''
|
||||||
|
log:
|
||||||
|
description: The logged output from the installer
|
||||||
|
returned: always
|
||||||
|
type: string
|
||||||
|
sample: N/A
|
||||||
|
'''
|
||||||
|
|
Loading…
Reference in New Issue