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