Source code for prestoadmin.mode

# -*- 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.

"""
Module for handling presto-admin mode-related functionality.
"""

import os

from fabric.api import abort, task
from fabric.decorators import runs_once

from prestoadmin import config
from prestoadmin.util.exception import ConfigurationError, \
    ConfigFileNotFoundError
from prestoadmin.util.local_config_util import get_config_directory

MODE_CONF_PATH = os.path.join(get_config_directory(), 'mode.json')
MODE_KEY = 'mode'

MODE_SLIDER = 'yarn_slider'
MODE_STANDALONE = 'standalone'

VALID_MODES = [MODE_SLIDER, MODE_STANDALONE]


def _load_mode_config():
    return config.get_conf_from_json_file(MODE_CONF_PATH)


def _store_mode_config(mode_config):
    config.write(config.json_to_string(mode_config), MODE_CONF_PATH)


[docs]def get_mode(validate=True): mode_config = _load_mode_config() mode = mode_config.get(MODE_KEY) if validate and mode is None: raise ConfigurationError( 'Required key %s not found in configuration file %s' % ( MODE_KEY, MODE_CONF_PATH)) if validate and not validate_mode(mode): raise ConfigurationError( 'Invalid mode %s in configuration file %s. Valid modes are %s' % ( mode, MODE_CONF_PATH, ' '.join(VALID_MODES))) return mode
[docs]def validate_mode(mode): return mode in VALID_MODES
[docs]def for_mode(mode, mode_map): if sorted(mode_map.keys()) != sorted(VALID_MODES): raise Exception( 'keys in for_nodes\n%s\ndo not match VALID_MODES\n%s' % ( mode_map.keys(), VALID_MODES)) return mode_map[mode]
@task @runs_once
[docs]def select(new_mode): """ Change the mode. """ if not validate_mode(new_mode): abort('Invalid mode selection %s. Valid modes are %s' % ( new_mode, ' '.join(VALID_MODES))) mode_config = {} try: mode_config = _load_mode_config() except ConfigFileNotFoundError: pass mode_config[MODE_KEY] = new_mode _store_mode_config(mode_config)
@task @runs_once
[docs]def get(): """ Display the current mode. """ mode = None try: mode = get_mode(validate=False) print mode except ConfigFileNotFoundError: abort("Select a mode using the subcommand 'mode select <mode>'")
@task @runs_once
[docs]def list(): """ List the supported modes. """ print ' '.join(VALID_MODES)