Updates to production container builds for new repository

This commit is contained in:
Matthew Jones
2017-08-03 10:39:04 -04:00
parent 6bf7d850f4
commit af3652bb2f
9 changed files with 58 additions and 70 deletions

View File

@@ -2,6 +2,7 @@ PYTHON ?= python
PYTHON_VERSION = $(shell $(PYTHON) -c "from distutils.sysconfig import get_python_version; print(get_python_version())") PYTHON_VERSION = $(shell $(PYTHON) -c "from distutils.sysconfig import get_python_version; print(get_python_version())")
SITELIB=$(shell $(PYTHON) -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") SITELIB=$(shell $(PYTHON) -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
OFFICIAL ?= no OFFICIAL ?= no
PACKAGE_BUILD ?= no
PACKER ?= packer PACKER ?= packer
PACKER_BUILD_OPTS ?= -var 'official=$(OFFICIAL)' -var 'aw_repo_url=$(AW_REPO_URL)' PACKER_BUILD_OPTS ?= -var 'official=$(OFFICIAL)' -var 'aw_repo_url=$(AW_REPO_URL)'
NODE ?= node NODE ?= node
@@ -42,25 +43,29 @@ endif
GIT_DATE := $(shell git log -n 1 --format="%ai") GIT_DATE := $(shell git log -n 1 --format="%ai")
DATE := $(shell date -u +%Y%m%d%H%M) DATE := $(shell date -u +%Y%m%d%H%M)
NAME ?= ansible_awx NAME ?= awx
GIT_REMOTE_URL = $(shell git config --get remote.origin.url) GIT_REMOTE_URL = $(shell git config --get remote.origin.url)
ifeq ($(OFFICIAL),yes) ifeq ($(OFFICIAL),yes)
RELEASE ?= 1 RELEASE ?= 1
AW_REPO_URL ?= http://releases.ansible.com/ansible-tower VERSION_TARGET ?= $(RELEASE_VERSION)
else elif ($(PACKAGE_BUILD),yes)
RELEASE ?= 0.git$(shell git describe --long | cut -d - -f 2-2) RELEASE ?= 0.git$(shell git describe --long | cut -d - -f 2-2)
AW_REPO_URL ?= http://jenkins.testing.ansible.com/ansible-tower_nightlies_f8b8c5588b2505970227a7b0900ef69040ad5a00/$(GIT_BRANCH) VERSION_TARGET ?= $(RELEASE)
else
RELEASE ?=
VERSION_TARGET ?= $(VERSION3DOT)
endif endif
# TAR build parameters # TAR build parameters
ifeq ($(OFFICIAL),yes) ifeq ($(OFFICIAL),yes)
SETUP_TAR_NAME=$(NAME)-setup-$(RELEASE_VERSION)
SDIST_TAR_NAME=$(NAME)-$(RELEASE_VERSION) SDIST_TAR_NAME=$(NAME)-$(RELEASE_VERSION)
WHEEL_NAME=$(NAME)-$(RELEASE_VERSION) WHEEL_NAME=$(NAME)-$(RELEASE_VERSION)
else elif ($(PACKAGE_BUILD),yes)
SETUP_TAR_NAME=$(NAME)-setup-$(RELEASE_VERSION)-$(RELEASE)
SDIST_TAR_NAME=$(NAME)-$(RELEASE_VERSION)-$(RELEASE) SDIST_TAR_NAME=$(NAME)-$(RELEASE_VERSION)-$(RELEASE)
WHEEL_NAME=$(NAME)-$(RELEASE_VERSION)_$(RELEASE) WHEEL_NAME=$(NAME)-$(RELEASE_VERSION)_$(RELEASE)
else
SDIST_TAR_NAME=$(NAME)-$(VERSION3DOT)
WHEEL_NAME=$(NAME)-$(VERSION3DOT)
endif endif
SDIST_COMMAND ?= sdist SDIST_COMMAND ?= sdist
@@ -68,10 +73,6 @@ WHEEL_COMMAND ?= bdist_wheel
SDIST_TAR_FILE ?= $(SDIST_TAR_NAME).tar.gz SDIST_TAR_FILE ?= $(SDIST_TAR_NAME).tar.gz
WHEEL_FILE ?= $(WHEEL_NAME)-py2-none-any.whl WHEEL_FILE ?= $(WHEEL_NAME)-py2-none-any.whl
SETUP_TAR_FILE=$(SETUP_TAR_NAME).tar.gz
SETUP_TAR_LINK=$(NAME)-setup-latest.tar.gz
SETUP_TAR_CHECKSUM=$(NAME)-setup-CHECKSUM
# UI flag files # UI flag files
UI_DEPS_FLAG_FILE = awx/ui/.deps_built UI_DEPS_FLAG_FILE = awx/ui/.deps_built
UI_RELEASE_FLAG_FILE = awx/ui/.release_built UI_RELEASE_FLAG_FILE = awx/ui/.release_built
@@ -609,4 +610,11 @@ psql-container:
docker run -it --net tools_default --rm postgres:9.4.1 sh -c 'exec psql -h "postgres" -p "5432" -U postgres' docker run -it --net tools_default --rm postgres:9.4.1 sh -c 'exec psql -h "postgres" -p "5432" -U postgres'
VERSION: VERSION:
echo $(RELEASE_VERSION) > $@ echo $(VERSION_TARGET) > $@
production-openshift-image: sdist
cat installer/openshift/Dockerfile | sed "s/{{ version }}/$(VERSION_TARGET)/g" | sed "s/{{ tar }}/$(SDIST_TAR_FILE)/g" > ./Dockerfile.production
cat installer/openshift/Dockerfile.celery | sed "s/{{ version }}/$(VERSION_TARGET)/g" | sed "s/{{ tar }}/$(SDIST_TAR_FILE)/g" > ./Dockerfile.celery.production
docker build -t awx_web -f ./Dockerfile.production .
docker build -t awx_task -f ./Dockerfile.celery.production .

View File

@@ -12,8 +12,6 @@ USER root
ADD https://github.com/krallin/tini/releases/download/v0.14.0/tini /tini ADD https://github.com/krallin/tini/releases/download/v0.14.0/tini /tini
RUN chmod +x /tini RUN chmod +x /tini
# Tower Dependencies Install
# TODO: Probably only need Tower dependencies here
ADD Makefile /tmp/Makefile ADD Makefile /tmp/Makefile
RUN mkdir /tmp/requirements RUN mkdir /tmp/requirements
ADD requirements/requirements_ansible.txt \ ADD requirements/requirements_ansible.txt \
@@ -29,18 +27,18 @@ RUN yum -y install epel-release && yum -y localinstall http://download.postgresq
RUN pip install virtualenv supervisor RUN pip install virtualenv supervisor
WORKDIR /tmp WORKDIR /tmp
RUN mkdir -p /var/lib/awx/public/static RUN mkdir -p /var/lib/awx/public/static
# TODO: Handlers could be stripped of this
RUN mkdir -p /var/log/tower RUN mkdir -p /var/log/tower
RUN mkdir -p /etc/tower RUN mkdir -p /etc/tower
RUN echo "ansibletower" > /etc/tower/SECRET_KEY RUN echo "awxsecret" > /etc/tower/SECRET_KEY
RUN VENV_BASE=/var/lib/awx/venv make requirements_ansible && VENV_BASE=/var/lib/awx/venv make requirements_tower RUN VENV_BASE=/var/lib/awx/venv make requirements_ansible && VENV_BASE=/var/lib/awx/venv make requirements_awx
COPY dist/ansible-tower-3.2.0.tar.gz /tmp/ansible-tower-3.2.0.tar.gz COPY dist/{{ tar }} /tmp/{{ tar }}
RUN pip install /tmp/ansible-tower-3.2.0.tar.gz RUN OFFICIAL=yes pip install /tmp/{{ tar }}
# TODO: Replace this with the actual version
RUN echo "3.2.0" > /var/lib/awx/.tower_version RUN echo "{{ version }}" > /var/lib/awx/.tower_version
ADD installer/openshift/nginx.conf /etc/nginx/nginx.conf ADD installer/openshift/nginx.conf /etc/nginx/nginx.conf
ADD installer/openshift/supervisor.conf /supervisor.conf ADD installer/openshift/supervisor.conf /supervisor.conf
ADD installer/openshift/launch_tower.sh /usr/bin/launch_tower.sh ADD installer/openshift/launch_awx.sh /usr/bin/launch_awx.sh
ADD installer/openshift/settings.py /etc/tower/settings.py ADD installer/openshift/settings.py /etc/tower/settings.py
RUN yum -y remove gcc postgresql-devel libxml2-devel libxslt-devel cyrus-sasl-devel openldap-devel xmlsec1-devel krb5-devel xmlsec1-openssl-devel libtool-ltdl-devel gcc-c++ python-devel && yum -y clean all RUN yum -y remove gcc postgresql-devel libxml2-devel libxslt-devel cyrus-sasl-devel openldap-devel xmlsec1-devel krb5-devel xmlsec1-openssl-devel libtool-ltdl-devel gcc-c++ python-devel && yum -y clean all
RUN rm -rf /root/.cache RUN rm -rf /root/.cache
@@ -51,4 +49,4 @@ USER 1000
EXPOSE 8052 EXPOSE 8052
WORKDIR /var/lib/awx WORKDIR /var/lib/awx
ENTRYPOINT ["/tini", "--"] ENTRYPOINT ["/tini", "--"]
CMD /usr/bin/launch_tower.sh CMD /usr/bin/launch_awx.sh

View File

@@ -12,7 +12,7 @@ USER root
ADD https://github.com/krallin/tini/releases/download/v0.14.0/tini /tini ADD https://github.com/krallin/tini/releases/download/v0.14.0/tini /tini
RUN chmod +x /tini RUN chmod +x /tini
# Tower Dependencies Install # AWX Dependencies Install
ADD Makefile /tmp/Makefile ADD Makefile /tmp/Makefile
RUN mkdir /tmp/requirements RUN mkdir /tmp/requirements
ADD requirements/requirements_ansible.txt \ ADD requirements/requirements_ansible.txt \
@@ -28,19 +28,19 @@ RUN yum -y install epel-release && yum -y localinstall http://download.postgresq
RUN pip install virtualenv supervisor RUN pip install virtualenv supervisor
WORKDIR /tmp WORKDIR /tmp
RUN mkdir -p /var/lib/awx RUN mkdir -p /var/lib/awx
# TODO: Handlers could be stripped of this
RUN mkdir -p /var/log/tower RUN mkdir -p /var/log/tower
RUN mkdir -p /etc/tower RUN mkdir -p /etc/tower
RUN mkdir -p /var/lib/awx/public/static RUN mkdir -p /var/lib/awx/public/static
RUN echo "ansibletower" > /etc/tower/SECRET_KEY RUN echo "awxsecret" > /etc/tower/SECRET_KEY
RUN VENV_BASE=/var/lib/awx/venv make requirements_ansible && VENV_BASE=/var/lib/awx/venv make requirements_tower RUN VENV_BASE=/var/lib/awx/venv make requirements_ansible && VENV_BASE=/var/lib/awx/venv make requirements_awx
COPY dist/ansible-tower-3.2.0.tar.gz /tmp/ansible-tower-3.2.0.tar.gz COPY dist/{{ tar }} /tmp/{{ tar }}
RUN pip install /tmp/ansible-tower-3.2.0.tar.gz RUN OFFICIAL=yes pip install /tmp/{{ tar }}
# TODO: Replace this with the actual version
RUN echo "3.2.0" > /var/lib/awx/.tower_version RUN echo "{{ version }}" > /var/lib/awx/.tower_version
ADD installer/openshift/nginx.conf /etc/nginx/nginx.conf ADD installer/openshift/nginx.conf /etc/nginx/nginx.conf
ADD installer/openshift/supervisor_task.conf /supervisor_task.conf ADD installer/openshift/supervisor_task.conf /supervisor_task.conf
ADD installer/openshift/launch_tower_task.sh /usr/bin/launch_tower_task.sh ADD installer/openshift/launch_awx_task.sh /usr/bin/launch_awx_task.sh
ADD installer/openshift/settings.py /etc/tower/settings.py ADD installer/openshift/settings.py /etc/tower/settings.py
RUN yum -y remove gcc postgresql-devel libxml2-devel libxslt-devel cyrus-sasl-devel openldap-devel xmlsec1-devel krb5-devel xmlsec1-openssl-devel libtool-ltdl-devel gcc-c++ python-devel && yum -y clean all RUN yum -y remove gcc postgresql-devel libxml2-devel libxslt-devel cyrus-sasl-devel openldap-devel xmlsec1-devel krb5-devel xmlsec1-openssl-devel libtool-ltdl-devel gcc-c++ python-devel && yum -y clean all
RUN rm -rf /root/.cache RUN rm -rf /root/.cache
@@ -50,4 +50,4 @@ USER 1000
EXPOSE 80 443 EXPOSE 80 443
WORKDIR /var/lib/awx WORKDIR /var/lib/awx
ENTRYPOINT ["/tini", "--"] ENTRYPOINT ["/tini", "--"]
CMD /usr/bin/launch_tower_task.sh CMD /usr/bin/launch_awx_task.sh

View File

@@ -11,6 +11,9 @@ data:
ADMINS = () ADMINS = ()
DEBUG = True DEBUG = True
# Container environments don't like chroots
AWX_PROOT_ENABLED = False
#Autoprovisioning should replace this #Autoprovisioning should replace this
CLUSTER_HOST_ID = socket.gethostname() CLUSTER_HOST_ID = socket.gethostname()
SYSTEM_UUID = '00000000-0000-0000-0000-000000000000' SYSTEM_UUID = '00000000-0000-0000-0000-000000000000'
@@ -44,12 +47,14 @@ data:
LOGGING['loggers']['social']['handlers'] = ['console'] LOGGING['loggers']['social']['handlers'] = ['console']
LOGGING['loggers']['system_tracking_migrations']['handlers'] = ['console'] LOGGING['loggers']['system_tracking_migrations']['handlers'] = ['console']
LOGGING['loggers']['rbac_migrations']['handlers'] = ['console'] LOGGING['loggers']['rbac_migrations']['handlers'] = ['console']
LOGGING['loggers']['awx.isolated.manager.playbooks']['handlers'] = ['console']
LOGGING['handlers']['callback_receiver'] = {'class': 'logging.NullHandler'} LOGGING['handlers']['callback_receiver'] = {'class': 'logging.NullHandler'}
LOGGING['handlers']['fact_receiver'] = {'class': 'logging.NullHandler'} LOGGING['handlers']['fact_receiver'] = {'class': 'logging.NullHandler'}
LOGGING['handlers']['task_system'] = {'class': 'logging.NullHandler'} LOGGING['handlers']['task_system'] = {'class': 'logging.NullHandler'}
LOGGING['handlers']['tower_warnings'] = {'class': 'logging.NullHandler'} LOGGING['handlers']['tower_warnings'] = {'class': 'logging.NullHandler'}
LOGGING['handlers']['rbac_migrations'] = {'class': 'logging.NullHandler'} LOGGING['handlers']['rbac_migrations'] = {'class': 'logging.NullHandler'}
LOGGING['handlers']['system_tracking_migrations'] = {'class': 'logging.NullHandler'} LOGGING['handlers']['system_tracking_migrations'] = {'class': 'logging.NullHandler'}
LOGGING['handlers']['management_playbooks'] = {'class': 'logging.NullHandler'}
DATABASES = { DATABASES = {
'default': { 'default': {

View File

@@ -4,5 +4,5 @@ if [ `id -u` -ge 10000 ]; then
cat /tmp/passwd > /etc/passwd cat /tmp/passwd > /etc/passwd
rm /tmp/passwd rm /tmp/passwd
fi fi
tower-manage collectstatic --noinput --clear awx-manage collectstatic --noinput --clear
supervisord -c /supervisor.conf supervisord -c /supervisor.conf

View File

@@ -5,9 +5,9 @@ if [ `id -u` -ge 10000 ]; then
rm /tmp/passwd rm /tmp/passwd
fi fi
ANSIBLE_REMOTE_TEMP=/tmp ANSIBLE_LOCAL_TEMP=/tmp ansible -i "127.0.0.1," -c local -v -m postgresql_db -U $DATABASE_USER -a "name=$DATABASE_NAME owner=$DATABASE_USER login_user=$DATABASE_USER login_host=$DATABASE_HOST login_password=$DATABASE_PASSWORD" all ANSIBLE_REMOTE_TEMP=/tmp ANSIBLE_LOCAL_TEMP=/tmp ansible -i "127.0.0.1," -c local -v -m postgresql_db -U $DATABASE_USER -a "name=$DATABASE_NAME owner=$DATABASE_USER login_user=$DATABASE_USER login_host=$DATABASE_HOST login_password=$DATABASE_PASSWORD" all
tower-manage migrate --noinput --fake-initial awx-manage migrate --noinput --fake-initial
echo "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'root@localhost', 'password')" | tower-manage shell echo "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'root@localhost', 'password')" | awx-manage shell
tower-manage create_preload_data awx-manage create_preload_data
tower-manage register_instance --hostname=$(hostname) awx-manage register_instance --hostname=$(hostname)
tower-manage register_queue --queuename=tower --hostnames=$(hostname) awx-manage register_queue --queuename=tower --hostnames=$(hostname)
supervisord -c /supervisor_task.conf supervisord -c /supervisor_task.conf

View File

@@ -13,7 +13,7 @@ stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0 stderr_logfile_maxbytes=0
[program:uwsgi] [program:uwsgi]
command = /var/lib/awx/venv/tower/bin/uwsgi --socket 127.0.0.1:8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=/var/lib/awx/awxfifo --lazy-apps -b 32768 command = /var/lib/awx/venv/awx/bin/uwsgi --socket 127.0.0.1:8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=/var/lib/awx/awxfifo --lazy-apps -b 32768
directory = /var/lib/awx directory = /var/lib/awx
autostart = true autostart = true
2autorestart = true 2autorestart = true
@@ -25,7 +25,7 @@ stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0 stderr_logfile_maxbytes=0
[program:daphne] [program:daphne]
command = /var/lib/awx/venv/tower/bin/daphne -b 127.0.0.1 -p 8051 awx.asgi:channel_layer command = /var/lib/awx/venv/awx/bin/daphne -b 127.0.0.1 -p 8051 awx.asgi:channel_layer
directory = /var/lib/awx directory = /var/lib/awx
autostart = true autostart = true
autorestart = true autorestart = true

View File

@@ -4,7 +4,7 @@ umask = 022
[program:celery] [program:celery]
# TODO: Needs to be reworked to dynamically use instance group queues # TODO: Needs to be reworked to dynamically use instance group queues
command = tower-manage celery worker -l debug --autoscale=4 -Ofair -Q tower_scheduler,tower_broadcast_all,tower,%(host_node_name)s -n celery@localhost command = awx-manage celery worker -l debug --autoscale=4 -Ofair -Q tower_scheduler,tower_broadcast_all,tower,%(host_node_name)s -n celery@localhost
directory = /var/lib/awx directory = /var/lib/awx
environment = LANGUAGE="en_US.UTF-8",LANG="en_US.UTF-8",LC_ALL="en_US.UTF-8",LC_CTYPE="en_US.UTF-8" environment = LANGUAGE="en_US.UTF-8",LANG="en_US.UTF-8",LC_ALL="en_US.UTF-8",LC_CTYPE="en_US.UTF-8"
#user = {{ aw_user }} #user = {{ aw_user }}
@@ -17,7 +17,7 @@ stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0 stderr_logfile_maxbytes=0
[program:awx-celeryd-beat] [program:awx-celeryd-beat]
command = /usr/bin/tower-manage celery beat -l debug --pidfile= -s /var/lib/awx/beat.db command = /usr/bin/awx-manage celery beat -l debug --pidfile= -s /var/lib/awx/beat.db
directory = /var/lib/awx directory = /var/lib/awx
autostart = true autostart = true
autorestart = true autorestart = true
@@ -29,18 +29,7 @@ stderr_logfile = /dev/stderr
stderr_logfile_maxbytes = 0 stderr_logfile_maxbytes = 0
[program:callback-receiver] [program:callback-receiver]
command = tower-manage run_callback_receiver command = awx-manage run_callback_receiver
directory = /var/lib/awx
autostart = true
autorestart = true
stopwaitsecs = 5
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:fact-cache-receiver]
command = tower-manage run_fact_cache_receiver
directory = /var/lib/awx directory = /var/lib/awx
autostart = true autostart = true
autorestart = true autorestart = true
@@ -51,7 +40,7 @@ stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0 stderr_logfile_maxbytes=0
[program:channels-worker] [program:channels-worker]
command = tower-manage runworker --only-channels websocket.* command = awx-manage runworker --only-channels websocket.*
directory = /var/lib/awx directory = /var/lib/awx
autostart = true autostart = true
autorestart = true autorestart = true
@@ -62,7 +51,7 @@ stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0 stderr_logfile_maxbytes=0
[group:tower-processes] [group:tower-processes]
programs=celery,callback-receiver,channels-worker,fact-cache-receiver programs=celery,callback-receiver,channels-worker
priority=5 priority=5
# TODO: Exit Handler # TODO: Exit Handler

View File

@@ -16,12 +16,7 @@ etcpath = "/etc/tower"
homedir = "/var/lib/awx" homedir = "/var/lib/awx"
bindir = "/usr/bin" bindir = "/usr/bin"
sharedir = "/usr/share/awx" sharedir = "/usr/share/awx"
docdir = "/usr/share/doc/ansible-tower" docdir = "/usr/share/doc/ansible-awx"
if os.getenv('OFFICIAL', 'no') == 'yes':
build_tag = ''
else:
build_tag = '-' + '0.git' + subprocess.Popen("git describe --long | cut -d - -f 2-2", shell=True, stdout=subprocess.PIPE).stdout.read().strip()
def get_version(): def get_version():
@@ -65,10 +60,6 @@ class sdist_isolated(sdist):
'recursive-include awx/lib *.py', 'recursive-include awx/lib *.py',
] ]
def __init__(self, dist):
sdist.__init__(self, dist)
dist.metadata.version += build_tag
def get_file_list(self): def get_file_list(self):
self.filelist.process_template_line('include setup.py') self.filelist.process_template_line('include setup.py')
for line in self.includes: for line in self.includes:
@@ -173,9 +164,6 @@ setup(
("%s" % sosconfig, ["tools/sosreport/tower.py"])]), ("%s" % sosconfig, ["tools/sosreport/tower.py"])]),
cmdclass = {'sdist_isolated': sdist_isolated}, cmdclass = {'sdist_isolated': sdist_isolated},
options = { options = {
'egg_info': {
'tag_build': build_tag,
},
'aliases': { 'aliases': {
'dev_build': 'clean --all egg_info sdist', 'dev_build': 'clean --all egg_info sdist',
'release_build': 'clean --all egg_info -b "" sdist', 'release_build': 'clean --all egg_info -b "" sdist',