"""
Apache
======
This module provides tools for configuring
the `Apache HTTP Server <http://httpd.apache.org/>`_.
"""
from distutils.version import StrictVersion as V
import posixpath
from fabtools.files import is_link
from fabtools.system import UnsupportedFamily, distrib_family, distrib_id, distrib_release
from fabtools.utils import run_as_root
[docs]def is_module_enabled(module):
"""
Check if an Apache module is enabled.
"""
return is_link('/etc/apache2/mods-enabled/%s.load' % module)
[docs]def enable_module(module):
"""
Enable an Apache module.
This creates a symbolic link from ``/etc/apache2/mods-available/``
into ``/etc/apache2/mods-enabled/``.
This does not cause Apache to reload its configuration.
::
import fabtools
fabtools.apache.enable_module('rewrite')
fabtools.service.reload('apache2')
.. seealso:: :py:func:`fabtools.require.apache.module_enabled`
"""
if not is_module_enabled(module):
run_as_root('a2enmod %s' % module)
[docs]def disable_module(module):
"""
Disable an Apache module.
This deletes the symbolink link in ``/etc/apache2/mods-enabled/``.
This does not cause Apache to reload its configuration.
::
import fabtools
fabtools.apache.disable_module('rewrite')
fabtools.service.reload('apache2')
.. seealso:: :py:func:`fabtools.require.apache.module_disabled`
"""
if is_module_enabled(module):
run_as_root('a2dismod %s' % module)
[docs]def is_site_enabled(site_name):
"""
Check if an Apache site is enabled.
"""
return is_link(_site_link_path(site_name))
[docs]def enable_site(site_name):
"""
Enable an Apache site.
This creates a symbolic link from ``/etc/apache2/sites-available/``
into ``/etc/apache2/sites-enabled/``.
This does not cause Apache to reload its configuration.
::
import fabtools
fabtools.apache.enable_site('default')
fabtools.service.reload('apache2')
.. seealso:: :py:func:`fabtools.require.apache.site_enabled`
"""
if not is_site_enabled(site_name):
run_as_root('a2ensite %s' % _site_config_filename(site_name))
[docs]def disable_site(site_name):
"""
Disable an Apache site.
This deletes the symbolink link in ``/etc/apache2/sites-enabled/``.
This does not cause Apache to reload its configuration.
::
import fabtools
fabtools.apache.disable_site('default')
fabtools.service.reload('apache2')
.. seealso:: :py:func:`fabtools.require.apache.site_disabled`
"""
if is_site_enabled(site_name):
run_as_root('a2dissite %s' % _site_config_filename(site_name))
def _site_config_path(site_name):
config_filename = _site_config_filename(site_name)
return posixpath.join('/etc/apache2/sites-available', config_filename)
def _site_config_filename(site_name):
if site_name == 'default':
return _default__site_config_filename()
else:
return '{0}.conf'.format(site_name)
def _site_link_path(site_name):
link_filename = _site_link_filename(site_name)
return posixpath.join('/etc/apache2/sites-enabled', link_filename)
def _site_link_filename(site_name):
if site_name == 'default':
return _default__site_link_filename()
else:
return '{0}.conf'.format(site_name)
def _default__site_config_filename():
return _choose(old_style='default', new_style='000-default.conf')
def _default__site_link_filename():
return _choose(old_style='000-default', new_style='000-default.conf')
def _choose(old_style, new_style):
family = distrib_family()
if family == 'debian':
distrib = distrib_id()
at_least_trusty = (distrib == 'Ubuntu' and V(distrib_release()) >= V('14.04'))
at_least_jessie = (distrib == 'Debian' and V(distrib_release()) >= V('8.0'))
if at_least_trusty or at_least_jessie:
return new_style
else:
return old_style
else:
raise UnsupportedFamily(supported=['debian'])
# backward compatibility (deprecated)
enable = enable_site
disable = disable_site
__all__ = [
'is_module_enabled', 'enable_module', 'disable_module',
'is_site_enabled', 'enable_site', 'disable_site',
]