Ansibleの概要メモ
Ansibleもくもく会に参加したので学んだことを自分の整理のためメモしておきます。
目次
- Ad-hocコマンド
- playbook
- variables
- Facts
- conditionals
- handlers
- simple loops
- loops over hashes
- templates
- roles
Ad-hocコマンド
AnsibleはPlaybookでの実行だけでなく、Ad-hoc的にコマンド実行もできます。
$ ansible [node名 or グループ名] -m ansibleモジュール -a オプション
以下は、commandモジュールを利用する例です。実行したいlinuxコマンドを-aオプションに書きます。この場合、node1で"id"コマンドを実行します。
$ ansible node1 -m command -a "id"
ansible-docコマンド
ansible-docコマンドを実行すると、ansibleで利用できるモジュールを調べることができます。
利用できるモジュールを一覧表示をする
$ ansible-doc -l
あるモジュールの利用方法を調べる
$ ansible-doc モジュール名
playbook
playbookには3つの重要な要素があります。
- hosts: tasksで定義したタスクの実行対象ホストを定義する
- tasks: 実行するタスクを定義する。モジュールと、モジュールに必要なオプションを記述する。
- become: タスクの実行にroot権限が必要な場合にyesを記述する。
apacheをインストールするplaybookの例
--- - name: Apache server installed hosts: node1 become: yes tasks: - name: latest Apache version installed yum: name: httpd state: latest
ansible-playbook --syntax-checkでシンタックスエラーがないかをチェックできる
$ ansible-playbook --syntax-check apache.yml
variables
ansibleでは変数を利用できます。以下のように{{ }} で囲うと変数を展開することができます。
{{ variable }}
変数の定義は、様々な箇所でできます。しかし、host_varsとgroup_varsの2つのディレクトリを作成するのがおすすめらしいです。
- group_vars/配下にはあるグループ共通で利用する変数を定義する
$ cat ~/ansible-files/group_vars/web.yml --- stage: dev
- host_vars/配下にはあるnodeに特有の変数を定義する
$ cat ~/ansible-files/host_vars/node2.yml --- stage: prod
- 以下のようにplaybook内で変数を利用できる
--- - name: Copy web.html hosts: web become: true tasks: - name: copy web.html copy: src: "{{ stage }}_web.html" dest: /var/www/html/index.html
この時、group_vars/web.htmlよりも、host_vars/node1.ymlのほうが優先して利用されます。
Ansible Facts
Ansible Factsは、Ansible実行時に、対象のサーバーからデフォルトで取得する変数のことです。取得された変数はplaybook内で利用することができます。
*デフォルトで取得される Factsの一覧を確認する
$ ansible node1 -m setup
- 特定のFactsの内容だけを確認する
$ ansible node1 -m setup -a 'filter=ansible_eth0'
以下のように、Factsを変数として利用することで、IPアドレスなどの実行対象サーバー 固有の値に設定してTaskを実行できます。
--- - name: Output facts within a playbook hosts: all tasks: - name: Prints Ansible facts debug: msg: The default IPv4 address of {{ ansible_fqdn }} is {{ ansible_default_ipv4.address }}
conditinos
playbookの中で条件式を使うことができます。例えば、webというインベントリーグループにあるホストだけにnginxインストールすることができます。
handlers
handlersでは、playbook実行により、システムに変更が加わった時にだけ、あるタスクを呼び出すことができます。 例えばapacheの設定ファイルを変更した時に、設定を反映するために、apacheを再起動することができます。
--- - name: manage httpd.conf hosts: web become: true tasks: - name: Copy Apache configuration file copy: src: httpd.conf dest: /etc/httpd/conf/ notify: - restart_apache handlers: - name: restart_apache service: name: httpd state: restarted