cchurch.django
Django
Djangoプロジェクトを設定および更新します。Ansible 2.8以降が必要です。
要件
become
を使用する場合(つまりdjango_user
がansible_user
またはansible_ssh_user
と等しくない場合)、become_method
(例:sudo
)をサポートするために必要なOSパッケージをこのロールを使用する前にインストールする必要があります。
Djangoプロジェクトは、このロールを実行する前にターゲットホストで利用可能でなければなりません(SCMチェックアウト、rsync等を使用)。Djangoプロジェクトをgit/hg/svnからチェックアウトするには、cchurch.scmロールが役立つかもしれません。
プロジェクトに必要なOSおよびPythonパッケージの依存関係(Django自体を含む)も、このロールを実行する前にインストールする必要があります。パッケージをインストールし、Djangoを実行するためのvirtualenvを作成するには、cchurch.virtualenvロールが役立つかもしれません。
ロール変数
このロールをカスタマイズするために定義できる変数は次のとおりです。
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コマンドを実行する前にアクティブにするvirtualenvを含むディレクトリ。デフォルトは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
キーと他のオプションを持つハッシュとして指定できます。例えば:
- 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
オプションを指定できます。また、デフォルトのホスト名をdjango_run_once_host
を使用して上書きするためのrun_once_host
を指定することもできます。
以下の変数は、プレイまたはロールの呼び出しに定義できます(ただし、インベントリグループやホスト変数として定義された場合は機能しません)。
django_notify_on_updated
: Djangoプロジェクトの更新中に変更があった場合に通知するハンドラー名。デフォルトは"django updated"
です。カスタムハンドラーは、通知名を変更するのではなく、一般的に"django updated"
をリッスンすることを推奨します。
このロールは、django_user
で指定された別のユーザーとしてDjango管理コマンドを実行でき、ホスト/プレイ/タスクのために指定された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 project updated
debug:
msg: "Django project in {{ django_app_path }} was updated!"
listen: django updated
ライセンス
BSD
著者情報
クリス・チャーチ (cchurch)
ansible-galaxy install cchurch.django