Support lists of packages in win_winget module

This commit is contained in:
Kenneth Benzie 2024-12-10 23:19:12 +00:00
parent a9aa1bdaaf
commit 1995bf3bc2
2 changed files with 37 additions and 34 deletions

View File

@ -6,8 +6,9 @@
$module = [Ansible.Basic.AnsibleModule]::Create($args, @{ $module = [Ansible.Basic.AnsibleModule]::Create($args, @{
options = @{ options = @{
name = @{ name = @{
type = "str" type = "list"
default = $null elements = "str"
required = $true
} }
state = @{ state = @{
type = "str" type = "str"
@ -18,7 +19,7 @@ $module = [Ansible.Basic.AnsibleModule]::Create($args, @{
supports_check_mode = $false supports_check_mode = $false
}) })
$name = $module.Params.name $names = $module.Params.name
$state = $module.Params.state $state = $module.Params.state
$winget = Get-ExecutablePath "winget" $winget = Get-ExecutablePath "winget"
$noPackageString = "No installed package found matching input criteria." $noPackageString = "No installed package found matching input criteria."
@ -48,46 +49,48 @@ function Test-UpgradeAvailable {
return $true return $true
} }
switch ($state) { foreach ($name in $names) {
"absent" { switch ($state) {
if (Test-Installed) { "absent" {
$command = "`"$winget`" uninstall `"$name`"" if (Test-Installed) {
$result = Run-Command -command $command $command = "`"$winget`" uninstall `"$name`""
if ($result.rc -ne 0) { $result = Run-Command -command $command
$module.Result.rc = $result.rc if ($result.rc -ne 0) {
$module.Result.rc = $result.rc
$module.Result.stdout = $result.stdout
$module.FailJson("Failed to uninstall package `"$name`"")
}
$module.Result.stdout = $result.stdout $module.Result.stdout = $result.stdout
$module.FailJson("Failed to uninstall package `"$name`"") $module.Result.changed = $true
} }
$module.Result.stdout = $result.stdout
$module.Result.changed = $true
} }
}
"latest" { "latest" {
if (Test-UpgradeAvailable) { if (Test-UpgradeAvailable) {
$command = "`"$winget`" install `"$name`"" $command = "`"$winget`" install `"$name`""
$result = Run-Command -command $command $result = Run-Command -command $command
if ($result.rc -ne 0) { if ($result.rc -ne 0) {
$module.Result.rc = $result.rc $module.Result.rc = $result.rc
$module.Result.stdout = $result.stdout
$module.FailJson("Failed to install package `"$name`"")
}
$module.Result.stdout = $result.stdout $module.Result.stdout = $result.stdout
$module.FailJson("Failed to install package `"$name`"") $module.Result.changed = $true
} }
$module.Result.stdout = $result.stdout
$module.Result.changed = $true
} }
}
"present" { "present" {
if (!(Test-Installed)) { if (!(Test-Installed)) {
$command = "`"$winget`" install `"$name`"" $command = "`"$winget`" install `"$name`""
$result = Run-Command -command $command $result = Run-Command -command $command
if ($result.rc -ne 0) { if ($result.rc -ne 0) {
$module.Result.rc = $result.rc $module.Result.rc = $result.rc
$module.Result.stdout = $result.stdout
$module.FailJson("Failed to install package `"$name`"")
}
$module.Result.stdout = $result.stdout $module.Result.stdout = $result.stdout
$module.FailJson("Failed to install package `"$name`"") $module.Result.changed = $true
} }
$module.Result.stdout = $result.stdout
$module.Result.changed = $true
} }
} }
} }

View File

@ -11,7 +11,7 @@ options:
name: name:
description: description:
- Name of the package to manage. - Name of the package to manage.
type: str type: list[str]
state: state:
description: description:
- Indicates the desired package state. V(latest) ensures that the latest - Indicates the desired package state. V(latest) ensures that the latest