cchurch.django
Django
配置和更新Django项目。需要Ansible 2.8或更高版本。
要求
当使用become时(即django_user不等于ansible_user或
ansible_ssh_user),必须先安装支持become_method
(例如sudo)所需的操作系统包,再使用此角色。
在运行此角色之前,Django项目必须在目标主机上可用 (通过SCM检出、rsync等)。 cchurch.scm角色可能 对从git/hg/svn检出Django项目有所帮助。
在运行此角色之前,项目的操作系统和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:运行Django命令所用的Django设置模块的Python点路径(例如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:用于运行指定run_once的Django命令的主机名;默认是"{{ 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_method切换到该用户。您可能需要在ansible.cfg中定义allow_world_readable_tmpfiles(这仍会生成警告而不是错误),或者使用其他方法来支持一个无特权用户变为另一个无特权用户。
示例剧本
以下示例剧本配置和更新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
作者信息
Chris Church (cchurch)
ansible-galaxy install cchurch.django