【Ansible備忘録⑦】先読みタスクと後読みタスク
タスクの実行順序
基本的にプレイブックのタスクは、定義した順番通りに実行される。
以下のような実行順序となる。
・変数の読み込み
・ファクト収集
・事前タスク実行
・事前タスク実行の通知ハンドラ処理
・ロール実行
・タスク実行
・ロール、タスク実行の通知ハンドラ処理
・事後タスク実行
・事後タスク実行の通知ハンドラ処理
事前タスク、事後タスクはタスクの前後で実行するタスクのこと。
事前タスク、事後タスクをそれぞれ、pre_tasks ディレクティブ、post_tasks ディレクティブで定義できる。
例)
- host: localhost gather_facts: false ## タスク実行前の処理 pre_tasks: - name: パッケージアップデート apt: update_cache: yes notify: Apt Update - name: パッケージアップグレード pip: requirements: /myapp/requirements.txt virtualenv: /myapp/venv role: - common - nginx - postgresql - myapp tasks: - name: データ同期 shell: /myapp/venv/bin/python /myapp/code/webapp/manage.py syncdb --migrate --noinput notify: Check Synced Data handlers: - name: パッケージアップデート debug: msg: "パッケージアップロード確認" - name: データ同期確認 shell: /mpapp/venv/bin/python /myapp/code/webapp/data_check.py post_tasks: - name: 再起動 command: /sbin/shutdown -r now
外部ファイルを読み込む
外部のYAMLファイルを読み込む方法として、「import_xxx」や「include_xxx」などがある。(xxx には vars、tasks、roles が入る)
これらの読み込みと実行順序は以下の通り。
・import_xxx(静的外部ファイル読み込み)
→コマンド実行時に読み込まれる。(先読み)
・include_xxx(動的外部ファイル読み込み)
→プレイブックの実行中に読み込まれる。動的に外部ファイルを呼び出す。(後読み)
これら動的読み込みと静的読み込みは、以下のように使い分けるのが良い。
種別 | 用途 |
---|---|
import_xxx | ・特定のタスクの実行 →特定のタスクの実行には tags の指定が必要となるため |
include_xxx | ・ループ処理 |