django
Django
Настройте и обновите проект Django. Требуется Ansible 2.8 или более поздняя версия.
Требования
Когда используется become
(то есть django_user
не равен ansible_user
или
ansible_ssh_user
), необходимые пакеты ОС для поддержки метода become
(например, sudo
) должны быть установлены перед использованием этой роли.
Проект Django должен быть доступен на целевом хосте перед запуском этой роли (например, через SCM checkout, rsync и т. д.). Роль cchurch.scm может быть полезна для получения проекта Django из git/hg/svn.
Пакеты зависимостей для ОС и Python, включая сам Django, должны быть установлены перед запуском этой роли. Роль cchurch.virtualenv может быть полезна для установки пакетов и создания виртуального окружения для работы с Django.
Переменные роли
Следующие переменные могут быть определены для настройки этой роли:
django_app_path
: Директория, содержащая проект Django (обязательно).django_user
: Пользователь, от имени которого будут выполняться команды Django (по умолчанию -ansible_user
илиansible_ssh_user
).django_directories
: Список директорий, которые будут созданы для поддержки проекта Django (например, для логов, загруженных медиа и т. д.); по умолчанию -[]
. Каждый элемент списка может быть простой строкой, указывающей имя директории, или хешем, содержащим ключиpath
,owner
,group
иmode
.django_settings_templates
: Список шаблонов, которые будут установлены с пользовательскими настройками Django, по умолчанию -[]
. Каждый элемент списка должен быть хешем, содержащим ключиsrc
иdest
, а также может указывать параметрыowner
,group
,mode
,backup
иforce
. Родительские директории будут созданы при необходимости перед установкой файлов настроек; ключиdir_owner
,dir_group
иdir_mode
могут быть установлены для указания параметров владения и прав для родительских директорий, которые отличаются от файлов настроек.django_settings
: Дотированный путь Python к модулю настроек Django для выполнения команд Django (например,proj.settings
); по умолчанию -omit
.django_virtualenv
: Директория, содержащая виртуальное окружение, которое будет активировано перед выполнением команд Django; по умолчанию -omit
.django_pre_commands
: Список дополнительных команд Django, которые будут выполнены перед основными командами; по умолчанию -[]
.django_main_commands
: Список команд Django, которые будут выполнены для обычных обновлений проекта; по умолчанию -[{command: "migrate", run_once: true}, "collectstatic"]
.django_post_commands
: Список дополнительных команд Django, которые будут выполнены после основных команд; по умолчанию -[]
.django_run_once_host
: Имя хоста, который будет использоваться для выполнения команд Django, которые указываютrun_once
; по умолчанию -"{{ ansible_play_hosts_all[0] }}"
, чтобы нацелиться на первый хост, указанный в плейбуке.
Каждый элемент в списке команд выше может быть указан как строка с только
именем команды или как хеш с ключом command
и любыми другими параметрами,
поддерживаемыми модулем django_manage
,
например:
- check
- command: migrate
skip: yes
run_once: yes
run_once_host: worker
- command: collectstatic
link: yes
- command: my_custom_command --noinput
changed_when: '"created" in result.stdout'
Каждый элемент может указывать условное выражение changed_when
, которое будет
оцениваться для определения, были ли внесены изменения; переменная result
будет доступна для выражения и содержать результат от этого
конкретного вызова модуля django_manage
.
Каждый элемент также может указывать параметр run_once
, который заставляет задачу выполняться только на одном хосте вместо всех хостов, на которые нацеливается плейбук. Также элемент может указывать run_once_host
, чтобы переопределить имя хоста по умолчанию, указанное через
django_run_once_host
.
Следующая переменная может быть определена для вызова плейбука или роли (но не будет работать, если определена как переменная группы или хоста):
django_notify_on_updated
: Имя обработчика, который будет уведомлен, когда будут внесены изменения при обновлении проекта Django. По умолчанию -"django updated"
; обычно рекомендуется, чтобы пользовательские обработчики слушали"django updated"
вместо изменения имени уведомления.
Эта роль может выполнять команды управления Django от имени другого пользователя, указанного через
django_user
, и будет использовать указанный для
хоста/плейбука/задачи метод become
, чтобы переключиться на этого пользователя. Возможно, вам потребуется определить
allow_world_readable_tmpfiles
в вашем ansible.cfg
(что все равно вызовет предупреждение, а не ошибку) или использовать другой подход для поддержки одного
непривилегированного пользователя, который становится другим непривилегированным пользователем.
Пример плейбука
Следующий пример плейбука настраивает и обновляет проект Django, уведомляя пользовательский обработчик, когда что-либо изменяется:
- hosts: all
vars:
django_app_path: ~/src
django_virtualenv: ~/env
django_settings_templates:
- src: local_settings.py.j2
dest: ~/src/myproj/local_settings.py
django_settings: myproj.settings
django_pre_commands:
- command: test
failfast: yes
- validate
django_post_commands:
- command: loaddata
fixtures: defaults.json
roles:
- role: cchurch.django
handlers:
- name: проект Django обновлен
debug:
msg: "Проект Django в {{ django_app_path }} был обновлен!"
listen: django updated
Лицензия
BSD
Информация об авторе
Крис Черч (cchurch)
ansible-galaxy install cchurch/ansible-role-django