diff --git a/config.yaml b/config.yaml index e7997510..83d55772 100644 --- a/config.yaml +++ b/config.yaml @@ -26,6 +26,12 @@ options: description: | Default role for Horizon operations that will be created in Keystone upon introduction of an identity-service relation. + use-syslog: + type: boolean + default: False + description: | + By default, all services will log into their corresponding log files. + Setting this to True will force all services to log to the syslog. vip: type: string description: "Virtual IP to use to front openstack dashboard ha configuration" diff --git a/hooks/horizon_contexts.py b/hooks/horizon_contexts.py index e55cba07..230a2644 100644 --- a/hooks/horizon_contexts.py +++ b/hooks/horizon_contexts.py @@ -80,7 +80,8 @@ class HorizonContext(OSContextGenerator): 'default_role': config('default-role'), "webroot": config('webroot'), "ubuntu_theme": config('ubuntu-theme') in ['yes', True], - "secret": config('secret') or pwgen() + "secret": config('secret') or pwgen(), + "use_syslog": config('use-syslog') } return ctxt diff --git a/revision b/revision index e85087af..f5c89552 100644 --- a/revision +++ b/revision @@ -1 +1 @@ -31 +32 diff --git a/templates/grizzly/local_settings.py b/templates/grizzly/local_settings.py index 87c79228..824ed85d 100644 --- a/templates/grizzly/local_settings.py +++ b/templates/grizzly/local_settings.py @@ -1,8 +1,10 @@ import os from django.utils.translation import ugettext_lazy as _ - from openstack_dashboard import exceptions +{% if use_syslog %} +from logging.handlers import SysLogHandler +{% endif %} DEBUG = {{ debug }} TEMPLATE_DEBUG = DEBUG @@ -176,6 +178,13 @@ LOGGING = { 'level': 'DEBUG', 'class': 'django.utils.log.NullHandler', }, + {% if use_syslog %} + 'syslog': { + 'level': 'INFO', + 'class': 'logging.handlers.SysLogHandler' + 'formatter': 'verbose' + } + {% endif %} 'console': { # Set the level to "DEBUG" for verbose output logging. 'level': 'INFO', @@ -194,27 +203,51 @@ LOGGING = { 'propagate': False, }, 'horizon': { + {% if use_syslog %} + 'handlers': ['syslog'], + {% else %} 'handlers': ['console'], + {% endif %} 'propagate': False, }, 'openstack_dashboard': { + {% if use_syslog %} + 'handlers': ['syslog'], + {% else %} 'handlers': ['console'], + {% endif %} 'propagate': False, }, 'novaclient': { + {% if use_syslog %} + 'handlers': ['syslog'], + {% else %} 'handlers': ['console'], + {% endif %} 'propagate': False, }, 'keystoneclient': { + {% if use_syslog %} + 'handlers': ['syslog'], + {% else %} 'handlers': ['console'], + {% endif %} 'propagate': False, }, 'glanceclient': { + {% if use_syslog %} + 'handlers': ['syslog'], + {% else %} 'handlers': ['console'], + {% endif %} 'propagate': False, }, 'nose.plugins.manager': { + {% if use_syslog %} + 'handlers': ['syslog'], + {% else %} 'handlers': ['console'], + {% endif %} 'propagate': False, } } diff --git a/templates/havana/local_settings.py b/templates/havana/local_settings.py index a04f153c..1365af16 100644 --- a/templates/havana/local_settings.py +++ b/templates/havana/local_settings.py @@ -1,6 +1,9 @@ import os from django.utils.translation import ugettext_lazy as _ +{% if use_syslog %} +from logging.handlers import SysLogHandler +{% endif %} from openstack_dashboard import exceptions @@ -248,6 +251,13 @@ LOGGING = { 'level': 'INFO', 'class': 'logging.StreamHandler', }, + {% if use_syslog %} + 'syslog': { + 'level': 'INFO', + 'class': 'logging.handlers.SysLogHandler' + 'formatter': 'verbose' + } + {% endif %} }, 'loggers': { # Logging from django.db.backends is VERY verbose, send to null @@ -261,35 +271,67 @@ LOGGING = { 'propagate': False, }, 'horizon': { + {% if use_syslog %} + 'handlers': ['syslog'], + {% else %} 'handlers': ['console'], + {% endif %} 'propagate': False, }, 'openstack_dashboard': { + {% if use_syslog %} + 'handlers': ['syslog'], + {% else %} 'handlers': ['console'], + {% endif %} 'propagate': False, }, 'novaclient': { + {% if use_syslog %} + 'handlers': ['syslog'], + {% else %} 'handlers': ['console'], + {% endif %} 'propagate': False, }, 'cinderclient': { + {% if use_syslog %} + 'handlers': ['syslog'], + {% else %} 'handlers': ['console'], + {% endif %} 'propagate': False, }, 'keystoneclient': { + {% if use_syslog %} + 'handlers': ['syslog'], + {% else %} 'handlers': ['console'], + {% endif %} 'propagate': False, }, 'glanceclient': { + {% if use_syslog %} + 'handlers': ['syslog'], + {% else %} 'handlers': ['console'], + {% endif %} 'propagate': False, }, 'heatclient': { + {% if use_syslog %} + 'handlers': ['syslog'], + {% else %} 'handlers': ['console'], + {% endif %} 'propagate': False, }, 'nose.plugins.manager': { + {% if use_syslog %} + 'handlers': ['syslog'], + {% else %} 'handlers': ['console'], + {% endif %} 'propagate': False, } } diff --git a/unit_tests/test_horizon_contexts.py b/unit_tests/test_horizon_contexts.py index 69487b63..94e88ac9 100644 --- a/unit_tests/test_horizon_contexts.py +++ b/unit_tests/test_horizon_contexts.py @@ -78,42 +78,48 @@ class TestHorizonContexts(CharmTestCase): self.assertEquals(horizon_contexts.HorizonContext()(), {'compress_offline': True, 'debug': False, 'default_role': 'Member', 'webroot': '/horizon', - 'ubuntu_theme': True, 'secret': 'secret'}) + 'ubuntu_theme': True, 'use_syslog': False, + 'secret': 'secret'}) def test_HorizonContext_debug(self): self.test_config.set('debug', 'yes') self.assertEquals(horizon_contexts.HorizonContext()(), {'compress_offline': True, 'debug': True, 'default_role': 'Member', 'webroot': '/horizon', - 'ubuntu_theme': True, 'secret': 'secret'}) + 'ubuntu_theme': True, 'use_syslog': False, + 'secret': 'secret'}) def test_HorizonContext_theme(self): self.test_config.set('ubuntu-theme', False) self.assertEquals(horizon_contexts.HorizonContext()(), {'compress_offline': True, 'debug': False, 'default_role': 'Member', 'webroot': '/horizon', - 'ubuntu_theme': False, 'secret': 'secret'}) + 'ubuntu_theme': False, 'use_syslog': False, + 'secret': 'secret'}) def test_HorizonContext_compression(self): self.test_config.set('offline-compression', 'no') self.assertEquals(horizon_contexts.HorizonContext()(), {'compress_offline': False, 'debug': False, 'default_role': 'Member', 'webroot': '/horizon', - 'ubuntu_theme': True, 'secret': 'secret'}) + 'ubuntu_theme': True, 'use_syslog': False, + 'secret': 'secret'}) def test_HorizonContext_role(self): self.test_config.set('default-role', 'foo') self.assertEquals(horizon_contexts.HorizonContext()(), {'compress_offline': True, 'debug': False, 'default_role': 'foo', 'webroot': '/horizon', - 'ubuntu_theme': True, 'secret': 'secret'}) + 'ubuntu_theme': True, 'use_syslog': False, + 'secret': 'secret'}) def test_HorizonContext_webroot(self): self.test_config.set('webroot', '/') self.assertEquals(horizon_contexts.HorizonContext()(), {'compress_offline': True, 'debug': False, 'default_role': 'Member', 'webroot': '/', - 'ubuntu_theme': True, 'secret': 'secret'}) + 'ubuntu_theme': True, 'use_syslog': False, + 'secret': 'secret'}) def test_IdentityServiceContext_not_related(self): self.relation_ids.return_value = []