ansibleの概要
構成管理ツールのこと。ansibleの他にChef, Puppetなどがある。
構成を設定するのにpythonを使用。
設定の大まかな流れは、
ホスト側がSSHでターゲット側に接続しyaml形式のコードを用いて環境を構築する。
install方法
準備するもの
ホスト側:ansible
ターゲット側:ssh接続できる環境
方法
公式documentsを参考にしてインストールする。
方法はいくつかあるが、今回採用した方法はpipでのインストール
$ pip install ansible
使い方
インストールの確認
まずはansibleが入っているかを調べる。
$ ansible --version
ssh接続の確認
ターゲット側とssh接続ができているかを確認する。
$ ansible -i hosts <ip_address> -m ping
成功例
3.17.24.29 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
設定ファイルの書き方
ansibleを構成する要素として以下の3つがある。
*インベントリとプレイブックの二つは自分で作成する必要がある。(モジュールは書かなくてもいい)
- インベントリ(inventory)
被管理ホストへの接続情報を記述するファイル - モジュール(module)
ユーザーを追加する、ファイルをコピーする、などの冪等性を持った操作。数百のモジュールがあらかじめ用意されている - プレイブック(playbook)← メインの設定ファイル
DBサーバを作る、デプロイを行う、などの目的のためにモジュールを組み合わせた作った手順書
inventoryファイル例
[targets] # ターゲット側の"hosts"名
18.176.224.172 ansible_ssh_user=ubuntu ansible_ssh_private_key_file=~/.ssh/math-machine-2 # IPアドレス ターゲット側のユーザー名 ssh鍵のpath
playbookファイル例
- hosts: targets # 対象となる相手の名前(インベントリファイルで設定した名前)
become: yes # sudo権限での実行か否か
become_user: ubuntu # 実行するユーザー名(デフォルトはrootになっている)
tasks: # 行う具体的な設定(今回は文字列の表示)
- name: Test ansible-playbook
debug: msg="Hello world"
実行例
TAKE-PC-6:ansible take-pc-6$ ansible-playbook -i hosts test.yml
PLAY [server] ***********************************************************************
TASK [Gathering Facts] **************************************************************
ok: [3.17.24.29]
TASK [Test ansible-playbook] ********************************************************
ok: [3.17.24.29] => {
"msg": "Hello world"
}
PLAY RECAP **************************************************************************
3.17.24.29 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
チュートリアル
今回はrubyとgitをansibleを用いてインストールする。
package.yml
- hosts: target
user: ubuntu
become: yes
tasks:
- name: install packages from apt
apt: name={{ item }} state=latest
with_items:
- ruby
- git
反応
TAKE-PC-6:ansible take-pc-6$ ansible-playbook -i hosts package.yml
PLAY [server] ***********************************************************************
TASK [Gathering Facts] **************************************************************
ok: [3.17.24.29]
TASK [install packages from apt] ****************************************************
[DEPRECATION WARNING]: Invoking "apt" only once while using a loop via
squash_actions is deprecated. Instead of using a loop to supply multiple items and
specifying `name: "{{ item }}"`, please use `name: ['ruby', 'git']` and remove the
loop. This feature will be removed in version 2.11. Deprecation warnings can be
disabled by setting deprecation_warnings=False in ansible.cfg.
changed: [3.17.24.29] => (item=['ruby', 'git'])
[WARNING]: Could not find aptitude. Using apt-get instead
PLAY RECAP **************************************************************************
3.17.24.29 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
warningが出たが構成管理コード通りにインストールすることができた。
参考サイト
参考サイト:
[1] UbuntuでAnsiblefから動作確認まで
[2] ansibleで疎通確認とplaybookの実行
[3] Ansibleをはじめる人に。
[4] Ansibleを効果的に使うのに欠かせないPlaybookの基本的な書き方まとめ (1/2)
[5] Ansibleのドキュメント