You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ol...@apache.org on 2018/09/10 14:13:28 UTC
[ambari] branch trunk updated: AMBARI-24609. Ability to install
common ambari python libraries to maven repository (local / remote).
(#2273)
This is an automated email from the ASF dual-hosted git repository.
oleewere pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/trunk by this push:
new 68d0b64 AMBARI-24609. Ability to install common ambari python libraries to maven repository (local / remote). (#2273)
68d0b64 is described below
commit 68d0b6430c5c2fbb72e7e4b52f1b60bccb07e773
Author: Olivér Szabó <ol...@gmail.com>
AuthorDate: Mon Sep 10 16:13:26 2018 +0200
AMBARI-24609. Ability to install common ambari python libraries to maven repository (local / remote). (#2273)
* AMBARI-24609. Ability to install common ambari python libraries to maven repository (local / remote).
* AMBARI-24609. Review changes.
---
install-ambari-python.sh | 182 +++++++++++++++++++++++++++++++++++++++++++++++
setup.py | 36 ++++++++--
2 files changed, 211 insertions(+), 7 deletions(-)
diff --git a/install-ambari-python.sh b/install-ambari-python.sh
new file mode 100755
index 0000000..eb7e853
--- /dev/null
+++ b/install-ambari-python.sh
@@ -0,0 +1,182 @@
+#!/usr/bin/env bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+# requires: pip setuptools wheel
+
+readlinkf(){
+ # get real path on mac OSX
+ perl -MCwd -e 'print Cwd::abs_path shift' "$1";
+}
+
+if [ "$(uname -s)" = 'Linux' ]; then
+ SCRIPT_DIR="`dirname "$(readlink -f "$0")"`"
+else
+ SCRIPT_DIR="`dirname "$(readlinkf "$0")"`"
+fi
+
+function print_help() {
+ cat << EOF
+ Usage: ./install-ambari-python.sh [additional options]
+
+ -c, --clean clean generated python distribution directories
+ -d, --deploy deploy ambari-python artifact to maven remote repository
+ -v, --version <version> override ambari-python artifact versison
+ -i, --repository-id <id> repository id in settings.xml for remote repository
+ -r, --repository-url <url> repository url of remote repository
+ -h, --help print help
+EOF
+}
+
+function get_python_artifact_file() {
+ local artifact_file=$(ls $SCRIPT_DIR/dist/ | head -n 1)
+ echo $artifact_file
+}
+
+function get_version() {
+ local artifact_file=$(get_python_artifact_file)
+ local artifact_version=$(echo $artifact_file | perl -lne '/ambari-python-(.*?)\.tar\.gz/ && print $1')
+ echo $artifact_version
+}
+
+function clean() {
+ if [[ -d "$SCRIPT_DIR/dist" ]]; then
+ echo "Removing '$SCRIPT_DIR/dist' directoy ..."
+ rm -r "$SCRIPT_DIR/dist"
+ echo "Directory '$SCRIPT_DIR/dist' successfully deleted."
+ fi
+ if [[ -d "$SCRIPT_DIR/ambari_python.egg-info" ]]; then
+ echo "Removing '$SCRIPT_DIR/ambari_python.egg-info' directoy ..."
+ rm -r "$SCRIPT_DIR/ambari_python.egg-info"
+ echo "Directory '$SCRIPT_DIR/ambari_python.egg-info' successfully deleted."
+ fi
+ if [[ -d "$SCRIPT_DIR/target/ambari-python-dist" ]]; then
+ echo "Removing '$SCRIPT_DIR/target/ambari-python' directoy ..."
+ rm -r "$SCRIPT_DIR/target/ambari-python-dist"
+ echo "Directory '$SCRIPT_DIR/target/ambari-python' successfully deleted."
+ fi
+}
+
+function generate_site_packages() {
+ local version="$1"
+ pip install $SCRIPT_DIR/dist/ambari-python-$version.tar.gz -I --install-option="--prefix=$SCRIPT_DIR/target/ambari-python-dist"
+}
+
+function archive_python_dist() {
+ local artifact="$1"
+ local site_packages_dir=$(find $SCRIPT_DIR/target/ambari-python-dist -name "site-packages")
+ local base_dir="`dirname $site_packages_dir`" # use this to make it work with different python versions
+ if [[ -f "$SCRIPT_DIR/target/$artifact" ]]; then
+ echo "Removing '$SCRIPT_DIR/target/$artifact' file ..."
+ echo "File '$SCRIPT_DIR/target/$artifact' successfully deleted."
+ fi
+ tar -zcf $SCRIPT_DIR/target/$artifact -C $base_dir site-packages
+}
+
+function install() {
+ local artifact_file="$1"
+ local version="$2"
+ mvn install:install-file -Dfile=$artifact_file -DgeneratePom=true -Dversion=$version -DartifactId=ambari-python -DgroupId=org.apache.ambari -Dpackaging=tar.gz
+}
+
+function deploy() {
+ local artifact_file="$1"
+ local version="$2"
+ local repo_id="$3"
+ local repo_url="$4"
+ mvn deploy:deploy-file -Dfile=$artifact_file -Dpackaging=tar.gz -DgeneratePom=true -Dversion=$version -DartifactId=ambari-python -DgroupId=org.apache.ambari -Durl="$repo_url" -DrepositoryId="$repo_url"
+}
+
+function run_setup_py() {
+ local version="$1"
+ if [[ ! -z "$version" ]]; then
+ env AMBARI_VERSION="$version" python setup.py sdist
+ else
+ python setup.py sdist
+ fi
+}
+
+function main() {
+ while [[ $# -gt 0 ]]
+ do
+ key="$1"
+ case $key in
+ -d|--deploy)
+ local DEPLOY="true"
+ shift 1
+ ;;
+ -c|--clean)
+ local CLEAN="true"
+ shift 1
+ ;;
+ -v|--version)
+ local VERSION="$2"
+ shift 2
+ ;;
+ -i|--repository-id)
+ local REPOSITORY_ID="$2"
+ shift 2
+ ;;
+ -r|--repository-url)
+ local REPOSITORY_URL="$2"
+ shift 2
+ ;;
+ -h|--help)
+ shift 1
+ print_help
+ exit 0
+ ;;
+ *)
+ echo "Unknown option: $1"
+ exit 1
+ ;;
+ esac
+ done
+
+ if [[ -z "$DEPLOY" ]] ; then
+ DEPLOY="false"
+ fi
+
+ clean
+ if [[ "$CLEAN" == "true" ]]; then
+ return 0
+ fi
+
+ run_setup_py "$VERSION"
+ local artifact_name=$(get_python_artifact_file)
+ local artifact_version=$(get_version)
+
+ generate_site_packages "$artifact_version"
+ archive_python_dist "$artifact_name"
+
+ install "$SCRIPT_DIR/target/$artifact_name" "$artifact_version"
+
+ if [[ "$DEPLOY" == "true" ]] ; then
+ if [[ -z "$REPOSITORY_ID" ]] ; then
+ echo "Repository id option is required for deploying ambari-python artifact (-i or --repository-id)"
+ exit 1
+ fi
+ if [[ -z "$REPOSITORY_URL" ]] ; then
+ echo "Repository url option is required for deploying ambari-python artifact (-r or --repository-url)"
+ exit 1
+ fi
+ deploy "$SCRIPT_DIR/target/$artifact_name" "$artifact_version" "$REPOSITORY_ID" "$REPOSITORY_URL"
+ else
+ echo "Skip deploying ambari-python artifact to remote repository."
+ fi
+}
+
+main ${1+"$@"}
diff --git a/setup.py b/setup.py
old mode 100644
new mode 100755
index d2b73c6..0b7f2eb
--- a/setup.py
+++ b/setup.py
@@ -48,11 +48,35 @@ def create_package_dir_map():
return package_dirs
-__version__ = "3.0.0.dev0"
+__version__ = "2.0.0.0-SNAPSHOT"
+
def get_version():
- ambari_version = os.environ["AMBARI_VERSION"] if "AMBARI_VERSION" in os.environ else __version__
- print ambari_version
- return ambari_version
+ """
+ Obtain ambari version during the build from pom.xml, which will be stored in PKG-INFO file.
+ During installation from pip, pom.xml is not included in the distribution but PKG-INFO is, so it can be used
+ instead of pom.xml file. If for some reason both are not exists use the default __version__ variable.
+ All of these can be overridden by AMBARI_VERSION environment variable.
+ """
+ base_dir = dirname(__file__)
+ if "AMBARI_VERSION" in os.environ:
+ return os.environ["AMBARI_VERSION"]
+ elif os.path.exists(os.path.join(base_dir, 'pom.xml')):
+ from xml.etree import ElementTree as et
+ ns = "http://maven.apache.org/POM/4.0.0"
+ et.register_namespace('', ns)
+ tree = et.ElementTree()
+ tree.parse(os.path.join(base_dir, 'pom.xml'))
+ parent_version_tag = tree.getroot().find("{%s}version" % ns)
+ return parent_version_tag.text if parent_version_tag is not None else __version__
+ elif os.path.exists(os.path.join(base_dir, 'PKG-INFO')):
+ import re
+ version = None
+ version_re = re.compile('^Version: (.+)$', re.M)
+ with open(os.path.join(base_dir, 'PKG-INFO')) as f:
+ version = version_re.search(f.read()).group(1)
+ return version if version is not None else __version__
+ else:
+ return __version__
"""
Example usage:
@@ -64,9 +88,7 @@ Example usage:
python setup.py sdist -d "my/dist/location" upload -r "http://localhost:8080"
Installing from pip:
-- pip install --extra-index-url=http://localhost:8080 ambari-python==2.7.1 // 3.0.0.dev0 is the snapshot version
-
-Note: using 'export AMBARI_VERSION=2.7.1' before commands you can redefine the package version, but you will need this export during the pip install as well
+- pip install --extra-index-url=http://localhost:8080 ambari-python==2.7.1.0 // 2.0.0.0-SNAPSHOT is the snapshot version
"""
setup(
name = "ambari-python",