我正在使用Ansible将多个站点部署到同一台服务器上。每个站点都是Ansible清单中单独的“主机”,这非常有效。
但是,只有两个数据库:生产和测试。如何确保我的数据库迁移任务每个数据库只运行一次?
我已经研究了group_by、run_once和delegate_to功能,但不确定如何将它们结合起来使用。
主机看起来像这样:
但是,只有两个数据库:生产和测试。如何确保我的数据库迁移任务每个数据库只运行一次?
我已经研究了group_by、run_once和delegate_to功能,但不确定如何将它们结合起来使用。
主机看起来像这样:
[production]
site1.example.com ansible_ssh_host=webserver.example.com
site2.example.com ansible_ssh_host=webserver.example.com
[beta]
beta-site1.example.com ansible_ssh_host=webserver.example.com
beta-site2.example.com ansible_ssh_host=webserver.example.com
[all:children]
production
beta
目前的操作指南如下:
---
- hosts: all
- tasks:
# ...
- name: "postgres: Create PostgreSQL database"
sudo: yes
sudo_user: postgres
postgresql_db: db="{{ DATABASES.default.NAME }}" state=present template=template0 encoding='UTF-8' lc_collate='en_US.UTF-8' lc_ctype='en_US.UTF-8'
tags: postgres
register: createdb
delegate_to: "{{ DATABASES.default.HOST|default(inventory_hostname) }}"
# ...
- name: "django-post: Create Django database tables (migrate)"
django_manage: command=migrate app_path={{ src_dir }} settings={{ item.settings }} virtualenv={{ venv_dir }}
with_items: django_projects
#run_once: true
tags:
- django-post
- django-db
- migrate