win_package: rewrite, check mode, tests, more check options (#27470)
* rewrite of win_package to enable win_msi deprecation * fix some minor doc issues * Removed exe tests * dag's changes seem to be missing, re-add them * fixed yaml for return values
This commit is contained in:
parent
91e2319806
commit
adabefd016
11 changed files with 1980 additions and 1450 deletions
File diff suppressed because it is too large
Load diff
|
@ -25,78 +25,135 @@ ANSIBLE_METADATA = {'metadata_version': '1.1',
|
|||
'status': ['preview'],
|
||||
'supported_by': 'core'}
|
||||
|
||||
|
||||
DOCUMENTATION = r'''
|
||||
---
|
||||
module: win_package
|
||||
version_added: "1.7"
|
||||
author: Trond Hindenes
|
||||
short_description: Installs/Uninstalls an installable package, either from local file system or url
|
||||
short_description: Installs/uninstalls an installable package
|
||||
description:
|
||||
- Installs or uninstalls a package.
|
||||
- >
|
||||
Use a product_id to check if the package needs installing. You can find product ids for installed programs in the windows registry
|
||||
either in C(HKLM:Software\Microsoft\Windows\CurrentVersion\Uninstall) or for 32 bit programs
|
||||
C(HKLM:Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall)
|
||||
- For non-Windows targets, use the M(package) module instead.
|
||||
- Installs or uninstalls a package in either an MSI or EXE format.
|
||||
- These packages can be sources from the local file system, network file share
|
||||
or a url.
|
||||
- Please read the notes section around some caveats with this module.
|
||||
options:
|
||||
path:
|
||||
description:
|
||||
- Location of the package to be installed (either on file system, network share or url)
|
||||
required: true
|
||||
name:
|
||||
description:
|
||||
- Name of the package, if name isn't specified the path will be used for log messages
|
||||
required: false
|
||||
default: null
|
||||
product_id:
|
||||
description:
|
||||
- Product id of the installed package (used for checking if already installed)
|
||||
- >
|
||||
You can find product ids for installed programs in the windows registry either in C(HKLM:Software\Microsoft\Windows\CurrentVersion\Uninstall)
|
||||
or for 32 bit programs C(HKLM:Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall)
|
||||
required: true
|
||||
aliases: [productid]
|
||||
arguments:
|
||||
description:
|
||||
- Any arguments the installer needs
|
||||
default: null
|
||||
required: false
|
||||
state:
|
||||
- Any arguments the installer needs to either install or uninstall the
|
||||
package.
|
||||
- If the package is an MSI do not supply the C(/qn), C(/log) or
|
||||
C(/norestart) arguments.
|
||||
creates_path:
|
||||
description:
|
||||
- Install or Uninstall
|
||||
choices:
|
||||
- present
|
||||
- absent
|
||||
default: present
|
||||
required: false
|
||||
aliases: [ensure]
|
||||
user_name:
|
||||
- Will check the existance of the path specified and use the result to
|
||||
determine whether the package is already installed.
|
||||
- You can use this in conjunction with C(product_id) and other C(creates_*).
|
||||
version_added: '2.4'
|
||||
creates_service:
|
||||
description:
|
||||
- Username of an account with access to the package if it's located on a file share. Only needed if the winrm user doesn't have access to the package.
|
||||
Also specify user_password for this to function properly.
|
||||
default: null
|
||||
required: false
|
||||
user_password:
|
||||
- Will check the existing of the service specified and use the result to
|
||||
determine whether the package is already installed.
|
||||
- You can use this in conjunction with C(product_id) and other C(creates_*).
|
||||
version_added: '2.4'
|
||||
creates_version:
|
||||
description:
|
||||
- Password of an account with access to the package if it's located on a file share. Only needed if the winrm user doesn't have access to the package.
|
||||
Also specify user_name for this to function properly.
|
||||
default: null
|
||||
required: false
|
||||
- Will check the file version property of the file at C(creates_path) and
|
||||
use the result to determine whether the package is already installed.
|
||||
- C(creates_path) MUST be set and is a file.
|
||||
- You can use this in conjunction with C(product_id) and other C(creates_*).
|
||||
version_added: '2.4'
|
||||
expected_return_code:
|
||||
description:
|
||||
- One or more return codes from the package installation that indicates success.
|
||||
- If not provided, defaults to 0
|
||||
required: no
|
||||
default: 0
|
||||
- One or more return codes from the package installation that indicates
|
||||
success.
|
||||
- Before Ansible 2.4 this was just 0 but since 2.4 this is both C(0) and
|
||||
C(3010).
|
||||
- A return code of C(3010) usually means that a reboot is required, the
|
||||
C(reboot_required) return value is set if the return code is C(3010).
|
||||
default: [0, 3010]
|
||||
name:
|
||||
description:
|
||||
- Name of the package, if name isn't specified the path will be used for
|
||||
log messages.
|
||||
- As of Ansible 2.4 this is deprecated and no longer required.
|
||||
password:
|
||||
description:
|
||||
- The password for C(user_name), must be set when C(user_name) is.
|
||||
aliases: [ user_password ]
|
||||
path:
|
||||
description:
|
||||
- Location of the package to be installed or uninstalled.
|
||||
- This package can either be on the local file system, network share or a
|
||||
url.
|
||||
- If the path is on a network share and the current WinRM transport doesn't
|
||||
support credential delegation, then C(user_name) and C(user_password)
|
||||
must be set to access the file.
|
||||
- There are cases where this file will be copied locally to the server so
|
||||
it can access it, see the notes for more info.
|
||||
- If C(state=present) then this value MUST be set.
|
||||
- If C(state=absent) then this value does not need to be set if
|
||||
C(product_id) is.
|
||||
product_id:
|
||||
description:
|
||||
- The product id of the installed packaged.
|
||||
- This is used for checking whether the product is already installed and
|
||||
getting the uninstall information if C(state=absent).
|
||||
- You can find product ids for installed programs in the Windows registry
|
||||
editor either at
|
||||
C(HKLM:Software\Microsoft\Windows\CurrentVersion\Uninstall) or for 32 bit
|
||||
programs at
|
||||
C(HKLM:Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall).
|
||||
- This SHOULD be set when the package is not an MSI, or the path is a url
|
||||
or a network share and credential delegation is not being used. The
|
||||
C(creates_*) options can be used instead but is not recommended.
|
||||
aliases: [ productid ]
|
||||
state:
|
||||
description:
|
||||
- Whether to install or uninstall the package.
|
||||
- The module uses C(product_id) and whether it exists at the registry path
|
||||
to see whether it needs to install or uninstall the package.
|
||||
default: present
|
||||
aliases: [ ensure ]
|
||||
username:
|
||||
description:
|
||||
- Username of an account with access to the package if it is located on a
|
||||
file share.
|
||||
- This is only needed if the WinRM transport is over an auth method that
|
||||
does not support credential delegation like Basic or NTLM.
|
||||
aliases: [ user_name ]
|
||||
validate_certs:
|
||||
description:
|
||||
- If C(no), SSL certificates will not be validated. This should only be
|
||||
used on personally controlled sites using self-signed certificates.
|
||||
- Before Ansible 2.4 this defaulted to C(no).
|
||||
type: bool
|
||||
default: 'yes'
|
||||
version_added: '2.4'
|
||||
notes:
|
||||
- For non-Windows targets, use the M(package) module instead.
|
||||
- For non Windows targets, use the M(package) module instead.
|
||||
- When C(state=absent) and the product is an exe, the path may be different
|
||||
from what was used to install the package originally. If path is not set then
|
||||
the path used will be what is set under C(UninstallString) in the registry
|
||||
for that product_id.
|
||||
- Not all product ids are in a GUID form, some programs incorrectly use a
|
||||
different structure but this module should support any format.
|
||||
- By default all msi installs and uninstalls will be run with the options
|
||||
C(/log, /qn, /norestart).
|
||||
- It is recommended you download the pacakge first from the URL using the
|
||||
M(win_get_url) module as it opens up more flexibility with what must be set
|
||||
when calling C(win_package).
|
||||
- Packages will be temporarily downloaded or copied locally when path is a
|
||||
network location and credential delegation is not set, or path is a URL
|
||||
and the file is not an MSI.
|
||||
- All the installation checks under C(product_id) and C(creates_*) add
|
||||
together, if one fails then the program is considered to be absent.
|
||||
author:
|
||||
- Trond Hindenes (@trondhindenes)
|
||||
- Jordan Borean (@jborean93)
|
||||
'''
|
||||
|
||||
EXAMPLES = r'''
|
||||
- name: Install the Visual C thingy
|
||||
win_package:
|
||||
name: Microsoft Visual C thingy
|
||||
path: http://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe
|
||||
product_id: '{CF2BEA3C-26EA-32F8-AA9B-331F7E34BA97}'
|
||||
arguments: /install /passive /norestart
|
||||
|
@ -105,30 +162,98 @@ EXAMPLES = r'''
|
|||
win_package:
|
||||
path: https://download.microsoft.com/download/A/F/0/AF0071F3-B198-4A35-AA90-C68D103BDCCF/rdcman.msi
|
||||
product_id: '{0240359E-6A4C-4884-9E94-B397A02D893C}'
|
||||
state: present
|
||||
|
||||
- name: Uninstall Remote Desktop Connection Manager installed from msi
|
||||
- name: Uninstall Remote Desktop Connection Manager
|
||||
win_package:
|
||||
path: https://download.microsoft.com/download/A/F/0/AF0071F3-B198-4A35-AA90-C68D103BDCCF/rdcman.msi
|
||||
product_id: '{0240359E-6A4C-4884-9E94-B397A02D893C}'
|
||||
state: absent
|
||||
|
||||
# Specify the expected non-zero return code when successful
|
||||
# In this case 3010 indicates 'reboot required'
|
||||
- name: 'Microsoft .NET Framework 4.5.1'
|
||||
- name: Install Remote Desktop Connection Manager locally omitting the product_id
|
||||
win_package:
|
||||
path: https://download.microsoft.com/download/1/6/7/167F0D79-9317-48AE-AEDB-17120579F8E2/NDP451-KB2858728-x86-x64-AllOS-ENU.exe
|
||||
productid: '{7DEBE4EB-6B40-3766-BB35-5CBBC385DA37}'
|
||||
arguments: '/q /norestart'
|
||||
ensure: present
|
||||
expected_return_code: 3010
|
||||
path: C:\temp\rdcman.msi
|
||||
state: present
|
||||
|
||||
# Specify multiple non-zero return codes when successful
|
||||
# In this case we can say that both 0 (SUCCESSFUL) and 3010 (REBOOT REQUIRED) codes are acceptable
|
||||
- name: 'Microsoft .NET Framework 4.5.1'
|
||||
- name: Uninstall Remote Desktop Connection Manager from local MSI omitting the product_id
|
||||
win_package:
|
||||
path: C:\temp\rdcman.msi
|
||||
state: absent
|
||||
|
||||
# 7-Zip exe doesn't use a guid for the Product ID
|
||||
- name: Install 7zip from a network share specifying the credentials
|
||||
win_package:
|
||||
path: \\domain\programs\7z.exe
|
||||
product_id: 7-Zip
|
||||
arguments: /S
|
||||
state: present
|
||||
user_name: DOMAIN\User
|
||||
user_password: Password
|
||||
|
||||
- name: Install 7zip and use a file version for the installation check
|
||||
win_package:
|
||||
path: C:\temp\7z.exe
|
||||
creates_path: C:\Program Files\7-Zip\7z.exe
|
||||
creates_version: 16.04
|
||||
state: present
|
||||
|
||||
- name: Uninstall 7zip from the exe
|
||||
win_package:
|
||||
path: C:\Program Files\7-Zip\Uninstall.exe
|
||||
product_id: 7-Zip
|
||||
arguments: /S
|
||||
state: absent
|
||||
|
||||
- name: Uninstall 7zip without specifying the path
|
||||
win_package:
|
||||
product_id: 7-Zip
|
||||
arguments: /S
|
||||
state: absent
|
||||
|
||||
- name: Install application and override expected return codes
|
||||
win_package:
|
||||
path: https://download.microsoft.com/download/1/6/7/167F0D79-9317-48AE-AEDB-17120579F8E2/NDP451-KB2858728-x86-x64-AllOS-ENU.exe
|
||||
productid: '{7DEBE4EB-6B40-3766-BB35-5CBBC385DA37}'
|
||||
product_id: '{7DEBE4EB-6B40-3766-BB35-5CBBC385DA37}'
|
||||
arguments: '/q /norestart'
|
||||
ensure: present
|
||||
expected_return_code: [0,3010]
|
||||
state: present
|
||||
expected_return_code: [0, 666, 3010]
|
||||
'''
|
||||
|
||||
RETURN = r'''
|
||||
exit_code:
|
||||
description: See rc, this will be removed in favour of rc in Ansible 2.6.
|
||||
returned: change occured
|
||||
type: int
|
||||
sample: 0
|
||||
log:
|
||||
description: The contents of the MSI log.
|
||||
returned: change occured and package is an MSI
|
||||
type: str
|
||||
sample: Installation completed successfully
|
||||
rc:
|
||||
description: The return code of the pacakge process.
|
||||
returned: change occured
|
||||
type: int
|
||||
sample: 0
|
||||
reboot_required:
|
||||
description: Whether a reboot is required to finalise package. This is set
|
||||
to true if the executable return code is 3010.
|
||||
returned: always
|
||||
type: bool
|
||||
sample: True
|
||||
restart_required:
|
||||
description: See reboot_required, this will be removed in favour of
|
||||
reboot_required in Ansible 2.6
|
||||
returned: always
|
||||
type: bool
|
||||
sample: True
|
||||
stdout:
|
||||
description: The stdout stream of the package process.
|
||||
returned: failure during install or uninstall
|
||||
type: str
|
||||
sample: Installing program
|
||||
stderr:
|
||||
description: The stderr stream of the package process.
|
||||
returned: failure during install or uninstall
|
||||
type: str
|
||||
sample: Failed to install program
|
||||
'''
|
||||
|
|
|
@ -1,6 +1,18 @@
|
|||
---
|
||||
# spaces are tricky, let's have one by default
|
||||
test_win_package_path: C:\ansible\win package
|
||||
test_win_package_good_url: https://s3.amazonaws.com/ansible-ci-files/test/integration/roles/test_win_package/good.msi
|
||||
test_win_package_reboot_url: https://s3.amazonaws.com/ansible-ci-files/test/integration/roles/test_win_package/reboot.msi
|
||||
test_win_package_bad_url: https://s3.amazonaws.com/ansible-ci-files/test/integration/roles/test_win_package/bad.msi
|
||||
test_win_package_exe_url: https://s3.amazonaws.com/ansible-ci-files/test/integration/roles/test_win_package/7z.exe # TODO: change to it's own executable
|
||||
|
||||
msi_url: https://ansible-ci-files.s3.amazonaws.com/test/integration/roles/test_win_msi/7z922-x64.msi
|
||||
msi_download_path: "C:\\Program Files\\7z922-x64.msi"
|
||||
msi_install_path: "C:\\Program Files\\7-Zip"
|
||||
msi_product_code: "{23170F69-40C1-2702-0922-000001000000}"
|
||||
test_win_package_good_id: '{223D9A13-653B-4231-A365-EDDC30B4F226}'
|
||||
test_win_package_reboot_id: '{223D9A13-653B-4231-A365-EDDC30B4F227}'
|
||||
test_win_package_exe_id: 7-Zip
|
||||
|
||||
# define the below to run the network tests, all 3 msi's should exist in this path
|
||||
# test_win_package_network_path: \\ANSIBLE\network
|
||||
|
||||
# set the below to test a network path without credential delegation like Basic or NTLM
|
||||
# test_win_package_network_username: ANSIBLE\User
|
||||
# test_win_package_network_password: Password
|
7
test/integration/targets/win_package/files/bad.wsx
Normal file
7
test/integration/targets/win_package/files/bad.wsx
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
<Product Id="223D9A13-653B-4231-A365-EDDC30B4F228" UpgradeCode="575580C0-AFA1-4C17-8A9C-3CB0CEDC6A06" Name="Bovine University" Manufacturer="Ansible" Version="1.0.0" Language="1033" Codepage="1252">
|
||||
<Package InstallerVersion="200" Compressed="yes" Comments="When I grow up I want to go to Bovine University" />
|
||||
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
|
||||
</Product>
|
||||
</Wix>
|
26
test/integration/targets/win_package/files/good.wsx
Normal file
26
test/integration/targets/win_package/files/good.wsx
Normal file
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
<Product Id="223D9A13-653B-4231-A365-EDDC30B4F226" UpgradeCode="575580C0-AFA1-4C17-8A9C-3CB0CEDC6A05" Name="Bovine University" Manufacturer="Ansible" Version="1.0.0" Language="1033" Codepage="1252">
|
||||
<Package InstallerVersion="200" Compressed="yes" Comments="When I grow up I want to go to Bovine University" />
|
||||
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
|
||||
<Directory Id="TARGETDIR" Name="SourceDir">
|
||||
<Directory Id="ProgramFilesFolder">
|
||||
<Directory Id="INSTALLDIR" Name="Bovine University">
|
||||
<Component Id="MooFiles" Guid="D7BC586D-A23C-4002-BC20-76579F25C67D">
|
||||
<File Id="MooFile" Source="moo.exe" />
|
||||
</Component>
|
||||
<Component Id="CowFiles" Guid="D1801B2D-8E54-4F19-8B14-A42D8A122A24">
|
||||
<File Id="CowFile" Source="cow.exe" />
|
||||
</Component>
|
||||
</Directory>
|
||||
</Directory>
|
||||
</Directory>
|
||||
|
||||
<Feature Id="Moo" Level="1">
|
||||
<ComponentRef Id="MooFiles" />
|
||||
</Feature>
|
||||
<Feature Id="Cow" Level="1">
|
||||
<ComponentRef Id="CowFiles" />
|
||||
</Feature>
|
||||
</Product>
|
||||
</Wix>
|
30
test/integration/targets/win_package/files/reboot.wsx
Normal file
30
test/integration/targets/win_package/files/reboot.wsx
Normal file
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
<Product Id="223D9A13-653B-4231-A365-EDDC30B4F227" UpgradeCode="575580C0-AFA1-4C17-8A9C-3CB0CEDC6A06" Name="Bovine University" Manufacturer="Ansible" Version="1.0.0" Language="1033" Codepage="1252">
|
||||
<Package InstallerVersion="200" Compressed="yes" Comments="When I grow up I want to go to Bovine University" />
|
||||
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
|
||||
<Directory Id="TARGETDIR" Name="SourceDir">
|
||||
<Directory Id="ProgramFilesFolder">
|
||||
<Directory Id="INSTALLDIR" Name="Bovine University">
|
||||
<Component Id="MooFiles" Guid="D7BC586D-A23C-4002-BC20-76579F25C67D">
|
||||
<File Id="MooFile" Source="moo.exe" />
|
||||
</Component>
|
||||
<Component Id="CowFiles" Guid="D1801B2D-8E54-4F19-8B14-A42D8A122A24">
|
||||
<File Id="CowFile" Source="cow.exe" />
|
||||
</Component>
|
||||
</Directory>
|
||||
</Directory>
|
||||
</Directory>
|
||||
|
||||
<Feature Id="Moo" Level="1">
|
||||
<ComponentRef Id="MooFiles" />
|
||||
</Feature>
|
||||
<Feature Id="Cow" Level="1">
|
||||
<ComponentRef Id="CowFiles" />
|
||||
</Feature>
|
||||
|
||||
<InstallExecuteSequence>
|
||||
<ScheduleReboot After="InstallFinalize" />
|
||||
</InstallExecuteSequence>
|
||||
</Product>
|
||||
</Wix>
|
303
test/integration/targets/win_package/tasks/exe_tests.yml
Normal file
303
test/integration/targets/win_package/tasks/exe_tests.yml
Normal file
|
@ -0,0 +1,303 @@
|
|||
---
|
||||
- name: install local exe (check mode)
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\7z.exe'
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: present
|
||||
register: install_local_exe_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of install local exe (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_exe_id}}
|
||||
register: install_local_exe_actual_check
|
||||
|
||||
- name: assert install local exe (check mode)
|
||||
assert:
|
||||
that:
|
||||
- install_local_exe_check|changed
|
||||
- install_local_exe_check.reboot_required == False
|
||||
- install_local_exe_actual_check.exists == False
|
||||
|
||||
- name: install local exe
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\7z.exe'
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: present
|
||||
register: install_local_exe
|
||||
|
||||
- name: get result of install local exe
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_exe_id}}
|
||||
register: install_local_exe_actual
|
||||
|
||||
- name: assert install local exe
|
||||
assert:
|
||||
that:
|
||||
- install_local_exe|changed
|
||||
- install_local_exe.reboot_required == False
|
||||
- install_local_exe.exit_code == 0
|
||||
- install_local_exe_actual.exists == True
|
||||
|
||||
- name: install local exe (idempotent)
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\7z.exe'
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: present
|
||||
register: install_local_exe_idempotent
|
||||
|
||||
- name: assert install local exe (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not install_local_exe_idempotent|changed
|
||||
|
||||
- name: uninstall local exe with path (check mode)
|
||||
win_package:
|
||||
path: C:\Program Files\7-Zip\Uninstall.exe
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: absent
|
||||
register: uninstall_path_local_exe_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of uninstall local exe with path (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_exe_id}}
|
||||
register: uninstall_path_local_exe_actual_check
|
||||
|
||||
- name: assert uninstall local exe with path (check mode)
|
||||
assert:
|
||||
that:
|
||||
- uninstall_path_local_exe_check|changed
|
||||
- uninstall_path_local_exe_check.reboot_required == False
|
||||
- uninstall_path_local_exe_actual_check.exists == True
|
||||
|
||||
- name: uninstall local exe with path
|
||||
win_package:
|
||||
path: C:\Program Files\7-Zip\Uninstall.exe
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: absent
|
||||
register: uninstall_path_local_exe
|
||||
|
||||
- name: get result of uninstall local exe with path
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_exe_id}}
|
||||
register: uninstall_path_local_exe_actual
|
||||
|
||||
- name: assert uninstall local exe with path
|
||||
assert:
|
||||
that:
|
||||
- uninstall_path_local_exe|changed
|
||||
- uninstall_path_local_exe.reboot_required == False
|
||||
- uninstall_path_local_exe.exit_code == 0
|
||||
- uninstall_path_local_exe_actual.exists == False
|
||||
|
||||
- name: uninstall local exe with path (idempotent)
|
||||
win_package:
|
||||
path: C:\Program Files\7-Zip\Uninstall.exe
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: absent
|
||||
register: uninstall_path_local_exe_idempotent
|
||||
|
||||
- name: assert uninstall local exe with path (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not uninstall_path_local_exe_idempotent|changed
|
||||
|
||||
- name: install url exe (check mode)
|
||||
win_package:
|
||||
path: '{{test_win_package_exe_url}}'
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: present
|
||||
register: install_url_exe_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of install url exe (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_exe_id}}
|
||||
register: install_url_exe_actual_check
|
||||
|
||||
- name: assert install url exe (check mode)
|
||||
assert:
|
||||
that:
|
||||
- install_url_exe_check|changed
|
||||
- install_url_exe_check.reboot_required == False
|
||||
- install_url_exe_actual_check.exists == False
|
||||
|
||||
- name: install url exe
|
||||
win_package:
|
||||
path: '{{test_win_package_exe_url}}'
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: present
|
||||
register: install_url_exe
|
||||
|
||||
- name: get result of install url exe
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_exe_id}}
|
||||
register: install_url_exe_actual
|
||||
|
||||
- name: assert install url exe
|
||||
assert:
|
||||
that:
|
||||
- install_url_exe|changed
|
||||
- install_url_exe.reboot_required == False
|
||||
- install_url_exe.exit_code == 0
|
||||
- install_url_exe_actual.exists == True
|
||||
|
||||
- name: install url exe (idempotent)
|
||||
win_package:
|
||||
path: '{{test_win_package_exe_url}}'
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: present
|
||||
register: install_url_exe_again
|
||||
|
||||
- name: assert install url exe (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not install_url_exe_again|changed
|
||||
|
||||
- name: uninstall local exe with product_id (check mode)
|
||||
win_package:
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: absent
|
||||
register: uninstall_id_local_exe_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of uninstall local exe with product_id (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_exe_id}}
|
||||
register: uninstall_id_local_exe_actual_check
|
||||
|
||||
- name: assert uninstall local exe with product_id (check mode)
|
||||
assert:
|
||||
that:
|
||||
- uninstall_id_local_exe_check|changed
|
||||
- uninstall_id_local_exe_check.reboot_required == False
|
||||
- uninstall_id_local_exe_actual_check.exists == True
|
||||
|
||||
- name: uninstall local exe with product_id
|
||||
win_package:
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: absent
|
||||
register: uninstall_id_local_exe
|
||||
|
||||
- name: get result of uninstall local exe with product_id
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_exe_id}}
|
||||
register: uninstall_id_local_exe_actual
|
||||
|
||||
- name: assert uninstall local exe with product_id
|
||||
assert:
|
||||
that:
|
||||
- uninstall_id_local_exe|changed
|
||||
- uninstall_id_local_exe.reboot_required == False
|
||||
- uninstall_id_local_exe.exit_code == 0
|
||||
- uninstall_id_local_exe_actual.exists == False
|
||||
|
||||
- name: uninstall local exe with product_id (idempotent)
|
||||
win_package:
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: absent
|
||||
register: uninstall_id_local_exe_idempotent
|
||||
|
||||
- name: assert uninstall local exe with product_id (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not uninstall_id_local_exe_idempotent|changed
|
||||
|
||||
- name: install exe checking path
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\7z.exe'
|
||||
arguments: /S
|
||||
creates_path: C:\Program Files\7-Zip\7z.exe
|
||||
register: install_exe_create_path
|
||||
|
||||
- name: get result of install exe checking path
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_exe_id}}
|
||||
register: install_exe_create_path_actual
|
||||
|
||||
- name: assert install exe checking path
|
||||
assert:
|
||||
that:
|
||||
- install_exe_create_path.changed == True
|
||||
- install_exe_create_path_actual.exists == True
|
||||
|
||||
- name: install exe checking path (idempotent)
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\7z.exe'
|
||||
arguments: /S
|
||||
creates_path: C:\Program Files\7-Zip\7z.exe
|
||||
register: install_exe_create_path_again
|
||||
|
||||
- name: assert install exe checking path (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not install_exe_create_path_again.changed == True
|
||||
|
||||
- name: install exe checking path and version
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\7z.exe'
|
||||
arguments: /S
|
||||
creates_path: C:\Program Files\7-Zip\7z.exe
|
||||
creates_version: '16.04'
|
||||
register: install_exe_create_version_match
|
||||
|
||||
- name: assert install exe checking path and version
|
||||
assert:
|
||||
that:
|
||||
- not install_exe_create_version_match|changed
|
||||
|
||||
- name: install exe checking path and version mismatch
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\7z.exe'
|
||||
arguments: /S
|
||||
creates_path: C:\Program Files\7-Zip\7z.exe
|
||||
creates_version: fail-version
|
||||
register: install_exe_create_version_mismatch
|
||||
|
||||
- name: assert install exe checking path and version mistmatch
|
||||
assert:
|
||||
that:
|
||||
- install_exe_create_version_mismatch|changed
|
||||
|
||||
- name: install exe checking service
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\7z.exe'
|
||||
arguments: /S
|
||||
creates_service: Netlogon
|
||||
register: install_exe_create_service_match
|
||||
|
||||
- name: assert install exe checking service
|
||||
assert:
|
||||
that:
|
||||
- not install_exe_create_service_match|changed
|
||||
|
||||
- name: install exe checking service mismatch
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\7z.exe'
|
||||
arguments: /S
|
||||
creates_service: fake-service
|
||||
register: install_exe_create_service_mismatch
|
||||
|
||||
- name: assert install exe checking service mismatch
|
||||
assert:
|
||||
that:
|
||||
- install_exe_create_service_mismatch|changed
|
||||
|
||||
- name: uninstall exe post tests
|
||||
win_package:
|
||||
arguments: /S
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
state: absent
|
82
test/integration/targets/win_package/tasks/failure_tests.yml
Normal file
82
test/integration/targets/win_package/tasks/failure_tests.yml
Normal file
|
@ -0,0 +1,82 @@
|
|||
# these tests are invalid arguments and failure states for win_package
|
||||
---
|
||||
- name: fail to install broken msi
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\bad.msi'
|
||||
state: present
|
||||
register: fail_bad_rc
|
||||
failed_when: "'unexpected rc from install' not in fail_bad_rc.msg and fail_bad_rc.exit_code != 1603"
|
||||
|
||||
- name: fail when not using an int for a return code
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\good.msi'
|
||||
state: present
|
||||
expected_return_code: 0,abc
|
||||
register: fail_invalid_return_code
|
||||
failed_when: fail_invalid_return_code.msg != 'failed to parse expected return code abc as an integer'
|
||||
|
||||
- name: fail when path is not set and state!= absent
|
||||
win_package:
|
||||
state: present
|
||||
register: fail_no_path
|
||||
failed_when: fail_no_path.msg != 'path can only be null when state=absent and product_id is not null'
|
||||
|
||||
- name: fail when path is not set and state=absent but product_id is null
|
||||
win_package:
|
||||
state: absent
|
||||
register: fail_no_path_state_absent_no_id
|
||||
failed_when: fail_no_path_state_absent_no_id.msg != 'path can only be null when state=absent and product_id is not null'
|
||||
|
||||
- name: fail when product_id is not set and path is not a local MSI
|
||||
win_package:
|
||||
path: '{{test_win_package_good_url}}'
|
||||
state: present
|
||||
register: fail_install_url_no_id
|
||||
failed_when: fail_install_url_no_id.msg != 'product_id is required when the path is not an MSI or the path is an MSI but not local'
|
||||
|
||||
- name: fail invalid local path
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\no file.msi'
|
||||
state: present
|
||||
register: fail_invalid_local_path
|
||||
failed_when: fail_invalid_local_path.msg != 'the file at the local path ' + test_win_package_path + '\\no file.msi cannot be reached'
|
||||
|
||||
- name: fail invalid URL
|
||||
win_package:
|
||||
path: http://fakeurl/file.msi
|
||||
product_id: 'id'
|
||||
state: present
|
||||
register: fail_invalid_url_path
|
||||
failed_when: "fail_invalid_url_path.msg != 'the file at the URL http://fakeurl/file.msi cannot be reached: The remote name could not be resolved: \\'fakeurl\\''"
|
||||
|
||||
- name: fail invalid UNC path
|
||||
win_package:
|
||||
path: \\fakenetwork\unc file.msi
|
||||
product_id: 'id'
|
||||
state: present
|
||||
register: fail_invalid_unc_path
|
||||
failed_when: fail_invalid_unc_path.msg != 'the file at the UNC path \\\\fakenetwork\\unc file.msi cannot be reached, ensure the user_name account has access to this path or use an auth transport with credential delegation'
|
||||
|
||||
- name: fail when product_id is not set and path is not a local MSI
|
||||
win_package:
|
||||
path: '{{test_win_package_good_url}}'
|
||||
state: present
|
||||
register: fail_no_id_not_local_msi
|
||||
failed_when: fail_no_id_not_local_msi.msg != 'product_id is required when the path is not an MSI or the path is an MSI but not local'
|
||||
|
||||
- name: fail to check version without creates_path
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\7z.exe'
|
||||
state: present
|
||||
creates_version: 1
|
||||
register: fail_creates_version_without_path
|
||||
failed_when: fail_creates_version_without_path.msg != 'creates_path must be set when creates_version is set'
|
||||
|
||||
- name: fail to check version without when path is not a file
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\7z.exe'
|
||||
state: present
|
||||
creates_path: C:\Windows
|
||||
creates_version: 1
|
||||
register: fail_creates_version_not_a_file
|
||||
failed_when: fail_creates_version_not_a_file.msg != 'creates_path must be a file not a directory when creates_version is set'
|
|
@ -1,81 +1,52 @@
|
|||
# test code for the win_package module
|
||||
# (c) 2014, Chris Church <chris@ninemoreminutes.com>
|
||||
---
|
||||
- name: ensure testing folder exists
|
||||
win_file:
|
||||
path: '{{test_win_package_path}}'
|
||||
state: directory
|
||||
|
||||
# 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/>.
|
||||
|
||||
- name: use win_get_url module to download msi
|
||||
- name: download msi files from S3 bucket
|
||||
win_get_url:
|
||||
url: "{{msi_url}}"
|
||||
dest: "{{msi_download_path}}"
|
||||
register: win_get_url_result
|
||||
url: '{{item.url}}'
|
||||
dest: '{{test_win_package_path}}\{{item.name}}'
|
||||
with_items:
|
||||
- { url: '{{test_win_package_good_url}}', name: 'good.msi' }
|
||||
- { url: '{{test_win_package_reboot_url}}', name: 'reboot.msi' }
|
||||
- { url: '{{test_win_package_bad_url}}', name: 'bad.msi' }
|
||||
# - { url: '{{test_win_package_exe_url}}', name: '7z.exe' }
|
||||
|
||||
- name: make sure msi is uninstalled
|
||||
- name: make sure all test msi's are uninstalled before test
|
||||
win_package:
|
||||
path: "{{msi_download_path}}"
|
||||
product_id: "{{msi_product_code}}"
|
||||
product_id: '{{item.id}}'
|
||||
arguments: '{{item.args|default(omit)}}'
|
||||
state: absent
|
||||
with_items:
|
||||
- { id: '{{test_win_package_good_id}}' }
|
||||
- { id: '{{test_win_package_reboot_id}}' }
|
||||
# - { id: '{{test_win_package_exe_id}}', args: '/S' }
|
||||
|
||||
- name: install msi
|
||||
win_package:
|
||||
path: "{{msi_download_path}}"
|
||||
product_id: "{{msi_product_code}}"
|
||||
state: present
|
||||
register: win_package_install_result
|
||||
- block:
|
||||
- name: run tests for expected failures
|
||||
include_tasks: failure_tests.yml
|
||||
|
||||
- name: check win_package install result
|
||||
assert:
|
||||
that:
|
||||
- "not win_package_install_result|failed"
|
||||
- "win_package_install_result|changed"
|
||||
- name: run tests for local and URL msi files
|
||||
include_tasks: msi_tests.yml
|
||||
|
||||
- name: install msi again (check for no change)
|
||||
win_package:
|
||||
path: "{{msi_download_path}}"
|
||||
product_id: "{{msi_product_code}}"
|
||||
state: present
|
||||
register: win_package_install_again_result
|
||||
# doesn't work 100% on AWS hosts, disabling for now until we get a better exe example
|
||||
# - name: run tests for local and URL exe files
|
||||
# include_tasks: exe_tests.yml
|
||||
|
||||
- name: check win_package install again result
|
||||
assert:
|
||||
that:
|
||||
- "not win_package_install_again_result|failed"
|
||||
- "not win_package_install_again_result|changed"
|
||||
# these tests can be run manually by defining test_win_package_network_path
|
||||
- name: run tests for network msi files (manual)
|
||||
include_tasks: network_tests.yml
|
||||
when: test_win_package_network_path is defined
|
||||
|
||||
- name: uninstall msi
|
||||
win_package:
|
||||
path: "{{msi_download_path}}"
|
||||
product_id: "{{msi_product_code}}"
|
||||
state: absent
|
||||
register: win_package_uninstall_result
|
||||
|
||||
- name: check win_package uninstall result
|
||||
assert:
|
||||
that:
|
||||
- "not win_package_uninstall_result|failed"
|
||||
- "win_package_uninstall_result|changed"
|
||||
|
||||
- name: uninstall msi again (check for no change)
|
||||
win_package:
|
||||
path: "{{msi_download_path}}"
|
||||
product_id: "{{msi_product_code}}"
|
||||
state: absent
|
||||
register: win_package_uninstall_again_result
|
||||
|
||||
- name: check win_package uninstall result
|
||||
assert:
|
||||
that:
|
||||
- "not win_package_uninstall_result|failed"
|
||||
- "not win_package_uninstall_again_result|changed"
|
||||
always:
|
||||
- name: make sure all test msi's are uninstalled after test
|
||||
win_package:
|
||||
product_id: '{{item.id}}'
|
||||
arguments: '{{item.args|default(omit)}}'
|
||||
state: absent
|
||||
with_items:
|
||||
- { id: '{{test_win_package_good_id}}' }
|
||||
- { id: '{{test_win_package_reboot_id}}' }
|
||||
# - { id: '{{test_win_package_exe_id}}', args: '/S' }
|
||||
|
|
335
test/integration/targets/win_package/tasks/msi_tests.yml
Normal file
335
test/integration/targets/win_package/tasks/msi_tests.yml
Normal file
|
@ -0,0 +1,335 @@
|
|||
---
|
||||
# this test just makes sure the task doesn't fail when we set out expected rc
|
||||
- name: install broken msi override expected rc
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\bad.msi'
|
||||
state: present
|
||||
expected_return_code: 0,1603
|
||||
|
||||
- name: install local msi (check mode)
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\good.msi'
|
||||
state: present
|
||||
register: install_local_msi_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of install local msi (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_good_id}}
|
||||
register: install_local_msi_actual_check
|
||||
|
||||
- name: assert install local msi (check mode)
|
||||
assert:
|
||||
that:
|
||||
- install_local_msi_check|changed
|
||||
- install_local_msi_check.reboot_required == False
|
||||
- install_local_msi_actual_check.exists == False
|
||||
|
||||
- name: install local msi
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\good.msi'
|
||||
state: present
|
||||
expected_return_code: "" # historical, an empty string means 0, 3010
|
||||
register: install_local_msi
|
||||
|
||||
- name: get result of install local msi
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_good_id}}
|
||||
register: install_local_msi_actual
|
||||
|
||||
- name: assert install local msi
|
||||
assert:
|
||||
that:
|
||||
- install_local_msi|changed
|
||||
- install_local_msi.reboot_required == False
|
||||
- install_local_msi.exit_code == 0
|
||||
- install_local_msi_actual.exists == True
|
||||
|
||||
- name: install local msi (idempotent)
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\good.msi'
|
||||
state: present
|
||||
register: install_local_msi_idempotent
|
||||
|
||||
- name: assert install local msi (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not install_local_msi_idempotent|changed
|
||||
|
||||
- name: uninstall local msi with path (check mode)
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\good.msi'
|
||||
state: absent
|
||||
register: uninstall_path_local_msi_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of uninstall local msi with path (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_good_id}}
|
||||
register: uninstall_path_local_msi_actual_check
|
||||
|
||||
- name: assert uninstall local msi with path (check mode)
|
||||
assert:
|
||||
that:
|
||||
- uninstall_path_local_msi_check|changed
|
||||
- uninstall_path_local_msi_check.reboot_required == False
|
||||
- uninstall_path_local_msi_actual_check.exists == True
|
||||
|
||||
- name: uninstall local msi with path
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\good.msi'
|
||||
state: absent
|
||||
register: uninstall_path_local_msi
|
||||
|
||||
- name: get result of uninstall local msi with path
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_good_id}}
|
||||
register: uninstall_path_local_msi_actual
|
||||
|
||||
- name: assert uninstall local msi with path
|
||||
assert:
|
||||
that:
|
||||
- uninstall_path_local_msi|changed
|
||||
- uninstall_path_local_msi.reboot_required == False
|
||||
- uninstall_path_local_msi.exit_code == 0
|
||||
- uninstall_path_local_msi_actual.exists == False
|
||||
|
||||
- name: uninstall local msi with path (idempotent)
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\good.msi'
|
||||
state: absent
|
||||
register: uninstall_path_local_msi_idempotent
|
||||
|
||||
- name: assert uninstall local msi with path (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not uninstall_path_local_msi_idempotent|changed
|
||||
|
||||
- name: install url msi (check mode)
|
||||
win_package:
|
||||
path: '{{test_win_package_good_url}}'
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: present
|
||||
register: install_url_msi_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of install url msi (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_good_id}}
|
||||
register: install_url_msi_actual_check
|
||||
|
||||
- name: assert install url msi (check mode)
|
||||
assert:
|
||||
that:
|
||||
- install_url_msi_check|changed
|
||||
- install_url_msi_check.reboot_required == False
|
||||
- install_url_msi_actual_check.exists == False
|
||||
|
||||
- name: install url msi
|
||||
win_package:
|
||||
path: '{{test_win_package_good_url}}'
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: present
|
||||
register: install_url_msi
|
||||
|
||||
- name: get result of install url msi
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_good_id}}
|
||||
register: install_url_msi_actual
|
||||
|
||||
- name: assert install url msi
|
||||
assert:
|
||||
that:
|
||||
- install_url_msi|changed
|
||||
- install_url_msi.reboot_required == False
|
||||
- install_url_msi.exit_code == 0
|
||||
- install_url_msi_actual.exists == True
|
||||
|
||||
- name: install url msi (idempotent)
|
||||
win_package:
|
||||
path: '{{test_win_package_good_url}}'
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: present
|
||||
register: install_url_msi_again
|
||||
|
||||
- name: assert install url msi (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not install_url_msi_again|changed
|
||||
|
||||
- name: uninstall local msi with product_id (check mode)
|
||||
win_package:
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: absent
|
||||
register: uninstall_id_local_msi_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of uninstall local msi with product_id (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_good_id}}
|
||||
register: uninstall_id_local_msi_actual_check
|
||||
|
||||
- name: assert uninstall local msi with product_id (check mode)
|
||||
assert:
|
||||
that:
|
||||
- uninstall_id_local_msi_check|changed
|
||||
- uninstall_id_local_msi_check.reboot_required == False
|
||||
- uninstall_id_local_msi_actual_check.exists == True
|
||||
|
||||
- name: uninstall local msi with product_id
|
||||
win_package:
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: absent
|
||||
register: uninstall_id_local_msi
|
||||
|
||||
- name: get result of uninstall local msi with product_id
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_good_id}}
|
||||
register: uninstall_id_local_msi_actual
|
||||
|
||||
- name: assert uninstall local msi with product_id
|
||||
assert:
|
||||
that:
|
||||
- uninstall_id_local_msi|changed
|
||||
- uninstall_id_local_msi.reboot_required == False
|
||||
- uninstall_id_local_msi.exit_code == 0
|
||||
- uninstall_id_local_msi_actual.exists == False
|
||||
|
||||
- name: uninstall local msi with product_id (idempotent)
|
||||
win_package:
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: absent
|
||||
register: uninstall_id_local_msi_idempotent
|
||||
|
||||
- name: assert uninstall local msi with product_id (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not uninstall_id_local_msi_idempotent|changed
|
||||
|
||||
- name: install local reboot msi (check mode)
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\reboot.msi'
|
||||
state: present
|
||||
register: install_local_reboot_msi_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of install local reboot msi (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_reboot_id}}
|
||||
register: install_local_reboot_msi_actual_check
|
||||
|
||||
- name: assert install local reboot msi (check mode)
|
||||
assert:
|
||||
that:
|
||||
- install_local_reboot_msi_check|changed
|
||||
- install_local_reboot_msi_check.reboot_required == False
|
||||
- install_local_reboot_msi_actual_check.exists == False
|
||||
|
||||
- name: install local reboot msi
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\reboot.msi'
|
||||
state: present
|
||||
register: install_local_reboot_msi
|
||||
|
||||
- name: get result of install local reboot msi
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_reboot_id}}
|
||||
register: install_local_reboot_msi_actual
|
||||
|
||||
- name: assert install local reboot msi
|
||||
assert:
|
||||
that:
|
||||
- install_local_reboot_msi|changed
|
||||
- install_local_reboot_msi.reboot_required == True
|
||||
- install_local_reboot_msi.exit_code == 3010
|
||||
- install_local_reboot_msi_actual.exists == True
|
||||
|
||||
- name: install local reboot msi (idempotent)
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\reboot.msi'
|
||||
state: present
|
||||
register: install_local_reboot_msi_idempotent
|
||||
|
||||
- name: assert install local reboot msi (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not install_local_reboot_msi_idempotent|changed
|
||||
|
||||
- name: uninstall reboot msi after test
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\reboot.msi'
|
||||
state: absent
|
||||
|
||||
- name: ensure the install folder is cleaned in case uninstall didn't work
|
||||
win_file:
|
||||
path: '%ProgramFiles(x86)%\Bovine University'
|
||||
state: absent
|
||||
|
||||
- name: install local msi with arguments (check mode)
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\good.msi'
|
||||
state: present
|
||||
arguments: ADDLOCAL=Cow
|
||||
register: install_msi_argument_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of moo file after install local msi with arguments (check mode)
|
||||
win_stat:
|
||||
path: '%ProgramFiles(x86)%\Bovine University\moo.exe'
|
||||
register: install_msi_argument_moo_check
|
||||
|
||||
- name: get result of cow file after install local msi with arguments (check mode)
|
||||
win_stat:
|
||||
path: '%ProgramFiles(x86)%\Bovine University\cow.exe'
|
||||
register: install_msi_argument_cow_check
|
||||
|
||||
- name: assert install local msi with arguments (check mode)
|
||||
assert:
|
||||
that:
|
||||
- install_msi_argument_check|changed
|
||||
- install_msi_argument_check.reboot_required == False
|
||||
- install_msi_argument_moo_check.stat.exists == False
|
||||
- install_msi_argument_cow_check.stat.exists == False
|
||||
|
||||
- name: install local msi with arguments
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\good.msi'
|
||||
state: present
|
||||
arguments: ADDLOCAL=Cow
|
||||
register: install_msi_argument
|
||||
|
||||
- name: get result of moo file after install local msi with arguments
|
||||
win_stat:
|
||||
path: '%ProgramFiles(x86)%\Bovine University\moo.exe'
|
||||
register: install_msi_argument_moo
|
||||
|
||||
- name: get result of cow file after install local msi with arguments
|
||||
win_stat:
|
||||
path: '%ProgramFiles(x86)%\Bovine University\cow.exe'
|
||||
register: install_msi_argument_cow
|
||||
|
||||
- name: assert install local msi with arguments
|
||||
assert:
|
||||
that:
|
||||
- install_msi_argument|changed
|
||||
- install_msi_argument.reboot_required == False
|
||||
- install_msi_argument.exit_code == 0
|
||||
- install_msi_argument_moo.stat.exists == False
|
||||
- install_msi_argument_cow.stat.exists == True
|
||||
|
||||
- name: install local msi with arguments (idempotent)
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\good.msi'
|
||||
state: present
|
||||
arguments: ADDLOCAL=Cow
|
||||
register: install_msi_argument_again
|
||||
|
||||
- name: assert install local msi with arguments (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not install_msi_argument_again|changed
|
||||
|
||||
- name: uninstall good msi after test
|
||||
win_package:
|
||||
path: '{{test_win_package_path}}\good.msi'
|
||||
state: absent
|
427
test/integration/targets/win_package/tasks/network_tests.yml
Normal file
427
test/integration/targets/win_package/tasks/network_tests.yml
Normal file
|
@ -0,0 +1,427 @@
|
|||
---
|
||||
- name: install network msi (check mode)
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\good.msi'
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: present
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: install_network_msi_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of install network msi (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_good_id}}
|
||||
register: install_network_msi_actual_check
|
||||
|
||||
- name: assert install network msi (check mode)
|
||||
assert:
|
||||
that:
|
||||
- install_network_msi_check|changed
|
||||
- install_network_msi_check.reboot_required == False
|
||||
- install_network_msi_actual_check.exists == False
|
||||
|
||||
- name: install network msi
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\good.msi'
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: present
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: install_network_msi
|
||||
|
||||
- name: get result of install network msi
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_good_id}}
|
||||
register: install_network_msi_actual
|
||||
|
||||
- name: assert install network msi
|
||||
assert:
|
||||
that:
|
||||
- install_network_msi|changed
|
||||
- install_network_msi.reboot_required == False
|
||||
- install_network_msi.exit_code == 0
|
||||
- install_network_msi_actual.exists == True
|
||||
|
||||
- name: install network msi (idempotent)
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\good.msi'
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: present
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: install_network_msi_idempotent
|
||||
|
||||
- name: assert install network msi (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not install_network_msi_idempotent|changed
|
||||
|
||||
- name: uninstall network msi with path (check mode)
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\good.msi'
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: absent
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: uninstall_path_network_msi_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of uninstall network msi with path (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_good_id}}
|
||||
register: uninstall_path_network_msi_actual_check
|
||||
|
||||
- name: assert uninstall network msi with path (check mode)
|
||||
assert:
|
||||
that:
|
||||
- uninstall_path_network_msi_check|changed
|
||||
- uninstall_path_network_msi_check.reboot_required == False
|
||||
- uninstall_path_network_msi_actual_check.exists == True
|
||||
|
||||
- name: uninstall network msi with path
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\good.msi'
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: absent
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: uninstall_path_network_msi
|
||||
|
||||
- name: get result of uninstall network msi with path
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_good_id}}
|
||||
register: uninstall_path_network_msi_actual
|
||||
|
||||
- name: assert uninstall network msi with path
|
||||
assert:
|
||||
that:
|
||||
- uninstall_path_network_msi|changed
|
||||
- uninstall_path_network_msi.reboot_required == False
|
||||
- uninstall_path_network_msi.exit_code == 0
|
||||
- uninstall_path_network_msi_actual.exists == False
|
||||
|
||||
- name: uninstall network msi with path (idempotent)
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\good.msi'
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: absent
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: uninstall_path_network_msi_idempotent
|
||||
|
||||
- name: assert uninstall network msi with path (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not uninstall_path_network_msi_idempotent|changed
|
||||
|
||||
- name: install network reboot msi (check mode)
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\reboot.msi'
|
||||
product_id: '{{test_win_package_reboot_id}}'
|
||||
state: present
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: install_network_reboot_msi_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of install network reboot msi (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_reboot_id}}
|
||||
register: install_network_reboot_msi_actual_check
|
||||
|
||||
- name: assert install network reboot msi (check mode)
|
||||
assert:
|
||||
that:
|
||||
- install_network_reboot_msi_check|changed
|
||||
- install_network_reboot_msi_check.reboot_required == False
|
||||
- install_network_reboot_msi_actual_check.exists == False
|
||||
|
||||
- name: install network reboot msi
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\reboot.msi'
|
||||
product_id: '{{test_win_package_reboot_id}}'
|
||||
state: present
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: install_network_reboot_msi
|
||||
|
||||
- name: get result of install network reboot msi
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_reboot_id}}
|
||||
register: install_network_reboot_msi_actual
|
||||
|
||||
- name: assert install network reboot msi
|
||||
assert:
|
||||
that:
|
||||
- install_network_reboot_msi|changed
|
||||
- install_network_reboot_msi.reboot_required == True
|
||||
- install_network_reboot_msi.exit_code == 3010
|
||||
- install_network_reboot_msi_actual.exists == True
|
||||
|
||||
- name: install network reboot msi (idempotent)
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\reboot.msi'
|
||||
product_id: '{{test_win_package_reboot_id}}'
|
||||
state: present
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: install_network_reboot_msi_idempotent
|
||||
|
||||
- name: assert install network reboot msi (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not install_network_reboot_msi_idempotent|changed
|
||||
|
||||
- name: uninstall network msi with product_id (check mode)
|
||||
win_package:
|
||||
product_id: '{{test_win_package_reboot_id}}'
|
||||
state: absent
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: uninstall_id_network_msi_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of uninstall network msi with product_id (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_reboot_id}}
|
||||
register: uninstall_id_network_msi_actual_check
|
||||
|
||||
- name: assert uninstall network msi with product_id (check mode)
|
||||
assert:
|
||||
that:
|
||||
- uninstall_id_network_msi_check|changed
|
||||
- uninstall_id_network_msi_check.reboot_required == False
|
||||
- uninstall_id_network_msi_actual_check.exists == True
|
||||
|
||||
- name: uninstall network msi with product_id
|
||||
win_package:
|
||||
product_id: '{{test_win_package_reboot_id}}'
|
||||
state: absent
|
||||
register: uninstall_id_network_msi
|
||||
|
||||
- name: get result of uninstall network msi with product_id
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_reboot_id}}
|
||||
register: uninstall_id_network_msi_actual
|
||||
|
||||
- name: assert uninstall network msi with product_id
|
||||
assert:
|
||||
that:
|
||||
- uninstall_id_network_msi|changed
|
||||
- uninstall_id_network_msi.reboot_required == True
|
||||
- uninstall_id_network_msi.exit_code == 3010
|
||||
- uninstall_id_network_msi_actual.exists == False
|
||||
|
||||
- name: uninstall network msi with product_id (idempotent)
|
||||
win_package:
|
||||
product_id: '{{test_win_package_reboot_id}}'
|
||||
state: absent
|
||||
register: uninstall_id_network_msi_idempotent
|
||||
|
||||
- name: assert uninstall network msi with product_id (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not uninstall_id_network_msi_idempotent|changed
|
||||
|
||||
- name: ensure the install folder is cleaned in case uninstall didn't work
|
||||
win_file:
|
||||
path: '%ProgramFiles(x86)%\Bovine University'
|
||||
state: absent
|
||||
|
||||
- name: install network msi with arguments (check mode)
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\good.msi'
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: present
|
||||
arguments: ADDLOCAL=Cow
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: install_network_msi_argument_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of moo file after install network msi with arguments (check mode)
|
||||
win_stat:
|
||||
path: '%ProgramFiles(x86)%\Bovine University\moo.exe'
|
||||
register: install_network_msi_argument_moo_check
|
||||
|
||||
- name: get result of cow file after install network msi with arguments (check mode)
|
||||
win_stat:
|
||||
path: '%ProgramFiles(x86)%\Bovine University\cow.exe'
|
||||
register: install_network_msi_argument_cow_check
|
||||
|
||||
- name: assert install network msi with arguments (check mode)
|
||||
assert:
|
||||
that:
|
||||
- install_network_msi_argument_check|changed
|
||||
- install_network_msi_argument_check.reboot_required == False
|
||||
- install_network_msi_argument_moo_check.stat.exists == False
|
||||
- install_network_msi_argument_cow_check.stat.exists == False
|
||||
|
||||
- name: install network msi with arguments
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\good.msi'
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: present
|
||||
arguments: ADDLOCAL=Cow
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: install_network_msi_argument
|
||||
|
||||
- name: get result of moo file after install network msi with arguments
|
||||
win_stat:
|
||||
path: '%ProgramFiles(x86)%\Bovine University\moo.exe'
|
||||
register: install_network_msi_argument_moo
|
||||
|
||||
- name: get result of cow file after install network msi with arguments
|
||||
win_stat:
|
||||
path: '%ProgramFiles(x86)%\Bovine University\cow.exe'
|
||||
register: install_network_msi_argument_cow
|
||||
|
||||
- name: assert install network msi with arguments
|
||||
assert:
|
||||
that:
|
||||
- install_network_msi_argument|changed
|
||||
- install_network_msi_argument.reboot_required == False
|
||||
- install_network_msi_argument.exit_code == 0
|
||||
- install_network_msi_argument_moo.stat.exists == False
|
||||
- install_network_msi_argument_cow.stat.exists == True
|
||||
|
||||
- name: install network msi with arguments (idempotent)
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\good.msi'
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: present
|
||||
arguments: ADDLOCAL=Cow
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: install_network_msi_argument_again
|
||||
|
||||
- name: assert install network msi with arguments (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not install_network_msi_argument_again|changed
|
||||
|
||||
- name: uninstall msi after test
|
||||
win_package:
|
||||
product_id: '{{test_win_package_good_id}}'
|
||||
state: absent
|
||||
|
||||
- name: install network exe (check mode)
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\7z.exe'
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: present
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: install_network_exe_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of install network exe (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_exe_id}}
|
||||
register: install_network_exe_actual_check
|
||||
|
||||
- name: assert install network exe (check mode)
|
||||
assert:
|
||||
that:
|
||||
- install_network_exe_check|changed
|
||||
- install_network_exe_check.reboot_required == False
|
||||
- install_network_exe_actual_check.exists == False
|
||||
|
||||
- name: install network exe
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\7z.exe'
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: present
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: install_network_exe
|
||||
|
||||
- name: get result of install network exe
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_exe_id}}
|
||||
register: install_network_exe_actual
|
||||
|
||||
- name: assert install network exe
|
||||
assert:
|
||||
that:
|
||||
- install_network_exe|changed
|
||||
- install_network_exe.reboot_required == False
|
||||
- install_network_exe.exit_code == 0
|
||||
- install_network_exe_actual.exists == True
|
||||
|
||||
- name: install network exe (idempotent)
|
||||
win_package:
|
||||
path: '{{test_win_package_network_path}}\7z.exe'
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: present
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: install_network_exe_idempotent
|
||||
|
||||
- name: assert install network exe (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not install_network_exe_idempotent|changed
|
||||
|
||||
- name: uninstall network exe (check mode)
|
||||
win_package:
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: absent
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: uninstall_network_exe_check
|
||||
check_mode: yes
|
||||
|
||||
- name: get result of uninstall network exe (check mode)
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_exe_id}}
|
||||
register: uninstall_network_exe_actual_check
|
||||
|
||||
- name: assert uninstall network exe (check mode)
|
||||
assert:
|
||||
that:
|
||||
- uninstall_network_exe_check|changed
|
||||
- uninstall_network_exe_check.reboot_required == False
|
||||
- uninstall_network_exe_actual_check.exists == True
|
||||
|
||||
- name: uninstall network exe
|
||||
win_package:
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: absent
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: uninstall_network_exe
|
||||
|
||||
- name: get result of uninstall network exe
|
||||
win_reg_stat:
|
||||
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{test_win_package_exe_id}}
|
||||
register: uninstall_network_exe_actual
|
||||
|
||||
- name: assert uninstall network exe
|
||||
assert:
|
||||
that:
|
||||
- uninstall_network_exe|changed
|
||||
- uninstall_network_exe.reboot_required == False
|
||||
- uninstall_network_exe.exit_code == 0
|
||||
- uninstall_network_exe_actual.exists == False
|
||||
|
||||
- name: uninstall network exe (idempotent)
|
||||
win_package:
|
||||
product_id: '{{test_win_package_exe_id}}'
|
||||
arguments: /S
|
||||
state: absent
|
||||
user_name: '{{test_win_package_network_username|default(omit)}}'
|
||||
user_password: '{{test_win_package_network_password|default(omit)}}'
|
||||
register: uninstall_network_exe_idempotent
|
||||
|
||||
- name: assert uninstall network exe (idempotent)
|
||||
assert:
|
||||
that:
|
||||
- not uninstall_network_exe_idempotent|changed
|
Loading…
Reference in a new issue