我使用ansible將多個站點部署到同一臺服務器。每個站點都是一個單獨的「主機」,位於安全的hosts
庫存中,這非常適用。Ansible每個數據庫名稱運行一次任務
但是,只有兩個數據庫:生產和測試。 如何確保我的數據庫遷移任務只能在每個數據庫上運行一次?
我已讀入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
一般來說,「一旦每組」不支持的語義,並試圖讓一切都變成一個單一的玩可能比它的價值更麻煩。只是想澄清一下,你希望第一個任務在每個主機上運行一次,第二個任務只有兩次,每個組中有一次? – 2015-02-10 17:54:51