0
私はローカルデータベースとデーモンのための1つの特定のロールを作成し、masterデータベースとして主に使用されていたdbserverグループの最初のサーバからデータベースを削除して再作成します。その後不可能なデリゲートとrun_once
group_vars/dbserver
[dbserver]
vagrant1 # master db
vagrant2 # slave db
私はデータベースを削除しても、再びデータベースを作成する必要がある場合は、基本的に私はちょうどコマンドは、グループ内の最初のサーバー上で実行されることを必要とします。ここで
- name: drop database
mysql_db: name={{ targetdbname }} state=absent
when: targetdeploydb == "new"
delegate_to: "{{ item }}"
with_items: "{{ groups.dbserver }}"
run_once: true
- name: create database
mysql_db: name={{ targetdbname }} state=present
when: targetdeploydb == "new"
delegate_to: "{{ item }}"
with_items: "{{ groups.dbserver }}"
when: targetdeploydb == "new"
run_once: true
ログは私が脚本
TASK [laravel : drop database] *************************************************
changed: [vagrant1 -> vagrant1] => (item=vagrant1)
changed: [vagrant1 -> vagrant2] => (item=vagrant2)
TASK [laravel : create database] ***********************************************
changed: [vagrant1 -> vagrant1] => (item=vagrant1)
changed: [vagrant1 -> vagrant2] => (item=vagrant2)
を実行すると私は考えることができるもう一つの方法は、delegate_toに直接マスターDBのホスト名を使用しているが、それは私が別の変数を作成する必要があることを意味しています。もう一方では、変数の数を減らし、より動的にするほうが良いと思います。あなたが唯一の最初のサーバーにあなたのタスクを委任し、一度どんなに多くのサーバーの現在のプレイでそれを実行し、使用する必要がある場合は
パーフェクト!これは実際には現在稼動しており、1台のサーバでしか動作していません。とにかく、私はどこで、可変変数の高度な使い方に関するドキュメントを読むことができますか?私は、あなたが上記のようにパイプを使って配列内の最初の結果を得る方法についても、角かっこや中かっこをいつ使用するかについて本当に慣れていません。またはそれはPythonに基づいていますか? – AlamHo
必要なものはすべて:[変数](http://docs.ansible.com/ansible/playbooks_variables.html)、[危険なフィルタ](http://docs.ansible.com/ansible/playbooks_filters.html)、[ Jinja2 Filters](http://jinja.pocoo.org/docs/dev/templates/#list-of-builtin-filters)を参照してください。中括弧とパイプはJinja2から来ており、角括弧はPythonから来ています。 –
もう一度ありがとう!あなたは最高です – AlamHo