Source code for prestoadmin.util.remote_config_util
# -*- 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
from fabric.context_managers import settings, hide
from fabric.operations import sudo
from fabric.tasks import execute
from prestoadmin.util.exception import ConfigurationError
from prestoadmin.util.constants import DEFAULT_PRESTO_LAUNCHER_LOG_FILE,\
DEFAULT_PRESTO_SERVER_LOG_FILE, REMOTE_CONF_DIR, REMOTE_CATALOG_DIR
import prestoadmin.util.validators
_LOGGER = logging.getLogger(__name__)
NODE_CONFIG_FILE = REMOTE_CONF_DIR + '/node.properties'
GENERAL_CONFIG_FILE = REMOTE_CONF_DIR + '/config.properties'
[docs]def lookup_port(host):
"""
Get the http port from config.properties http-server.http.port property
if available.
If the property is missing return default port 8080.
If the file is missing or cannot parse the port number,
throw ConfigurationError
:param host:
:return:
"""
port = lookup_in_config('http-server.http.port', GENERAL_CONFIG_FILE, host)
if not port:
_LOGGER.info('Could not find property http-server.http.port.'
'Defaulting to 8080.')
return 8080
try:
port = port.split('=', 1)[1]
port = prestoadmin.util.validators.validate_port(port)
_LOGGER.info('Looked up port ' + str(port) + ' on host ' +
host)
return port
except ConfigurationError as e:
raise ConfigurationError(e.message +
' for property '
'http-server.http.port on host ' +
host + '.')
[docs]def lookup_server_log_file(host):
try:
return lookup_string_config('node.server-log-file', NODE_CONFIG_FILE,
host, DEFAULT_PRESTO_SERVER_LOG_FILE)
except:
return DEFAULT_PRESTO_SERVER_LOG_FILE
[docs]def lookup_launcher_log_file(host):
try:
return lookup_string_config('node.launcher-log-file', NODE_CONFIG_FILE,
host, DEFAULT_PRESTO_LAUNCHER_LOG_FILE)
except:
return DEFAULT_PRESTO_LAUNCHER_LOG_FILE
[docs]def lookup_catalog_directory(host):
try:
return lookup_string_config('catalog.config-dir', NODE_CONFIG_FILE,
host, REMOTE_CATALOG_DIR)
except:
return REMOTE_CATALOG_DIR
[docs]def lookup_string_config(config_value, config_file, host, default=''):
value = lookup_in_config(config_value, config_file, host)
if value:
return value.split('=', 1)[1]
else:
return default
[docs]def lookup_in_config(config_key, config_file, host):
with settings(hide('stdout', 'warnings', 'aborts')):
config_value = execute(sudo, 'grep %s= %s' % (config_key, config_file),
user='presto',
warn_only=True, host=host)[host]
if isinstance(config_value, Exception) or config_value.return_code == 2:
raise ConfigurationError('Could not access config file %s on '
'host %s' % (config_file, host))
return config_value