cchurch.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.django