Commit d56788f6 by John Jarvis

Merge pull request #390 from edx/jarv/edxapp-env

Some environment changes to speed up deploys
parents 08c5c421 fbee5b87
...@@ -77,6 +77,9 @@ ...@@ -77,6 +77,9 @@
- name: certs | create a symlink for venv python - name: certs | create a symlink for venv python
file: > file: >
src="{{ certs_venv_bin }}/python" src="{{ certs_venv_bin }}/{{ item }}"
dest={{ COMMON_BIN_DIR }}/python.certs dest={{ COMMON_BIN_DIR }}/{{ item }}.certs
state=link state=link
with_items:
- python
- pip
--- ---
devpi_venv_dir: "{{ COMMON_APP_DIR }}/devpi/venvs/devpi" devpi_app_dir: "{{ COMMON_APP_DIR }}/devpi"
devpi_data_dir: "{{ COMMON_DATA_DIR }}/devpi"
devpi_mirror_dir: "{{ devpi_data_dir }}/data"
devpi_log_dir: "{{ COMMON_LOG_DIR }}/devpi"
devpi_venvs_dir: "{{ devpi_app_dir }}/venvs"
devpi_venv_dir: "{{ devpi_venvs_dir }}/devpi"
devpi_venv_bin: "{{ devpi_venv_dir }}/bin"
devpi_supervisor_ctl: "{{ devpi_venv_bin }}/supervisorctl"
devpi_pip_pkgs: devpi_pip_pkgs:
- devpi-server - devpi-server
- eventlet - eventlet
devpi_nginx_port: 80 devpi_nginx_port: 80
devpi_port: 4040 devpi_port: 4040
devpi_data_dir: /var/devpi/data
devpi_user: devpi devpi_user: devpi
devpi_group: devpi devpi_group: devpi
devpi_server_name: 'pypy.*' devpi_server_name: 'pypy.*'
devpi_supervisor_user: devpi.supervisor
devpi_supervisor_app_dir: "{{ devpi_app_dir }}/supervisor"
devpi_supervisor_cfg_dir: "{{ devpi_supervisor_app_dir }}/conf.d"
devpi_supervisor_data_dir: "{{ devpi_data_dir }}/supervisor"
devpi_supervisor_cfg: "{{ devpi_supervisor_app_dir }}/supervisor.conf"
devpi_supervisor_log_dir: "{{ devpi_log_dir }}/supervisor"
...@@ -14,12 +14,15 @@ ...@@ -14,12 +14,15 @@
- name: devpi | restart devpi - name: devpi | restart devpi
supervisorctl: > supervisorctl: >
state=restarted state=restarted
config={{ supervisor_cfg }} supervisorctl_path={{ devpi_supervisor_ctl }}
config={{ devpi_supervisor_cfg }}
name=devpi-server name=devpi-server
sudo_user: "{{ devpi_supervisor_user }}"
- name: devpi | start devpi - name: devpi | start devpi
supervisorctl: > supervisorctl: >
state=started state=started
config={{ supervisor_cfg }} supervisorctl_path={{ devpi_supervisor_ctl }}
config={{ devpi_supervisor_cfg }}
name=devpi-server name=devpi-server
sudo_user: "{{ devpi_supervisor_user }}"
...@@ -33,36 +33,62 @@ ...@@ -33,36 +33,62 @@
- name: devpi | create devpi user - name: devpi | create devpi user
user: > user: >
name={{ devpi_user }} name={{ devpi_user }}
state=present shell=/bin/false createhome=no
- name: devpi | create virtualenv directory - name: devpi | create devpi application directories
file: > file: >
path={{ devpi_venv_dir }} path={{ item }}
state=directory state=directory
owner={{ devpi_user }} owner={{ devpi_user }}
group={{ devpi_group }} group={{ devpi_supervisor_user }}
notify: devpi | restart devpi notify: supervisor | restart supervisor
with_items:
- "{{ devpi_app_dir }}"
- "{{ devpi_venv_dir }}"
- name: devpi | create the devpi data directory - name: devpi | create the devpi data directory, needs write access by the service user
file: > file: >
path={{ devpi_data_dir }} path={{ item }}
state=directory state=directory
owner={{ devpi_user }} owner={{ devpi_supervisor_user }}
group={{ devpi_group }} group={{ devpi_user }}
with_items:
- "{{ devpi_data_dir }}"
- "{{ devpi_mirror_dir }}"
- name: devpi | install devpi pip pkgs - name: devpi | install devpi pip pkgs
pip: > pip: >
name={{ item }} name={{ item }}
state=present state=present
virtualenv={{ devpi_venv_dir }} virtualenv={{ devpi_venv_dir }}
sudo_user: "{{ devpi_user }}"
with_items: devpi_pip_pkgs with_items: devpi_pip_pkgs
notify: devpi | restart devpi notify: supervisor | restart supervisor
- name: devpi | writing supervisor script
template: >
src=devpi.conf.j2 dest={{ devpi_supervisor_cfg_dir }}/devpi.conf
owner={{ devpi_user }} group={{ devpi_user }} mode=0644
notify: supervisor | restart supervisor
- name: supervisor | ensure supervisor is started - name: devpi | create a symlink for venv python, pip and supervisor
service: name=supervisor state=started file: >
src="{{ devpi_venv_bin }}/{{ item }}"
dest={{ COMMON_BIN_DIR }}/{{ item }}.devpi
state=link
with_items:
- python
- pip
- supervisorctl
- name: devpi | create a symlink for supervisor config
file: >
src="{{ devpi_supervisor_app_dir }}/supervisord.conf"
dest={{ COMMON_CFG_DIR }}/supervisord.conf.devpi
state=link
- name: devpi | ensure devpi is running # flush queued up handlers so that devpi
supervisorctl: > # is restarted since downstream roles
state=started # will need to use it
config={{ supervisor_cfg }} - meta: flush_handlers
name=devpi-server
[program:devpi-server]
command={{ devpi_venv_bin }}/devpi-server --port {{ devpi_port }} --serverdir {{ devpi_mirror_dir }}
user={{ devpi_supervisor_user }}
priority=999
stdout_logfile={{ devpi_supervisor_log_dir }}/%(program_name)-stdout.log
stderr_logfile={{ devpi_supervisor_log_dir }}/%(program_name)-stderr.log
autostart=True
...@@ -111,6 +111,7 @@ edxapp_staticfile_dir: "{{ edxapp_data_dir }}/staticfiles" ...@@ -111,6 +111,7 @@ edxapp_staticfile_dir: "{{ edxapp_data_dir }}/staticfiles"
edxapp_course_data_dir: "{{ edxapp_data_dir }}/data" edxapp_course_data_dir: "{{ edxapp_data_dir }}/data"
edxapp_upload_dir: "{{ edxapp_data_dir }}/uploads" edxapp_upload_dir: "{{ edxapp_data_dir }}/uploads"
edxapp_theme_dir: "{{ edxapp_data_dir }}/themes" edxapp_theme_dir: "{{ edxapp_data_dir }}/themes"
edxapp_pypi_local_mirror: "http://localhost:{{ devpi_port }}/root/pypi/+simple"
edxapp_workers: edxapp_workers:
- queue: low - queue: low
service_variant: cms service_variant: cms
...@@ -134,15 +135,22 @@ edxapp_workers: ...@@ -134,15 +135,22 @@ edxapp_workers:
service_variant: lms service_variant: lms
concurrency: 2 concurrency: 2
edxapp_all_req_files:
- "{{ pre_requirements_file }}"
- "{{ post_requirements_file }}"
- "{{ repo_requirements_file }}"
- "{{ github_requirements_file }}"
- "{{ local_requirements_file }}"
- "{{ sandbox_base_requirements }}"
- "{{ sandbox_local_requirements }}"
- "{{ sandbox_post_requirements }}"
- "{{ edxapp_code_dir }}/package.json"
- "{{ edxapp_code_dir }}/Gemfile"
# TODO: old style variable syntax is necessary # TODO: old style variable syntax is necessary
# here until ansible 1.4 # for lists and dictionaries
edxapp_deploy_environment:
edxapp_environment:
LANG: $EDXAPP_LANG LANG: $EDXAPP_LANG
NO_PREREQ_INSTALL: 1 NO_PREREQ_INSTALL: 1
SKIP_WS_MIGRATIONS: 1 SKIP_WS_MIGRATIONS: 1
......
...@@ -4,3 +4,4 @@ dependencies: ...@@ -4,3 +4,4 @@ dependencies:
rbenv_user: "{{ edxapp_user }}" rbenv_user: "{{ edxapp_user }}"
rbenv_dir: "{{ edxapp_app_dir }}" rbenv_dir: "{{ edxapp_app_dir }}"
rbenv_ruby_version: "{{ edxapp_ruby_version }}" rbenv_ruby_version: "{{ edxapp_ruby_version }}"
- devpi
...@@ -30,15 +30,14 @@ ...@@ -30,15 +30,14 @@
# Do A Checkout # Do A Checkout
- name: edxapp | checkout edx-platform repo into {{edxapp_code_dir}} - name: edxapp | checkout edx-platform repo into {{edxapp_code_dir}}
git: dest={{edxapp_code_dir}} repo={{edx_platform_repo}} version={{edx_platform_commit}} git: dest={{edxapp_code_dir}} repo={{edx_platform_repo}} version={{edx_platform_commit}}
register: edx_platform_checkout register: chkout
sudo_user: "{{ edxapp_user }}" sudo_user: "{{ edxapp_user }}"
tags: tags:
- deploy - deploy
- name: edxapp | git clean after checking out edx-platform - name: edxapp | git clean after checking out edx-platform
shell: cd {{edxapp_code_dir}} && git clean -xdf shell: cd {{edxapp_code_dir}} && git clean -xdf
when: edx_platform_checkout.changed when: chkout.changed
sudo_user: "{{ edxapp_user }}" sudo_user: "{{ edxapp_user }}"
tags: tags:
- deploy - deploy
...@@ -51,16 +50,43 @@ ...@@ -51,16 +50,43 @@
tags: tags:
- deploy - deploy
- name: edxapp | create checksum for requirements, package.json and Gemfile
shell: >
/usr/bin/md5sum {{ " ".join(edxapp_all_req_files) }} 2>/dev/null > /var/tmp/edxapp.req.new
sudo_user: "{{ edxapp_user }}"
ignore_errors: true
when: chkout.changed
tags:
- deploy
- stat: path=/var/tmp/edxapp.req.new
register: new
tags: deploy
- stat: path=/var/tmp/edxapp.req.installed
register: inst
tags: deploy
# Substitute github mirror in all requirements files
- name: edxapp | Updating requirement files for git mirror
command: |
/bin/sed -i -e 's/github\.com/{{ COMMON_GIT_MIRROR }}/g' {{ item }}
with_items: edxapp_all_req_files
sudo_user: "{{ edxapp_user }}"
when: chkout.changed and not inst.stat.exists or new.stat.md5 != inst.stat.md5
tags: deploy
# Ruby plays that need to be run after platform updates. # Ruby plays that need to be run after platform updates.
- name: edxapp | gem install bundler - name: edxapp | gem install bundler
shell: > shell: >
gem install bundle gem install bundle
chdir={{ edxapp_code_dir }} chdir={{ edxapp_code_dir }}
executable=/bin/bash executable=/bin/bash
environment: "{{ edxapp_deploy_environment }}" environment: "{{ edxapp_environment }}"
sudo_user: "{{ edxapp_user }}" sudo_user: "{{ edxapp_user }}"
tags: when: chkout.changed and not inst.stat.exists or new.stat.md5 != inst.stat.md5
- deploy tags: deploy
- name: edxapp | bundle install - name: edxapp | bundle install
shell: > shell: >
...@@ -68,37 +94,18 @@ ...@@ -68,37 +94,18 @@
chdir={{ edxapp_code_dir }} chdir={{ edxapp_code_dir }}
executable=/bin/bash executable=/bin/bash
sudo_user: "{{ edxapp_user }}" sudo_user: "{{ edxapp_user }}"
environment: "{{ edxapp_deploy_environment }}" environment: "{{ edxapp_environment }}"
tags: when: chkout.changed and not inst.stat.exists or new.stat.md5 != inst.stat.md5
- deploy tags: deploy
# Node play that need to be run after platform updates. # Node play that need to be run after platform updates.
- name: edxapp | Install edx-platform npm dependencies - name: edxapp | Install edx-platform npm dependencies
shell: npm install chdir={{ edxapp_code_dir }} shell: npm install chdir={{ edxapp_code_dir }}
sudo_user: "{{ edxapp_user }}" sudo_user: "{{ edxapp_user }}"
environment: "{{ edxapp_deploy_environment }}" environment: "{{ edxapp_environment }}"
tags: when: chkout.changed and not inst.stat.exists or new.stat.md5 != inst.stat.md5
- deploy tags: deploy
# Python plays that need to be run after platform updates.
# Substitute github mirror in all requirements files
#
- name: edxapp | Updating requirement files for git mirror
command: |
/bin/sed -i -e 's/github\.com/{{ COMMON_GIT_MIRROR }}/g' {{ item }}
with_items:
- "{{ pre_requirements_file }}"
- "{{ post_requirements_file }}"
- "{{ repo_requirements_file }}"
- "{{ github_requirements_file }}"
- "{{ local_requirements_file }}"
- "{{ sandbox_base_requirements }}"
- "{{ sandbox_local_requirements }}"
- "{{ sandbox_post_requirements }}"
sudo_user: "{{ edxapp_user }}"
tags:
- deploy
# Install the python pre requirements into {{ edxapp_venv_dir }} # Install the python pre requirements into {{ edxapp_venv_dir }}
- name : edxapp | install python pre-requirements - name : edxapp | install python pre-requirements
...@@ -106,20 +113,24 @@ ...@@ -106,20 +113,24 @@
requirements="{{pre_requirements_file}}" requirements="{{pre_requirements_file}}"
virtualenv="{{edxapp_venv_dir}}" virtualenv="{{edxapp_venv_dir}}"
state=present state=present
extra_args="-i {{ COMMON_PYPI_MIRROR_URL }}" extra_args="-i {{ edxapp_pypi_local_mirror }}"
sudo_user: "{{ edxapp_user }}" sudo_user: "{{ edxapp_user }}"
tags: environment: "{{ edxapp_environment }}"
- deploy when: chkout.changed and not inst.stat.exists or new.stat.md5 != inst.stat.md5
tags: deploy
# Install the python modules into {{ edxapp_venv_dir }} # Install the python modules into {{ edxapp_venv_dir }}
- name : edxapp | install python base-requirements - name : edxapp | install python base-requirements
# Need to use shell rather than pip so that we can maintain the context of our current working directory; some # Need to use shell rather than pip so that we can maintain the context of our current working directory; some
# requirements are pathed relative to the edx-platform repo. Using the pip from inside the virtual environment implicitly # requirements are pathed relative to the edx-platform repo. Using the pip from inside the virtual environment implicitly
# installs everything into that virtual environment. # installs everything into that virtual environment.
shell: cd {{ edxapp_code_dir }} && {{ edxapp_venv_dir }}/bin/pip install -i {{ COMMON_PYPI_MIRROR_URL }} --exists-action w --use-mirrors -r {{ base_requirements_file }} shell: >
{{ edxapp_venv_dir }}/bin/pip install -i {{ edxapp_pypi_local_mirror }} --exists-action w --use-mirrors -r {{ base_requirements_file }}
chdir={{ edxapp_code_dir }}
environment: "{{ edxapp_environment }}"
sudo_user: "{{ edxapp_user }}" sudo_user: "{{ edxapp_user }}"
tags: when: chkout.changed and not inst.stat.exists or new.stat.md5 != inst.stat.md5
- deploy tags: deploy
# Install the python post requirements into {{ edxapp_venv_dir }} # Install the python post requirements into {{ edxapp_venv_dir }}
- name : edxapp | install python post-requirements - name : edxapp | install python post-requirements
...@@ -127,24 +138,25 @@ ...@@ -127,24 +138,25 @@
requirements="{{post_requirements_file}}" requirements="{{post_requirements_file}}"
virtualenv="{{edxapp_venv_dir}}" virtualenv="{{edxapp_venv_dir}}"
state=present state=present
extra_args="-i {{ COMMON_PYPI_MIRROR_URL }}" extra_args="-i {{ edxapp_pypi_local_mirror }}"
sudo_user: "{{ edxapp_user }}" sudo_user: "{{ edxapp_user }}"
tags: environment: "{{ edxapp_environment }}"
- deploy when: chkout.changed and not inst.stat.exists or new.stat.md5 != inst.stat.md5
tags: deploy
# Install the final python modules into {{ edxapp_venv_dir }} # Install the final python modules into {{ edxapp_venv_dir }}
- name : edxapp | install python post-post requirements - name : edxapp | install python post-post requirements
# Need to use shell rather than pip so that we can maintain the context of our current working directory; some # Need to use shell rather than pip so that we can maintain the context of our current working directory; some
# requirements are pathed relative to the edx-platform repo. Using the pip from inside the virtual environment implicitly # requirements are pathed relative to the edx-platform repo. Using the pip from inside the virtual environment implicitly
# installs everything into that virtual environment. # installs everything into that virtual environment.
shell: cd {{ edxapp_code_dir }} && {{ edxapp_venv_dir }}/bin/pip install -i {{ COMMON_PYPI_MIRROR_URL }} --exists-action w --use-mirrors -r {{ item }} shell: cd {{ edxapp_code_dir }} && {{ edxapp_venv_dir }}/bin/pip install -i {{ edxapp_pypi_local_mirror }} --exists-action w --use-mirrors -r {{ item }}
with_items: with_items:
- "{{ repo_requirements_file }}" - "{{ repo_requirements_file }}"
- "{{ github_requirements_file }}" - "{{ github_requirements_file }}"
- "{{ local_requirements_file }}" - "{{ local_requirements_file }}"
sudo_user: "{{ edxapp_user }}" sudo_user: "{{ edxapp_user }}"
tags: when: chkout.changed and not inst.stat.exists or new.stat.md5 != inst.stat.md5
- deploy tags: deploy
# Install the sandbox python modules into {{ edxapp_venv_dir }} # Install the sandbox python modules into {{ edxapp_venv_dir }}
...@@ -152,15 +164,22 @@ ...@@ -152,15 +164,22 @@
# Need to use shell rather than pip so that we can maintain the context of our current working directory; some # Need to use shell rather than pip so that we can maintain the context of our current working directory; some
# requirements are pathed relative to the edx-platform repo. Using the pip from inside the virtual environment implicitly # requirements are pathed relative to the edx-platform repo. Using the pip from inside the virtual environment implicitly
# installs everything into that virtual environment. # installs everything into that virtual environment.
shell: cd {{ edxapp_code_dir }} && {{ edxapp_venv_dir }}/bin/pip install -i {{ COMMON_PYPI_MIRROR_URL }} --exists-action w --use-mirrors -r {{ item }} shell: cd {{ edxapp_code_dir }} && {{ edxapp_venv_dir }}/bin/pip install -i {{ edxapp_pypi_local_mirror }} --exists-action w --use-mirrors -r {{ item }}
with_items: with_items:
- "{{ sandbox_base_requirements }}" - "{{ sandbox_base_requirements }}"
- "{{ sandbox_local_requirements }}" - "{{ sandbox_local_requirements }}"
- "{{ sandbox_post_requirements }}" - "{{ sandbox_post_requirements }}"
when: install_sandbox_reqs_into_regular_venv when: install_sandbox_reqs_into_regular_venv
sudo_user: "{{ edxapp_user }}" sudo_user: "{{ edxapp_user }}"
tags: when: chkout.changed and not inst.stat.exists or new.stat.md5 != inst.stat.md5
- deploy tags: deploy
- name: edxapp | create checksum for installed requirements
shell: cp /var/tmp/edxapp.req.new /var/tmp/edxapp.req.installed
sudo_user: "{{ edxapp_user }}"
when: chkout.changed
tags: deploy
# https://code.launchpad.net/~wligtenberg/django-openid-auth/mysql_fix/+merge/22726 # https://code.launchpad.net/~wligtenberg/django-openid-auth/mysql_fix/+merge/22726
# This is necessary for when syncdb is run and the django_openid_auth module is installed, # This is necessary for when syncdb is run and the django_openid_auth module is installed,
......
...@@ -12,28 +12,20 @@ ...@@ -12,28 +12,20 @@
name="{{ edxapp_user }}" home="{{ edxapp_app_dir }}" name="{{ edxapp_user }}" home="{{ edxapp_app_dir }}"
createhome=no shell=/bin/false createhome=no shell=/bin/false
- name: edxapp | create edxapp app dir - name: edxapp | create edxapp user dirs
file: > file: >
path="{{ item }}" state=directory path="{{ item }}" state=directory
owner="{{ edxapp_user }}" group="{{ common_web_group }}" owner="{{ edxapp_user }}" group="{{ common_web_group }}"
with_items: with_items:
- "{{ edxapp_app_dir }}" - "{{ edxapp_app_dir }}"
- "{{ edxapp_venvs_dir }}" - "{{ edxapp_venvs_dir }}"
- "{{ edxapp_theme_dir }}"
- name: edxapp | create edxapp log dir - name: edxapp | create edxapp log dir
file: > file: >
path="{{ edxapp_log_dir }}" state=directory path="{{ edxapp_log_dir }}" state=directory
owner="{{ common_log_user }}" group="{{ common_log_user }}" owner="{{ common_log_user }}" group="{{ common_log_user }}"
- name: edxapp | create edxapp writable dirs
file: >
path="{{ item }}" state=directory
owner="{{ edxapp_user }}" group="{{ edxapp_user }}"
with_items:
- "{{ edxapp_staticfile_dir }}"
- "{{ edxapp_theme_dir }}"
- name: edxapp | create web-writable edxapp data dirs - name: edxapp | create web-writable edxapp data dirs
file: > file: >
path="{{ item }}" state=directory path="{{ item }}" state=directory
...@@ -53,10 +45,20 @@ ...@@ -53,10 +45,20 @@
mode=0750 mode=0750
with_items: service_variants_enabled with_items: service_variants_enabled
- name: edxapp | setup the edxapp env
template: >
src=edxapp_env.j2 dest={{ edxapp_app_dir }}/edxapp_env
owner={{ edxapp_user }} group={{ common_web_user }}
mode=0644
- include: deploy.yml - include: deploy.yml
- name: edxapp | create a symlink for venv python - name: edxapp | create a symlink for venv python
file: > file: >
src="{{ edxapp_venv_bin }}/python" src="{{ edxapp_venv_bin }}/{{ item }}"
dest={{ COMMON_BIN_DIR }}/python.edxapp dest={{ COMMON_BIN_DIR }}/{{ item }}.edxapp
state=link state=link
with_items:
- python
- pip
...@@ -59,22 +59,22 @@ ...@@ -59,22 +59,22 @@
executable=/bin/bash executable=/bin/bash
chdir={{ edxapp_code_dir }} chdir={{ edxapp_code_dir }}
sudo_user: "{{ edxapp_user }}" sudo_user: "{{ edxapp_user }}"
when: celery_worker is not defined when: chkout.changed and celery_worker is not defined
with_items: service_variants_enabled with_items: service_variants_enabled
environment: "{{ edxapp_deploy_environment }}" environment: "{{ edxapp_environment }}"
tags: tags:
- deploy - deploy
- name: edxapp | syncdb and migrate - name: edxapp | syncdb and migrate
shell: sudo -u {{ edxapp_user }} SERVICE_VARIANT=lms {{ edxapp_venv_bin}}/django-admin.py syncdb --migrate --noinput --settings=lms.envs.aws --pythonpath={{ edxapp_code_dir }} shell: sudo -u {{ edxapp_user }} SERVICE_VARIANT=lms {{ edxapp_venv_bin}}/django-admin.py syncdb --migrate --noinput --settings=lms.envs.aws --pythonpath={{ edxapp_code_dir }}
when: migrate_db is defined and migrate_db|lower == "yes" when: chkout and migrate_db is defined and migrate_db|lower == "yes"
tags: tags:
- deploy - deploy
- name: edxapp | db migrate - name: edxapp | db migrate
shell: sudo -u {{ edxapp_user }} SERVICE_VARIANT=lms {{ edxapp_venv_bin }}/django-admin.py migrate --noinput --settings=lms.envs.aws --pythonpath={{ edxapp_code_dir }} shell: sudo -u {{ edxapp_user }} SERVICE_VARIANT=lms {{ edxapp_venv_bin }}/django-admin.py migrate --noinput --settings=lms.envs.aws --pythonpath={{ edxapp_code_dir }}
when: migrate_only is defined and migrate_only|lower == "yes" when: chkout.changed and migrate_only is defined and migrate_only|lower == "yes"
tags: tags:
- deploy - deploy
......
# {{ ansible_managed }}
{% for name,value in edxapp_environment.items() %}
{%- if value %}
export {{ name }}="{{ value }}"
{%- endif %}
{% endfor %}
...@@ -30,5 +30,8 @@ ...@@ -30,5 +30,8 @@
- name: ora | create a symlink for venv python - name: ora | create a symlink for venv python
file: > file: >
src="{{ ora_venv_bin }}/python" src="{{ ora_venv_bin }}/{{ item }}"
dest={{ COMMON_BIN_DIR }}/python.ora state=link dest={{ COMMON_BIN_DIR }}/{{ item }}.ora state=link
with_items:
- python
- pip
...@@ -25,3 +25,6 @@ supervisor_ctl: "{{ supervisor_venv_bin }}/supervisorctl" ...@@ -25,3 +25,6 @@ supervisor_ctl: "{{ supervisor_venv_bin }}/supervisorctl"
supervisor_user: supervisor supervisor_user: supervisor
supervisor_log_dir: "{{ COMMON_LOG_DIR }}/supervisor" supervisor_log_dir: "{{ COMMON_LOG_DIR }}/supervisor"
supervisor_cfg: "{{ supervisor_app_dir }}/supervisord.conf" supervisor_cfg: "{{ supervisor_app_dir }}/supervisord.conf"
# upstart service name and user
supervisor_service: supervisor
supervisor_service_user: "{{ common_web_user }}"
- name: supervisor | restart supervisor - name: supervisor | restart supervisor
service: > service: >
name=supervisor name={{ supervisor_service }}
state=restarted state=restarted
- name: supervisor | reload supervisor - name: supervisor | reload supervisor
......
...@@ -11,22 +11,54 @@ ...@@ -11,22 +11,54 @@
# Tasks for role supervisor # Tasks for role supervisor
# #
# Overview: # Overview:
# Role for supervisord # Role for supervisord, a parameterized role for installing supervisord
# Installs supervisor in its own venv. #
# By default supervisor will be installed into {{ COMMON_APP_DIR }}/supervisor
# and log to {{ COMMON_LOG_DIR }}/supervisor and run as the
# {{ common_web_user }}
#
# The including supervisor with the following parameters
# will install it into a different location:
#
# - supervisor_app_dir
# - supervisor_data_dir
# - supervisor_log_dir
# - supervisor_venv_dir
# - supervisor_service_user
# - supervisor_service
# #
# Dependencies: # Dependencies:
# - common # - common
# #
# Example play: # Example play:
#
# # Install in the default location,
# # run as the default user
#
# roles: # roles:
# - common # - common
# - role: supervisor # - role: supervisor
#
# # Install in an alternate directory
# # and run as user "foo"
# - role: supervisor
# supervisor_app_dir: /path/to/supervisor/dir/for/configs
# supervisor_data_dir: /path/to/supervisor/data/dir (for pid and sock files)
# supervisor_log_dir: /path/to/supervisor/log/dir
# supervisor_venv_dir: /path/to/supervisor/venv/dir
# supervisor_service_user: user to run supervisor as
# supervisor_service: upstart-service-name
#
--- ---
- name: supervisor | create application user - name: supervisor | create application user
user: > user: >
name="{{ supervisor_user }}" name="{{ supervisor_user }}"
home="{{ supervisor_app_dir }}" createhome=no
shell=/bin/false
- name: supervisor | create supervisor service user
user: >
name="{{ supervisor_service_user }}"
createhome=no createhome=no
shell=/bin/false shell=/bin/false
...@@ -35,19 +67,19 @@ ...@@ -35,19 +67,19 @@
name={{ item }} name={{ item }}
state=directory state=directory
owner={{ supervisor_user }} owner={{ supervisor_user }}
group={{ common_web_user }} group={{ supervisor_service_user }}
with_items: with_items:
- "{{ supervisor_app_dir }}" - "{{ supervisor_app_dir }}"
- "{{ supervisor_venvs_dir }}" - "{{ supervisor_venv_dir }}"
- "{{ supervisor_cfg_dir }}"
- name: supervisor | create supervisor directories - name: supervisor | create supervisor directories
file: > file: >
name={{ item }} name={{ item }}
state=directory state=directory
owner={{ common_web_user }} owner={{ supervisor_service_user }}
group={{ supervisor_user }} group={{ supervisor_user }}
with_items: with_items:
- "{{ supervisor_cfg_dir }}"
- "{{ supervisor_data_dir }}" - "{{ supervisor_data_dir }}"
- "{{ supervisor_log_dir }}" - "{{ supervisor_log_dir }}"
...@@ -59,14 +91,14 @@ ...@@ -59,14 +91,14 @@
- name: supervisor | create supervisor upstart job - name: supervisor | create supervisor upstart job
template: > template: >
src=supervisor-upstart.conf.j2 dest=/etc/init/supervisor.conf src=supervisor-upstart.conf.j2 dest=/etc/init/{{ supervisor_service }}.conf
owner=root group=root owner=root group=root
notify: supervisor | restart supervisor notify: supervisor | restart supervisor
- name: supervisor | create supervisor master config - name: supervisor | create supervisor master config
template: > template: >
src=supervisord.conf.j2 dest={{ supervisor_cfg }} src=supervisord.conf.j2 dest={{ supervisor_cfg }}
owner={{ supervisor_user }} group={{ common_web_user }} owner={{ supervisor_user }} group={{ supervisor_service_user }}
mode=0644 mode=0644
notify: supervisor | restart supervisor notify: supervisor | restart supervisor
...@@ -75,19 +107,16 @@ ...@@ -75,19 +107,16 @@
src={{ supervisor_ctl }} src={{ supervisor_ctl }}
dest={{ COMMON_BIN_DIR }}/{{ supervisor_ctl|basename }} dest={{ COMMON_BIN_DIR }}/{{ supervisor_ctl|basename }}
state=link state=link
when: supervisor_service == "supervisor"
notify: supervisor | restart supervisor
- name: supervisor | create a symlink for supervisor cfg - name: supervisor | create a symlink for supervisor cfg
file: > file: >
src={{ supervisor_cfg }} src={{ item }}
dest={{ COMMON_CFG_DIR }}/{{ supervisor_cfg|basename }} dest={{ COMMON_CFG_DIR }}/{{ item|basename }}
state=link
- name: supervisor | create a symlink for supervisor cfg dir
file: >
src={{ supervisor_cfg_dir }}
dest={{ COMMON_CFG_DIR }}/supervisor.{{ supervisor_cfg_dir|basename }}
state=link state=link
when: supervisor_service == "supervisor"
with_items:
- name: supervisor | ensure supervisor is started - "{{ supervisor_cfg }}"
service: name=supervisor state=started - "{{ supervisor_cfg_dir }}"
notify: supervisor | restart supervisor
[program:devpi-server]
command={{ devpi_venv_dir }}/bin/devpi-server --port {{ devpi_port }} --serverdir {{ devpi_data_dir }}
priority=999
startsecs = 5
redirect_stderr = True
autostart=True
user={{ devpi_user }}
...@@ -4,5 +4,5 @@ start on runlevel [2345] ...@@ -4,5 +4,5 @@ start on runlevel [2345]
stop on runlevel [!2345] stop on runlevel [!2345]
respawn respawn
setuid {{ common_web_user }} setuid {{ supervisor_service_user }}
exec {{ supervisor_venv_dir }}/bin/supervisord --nodaemon --configuration {{ supervisor_cfg }} exec {{ supervisor_venv_dir }}/bin/supervisord --nodaemon --configuration {{ supervisor_cfg }}
...@@ -44,6 +44,9 @@ ...@@ -44,6 +44,9 @@
- name: xqueue | create a symlink for venv python - name: xqueue | create a symlink for venv python
file: > file: >
src="{{ xqueue_venv_bin }}/python" src="{{ xqueue_venv_bin }}/{{ item }}"
dest={{ COMMON_BIN_DIR }}/python.xqueue dest={{ COMMON_BIN_DIR }}/{{ item }}.xqueue
state=link state=link
with_items:
- python
- pip
...@@ -73,7 +73,10 @@ ...@@ -73,7 +73,10 @@
- name: xserver | create a symlink for venv python - name: xserver | create a symlink for venv python
file: > file: >
src="{{ xserver_venv_bin }}/python" src="{{ xserver_venv_bin }}/{{ item }}"
dest={{ COMMON_BIN_DIR }}/python.xserver dest={{ COMMON_BIN_DIR }}/{{ item }}.xserver
state=link state=link
with_items:
- python
- pip
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