Commit 388fb907 by John Eskew

Add devpi Docker container building and a devpi Ansible role.

parent 143bb230
# To build this Dockerfile:
#
# From the root of configuration:
#
# docker build -f docker/build/devpi/Dockerfile .
#
# This allows the dockerfile to update /edx/app/edx_ansible/edx_ansible
# with the currently checked-out configuration repo.
FROM edxops/xenial-common:latest
MAINTAINER edxops
ARG ARG_DEVPI_SERVER_VERSION=4.4.0
ARG ARG_DEVPI_WEB_VERSION=3.2.2
ARG ARG_DEVPI_CLIENT_VERSION=4.0.0
ADD . /edx/app/edx_ansible/edx_ansible
WORKDIR /edx/app/edx_ansible/edx_ansible/docker/plays
RUN apt-get update
COPY docker/build/devstack/ansible_overrides.yml /devstack/ansible_overrides.yml
RUN sudo /edx/app/edx_ansible/venvs/edx_ansible/bin/ansible-playbook devpi.yml \
-c local -i '127.0.0.1,' \
-t "install,devstack" \
--extra-vars="@/devstack/ansible_overrides.yml" \
--extra-vars="DEVPI_SERVER_VERSION=$ARG_DEVPI_SERVER_VERSION" \
--extra-vars="DEVPI_WEB_VERSION=$ARG_DEVPI_WEB_VERSION" \
--extra-vars="DEVPI_CLIENT_VERSION=$ARG_DEVPI_CLIENT_VERSION"
EXPOSE 3141
VOLUME /data
COPY docker/build/devpi/docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
USER root
ENV HOME /data
WORKDIR /data
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["devpi"]
#!/bin/bash
function defaults {
: ${DEVPI_SERVERDIR="/data/server"}
: ${DEVPI_CLIENTDIR="/data/client"}
echo "DEVPI_SERVERDIR is ${DEVPI_SERVERDIR}"
echo "DEVPI_CLIENTDIR is ${DEVPI_CLIENTDIR}"
export DEVPI_SERVERDIR DEVPI_CLIENTDIR
}
function initialize_devpi {
echo "[RUN]: Initializing devpi-server..."
if [ ! -d $DEVPI_SERVERDIR ]; then
devpi-server --restrict-modify root --init --start --host 127.0.0.1 --port 3141
else
devpi-server --restrict-modify root --start --host 127.0.0.1 --port 3141
fi
devpi-server --status
devpi use http://localhost:3141
devpi login root --password=''
DEVPI_PASSWORD=`date +%s | sha256sum | base64 | head -c 32`
devpi user -m root password="${DEVPI_PASSWORD}"
echo "[RUN]: devpi-server password set to '${DEVPI_PASSWORD}'" > $DEVPI_SERVERDIR/.serverpassword
devpi index -y -c public pypi_whitelist='*'
devpi-server --stop
devpi-server --status
}
defaults
if [ "$1" = 'devpi' ]; then
source /home/devpi/venvs/devpi_venv/bin/activate
if [ ! -f $DEVPI_SERVERDIR/.serverversion ]; then
initialize_devpi
fi
echo "[RUN]: Launching devpi-server..."
exec devpi-server --restrict-modify root --host 0.0.0.0 --port 3141
fi
echo "[RUN]: Builtin command not provided [devpi]"
echo "[RUN]: $@"
exec "$@"
# Usage: ansible-playbook devpi.yml -i <admin-host>, -e <secure-repo>/admin/edx_admin.yml -e <secure-repo>/admin/admin.yml
- name: Configure instance(s)
hosts: all
become: True
gather_facts: True
vars:
serial_count: 1
serial: "{{ serial_count }}"
roles:
- common_vars
- docker
- devpi
---
#
# edX Configuration
#
# github: https://github.com/edx/configuration
# wiki: https://openedx.atlassian.net/wiki/display/OpenOPS
# code style: https://openedx.atlassian.net/wiki/display/OpenOPS/Ansible+Code+Conventions
# license: https://github.com/edx/configuration/blob/master/LICENSE.TXT
#
##
# Defaults for role devpi
devpi_group: devpi
devpi_user: devpi
devpi_app_dir: /home/devpi
devpi_venv_dir: devpi_venv
devpi_venv_path: "{{ devpi_app_dir }}/venvs/{{ devpi_venv_dir }}"
devpi_environment:
PIP_NO_CACHE_DIR: "off"
PIP_INDEX_URL: "https://pypi.python.org/simple"
PIP_TRUSTED_HOST: "127.0.0.1"
VIRTUAL_ENV: "{{ devpi_venv_path }}"
PATH: $VIRTUAL_ENV/bin:$PATH
# The versions below are required to be passed-in to the role.
DEVPI_REQUIREMENTS:
- name: devpi-server
version: "{{ DEVPI_SERVER_VERSION }}"
- name: devpi-web
version: "{{ DEVPI_WEB_VERSION }}"
- name: devpi-client
version: "{{ DEVPI_CLIENT_VERSION }}"
---
#
# edX Configuration
#
# github: https://github.com/edx/configuration
# wiki: https://openedx.atlassian.net/wiki/display/OpenOPS
# code style: https://openedx.atlassian.net/wiki/display/OpenOPS/Ansible+Code+Conventions
# license: https://github.com/edx/configuration/blob/master/LICENSE.TXT
#
#
#
# Tasks for role devpi
#
# Overview:
#
#
# Dependencies:
#
#
# Example play:
#
#
- name: Create the application group
group:
name: "{{ devpi_group }}"
state: present
tags:
- "install"
- name: Create application user
user:
name: "{{ devpi_user }}"
home: "{{ devpi_app_dir }}"
group: "{{ devpi_group }}"
createhome: no
shell: /bin/false
tags:
- "install"
- name: Create devpi user dirs
file:
path: "{{ item }}"
state: directory
owner: "{{ devpi_user }}"
group: "{{ devpi_group }}"
with_items:
- "{{ devpi_app_dir }}"
- "{{ devpi_venv_dir }}"
tags:
- "install"
- name: install python requirements
pip:
name: "{{ item.name }}"
version: "{{ item.version|default(omit) }}"
extra_args: "--exists-action w {{ item.extra_args|default('') }}"
virtualenv: "{{ devpi_venv_path }}"
state: present
with_items: "{{ DEVPI_REQUIREMENTS }}"
become_user: "{{ devpi_user }}"
tags:
- "install"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment