updates
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
---
|
||||
# Deploy one Django app+env as its own docker compose project.
|
||||
# Called per item with loop_var app_item = { name, env, port }.
|
||||
|
||||
- name: "django[{{ app_item.name }}/{{ app_item.env }}] locals"
|
||||
ansible.builtin.set_fact:
|
||||
_spec: "{{ app_catalog[app_item.name] }}"
|
||||
_src: "{{ apps_src_dir }}/{{ app_item.name }}_{{ app_item.env }}"
|
||||
_envfile: "{{ apps_env_dir }}/{{ app_item.name }}_{{ app_item.env }}.env"
|
||||
_secret_src: "{{ secrets_dir }}/{{ app_item.name }}/{{ app_item.name }}_{{ app_item.env }}.env"
|
||||
_project: "{{ app_item.name }}_{{ app_item.env }}"
|
||||
_ref: "{{ app_ref | default(app_catalog[app_item.name].default_branch) }}"
|
||||
|
||||
- name: "django[{{ _project }}] ensure base dirs"
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
owner: "{{ admin_user }}"
|
||||
group: "{{ admin_user }}"
|
||||
mode: "0750"
|
||||
loop:
|
||||
- "{{ apps_src_dir }}"
|
||||
- "{{ apps_env_dir }}"
|
||||
|
||||
- name: "django[{{ _project }}] check local secret exists"
|
||||
ansible.builtin.stat:
|
||||
path: "{{ _secret_src }}"
|
||||
register: _secret_stat
|
||||
delegate_to: localhost
|
||||
become: false
|
||||
|
||||
- name: "django[{{ _project }}] fail when local secret missing"
|
||||
ansible.builtin.fail:
|
||||
msg: >-
|
||||
Missing local secret {{ _secret_src }} on the control node.
|
||||
Create it (DATABASE_URL to the shared external Postgres, DJANGO_SECRET_KEY,
|
||||
WEB_PORT={{ app_item.port }}, etc.) before deploying. It is never committed
|
||||
to git.
|
||||
when: not _secret_stat.stat.exists
|
||||
|
||||
- name: "django[{{ _project }}] push secret to {{ _envfile }}"
|
||||
ansible.builtin.copy:
|
||||
src: "{{ _secret_src }}"
|
||||
dest: "{{ _envfile }}"
|
||||
owner: "{{ admin_user }}"
|
||||
group: "{{ admin_user }}"
|
||||
mode: "0600"
|
||||
|
||||
- name: "django[{{ _project }}] checkout {{ _ref }}"
|
||||
ansible.builtin.git:
|
||||
repo: "{{ _spec.repo }}"
|
||||
dest: "{{ _src }}"
|
||||
version: "{{ _ref }}"
|
||||
force: true
|
||||
accept_hostkey: true
|
||||
become: true
|
||||
become_user: "{{ admin_user }}"
|
||||
|
||||
- name: "django[{{ _project }}] install .env into checkout"
|
||||
ansible.builtin.copy:
|
||||
src: "{{ _envfile }}"
|
||||
dest: "{{ _src }}/.env"
|
||||
remote_src: true
|
||||
owner: "{{ admin_user }}"
|
||||
group: "{{ admin_user }}"
|
||||
mode: "0600"
|
||||
|
||||
- name: "django[{{ _project }}] build images"
|
||||
ansible.builtin.command:
|
||||
cmd: "docker compose -f {{ _spec.compose_file }} --env-file .env build"
|
||||
chdir: "{{ _src }}"
|
||||
environment:
|
||||
COMPOSE_PROJECT_NAME: "{{ _project }}"
|
||||
WEB_PORT: "{{ app_item.port }}"
|
||||
become: true
|
||||
become_user: "{{ admin_user }}"
|
||||
changed_when: true
|
||||
|
||||
- name: "django[{{ _project }}] start containers"
|
||||
ansible.builtin.command:
|
||||
cmd: "docker compose -f {{ _spec.compose_file }} --env-file .env up -d --remove-orphans"
|
||||
chdir: "{{ _src }}"
|
||||
environment:
|
||||
COMPOSE_PROJECT_NAME: "{{ _project }}"
|
||||
WEB_PORT: "{{ app_item.port }}"
|
||||
become: true
|
||||
become_user: "{{ admin_user }}"
|
||||
changed_when: true
|
||||
Reference in New Issue
Block a user