Commit 35ade1d1 by John Jarvis

Turns the supervisor role into a parameterized role

This is so that we can have multiple supervisors running
in different virtual envs
parent ae0ad293
--- ---
devpi_app_dir: "{{ COMMON_APP_DIR }}/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_venvs_dir: "{{ devpi_app_dir }}/venvs"
devpi_venv_dir: "{{ devpi_venvs_dir }}/devpi" devpi_venv_dir: "{{ devpi_venvs_dir }}/devpi"
devpi_venv_bin: "{{ devpi_venv_dir }}/bin" 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: "{{ COMMON_DATA_DIR }}/devpi"
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,14 +14,15 @@ ...@@ -14,14 +14,15 @@
- name: devpi | restart devpi - name: devpi | restart devpi
supervisorctl: > supervisorctl: >
state=restarted state=restarted
supervisorctl_path={{ supervisor_ctl }} supervisorctl_path={{ devpi_supervisor_ctl }}
config={{ supervisor_cfg }} 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
supervisorctl_path={{ supervisor_ctl }} supervisorctl_path={{ devpi_supervisor_ctl }}
config={{ supervisor_cfg }} config={{ devpi_supervisor_cfg }}
name=devpi-server name=devpi-server
sudo_user: "{{ devpi_supervisor_user }}"
...@@ -33,23 +33,29 @@ ...@@ -33,23 +33,29 @@
- name: devpi | create devpi user - name: devpi | create devpi user
user: > user: >
name={{ devpi_user }} name={{ devpi_user }}
home={{ devpi_app_dir }}
shell=/bin/false createhome=no 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={{ common_web_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: >
...@@ -58,15 +64,15 @@ ...@@ -58,15 +64,15 @@
virtualenv={{ devpi_venv_dir }} virtualenv={{ devpi_venv_dir }}
sudo_user: "{{ devpi_user }}" 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 - name: devpi | writing supervisor script
template: > template: >
src=devpi.conf.j2 dest={{ supervisor_cfg_dir }}/devpi.conf src=devpi.conf.j2 dest={{ devpi_supervisor_cfg_dir }}/devpi.conf
owner={{ supervisor_user }} group={{ common_web_user }} mode=0644 owner={{ devpi_user }} group={{ devpi_user }} mode=0644
notify: devpi | restart devpi notify: supervisor | restart supervisor
- name: devpi | create a symlink for venv python - name: devpi | create a symlink for venv python, pip and supervisor
file: > file: >
src="{{ devpi_venv_bin }}/{{ item }}" src="{{ devpi_venv_bin }}/{{ item }}"
dest={{ COMMON_BIN_DIR }}/{{ item }}.devpi dest={{ COMMON_BIN_DIR }}/{{ item }}.devpi
...@@ -74,6 +80,13 @@ ...@@ -74,6 +80,13 @@
with_items: with_items:
- python - python
- pip - 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
# flush queued up handlers so that devpi # flush queued up handlers so that devpi
# is restarted since downstream roles # is restarted since downstream roles
......
[program:devpi-server] [program:devpi-server]
command={{ devpi_venv_bin }}/devpi-server --port {{ devpi_port }} --serverdir {{ devpi_data_dir }} command={{ devpi_venv_bin }}/devpi-server --port {{ devpi_port }} --serverdir {{ devpi_mirror_dir }}
user={{ common_web_user }} user={{ devpi_supervisor_user }}
priority=999 priority=999
stdout_logfile={{ supervisor_log_dir }}/%(program_name)-stdout.log stdout_logfile={{ devpi_supervisor_log_dir }}/%(program_name)-stdout.log
stderr_logfile={{ supervisor_log_dir }}/%(program_name)-stderr.log stderr_logfile={{ devpi_supervisor_log_dir }}/%(program_name)-stderr.log
autostart=True autostart=True
...@@ -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,53 @@ ...@@ -11,22 +11,53 @@
# 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
# #
# 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_name: 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 +66,19 @@ ...@@ -35,19 +66,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 +90,14 @@ ...@@ -59,14 +90,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 +106,16 @@ ...@@ -75,19 +106,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
...@@ -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 }}
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