diff --git a/lib/ansible/modules/messaging/rabbitmq_plugin.py b/lib/ansible/modules/messaging/rabbitmq_plugin.py index 7d10dcabf45..05b15abf606 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 00000000000..210db067631 --- /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 00000000000..e6ea0329ea5 --- /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"] +'''