From eb6956e1dd4cd7e2e5d18fed6b2a378138a7f446 Mon Sep 17 00:00:00 2001 From: Trond Hindenes Date: Sat, 18 Feb 2017 16:19:12 +0100 Subject: [PATCH] win_nssm improvements (#21290) * win_nssm improvements * updated version_added --- lib/ansible/modules/windows/win_nssm.ps1 | 16 +++++++++++++--- lib/ansible/modules/windows/win_nssm.py | 14 ++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/lib/ansible/modules/windows/win_nssm.ps1 b/lib/ansible/modules/windows/win_nssm.ps1 index da3d01a716..c0f2f08100 100644 --- a/lib/ansible/modules/windows/win_nssm.ps1 +++ b/lib/ansible/modules/windows/win_nssm.ps1 @@ -33,6 +33,7 @@ $state = Get-Attr $params "state" -default "present" -validateSet "present", "ab $application = Get-Attr $params "application" -default $null $appParameters = Get-Attr $params "app_parameters" -default $null +$appParametersFree = Get-Attr $params "app_parameters_free_form" -default $null $startMode = Get-Attr $params "start_mode" -default "auto" -validateSet "auto", "manual", "disabled" -resultobj $result $stdoutFile = Get-Attr $params "stdout_file" -default $null @@ -42,6 +43,10 @@ $dependencies = Get-Attr $params "dependencies" -default $null $user = Get-Attr $params "user" -default $null $password = Get-Attr $params "password" -default $null +if (($appParameters -ne $null) -and ($appParametersFree -ne $null)) +{ + Fail-Json $result "Use either app_parameters or app_parameteres_free_form, but not both" +} #abstract the calling of nssm because some PowerShell environments #mishandle its stdout(which is Unicode) as UTF8 @@ -209,7 +214,8 @@ Function Nssm-Update-AppParameters [string]$name, [Parameter(Mandatory=$true)] [AllowEmptyString()] - [string]$appParameters + [string]$appParameters, + [string]$appParametersFree ) $cmd = "get ""$name"" AppParameters" @@ -248,13 +254,17 @@ Function Nssm-Update-AppParameters Set-Attr $result "nssm_app_parameters_keys" $appParamKeys Set-Attr $result "nssm_app_parameters_vals" $appParamVals } + elseif ($appParametersFree) { + Set-Attr $result "nssm_app_parameters_free_form" $appParametersFree + $singleLineParams = $appParametersFree + } Set-Attr $result "nssm_app_parameters" $appParameters Set-Attr $result "nssm_single_line_app_parameters" $singleLineParams if ($results -ne $singleLineParams) { - if ($appParameters) + if ($appParameters -or $appParametersFree) { $cmd = "set ""$name"" AppParameters $singleLineParams" } else { @@ -648,7 +658,7 @@ Function Nssm-Restart Function NssmProcedure { Nssm-Install -name $name -application $application - Nssm-Update-AppParameters -name $name -appParameters $appParameters + Nssm-Update-AppParameters -name $name -appParameters $appParameters -appParametersFree $appParametersFree Nssm-Set-Output-Files -name $name -stdout $stdoutFile -stderr $stderrFile Nssm-Update-Dependencies -name $name -dependencies $dependencies Nssm-Update-Credentials -name $name -user $user -password $password diff --git a/lib/ansible/modules/windows/win_nssm.py b/lib/ansible/modules/windows/win_nssm.py index c9372af78e..f8bb1a8f6c 100644 --- a/lib/ansible/modules/windows/win_nssm.py +++ b/lib/ansible/modules/windows/win_nssm.py @@ -75,6 +75,10 @@ options: - Parameters to be passed to the application when it starts required: false default: null + app_parameters_free_form: + version_added: "2.3.0" + description: + - Single string of parameters to be passed to the service. Use either this or 'app_parameters', not both dependencies: description: - Service dependencies that has to be started to trigger startup, separated by comma. @@ -144,6 +148,16 @@ EXAMPLES = r''' _: bar "-file": "output.bat" +# Use the single line parameters option to specify an arbitrary string of parameters +# for the service executable +- name: Make sure the Consul service runs + win_nssm: + name: consul + application: "C:\\consul\\consul.exe" + app_parameters_free_form: "agent -config-dir=C:\\consul\\config" + stdout_file: "C:\\consul\\log.txt" + stderr_file: "C:\\consul\\error.txt" + # Install and start the foo service, redirecting stdout and stderr to the same file - win_nssm: name: foo