これは何?
私の技術メモです。
概要
- ansibleホストから管理したいサーバやサーバ群に対して自由に操作を発行できる
- 構成管理ツールというよりサーバに関わる定例作業やシステム関連のタスクの自動化ツールといったほうが良い印象
- 構成管理される側にはansible用に特別なものが必要ない・エージェントレス
- 冪等性
前提
- ホスト、管理対象サーバ共にpythonは必要
- ansibleの管理サーバから管理対象のサーバへはssh接続可能であること
構成要素
- hosts(inventory)
- ansibleで管理対象とするサーバやサーバをグループ化した定義を書く
-
ansible-playbook
のdefault実行時の参照場所は/etc/ansible/hosts
- ansible.cfg
- inventoryの位置を指定したり、対象ホストによって読み替える必要のある設定を書く
- playbook
- どのホストにどのモジュールを実行するかの組み合わせ
- yaml形式
- play領域
- hosts
- remote_user : 操作実行ユーザ
- become : sudo実行
- order : hostsへの実行順序。デフォルトはinventoryの定義順
- vars : 変数宣言し、{{変数名}}で呼べるようにする
- tasks
- task領域 : taskを並べて書く。基本的は
-name+module
の組み合わせ - task領域だけを別ファイルに切り出してincludeすることもできるらしい
- name : タスク名
- module : モジュール
- notify : このタスクで何らかの変更があると、
handlers
を実行
- task領域 : taskを並べて書く。基本的は
- handlers
- taskの
notify
でなんらかの変更が行われると、最後に一回だけ呼ばれる - notifyで変更が無かった場合は実行されない
- taskの
モジュール
- tasksに設定されるモジュール。
- user
- yum
- service
- file
- copy
- with_items : 他のモジュールと併用する。あるモジュールに渡す
name
を複数並べて記載することで冗長な表現を避けられる - notify
- mysql_db
- mysql_user
- ini_file : ファイル編集
- shell : 既存のモジュールで対応できない場合にshellを書く
- unarchive
- get_url
role
- 役割をできるだけ最小単位にして定義する。例:ミドルウェア単位とか
- rolesディレクトリ配下に、role毎に名付けたディレクトリを切る。各々が
main.yml
を持つ - メインとなるplaybookから、基本的なroleについてはこれらが呼ばれてあてがわれる
- tasks
- 必須。taskの定義
- files
- copyでセットアップされるファイルを配置
- templates
- templateでセットアップされるテキストファイルを配置
- vars
- 変数を定義します。 基本的に環境毎に変わる固定値など
- defaults
- 変数の初期値。
- handlers
- 特定taskに対してnotifyし、実行したいイベント
- meta
- Roleのメタ情報。roleの依存関係?
- tasks
(コマンド)ansible-playbook
- playbookをもとに実行する、ansibleの核となるコマンド
- オプション
- --syntax-check : 記法のチェック
- --list-task : taskの一覧を表示
- --check : 実際には変更しない、どうなるかをシミュレートする
- --check -v : デバッグ的な情報を表示する。vを重ねる度に詳細になる