summaryrefslogtreecommitdiff
path: root/lib/ansible/modules/web_infrastructure/apache2_module.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/modules/web_infrastructure/apache2_module.py')
-rw-r--r--lib/ansible/modules/web_infrastructure/apache2_module.py267
1 files changed, 0 insertions, 267 deletions
diff --git a/lib/ansible/modules/web_infrastructure/apache2_module.py b/lib/ansible/modules/web_infrastructure/apache2_module.py
deleted file mode 100644
index c5e76fd98d..0000000000
--- a/lib/ansible/modules/web_infrastructure/apache2_module.py
+++ /dev/null
@@ -1,267 +0,0 @@
-#!/usr/bin/python
-# coding: utf-8 -*-
-
-# (c) 2013-2014, Christian Berendt <berendt@b1-systems.de>
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'community'}
-
-
-DOCUMENTATION = '''
----
-module: apache2_module
-version_added: 1.6
-author:
- - Christian Berendt (@berendt)
- - Ralf Hertel (@n0trax)
- - Robin Roth (@robinro)
-short_description: Enables/disables a module of the Apache2 webserver.
-description:
- - Enables or disables a specified module of the Apache2 webserver.
-options:
- name:
- description:
- - Name of the module to enable/disable as given to C(a2enmod/a2dismod).
- required: true
- identifier:
- description:
- - Identifier of the module as listed by C(apache2ctl -M).
- This is optional and usually determined automatically by the common convention of
- appending C(_module) to I(name) as well as custom exception for popular modules.
- required: False
- version_added: "2.5"
- force:
- description:
- - Force disabling of default modules and override Debian warnings.
- required: false
- type: bool
- default: False
- version_added: "2.1"
- state:
- description:
- - Desired state of the module.
- choices: ['present', 'absent']
- default: present
- ignore_configcheck:
- description:
- - Ignore configuration checks about inconsistent module configuration. Especially for mpm_* modules.
- type: bool
- default: False
- version_added: "2.3"
-requirements: ["a2enmod","a2dismod"]
-'''
-
-EXAMPLES = '''
-# enables the Apache2 module "wsgi"
-- apache2_module:
- state: present
- name: wsgi
-# disables the Apache2 module "wsgi"
-- apache2_module:
- state: absent
- name: wsgi
-# disable default modules for Debian
-- apache2_module:
- state: absent
- name: autoindex
- force: True
-# disable mpm_worker and ignore warnings about missing mpm module
-- apache2_module:
- state: absent
- name: mpm_worker
- ignore_configcheck: True
-# enable dump_io module, which is identified as dumpio_module inside apache2
-- apache2_module:
- state: present
- name: dump_io
- identifier: dumpio_module
-'''
-
-RETURN = '''
-result:
- description: message about action taken
- returned: always
- type: str
-warnings:
- description: list of warning messages
- returned: when needed
- type: list
-rc:
- description: return code of underlying command
- returned: failed
- type: int
-stdout:
- description: stdout of underlying command
- returned: failed
- type: str
-stderr:
- description: stderr of underlying command
- returned: failed
- type: str
-'''
-
-import re
-
-# import module snippets
-from ansible.module_utils.basic import AnsibleModule
-
-
-def _run_threaded(module):
- control_binary = _get_ctl_binary(module)
-
- result, stdout, stderr = module.run_command("%s -V" % control_binary)
-
- return bool(re.search(r'threaded:[ ]*yes', stdout))
-
-
-def _get_ctl_binary(module):
- for command in ['apache2ctl', 'apachectl']:
- ctl_binary = module.get_bin_path(command)
- if ctl_binary is not None:
- return ctl_binary
-
- module.fail_json(
- msg="Neither of apache2ctl nor apachctl found."
- " At least one apache control binary is necessary."
- )
-
-
-def _module_is_enabled(module):
- control_binary = _get_ctl_binary(module)
- result, stdout, stderr = module.run_command("%s -M" % control_binary)
-
- if result != 0:
- error_msg = "Error executing %s: %s" % (control_binary, stderr)
- if module.params['ignore_configcheck']:
- if 'AH00534' in stderr and 'mpm_' in module.params['name']:
- module.warnings.append(
- "No MPM module loaded! apache2 reload AND other module actions"
- " will fail if no MPM module is loaded immediately."
- )
- else:
- module.warnings.append(error_msg)
- return False
- else:
- module.fail_json(msg=error_msg)
-
- searchstring = ' ' + module.params['identifier']
- return searchstring in stdout
-
-
-def create_apache_identifier(name):
- """
- By convention if a module is loaded via name, it appears in apache2ctl -M as
- name_module.
-
- Some modules don't follow this convention and we use replacements for those."""
-
- # a2enmod name replacement to apache2ctl -M names
- text_workarounds = [
- ('shib2', 'mod_shib'),
- ('evasive', 'evasive20_module'),
- ]
-
- # re expressions to extract subparts of names
- re_workarounds = [
- ('php', r'^(php\d)\.'),
- ]
-
- for a2enmod_spelling, module_name in text_workarounds:
- if a2enmod_spelling in name:
- return module_name
-
- for search, reexpr in re_workarounds:
- if search in name:
- try:
- rematch = re.search(reexpr, name)
- return rematch.group(1) + '_module'
- except AttributeError:
- pass
-
- return name + '_module'
-
-
-def _set_state(module, state):
- name = module.params['name']
- force = module.params['force']
-
- want_enabled = state == 'present'
- state_string = {'present': 'enabled', 'absent': 'disabled'}[state]
- a2mod_binary = {'present': 'a2enmod', 'absent': 'a2dismod'}[state]
- success_msg = "Module %s %s" % (name, state_string)
-
- if _module_is_enabled(module) != want_enabled:
- if module.check_mode:
- module.exit_json(changed=True,
- result=success_msg,
- warnings=module.warnings)
-
- a2mod_binary = module.get_bin_path(a2mod_binary)
- if a2mod_binary is None:
- module.fail_json(msg="%s not found. Perhaps this system does not use %s to manage apache" % (a2mod_binary, a2mod_binary))
-
- if not want_enabled and force:
- # force exists only for a2dismod on debian
- a2mod_binary += ' -f'
-
- result, stdout, stderr = module.run_command("%s %s" % (a2mod_binary, name))
-
- if _module_is_enabled(module) == want_enabled:
- module.exit_json(changed=True,
- result=success_msg,
- warnings=module.warnings)
- else:
- msg = (
- 'Failed to set module {name} to {state}:\n'
- '{stdout}\n'
- 'Maybe the module identifier ({identifier}) was guessed incorrectly.'
- 'Consider setting the "identifier" option.'
- ).format(
- name=name,
- state=state_string,
- stdout=stdout,
- identifier=module.params['identifier']
- )
- module.fail_json(msg=msg,
- rc=result,
- stdout=stdout,
- stderr=stderr)
- else:
- module.exit_json(changed=False,
- result=success_msg,
- warnings=module.warnings)
-
-
-def main():
- module = AnsibleModule(
- argument_spec=dict(
- name=dict(required=True),
- identifier=dict(required=False, type='str'),
- force=dict(required=False, type='bool', default=False),
- state=dict(default='present', choices=['absent', 'present']),
- ignore_configcheck=dict(required=False, type='bool', default=False),
- ),
- supports_check_mode=True,
- )
-
- module.warnings = []
-
- name = module.params['name']
- if name == 'cgi' and _run_threaded(module):
- module.fail_json(msg="Your MPM seems to be threaded. No automatic actions on module %s possible." % name)
-
- if not module.params['identifier']:
- module.params['identifier'] = create_apache_identifier(module.params['name'])
-
- if module.params['state'] in ['present', 'absent']:
- _set_state(module, module.params['state'])
-
-
-if __name__ == '__main__':
- main()