@@ -24,12 +24,19 @@ param()
2424$ErrorActionPreference = " Stop"
2525
2626# Documentation: https://docs.ansible.com/ansible/2.10/dev_guide/developing_modules_general_windows.html#windows-new-module-development
27+ $ValidStates = @ (" disabled" , " enabled" )
2728function Get-ModuleSpec {
2829 @ {
2930 options = @ {
3031 name = @ { type = " str" ; required = $true }
31- state = @ { type = " str" ; default = " enabled" ; choices = " disabled" , " enabled" }
32+ state = @ { type = " str" ; default = " enabled" ; choices = $ValidStates }
33+ features = @ { type = " dict" }
3234 }
35+ mutually_exclusive = @ (
36+ , @ (" features" , " name" )
37+ , @ (" feature" , " state" )
38+ )
39+ required_one_of = @ (, " name" , " features" )
3340 supports_check_mode = $true
3441 }
3542}
@@ -39,26 +46,46 @@ $spec = Get-ModuleSpec
3946$module = [Ansible.Basic.AnsibleModule ]::Create($args , $spec )
4047Set-ActiveModule $module
4148
42- $name = $module.Params.name
43- $state = $module.Params.state
49+ $FeaturesToSet = if ($module.Params.features ) {
50+ $module.Params.features
51+ } else {
52+ @ {
53+ $module.Params.name = $module.Params.state
54+ }
55+ }
4456
4557$chocoCommand = Get-ChocolateyCommand
4658$featureStates = Get-ChocolateyFeature - ChocoCommand $chocoCommand
4759
48- if ($name -notin $featureStates.Keys ) {
49- $message = " Invalid feature name '$name ' specified, valid features are: $ ( $featureStates.Keys -join ' , ' ) "
50- Assert-TaskFailed - Message $message
60+ if ($InvalidFeatures = ($FeaturesToSet.GetEnumerator () | Where-Object Key -notin $featureStates.Keys ).Key) {
61+ $errorMessage = " Invalid feature name(s) '$ ( $InvalidFeatures.Key -join " ', '" ) ' specified, valid features are: $ ( $featureStates.Keys -join ' , ' ) "
5162}
5263
53- $shouldBeEnabled = $state -eq " enabled"
54- $isEnabled = $featureStates .$name
55-
56- if ($isEnabled -ne $shouldBeEnabled ) {
57- if (-not $module.CheckMode ) {
58- Set-ChocolateyFeature - ChocoCommand $chocoCommand - Name $name - Enabled:$shouldBeEnabled
64+ if (($InvalidStates = $FeaturesToSet.GetEnumerator () | Where-Object Value -notin $ValidStates ).Key) {
65+ if ($errorMessage ) {
66+ $errorMessage += " `n "
5967 }
68+ $errorMessage += " Invalid state specified for feature(s) '$ ( $InvalidStates -join " ', '" ) ', valid states are: $ ( $ValidStates -join ' , ' ) "
69+ }
70+
71+ if ($errorMessage ) {
72+ Assert-TaskFailed - Message $errorMessage
73+ }
74+
75+ foreach ($Feature in $FeaturesToSet.GetEnumerator ()) {
76+ $name = $Feature.Key
77+ $state = $Feature.Value
78+
79+ $shouldBeEnabled = $state -eq " enabled"
80+ $isEnabled = $featureStates .$name
6081
61- $module.Result.changed = $true
82+ if ($isEnabled -ne $shouldBeEnabled ) {
83+ if (-not $module.CheckMode ) {
84+ Set-ChocolateyFeature - ChocoCommand $chocoCommand - Name $name - Enabled:$shouldBeEnabled
85+ }
86+
87+ $module.Result.changed = $true
88+ }
6289}
6390
6491$module.ExitJson ()
0 commit comments