Source code for prestoadmin.util.presto_config

# -*- coding: utf-8 -*-
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
import os
from StringIO import StringIO

from fabric.context_managers import settings, hide
from fabric.operations import get, run
from fabric.state import env
from fabric.utils import error

from prestoadmin.config import get_conf_from_properties_data
from prestoadmin.util.constants import REMOTE_CONF_DIR, CONFIG_PROPERTIES

HTTP_ENABLED_KEY = 'http-server.http.enabled'
HTTPS_ENABLED_KEY = 'http-server.https.enabled'
HTTP_PORT_KEY = 'http-server.http.port'
HTTPS_PORT_KEY = 'http-server.https.port'
CLIENT_KEYSTORE_PATH_KEY = 'internal-communication.https.keystore.path'
CLIENT_KEYSTORE_PASSWORD_KEY = 'internal-communication.https.keystore.key'
AUTHENTICATION_KEY = 'http-server.authentication.type'
LDAP_CLIENT_USER_KEY = 'internal-communication.authentication.ldap.user'
LDAP_CLIENT_PASSWORD_KEY = 'internal-communication.authentication.ldap.password'

_LOGGER = logging.getLogger(__name__)
# properties file literals
PROPERTIES_TRUE = 'true'
PROPERTIES_FALSE = 'false'


[docs]class PrestoConfig: # Defaults from Presto default_config = { HTTP_ENABLED_KEY: PROPERTIES_TRUE, HTTPS_ENABLED_KEY: PROPERTIES_FALSE, HTTP_PORT_KEY: '8080', HTTPS_PORT_KEY: '8443', CLIENT_KEYSTORE_PATH_KEY: None, CLIENT_KEYSTORE_PASSWORD_KEY: None, LDAP_CLIENT_USER_KEY: None, LDAP_CLIENT_PASSWORD_KEY: None } def __init__(self, config_properties, config_path, config_host): self.config_path = config_path self.config_host = config_host if not config_properties: self.config_properties = self.default_config else: self.config_properties = config_properties @staticmethod
[docs] def from_file(config, config_path=None, config_host=None): presto_config_dict = get_conf_from_properties_data(config) return PrestoConfig(presto_config_dict, config_path, config_host)
@staticmethod
[docs] def coordinator_config(): config_path = os.path.join(REMOTE_CONF_DIR, CONFIG_PROPERTIES) config_host = env.roledefs['coordinator'][0] try: data = StringIO() with settings(host_string='%s@%s' % (env.user, config_host)): with hide('stderr', 'stdout'): temp_dir = run('mktemp -d /tmp/prestoadmin.XXXXXXXXXXXXXX') try: get(config_path, data, use_sudo=True, temp_dir=temp_dir) finally: run('rm -rf %s' % temp_dir) data.seek(0) return PrestoConfig.from_file(data, config_path, config_host) except: _LOGGER.info('Could not find Presto config.') return PrestoConfig(None, config_path, config_host)
def _lookup(self, key): result = self.config_properties.get(key, self.default_config[key]) if not result: error( "Key %s is not configured in coordinator configuration" "%s on host %s and has no default" % (key, self.config_host, self.config_path)) return result
[docs] def use_https(self): http_enabled = self._lookup(HTTP_ENABLED_KEY) == PROPERTIES_TRUE https_enabled = self._lookup(HTTPS_ENABLED_KEY) == PROPERTIES_TRUE return https_enabled and not http_enabled
[docs] def get_client_keystore_path(self): return self._lookup(CLIENT_KEYSTORE_PATH_KEY)
[docs] def get_client_keystore_password(self): return self._lookup(CLIENT_KEYSTORE_PASSWORD_KEY)
[docs] def get_https_port(self): return int(self._lookup(HTTPS_PORT_KEY))
[docs] def get_http_port(self): return int(self._lookup(HTTP_PORT_KEY))
[docs] def use_ldap(self): if not self.use_https(): return False if AUTHENTICATION_KEY in self.config_properties: return self.config_properties[AUTHENTICATION_KEY] == 'LDAP' return False
[docs] def get_ldap_user(self): return self._lookup(LDAP_CLIENT_USER_KEY)
[docs] def get_ldap_password(self): return self._lookup(LDAP_CLIENT_PASSWORD_KEY)