summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtem Zinenko <zinenkoartem@gmail.com>2017-08-12 11:35:16 +0300
committerDag Wieers <dag@wieers.com>2017-08-12 10:35:16 +0200
commit6058cb736d3297edb2ec425f598ae836d8683b3e (patch)
tree2091e71e5c6eda73b31f70deb27920b5262d1059
parent36311633299fe9af67214ff8027f21e63c84467a (diff)
downloadansible-6058cb736d3297edb2ec425f598ae836d8683b3e.tar.gz
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.
-rw-r--r--lib/ansible/modules/messaging/rabbitmq_plugin.py41
-rw-r--r--lib/ansible/modules/windows/win_rabbitmq_plugin.ps1121
-rw-r--r--lib/ansible/modules/windows/win_rabbitmq_plugin.py59
3 files changed, 205 insertions, 16 deletions
diff --git a/lib/ansible/modules/messaging/rabbitmq_plugin.py b/lib/ansible/modules/messaging/rabbitmq_plugin.py
index 7d10dcabf4..05b15abf60 100644
--- a/lib/ansible/modules/messaging/rabbitmq_plugin.py
+++ b/lib/ansible/modules/messaging/rabbitmq_plugin.py
@@ -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
diff --git a/lib/ansible/modules/windows/win_rabbitmq_plugin.ps1 b/lib/ansible/modules/windows/win_rabbitmq_plugin.ps1
new file mode 100644
index 0000000000..210db06763
--- /dev/null
+++ b/lib/ansible/modules/windows/win_rabbitmq_plugin.ps1
@@ -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
diff --git a/lib/ansible/modules/windows/win_rabbitmq_plugin.py b/lib/ansible/modules/windows/win_rabbitmq_plugin.py
new file mode 100644
index 0000000000..e6ea0329ea
--- /dev/null
+++ b/lib/ansible/modules/windows/win_rabbitmq_plugin.py
@@ -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"]
+'''