# test code for the win_psmodule module when using winrm connection # Copyright: (c) 2018, Wojciech Sciesinski # Copyright: (c) 2017, Daniele Lazzari # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) --- - name: setup test repos and modules import_tasks: setup.yml # Remove the below task in Ansible 2.12 - name: ensure warning is fired when adding a repo win_psmodule: name: ansible-test1 repository: some repo url: '{{ remote_tmp_dir }}' state: present register: dep_repo_add ignore_errors: yes # will fail because this repo doesn't actually have this module check_mode: yes - name: assert warning is fired when adding a repo assert: that: - dep_repo_add is changed - dep_repo_add.deprecations|length == 1 - dep_repo_add.deprecations[0].msg == 'Adding a repo with this module is deprecated, the repository parameter should only be used to select a repo. Use win_psrepository to manage repos' - dep_repo_add.deprecations[0].version == 2.12 - name: install package (check mode) win_psmodule: name: ansible-test1 state: present register: install_check check_mode: yes - name: get result of install package (check mode) win_shell: (Get-Module -ListAvailable -Name ansible-test1 | Measure-Object).Count register: install_actual_check - name: assert install package (check mode) assert: that: - install_check is changed - install_actual_check.stdout | trim | int == 0 - name: install package win_psmodule: name: ansible-test1 state: present register: install - name: get result of install package win_shell: Import-Module -Name ansible-test1; Get-AnsibleTest1 | ConvertTo-Json register: install_actual - name: assert install package assert: that: - install is changed - install_actual.stdout | from_json == {"Name":"ansible-test1","Version":"1.1.0","Repo":"PSRepo 1"} - name: install package (idempotent) win_psmodule: name: ansible-test1 state: present register: install_again - name: assert install package (idempotent) assert: that: - not install_again is changed - name: remove package (check mode) win_psmodule: name: ansible-test1 state: absent register: remove_check check_mode: yes - name: get result of remove package (check mode) win_shell: (Get-Module -ListAvailable -Name ansible-test1 | Measure-Object).Count register: remove_actual_check - name: remove package (check mode) assert: that: - remove_check is changed - remove_actual_check.stdout | trim | int == 1 - name: remove package win_psmodule: name: ansible-test1 state: absent register: remove - name: get result of remove package win_shell: (Get-Module -ListAvailable -Name ansible-test1 | Measure-Object).Count register: remove_actual - name: assert remove package assert: that: - remove is changed - remove_actual.stdout | trim | int == 0 - name: remove package (idempotent) win_psmodule: name: ansible-test1 state: absent register: remove_again - name: assert remove package (idempotent) assert: that: - not remove_again is changed - name: fail to install module that exists in multiple repos win_psmodule: name: ansible-test2 state: present register: fail_multiple_pkg failed_when: 'fail_multiple_pkg.msg != "Problems installing ansible-test2 module: Unable to install, multiple modules matched ''ansible-test2''. Please specify a single -Repository."' - name: install module with specific repository win_psmodule: name: ansible-test2 repository: PSRepo 2 state: present register: install_repo - name: get result of install module with specific repository win_shell: Import-Module -Name ansible-test2; Get-AnsibleTest2 | ConvertTo-Json register: install_repo_actual - name: assert install module with specific repository assert: that: - install_repo is changed - install_repo_actual.stdout | from_json == {"Name":"ansible-test2","Version":"1.0.0","Repo":"PSRepo 2"} - name: install module with specific repository (idempotent) win_psmodule: name: ansible-test2 repository: PSRepo 2 state: present register: install_repo_again - name: assert install module with specific repository (idempotent) assert: that: - not install_repo_again is changed - name: remove package that was installed from specific repository win_psmodule: name: ansible-test2 state: absent register: remove_repo_without_source - name: get result of remove package that was installed from specific repository win_shell: (Get-Module -ListAvailable -Name ansible-test2 | Measure-Object).Count register: remove_repo_without_source_actual - name: assert remove package that was installed from specific repository assert: that: - remove_repo_without_source is changed - remove_repo_without_source_actual.stdout | trim | int == 0 - name: fail to install required version that is missing win_psmodule: name: ansible-test1 required_version: 0.9.0 state: present register: fail_missing_req failed_when: '"Problems installing ansible-test1 module: No match was found for the specified search criteria" not in fail_missing_req.msg' - name: install required version win_psmodule: name: ansible-test1 required_version: 1.0.0 state: present register: install_req_version - name: get result of install required version win_shell: Import-Module -Name ansible-test1; Get-AnsibleTest1 | ConvertTo-Json register: install_req_version_actual - name: assert install required version assert: that: - install_req_version is changed - install_req_version_actual.stdout | from_json == {"Name":"ansible-test1","Version":"1.0.0","Repo":"PSRepo 1"} - name: install required version (idempotent) win_psmodule: name: ansible-test1 required_version: 1.0.0 state: present register: install_req_version_again - name: assert install required version (idempotent) assert: that: - not install_req_version_again is changed - name: remove required version win_psmodule: name: ansible-test1 required_version: 1.0.0 state: absent register: remove_req_version - name: get result of remove required version win_shell: (Get-Module -ListAvailable -Name ansible-test1 | Measure-Object).Count register: remove_req_version_actual - name: assert remove required version assert: that: - remove_req_version is changed - remove_req_version_actual.stdout | trim | int == 0 - name: remove required version (idempotent) win_psmodule: name: ansible-test1 required_version: 1.0.0 state: absent register: remove_req_version_again - name: assert remove required version (idempotent) assert: that: - not remove_req_version_again is changed - name: install min max version win_psmodule: name: ansible-test1 minimum_version: 1.0.1 maximum_version: 1.0.9 state: present register: install_min_max - name: get result of install min max version win_shell: Import-Module -Name ansible-test1; Get-AnsibleTest1 | ConvertTo-Json register: install_min_max_actual - name: assert install min max version assert: that: - install_min_max is changed - install_min_max_actual.stdout | from_json == {"Name":"ansible-test1","Version":"1.0.5","Repo":"PSRepo 1"} - name: install min max version (idempotent) win_psmodule: name: ansible-test1 minimum_version: 1.0.1 maximum_version: 1.0.9 state: present register: install_min_max_again - name: assert install min max version (idempotent) assert: that: - not install_min_max_again is changed - name: update package to latest version win_psmodule: name: ansible-test1 state: latest register: update_module - name: get result of update package to latest version win_shell: Import-Module -Name ansible-test1; Get-AnsibleTest1 | ConvertTo-Json register: update_module_actual - name: assert update package to latest version assert: that: - update_module is changed - update_module_actual.stdout | from_json == {"Name":"ansible-test1","Version":"1.1.0","Repo":"PSRepo 1"} - name: update package to latest version (idempotent) win_psmodule: name: ansible-test1 state: latest register: update_module_again - name: assert update package to latest version (idempotent) assert: that: - not update_module_again is changed - name: remove package that does not match min version win_psmodule: name: ansible-test1 minimum_version: 2.0.0 state: absent register: remove_min_no_change - name: assert remove package that does not match min version assert: that: - not remove_min_no_change is changed - name: remove package that does not match max version win_psmodule: name: ansible-test1 maximum_version: 0.9.0 state: absent register: remove_max_no_change - name: assert remove package that does not match max version assert: that: - not remove_max_no_change is changed - name: uninstall package to clear tests win_psmodule: name: ansible-test1 state: absent - name: install package with max version win_psmodule: name: ansible-test2 maximum_version: 1.0.0 repository: PSRepo 1 state: present register: install_max - name: get result of install package with max version win_shell: Import-Module -Name ansible-test2; Get-AnsibleTest2 | ConvertTo-Json register: install_max_actual - name: assert install package with max version assert: that: - install_max is changed - install_max_actual.stdout | from_json == {"Name":"ansible-test2","Version":"1.0.0","Repo":"PSRepo 1"} - name: fail to install updated package without skip publisher win_psmodule: name: ansible-test2 required_version: 1.0.1 # This version has been pureposefully not been signed for testing repository: PSRepo 1 state: present register: fail_skip_pub failed_when: '"The version ''1.0.1'' of the module ''ansible-test2'' being installed is not catalog signed" not in fail_skip_pub.msg' - name: install updated package provider with skip publisher win_psmodule: name: ansible-test2 required_version: 1.0.1 repository: PSRepo 1 state: present skip_publisher_check: yes register: install_skip_pub - name: get result of install updated package provider with skip publisher win_shell: Import-Module -Name ansible-test2; Get-AnsibleTest2 | ConvertTo-Json register: install_skip_pub_actual - name: assert install updated package provider with skip publisher assert: that: - install_skip_pub is changed - install_skip_pub_actual.stdout | from_json == {"Name":"ansible-test2","Version":"1.0.1","Repo":"PSRepo 1"} - name: remove test package 2 for clean test win_psmodule: name: ansible-test2 state: absent - name: fail to install clobbered module win_psmodule: name: ansible-clobber state: present register: fail_clobbering_time failed_when: '"If you still want to install this module ''ansible-clobber'', use -AllowClobber parameter." not in fail_clobbering_time.msg' - name: install clobbered module win_psmodule: name: ansible-clobber allow_clobber: yes state: present register: install_clobber - name: get result of install clobbered module win_shell: Import-Module -Name ansible-clobber; Enable-PSTrace | ConvertTo-Json register: install_clobber_actual - name: assert install clobbered module assert: that: - install_clobber is changed - install_clobber_actual.stdout | from_json == {"Name":"ansible-clobber","Version":"0.1.0","Repo":"PSRepo 1"} - name: remove clobbered module win_psmodule: name: ansible-clobber state: absent register: remove_clobber - name: get result of remove clobbered module win_shell: (Get-Module -ListAvailable -Name ansible-clobber | Measure-Object).Count register: remove_clobber_actual - name: assert remove clobbered module assert: that: - remove_clobber is changed - remove_clobber_actual.stdout | trim | int == 0 - name: fail to install prerelese module win_psmodule: name: ansible-test2 repository: PSRepo 1 required_version: 1.1.0-beta1 state: present register: fail_install_prerelease failed_when: '"The ''-AllowPrerelease'' parameter must be specified when using the Prerelease string" not in fail_install_prerelease.msg' - name: install prerelease module win_psmodule: name: ansible-test2 repository: PSRepo 1 required_version: 1.1.0-beta1 allow_prerelease: yes state: present register: install_prerelease - name: get result of install prerelease module win_shell: Import-Module -Name ansible-test2; Get-AnsibleTest2 | ConvertTo-Json register: install_prerelease_actual - name: assert install prerelease module assert: that: - install_prerelease is changed - install_prerelease_actual.stdout | from_json == {"Name":"ansible-test2","Version":"1.1.0","Repo":"PSRepo 1"} - name: remove prerelease module win_psmodule: name: ansible-test2 state: absent register: remove_prerelease - name: get result of remove prerelease module win_shell: (Get-Module -ListAvailable -Name ansible-test2 | Measure-Object).Count register: remove_prerelease_actual - name: assert remove prerelease module assert: that: - remove_prerelease is changed - remove_prerelease_actual.stdout | trim | int == 0