Skip to content

Commit

Permalink
Skip host pip installs for ansible bootstrap
Browse files Browse the repository at this point in the history
The requirements.txt contents do not need to be
installed on to the host. The majority of the
requirements are for ansible, or for release
and management tooling which needs to use the
Ansible runtime venv.

Rather than forcing the installation of pip on
the host, we only install virtualenv via distro
packages (where possible). With virtualenv in
place we can create the runtime venv and install
pip, etc and all requirements into there.

Doing this keeps the system python libraries as
clean as possible, preventing clashes with other
packages (eg: ceph) which try to install other
python libraries which conflict on CentOS.

Change-Id: I0db786645c11649764680697518c97ddf9610cfa
(cherry picked from commit b95eafb)
  • Loading branch information
Jesse Pretorius committed Apr 5, 2018
1 parent 9b37e56 commit 86262ae
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 22 deletions.
4 changes: 2 additions & 2 deletions deploy-guide/source/configure.rst
Expand Up @@ -174,8 +174,8 @@ values for the variables in each file that contains service credentials:

.. code-block:: shell-session
# cd /opt/openstack-ansible/scripts
# python pw-token-gen.py --file /etc/openstack_deploy/user_secrets.yml
# cd /opt/openstack-ansible
# ./scripts/pw-token-gen.py --file /etc/openstack_deploy/user_secrets.yml
To regenerate existing passwords, add the ``--regen`` flag.

Expand Down
2 changes: 1 addition & 1 deletion lib/manage.py
@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/opt/ansible-runtime/bin/python
#
# Copyright 2014, Rackspace US, Inc.
#
Expand Down
50 changes: 32 additions & 18 deletions scripts/bootstrap-ansible.sh
Expand Up @@ -64,14 +64,18 @@ case ${DISTRO_ID} in
python2 python2-devel \
openssl-devel libffi-devel \
libselinux-python
# CentOS base does not include a recent
# enough version of virtualenv or pip,
# so we do not bother trying to install
# them.
;;
ubuntu)
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y install \
git-core curl gcc netcat \
python2.7 python2.7-dev \
libssl-dev libffi-dev \
python-apt
python-apt python-virtualenv
;;
esac

Expand All @@ -93,24 +97,34 @@ UPPER_CONSTRAINTS_PROTO=$([ "$PYTHON_VERSION" == $(echo -e "$PYTHON_VERSION\n2.7
# Set the location of the constraints to use for all pip installations
export UPPER_CONSTRAINTS_FILE=${UPPER_CONSTRAINTS_FILE:-"$UPPER_CONSTRAINTS_PROTO://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?id=$(awk '/requirements_git_install_branch:/ {print $2}' playbooks/defaults/repo_packages/openstack_services.yml)"}

# Install pip on the host if it is not already installed,
# but also make sure that it is at least version 9.x or above.
PIP_VERSION=$(pip --version 2>/dev/null | awk '{print $2}' | cut -d. -f1)
if [[ "${PIP_VERSION}" -lt "9" ]]; then
get_pip ${PYTHON_EXEC_PATH}
# Ensure that our shell knows about the new pip
hash -r pip
fi
# Install virtualenv if it is not already installed,
# but also make sure it is at least version 13.x or above
# so that it supports using the no-pip, no-setuptools
# and no-wheels options (the last one was added in v13.0.0).
VIRTUALENV_VERSION=$(virtualenv --version 2>/dev/null | cut -d. -f1)
if [[ "${VIRTUALENV_VERSION}" -lt "13" ]]; then

# Install pip on the host if it is not already installed,
# but also make sure that it is at least version 7.x or above
# so that it supports the use of the constraint option which
# was added in pip 7.1.
PIP_VERSION=$(pip --version 2>/dev/null | awk '{print $2}' | cut -d. -f1)
if [[ "${PIP_VERSION}" -lt "7" ]]; then
get_pip ${PYTHON_EXEC_PATH}
# Ensure that our shell knows about the new pip
hash -r pip
fi

# Install the requirements for the various python scripts
# on to the host, including virtualenv.
pip install ${PIP_OPTS} \
--requirement requirements.txt \
--constraint ${UPPER_CONSTRAINTS_FILE} \
|| pip install ${PIP_OPTS} \
--requirement requirements.txt \
--constraint ${UPPER_CONSTRAINTS_FILE} \
--isolated
pip install ${PIP_OPTS} \
--constraint ${UPPER_CONSTRAINTS_FILE} \
virtualenv \
|| pip install ${PIP_OPTS} \
--constraint ${UPPER_CONSTRAINTS_FILE} \
--isolated \
virtualenv
# Ensure that our shell knows about the new virtualenv
hash -r virtualenv
fi

# Create a Virtualenv for the Ansible runtime
virtualenv --python="${PYTHON_EXEC_PATH}" \
Expand Down
2 changes: 1 addition & 1 deletion scripts/pw-token-gen.py
@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/opt/ansible-runtime/bin/python
# Copyright 2014, Rackspace US, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
Expand Down

0 comments on commit 86262ae

Please sign in to comment.