ebcli/operations/platform_branch_ops.py (45 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 ebcli.lib import elasticbeanstalk
from ebcli.objects.platform import PlatformBranch, PlatformVersion
_non_retired_platform_branches_cache = None
def collect_families_from_branches(branches):
return list(set([branch['PlatformName'] for branch in branches]))
def is_platform_branch_name(platform_string):
return bool(
# a platform branch name cannot be an arn
not PlatformVersion.is_valid_arn(platform_string)
# request the platform branch from the api to determine if it exists
and get_platform_branch_by_name(platform_string)
)
def get_platform_branch_by_name(branch_name):
branch_name_filter = {
'Attribute': 'BranchName',
'Operator': '=',
'Values': [branch_name],
}
results = elasticbeanstalk.list_platform_branches(
filters=[branch_name_filter])
if len(results) == 0:
return None
elif len(results) > 1:
return _resolve_conflicting_platform_branches(results)
return results[0]
def list_nonretired_platform_branches():
"""
Provides a list of all platform branches that are not retired.
This includes deprecated and beta platform branches.
Return value is cached preventing redundant http requests on
subsequent calls.
"""
global _non_retired_platform_branches_cache
if not _non_retired_platform_branches_cache:
noretired_filter = {
'Attribute': 'LifecycleState',
'Operator': '!=',
'Values': ['Retired']
}
_non_retired_platform_branches_cache = elasticbeanstalk.list_platform_branches(
filters=[noretired_filter])
return _non_retired_platform_branches_cache
def _resolve_conflicting_platform_branches(branches):
"""
Accepts a list of PlatformBranchSummary objects and
and returns one PlatformBranchSummary object based on
LifecycleState precedence.
Supported < Beta < Deprecated < Retired
"""
if not branches:
return None
branches = list(sorted(
branches,
key=lambda x: PlatformBranch.LIFECYCLE_SORT_VALUES.get(
x['LifecycleState'],
PlatformBranch.LIFECYCLE_SORT_VALUES['DEFAULT'],
)
))
return branches[0]