rabbitmq_plugin for Windows (#28017)

* Fixes #28016: rabbitmq_plugin for Windows

* Disable documentation check for rabbitmq_plugin.ps1

* Renamed rabbitmq_plugin -> win_rabbitmq_plugin

* Fixed the documentation after review

* Fixed 'RETURN' section

* Fixed docs for original module

* Added dots to original module docs.
This commit is contained in:
Artem Zinenko 2017-08-12 11:35:16 +03:00 committed by Dag Wieers
parent 3631163329
commit 6058cb736d
3 changed files with 205 additions and 16 deletions

View file

@ -16,46 +16,55 @@ ANSIBLE_METADATA = {'metadata_version': '1.0',
DOCUMENTATION = '''
---
module: rabbitmq_plugin
short_description: Adds or removes plugins to RabbitMQ
short_description: Manage RabbitMQ plugins
description:
- Enables or disables RabbitMQ plugins
- Manage RabbitMQ plugins.
version_added: "1.1"
author: '"Chris Hoffman (@chrishoffman)"'
author:
- Chris Hoffman (@chrishoffman)
options:
names:
description:
- Comma-separated list of plugin names
- Comma-separated list of plugin names.
required: true
default: null
aliases: [name]
new_only:
description:
- Only enable missing plugins
- Does not disable plugins that are not in the names list
required: false
- Only enable missing plugins.
- Does not disable plugins that are not in the names list.
type: bool
default: "no"
choices: [ "yes", "no" ]
state:
description:
- Specify if plugins are to be enabled or disabled
required: false
- Specify if plugins are to be enabled or disabled.
default: enabled
choices: [enabled, disabled]
prefix:
description:
- Specify a custom install prefix to a Rabbit
required: false
- Specify a custom install prefix to a Rabbit.
version_added: "1.3"
default: null
'''
EXAMPLES = '''
# Enables the rabbitmq_management plugin
- rabbitmq_plugin:
- name: Enables the rabbitmq_management plugin
rabbitmq_plugin:
names: rabbitmq_management
state: enabled
'''
RETURN = '''
enabled:
description: list of plugins enabled during task run
returned: always
type: list
sample: ["rabbitmq_management"]
disabled:
description: list of plugins disabled during task run
returned: always
type: list
sample: ["rabbitmq_management"]
'''
import os
from ansible.module_utils.basic import AnsibleModule

View file

@ -0,0 +1,121 @@
#!powershell
# Copyright (c) 2017 Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# WANT_JSON
# POWERSHELL_COMMON
function Get-EnabledPlugins($rabbitmq_plugins_cmd)
{
$list_plugins_cmd = "$rabbitmq_plugins_cmd list -E -m"
try {
$enabled_plugins = @(Invoke-Expression "& $list_plugins_cmd" | Where { $_ })
return ,$enabled_plugins
}
catch {
Fail-Json -obj $result -message "Can't execute `"$($list_plugins_cmd)`": $($_.Exception.Message)"
}
}
function Enable-Plugin($rabbitmq_plugins_cmd, $plugin_name)
{
$enable_plugin_cmd = "$rabbitmq_plugins_cmd enable $plugin_name"
try {
Invoke-Expression "& $enable_plugin_cmd"
}
catch {
Fail-Json -obj $result -message "Can't execute `"$($enable_plugin_cmd)`": $($_.Exception.Message)"
}
}
function Disable-Plugin($rabbitmq_plugins_cmd, $plugin_name)
{
$enable_plugin_cmd = "$rabbitmq_plugins_cmd disable $plugin_name"
try {
Invoke-Expression "& $enable_plugin_cmd"
}
catch {
Fail-Json -obj $result -message "Can't execute `"$($enable_plugin_cmd)`": $($_.Exception.Message)"
}
}
$ErrorActionPreference = "Stop"
$result = @{
changed = $false
enabled = @()
disabled = @()
}
$params = Parse-Args $args -supports_check_mode $true;
$check_mode = Get-AnsibleParam -obj $params -name "_ansible_check_mode" -type "bool" -default $false
$diff_support = Get-AnsibleParam -obj $params -name "_ansible_diff" -type "bool" -default $false
$names = Get-AnsibleParam -obj $params -name "names" -type "str" -failifempty $true -aliases "name"
$new_only = Get-AnsibleParam -obj $params -name "new_only" -type "bool" -default $false
$state = Get-AnsibleParam -obj $params -name "state" -type "str" -default "enabled" -validateset "enabled","disabled"
$prefix = Get-AnsibleParam -obj $params -name "prefix" -type "str"
if ($diff_support) {
$result.diff = @{}
$result.diff.prepared = ""
}
$plugins = $names.Split(",")
if ($prefix) {
if (Test-Path (Join-Path -Path $prefix -ChildPath 'bin')) {
$rabbitmq_bin_path = Join-Path -Path $prefix -ChildPath 'bin'
} elseif (Test-Path (Join-Path -Path $prefix -ChildPath 'sbin')) {
$rabbitmq_bin_path = Join-Path -Path $prefix -ChildPath 'sbin'
} else {
Fail-Json -obj $result -message "No binary folder in prefix `"$($prefix)`""
}
$rabbitmq_plugins_cmd = "'$(Join-Path -Path $rabbitmq_bin_path -ChildPath "rabbitmq-plugins")'"
} else {
$rabbitmq_plugins_cmd = "rabbitmq-plugins"
}
$enabled_plugins = Get-EnabledPlugins -rabbitmq_plugins_cmd $rabbitmq_plugins_cmd
if ($state -eq "enabled") {
$plugins_to_enable = $plugins | ?{-not ($enabled_plugins -contains $_)}
foreach ($plugin in $plugins_to_enable) {
if (-not $check_mode) {
Enable-Plugin -rabbitmq_plugins_cmd $rabbitmq_plugins_cmd -plugin_name $plugin
}
if ($diff_support) {
$result.diff.prepared += "+[$plugin]`n"
}
$result.enabled += $plugin
$result.changed = $true
}
if (-not $new_only) {
$plugins_to_disable = $enabled_plugins | ?{-not ($plugins -contains $_)}
foreach ($plugin in $plugins_to_disable) {
if (-not $check_mode) {
Disable-Plugin -rabbitmq_plugins_cmd $rabbitmq_plugins_cmd -plugin_name $plugin
}
if ($diff_support) {
$result.diff.prepared += "-[$plugin]`n"
}
$result.disabled += $plugin
$result.changed = $true
}
}
} else {
$plugins_to_disable = $enabled_plugins | ?{$plugins -contains $_}
foreach ($plugin in $plugins_to_disable) {
if (-not $check_mode) {
Disable-Plugin -rabbitmq_plugins_cmd $rabbitmq_plugins_cmd -plugin_name $plugin
}
if ($diff_support) {
$result.diff.prepared += "-[$plugin]`n"
}
$result.disabled += $plugin
$result.changed = $true
}
}
Exit-Json $result

View file

@ -0,0 +1,59 @@
#!/usr/bin/python
# Copyright (c) 2017 Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
ANSIBLE_METADATA = {'metadata_version': '1.0',
'status': ['preview'],
'supported_by': 'community'}
DOCUMENTATION = r'''
---
module: win_rabbitmq_plugin
short_description: Manage RabbitMQ plugins
description:
- Manage RabbitMQ plugins.
version_added: "2.4"
author:
- Artem Zinenko (@ar7z1)
options:
names:
description:
- Comma-separated list of plugin names.
required: true
aliases: [name]
new_only:
description:
- Only enable missing plugins.
- Does not disable plugins that are not in the names list.
type: bool
default: "no"
state:
description:
- Specify if plugins are to be enabled or disabled.
default: enabled
choices: [enabled, disabled]
prefix:
description:
- Specify a custom install prefix to a Rabbit.
'''
EXAMPLES = r'''
- name: Enables the rabbitmq_management plugin
win_rabbitmq_plugin:
names: rabbitmq_management
state: enabled
'''
RETURN = r'''
enabled:
description: list of plugins enabled during task run
returned: always
type: list
sample: ["rabbitmq_management"]
disabled:
description: list of plugins disabled during task run
returned: always
type: list
sample: ["rabbitmq_management"]
'''