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",