Ansibleとは

Ansibleは構成管理を行うためのツールです。複数のノードの設定を行う際に作業を効率的に行うことができます。Playbookさえ作ってしまえば、同じ環境の構築を自動的に行うことができます。広島サイトのEOSシステム構築はAnsibleを用いて行いました。

Ansibleをはじめる人に。 - Qiita

この記事では Ansibleをはじめる人 を対象に、下記の Ansible 入門的な内容についてまとめています...


参考資料

Ansibleの勉強に使えそうな資料をいくつか紹介します。


Ansibleの基本的な使い方

一般的なディレクトリ構造

project/
├── inventory.yml
├── your-playbook.yml
└── roles/
    └── ...

インベントリファイル

Ansibleで操作対象のサーバーを定義するファイルです。INI形式とYAML形式があります。(最近はYAML形式が主流です)

注: .ymlファイルではTabsを使用できません。インデントにはスペースを使用してください。

INI形式

[eos_mgm]
grid04
grid05
grid06

[eos_fst]
nfs11
nfs12
nfs13

[all:vars]
ansible_ssh_user=root

YAML形式

all:
  children:
    eos_mgm:
      hosts:
        grid04:
        grid05:
        grid06:
    eos_fst:
      hosts:
        nfs11:
        nfs12:
        nfs13:
  vars:
    ansible_ssh_user: root

インベントリファイルの場所: デフォルトは /etc/ansible/hosts ですが、-i オプションで任意の場所を指定できます。


事前設定

SSH keyの配置

複数の管理ノードにパスワード無しでSSH接続できるようにします。ここでは、grid04をコントロールノードとして設定する例を説明します。

SSHキーペアの生成

コントロールノード(grid04)上でSSHキーペアを生成します。

ssh-keygen -t rsa -b 4096

SSH設定ファイルを編集

全てのノードでSSH接続をrootユーザーで行えるように設定を編集します。/etc/ssh/sshd_config内のPermitRootLoginyesに変更します。

# /etc/ssh/sshd_config
PermitRootLogin yes

編集後、sshdを再起動して設定を反映させます。

systemctl restart sshd

SSH公開鍵の配布

コントロールノードから管理対象の全ノードへ公開鍵をコピーします。

ssh-copy-id -i ~/.ssh/id_rsa.pub root@<target-host-domain>

これにより、パスワード無しでSSH接続が可能になります。

Ansibleの接続テスト

コントロールノード上で以下のコマンドを実行し、すべてのノードへ接続できるか確認します。

ansible all -m ping

基本的な実行方法

pingの確認

グループを指定してノード間の接続を確認します。

# inventoryファイルを指定しない場合 (デフォルトのhostsファイルを参照)
ansible eos_mgm -m ping

# inventoryファイルを指定する場合
ansible -i inventory.yml eos_mgm -m ping

成功すると "pong" という応答が返ってきます。

grid05 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

構文のチェック

ansible-playbook -i inventory.yml your-playbook.yml --syntax-check

Dry Run (変更されるファイルの確認)

ansible-playbook -i inventory.yml your-playbook.yml --check --diff

Playbookの実行方法

# 全てのホストで実行
ansible-playbook -i inventory.yml your-playbook.yml

# 特定のグループのみで実行
ansible-playbook -i inventory.yml your-playbook.yml -l eos_mgm

パスワードファイルの暗号化 (ansible-vault)

Gitでプレイブックを管理する場合など、パスワードや秘密情報を安全に保つために暗号化が推奨されます。

暗号化方法

ansible-vault encrypt password-file

実行方法

暗号化したファイルを利用する際は--ask-vault-passオプションを付けて実行時にパスワードを入力します。

ansible-playbook -i inventory.yml your-playbook.yml --ask-vault-pass