ebcli/containers/containerops.py (52 lines of code) (raw):
# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file 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.
from os import path
from ebcli.core import fileoperations
from ebcli.lib import elasticbeanstalk
from ebcli.objects.platform import PlatformBranch, PlatformVersion
from ebcli.objects.solutionstack import SolutionStack
CONTAINER_CONFIG_FILENAME = 'container_config.json'
CONTAINERFILES_DIRNAME = 'containerfiles'
CONTAINERFILES_DIR_PATH = path.join(path.dirname(path.realpath(__file__)),
CONTAINERFILES_DIRNAME)
CONTAINER_CONFIG_PATH = path.join(CONTAINERFILES_DIR_PATH,
CONTAINER_CONFIG_FILENAME)
PRECONFIG_CONTAINER_KEY = 'preconfigured_containers'
GENERIC_CONTAINER_KEY = 'generic_containers'
MULTI_CONTAINER_KEY = 'multi_containers'
VERSION_KEY = 'version'
PLATFORM_KEY = 'platform'
PLATFORM_NAME_KEY = 'platform_name'
RUNTIME_IMG_KEY = 'runtime_image'
RUNTIME_DOCKERFILE_KEY = 'runtime_dockerfile'
RUNTIME_DEFAULT_LOG_KEY = 'runtime_default_log'
def is_container(soln_stk, container_config):
"""
Whether the solution stack runs Docker containers.
:param soln_stk: SolutionStack: the solution stack
:param container_config: dict: container_config.json as dict
:return: bool
"""
return (is_preconfigured(soln_stk, container_config) or
is_generic(soln_stk, container_config))
def is_preconfigured(soln_stk, container_config):
"""
Whether the solution stack runs preconfigured Docker containers.
:param soln_stk: SolutionStack: the solution stack
:param container_config: dict: container_config.json as dict
:return: bool
"""
return bool(_get_preconfig_info(soln_stk, container_config))
def is_generic(soln_stk, container_config):
"""
Whether the solution stack runs generic Docker containers.
:param soln_stk: SolutionStack: the solution stack
:param container_config: dict: container_config.json as dict
:return: bool
"""
expected_platform = container_config[GENERIC_CONTAINER_KEY][PLATFORM_KEY]
if isinstance(soln_stk, PlatformVersion):
return expected_platform in soln_stk.platform_shorthand
return expected_platform == soln_stk.language_name
def is_multi(soln_stk, container_config):
"""
Whether the solution stack runs Multi Containers
:param soln_stk: SolutionStack: the solution stack
:param container_config: dict: container_config.json as dict
:return: bool
"""
expected_platform = container_config[MULTI_CONTAINER_KEY][PLATFORM_KEY]
if isinstance(soln_stk, PlatformVersion):
return expected_platform in soln_stk.platform_shorthand
return expected_platform == soln_stk.language_name
def get_configuration(fullpath=CONTAINER_CONFIG_PATH):
"""
Deserializes the container configuration json file at fullpath as dict.
:param fullpath: str: path to the container configuration json file
:return: dict
"""
return fileoperations.get_json_dict(fullpath)
def get_runtime_default_log_path(soln_stk, container_config):
"""
Return where we expect logs to be in the container for Preconfigured
Containers.
:param soln_stk: SolutionStack: the solution stack
:param container_config: dict: container_config.json as dict
:return: str
"""
cont_info = _get_preconfig_info(soln_stk, container_config)
return cont_info[RUNTIME_DEFAULT_LOG_KEY]
def _get_preconfig_info(soln_stk, container_config):
containers = container_config[PRECONFIG_CONTAINER_KEY]
return next(
(
c for c in containers
if c[VERSION_KEY] == soln_stk.platform_shorthand
or c[PLATFORM_NAME_KEY] == soln_stk.platform_shorthand
), None)
def _get_runtime_dockerfile_path(soln_stk, container_config):
cont_info = _get_preconfig_info(soln_stk, container_config)
img_name = cont_info[RUNTIME_DOCKERFILE_KEY]
return path.join(CONTAINERFILES_DIR_PATH, img_name)