ebcli/lib/heuristics.py (67 lines of code) (raw):
# Copyright 2014 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.containers import dockerrun
from ebcli.core.fileoperations import program_is_installed
import glob
import os
def find_platform_family():
if smells_of_docker() or smells_of_multi_container_docker():
return 'Docker'
if smells_of_python():
return 'Python'
if smells_of_ruby():
return 'Ruby'
if smells_of_php():
return 'PHP'
if smells_of_node_js():
return 'Node.js'
if smells_of_iis():
return '.NET on Windows Server'
if smells_of_tomcat():
return 'Tomcat'
# If there is just an index.html, PHP will work
if has_index_html():
return 'PHP'
return None
def smells_of_multi_container_docker():
dockerrun_file = dockerrun.get_dockerrun('Dockerrun.aws.json')
if dockerrun_file and dockerrun_file.get('AWSEBDockerrunVersion') in (2, '2'):
return True
def smells_of_docker():
"""
True if the current directory has a docker file
'Dockerfile' or 'Dockerrun.aws.json' should exist in the root directory
"""
return _contains_file_types('Dockerfile', 'Dockerrun.aws.json')
def smells_of_python():
"""
True if directory has a .py file or a requirements.txt file
"""
return _contains_file_types('*.py', 'requirements.txt')
def smells_of_ruby():
"""
True if directory has a .rb file or a Gemfile
"""
return _contains_file_types('*.rb', 'Gemfile')
def smells_of_php():
"""
True if directory has a .php file
"""
return _contains_file_types('*.php')
def has_index_html():
"""
True if directory contains index.html
"""
return _contains_file_types('index.html')
def directory_is_empty():
"""
Directory contains no files or folders (ignore dot-files)
"""
lst = [f for f in os.listdir('./') if not f.startswith('.')]
if len(lst) < 1:
return True
else:
return False
def smells_of_node_js():
"""
JS files are too common in web apps, so instead we just look for the package.json file
True is directory has a package.json file
"""
return _contains_file_types('package.json')
def smells_of_iis():
"""
True if directory contains a systemInfo.xml
"""
return _contains_file_types('systemInfo.xml')
def smells_of_tomcat():
"""
True if directory has a jsp file or a WEB-INF directory
"""
if has_tomcat_war_file():
return True
return _contains_file_types('*.jsp', 'WEB-INF')
def has_tomcat_war_file():
"""
True if there is a war file located at ./build/lib/*.war
"""
return _contains_file_types('build/libs/*.war')
def has_platform_definition_file():
"""
True if there is a file called 'platform.yaml' in the workspace root
"""
return _contains_file_types('platform.yaml')
def is_boot2docker_installed():
return program_is_installed('boot2docker')
def _get_file_list(*args):
lst = []
for a in args:
lst += glob.glob(a)
return lst
def _contains_file_types(*args):
lst = _get_file_list(*args)
if lst:
return True
else:
return False