88 lines
3.6 KiB
YAML
88 lines
3.6 KiB
YAML
|
# Installs PackageManagement and PowerShellGet to the required versions for testing
|
||
|
---
|
||
|
- name: check if PackageManagement has been installed
|
||
|
win_shell: if (Get-Command -Name Install-Module -ErrorAction SilentlyContinue) { $true } else { $false }
|
||
|
changed_when: False
|
||
|
register: module_installed
|
||
|
|
||
|
- name: install PackageManagement and PowerShellGet
|
||
|
when: not module_installed.stdout | trim | bool
|
||
|
block:
|
||
|
- name: install PackageManagement
|
||
|
win_package:
|
||
|
path: https://s3.amazonaws.com/ansible-ci-files/test/integration/targets/setup_win_psget/PackageManagement_x64.msi
|
||
|
product_id: '{57E5A8BB-41EB-4F09-B332-B535C5954A28}'
|
||
|
state: present
|
||
|
|
||
|
- name: create the required folder
|
||
|
win_file:
|
||
|
path: C:\Program Files\PackageManagement\ProviderAssemblies\nuget\2.8.5.208
|
||
|
state: directory
|
||
|
|
||
|
- name: download nuget provider dll
|
||
|
win_get_url:
|
||
|
url: https://s3.amazonaws.com/ansible-ci-files/test/integration/targets/setup_win_psget/Microsoft.PackageManagement.NuGetProvider-2.8.5.208.dll
|
||
|
dest: C:\Program Files\PackageManagement\ProviderAssemblies\nuget\2.8.5.208\Microsoft.PackageManagement.NuGetProvider.dll
|
||
|
|
||
|
- name: get version and install location of PackageManagement and PowerShellGet
|
||
|
win_shell: |
|
||
|
$info = @{}
|
||
|
$modules = Get-Module -ListAvailable | Where-Object {
|
||
|
($_.Name -eq "PackageManagement" -and $_.Version -lt "1.1.7") -or ($_.Name -eq "PowerShellGet" -and $_.Version -lt "1.6.0")
|
||
|
} | ForEach-Object {
|
||
|
$module_info = @{}
|
||
|
if ([System.IO.Path]::GetFileName($_.ModuleBase) -eq $_.Name) {
|
||
|
$module_info.remove_path = $_.ModuleBase
|
||
|
$module_info.install_path = $_.ModuleBase
|
||
|
} else {
|
||
|
$module_version = switch($_.Name) {
|
||
|
PackageManagement { "1.1.7.0" }
|
||
|
PowerShellGet { "1.6.0" }
|
||
|
}
|
||
|
$module_info.remove_path = ""
|
||
|
$module_info.install_path = ([System.IO.Path]::Combine([System.IO.Path]::GetDirectoryName($_.ModuleBase), $module_version))
|
||
|
}
|
||
|
$info.($_.Name) = $module_info
|
||
|
}
|
||
|
|
||
|
ConvertTo-Json -InputObject $info -Compress
|
||
|
changed_when: False
|
||
|
register: installed_modules
|
||
|
|
||
|
- name: register installed_modules info
|
||
|
set_fact:
|
||
|
installed_modules: '{{ installed_modules.stdout | trim | from_json }}'
|
||
|
|
||
|
- name: update the PackageManagement and PowerShellGet versions
|
||
|
when: installed_modules.keys() | list | length > 0
|
||
|
block:
|
||
|
- name: download newer PackageManagement and PowerShellGet nupkg
|
||
|
win_get_url:
|
||
|
url: '{{ item.url }}'
|
||
|
dest: '{{ remote_tmp_dir }}\{{ item.name }}.zip' # .zip is required for win_unzip
|
||
|
when: item.name in installed_modules
|
||
|
loop:
|
||
|
- name: PackageManagement
|
||
|
url: https://s3.amazonaws.com/ansible-ci-files/test/integration/targets/setup_win_psget/packagemanagement.1.1.7.nupkg
|
||
|
- name: PowerShellGet
|
||
|
url: https://s3.amazonaws.com/ansible-ci-files/test/integration/targets/setup_win_psget/powershellget.1.6.0.nupkg
|
||
|
|
||
|
- name: remove the old versions of PackageManagement and PowerShellGet
|
||
|
win_file:
|
||
|
path: '{{ item.value.remove_path }}'
|
||
|
state: absent
|
||
|
# This isn't necessary on 2016+ as packages are installed in a version specific dir
|
||
|
when: item.value.remove_path != ""
|
||
|
with_dict: '{{ installed_modules }}'
|
||
|
|
||
|
- name: extract new modules to correct location
|
||
|
win_unzip:
|
||
|
src: '{{ remote_tmp_dir }}\{{ item.name }}.zip'
|
||
|
dest: '{{ item.path }}'
|
||
|
when: item.path != ""
|
||
|
loop:
|
||
|
- name: PackageManagement
|
||
|
path: '{{ installed_modules.PackageManagement.install_path | default("") }}'
|
||
|
- name: PowerShellGet
|
||
|
path: '{{ installed_modules.PowerShellGet.install_path | default("") }}'
|