Skip to content

Commit

Permalink
win_service: quoted path fix (#32469)
Browse files Browse the repository at this point in the history
* win_service: fix for path in quotes

* Added tests to verify behaviour doesn't regress

(cherry picked from commit 5b1db00)
  • Loading branch information
jborean93 committed Nov 2, 2017
1 parent 82c2da3 commit e771b64
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 1 deletion.
5 changes: 4 additions & 1 deletion lib/ansible/modules/windows/win_service.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ $display_name = Get-AnsibleParam -obj $params -name 'display_name' -type 'str'
$force_dependent_services = Get-AnsibleParam -obj $params -name 'force_dependent_services' -type 'bool' -default $false
$name = Get-AnsibleParam -obj $params -name 'name' -type 'str' -failifempty $true
$password = Get-AnsibleParam -obj $params -name 'password' -type 'str'
$path = Get-AnsibleParam -obj $params -name 'path' -type 'path'
$path = Get-AnsibleParam -obj $params -name 'path'
$start_mode = Get-AnsibleParam -obj $params -name 'start_mode' -type 'str' -validateset 'auto','manual','disabled','delayed'
$state = Get-AnsibleParam -obj $params -name 'state' -type 'str' -validateset 'started','stopped','restarted','absent','paused'
$username = Get-AnsibleParam -obj $params -name 'username' -type 'str'
Expand All @@ -51,6 +51,9 @@ if ($password -ne $null -and $username -eq $null) {
if ($desktop_interact -eq $true -and (-not ($username -eq "LocalSystem" -or $username -eq $null))) {
Fail-Json $result "Can only set 'desktop_interact' to true when 'username' equals 'LocalSystem'"
}
if ($path -ne $null) {
$path = [System.Environment]::ExpandEnvironmentVariables($path)
}

Function Get-ServiceInfo($name) {
# Need to get new objects so we have the latest info
Expand Down
6 changes: 6 additions & 0 deletions test/integration/targets/win_service/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,9 @@
- '{{test_win_service_name}}'
- TestServiceParent2
- TestServiceDependency

- name: remove test environment variable
win_environment:
name: TEST_SERVICE_PATH
level: machine
state: absent
31 changes: 31 additions & 0 deletions test/integration/targets/win_service/tasks/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -610,6 +610,37 @@
- not win_service_path_again|changed
- win_service_path_again.path == 'C:\\temp\\test.exe'

- name: create test environment variable
win_environment:
name: TEST_SERVICE_PATH
value: C:\temp
level: machine
state: present

- name: set service path with quotes and env var
win_service:
name: "{{test_win_service_name}}"
path: '"%TEST_SERVICE_PATH%\test.exe"'
register: win_service_env_quote_path

- name: check that the quoted service path has been changed
assert:
that:
- win_service_env_quote_path|changed
- win_service_env_quote_path.path == '"C:\\temp\\test.exe"'

- name: set service path with quotes and env var again
win_service:
name: "{{test_win_service_name}}"
path: '"%TEST_SERVICE_PATH%\test.exe"'
register: win_service_env_quote_path_again

- name: check that the quoted service path has been changed again
assert:
that:
- not win_service_env_quote_path_again|changed
- win_service_env_quote_path_again.path == '"C:\\temp\\test.exe"'

- name: revert original service path back to normal
win_service:
name: "{{test_win_service_name}}"
Expand Down

0 comments on commit e771b64

Please sign in to comment.