Adding win_service module
This commit is contained in:
parent
35960ea192
commit
3000614930
2 changed files with 148 additions and 0 deletions
72
windows/win_service
Normal file
72
windows/win_service
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# (c) 2014, Chris Hoffman <choffman@chathamfinancial.com>
|
||||||
|
#
|
||||||
|
# This file is part of Ansible
|
||||||
|
#
|
||||||
|
# Ansible is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Ansible is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# this is a windows documentation stub. actual code lives in the .ps1
|
||||||
|
# file of the same name
|
||||||
|
|
||||||
|
DOCUMENTATION = '''
|
||||||
|
---
|
||||||
|
module: win_service
|
||||||
|
version_added: "1.7"
|
||||||
|
short_description: Manages Windows services
|
||||||
|
description:
|
||||||
|
- Manages Windows services
|
||||||
|
options:
|
||||||
|
name:
|
||||||
|
description:
|
||||||
|
- Name of the service
|
||||||
|
required: true
|
||||||
|
default: null
|
||||||
|
aliases: []
|
||||||
|
start_mode:
|
||||||
|
description:
|
||||||
|
- Set the startup type for the service
|
||||||
|
required: false
|
||||||
|
choices:
|
||||||
|
- auto
|
||||||
|
- manual
|
||||||
|
- disabled
|
||||||
|
state:
|
||||||
|
description:
|
||||||
|
- C(started)/C(stopped) are idempotent actions that will not run
|
||||||
|
commands unless necessary. C(restarted) will always bounce the
|
||||||
|
service.
|
||||||
|
required: false
|
||||||
|
choices:
|
||||||
|
- started
|
||||||
|
- stopped
|
||||||
|
- restarted
|
||||||
|
default: null
|
||||||
|
aliases: []
|
||||||
|
author: Chris Hoffman
|
||||||
|
'''
|
||||||
|
|
||||||
|
EXAMPLES = '''
|
||||||
|
# Restart a service
|
||||||
|
win_service:
|
||||||
|
name: ncover
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
# Set service startup mode to auto and ensure it is started
|
||||||
|
win_service:
|
||||||
|
name: ncover
|
||||||
|
start_mode: auto
|
||||||
|
state: started
|
||||||
|
'''
|
76
windows/win_service.ps1
Normal file
76
windows/win_service.ps1
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
#!powershell
|
||||||
|
# This file is part of Ansible
|
||||||
|
#
|
||||||
|
# Copyright 2014, Chris Hoffman <choffman@chathamfinancial.com>
|
||||||
|
#
|
||||||
|
# Ansible is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Ansible is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# WANT_JSON
|
||||||
|
# POWERSHELL_COMMON
|
||||||
|
|
||||||
|
$params = Parse-Args $args;
|
||||||
|
|
||||||
|
$result = New-Object PSObject;
|
||||||
|
Set-Attr $result "changed" $false;
|
||||||
|
|
||||||
|
If (-not $params.name.GetType)
|
||||||
|
{
|
||||||
|
Fail-Json $result "missing required arguments: name"
|
||||||
|
}
|
||||||
|
|
||||||
|
If ($params.state) {
|
||||||
|
$state = $params.state.ToString().ToLower()
|
||||||
|
If (($state -ne 'started') -and ($state -ne 'stopped') -and ($state -ne 'restarted')) {
|
||||||
|
Fail-Json $result "state is '$state'; must be 'started', 'stopped', or 'restarted'"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
If ($params.start_mode) {
|
||||||
|
$startMode = $params.start_mode.ToString().ToLower()
|
||||||
|
If (($startMode -ne 'auto') -and ($startMode -ne 'manual') -and ($startMode -ne 'disabled')) {
|
||||||
|
Fail-Json $result "start mode is '$startMode'; must be 'auto', 'manual', or 'disabled'"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$svcName = $params.name
|
||||||
|
$svc = Get-Service -Name $svcName -ErrorAction SilentlyContinue
|
||||||
|
If (-not $svc) {
|
||||||
|
Fail-Json $result "Service not installed"
|
||||||
|
}
|
||||||
|
|
||||||
|
If ($startMode) {
|
||||||
|
$svcMode = Get-WmiObject -Class Win32_Service -Property StartMode -Filter "Name='$svcName'"
|
||||||
|
|
||||||
|
If ($svcMode.StartMode.ToLower() -ne $startMode) {
|
||||||
|
Set-Service -Name $svcName -StartupType $startMode
|
||||||
|
Set-Attr $result "changed" $true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
If ($state) {
|
||||||
|
If ($state -eq "started" -and $svc.Status -ne "Running") {
|
||||||
|
Start-Service -Name $svcName
|
||||||
|
Set-Attr $result "changed" $true;
|
||||||
|
}
|
||||||
|
ElseIf ($state -eq "stopped" -and $svcName -ne "Stopped") {
|
||||||
|
Stop-Service -Name $svcName
|
||||||
|
Set-Attr $result "changed" $true;
|
||||||
|
}
|
||||||
|
ElseIf ($state -eq "restarted") {
|
||||||
|
Restart-Service -Name $svcName
|
||||||
|
Set-Attr $result "changed" $true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Exit-Json $result;
|
Loading…
Reference in a new issue