Ansible+ServerSpecのAnsibleSpecを使う準備

Ansibleで構成管理をしている環境でServerSpecを使うときにはAnsibleSpecを使うと、AnsibleのインベントリやプレイブックをそのままServerSpecで読み込むことができ二重管理を避けることができる。

こちらのサイトを見て、そういうモジュールがあることを知った。
このサイトを元に、Ansibleの設定ファイルに記述されたホスト情報を使ってServerSpecでテストする環境を準備してみる。

インストール

cd ${ANSIBLE_HOME}    # Ansibleの関連ファイル一式が入っているディレクトリにまずcd

gem install ansible_spec

ansiblespec-init
# これを行うと、直下に
#   - .ansiblespec
#   - Rakefile
#   - spec/spec_helper.rb
# が生成される

設定

.ansiblespec

ansible_spec/load_ansible.rbにかかれている通り、.ansiblespecファイルをYAMLファイルとして解釈し、playbookとinventoryを取得する。
例えば、開発環境インベントリ(inventories/dev.ini)と本番環境(inventories/prod.ini)を用いて共通のsite.ymlを作っている場合には、以下のような指定を行う。

---
- playbook: site.yml
  inventory: inventories/dev.ini
- playbook: site.yml
  inventory: inventories/prod.ini

インベントリファイル

参考にしたサイトのように、普通に(特に気をつけずに)やると、ホストへの接続方法を正しく読めず、デフォルトとして記述されているローカルでの実行(:exec)として判定されてしまう。
こちらもansible_spec/load_ansible.rbにある通り、以下のフォーマットで書かれている場合に、正しく設定を読み込むことができる。

[group-name]
host-01    option_name1=option_var1    option_name2=option_var2
host-02    option_name1=option_var1    option_name2=option_var2
...

https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html

また、ソースを読むにansible_spec 0.2.25時点で正しく解釈できるオプションはこちら

  • host[“port”]:ansible_ssh_portもしくはansible_port
  • host[“private_key”]:ansible_ssh_private_key_file
  • host[“user”]:ansible_ssh_userもしくはansible_user
  • host[“uri”]:ansible_ssh_hostもしくはansible_host
  • host[“pass”]:ansible_ssh_pass
  • host[“connection”]:ansible_connection

そのため、SSH接続ホストは明示的に”ansible_connection=ssh”をインベントリファイルに書き足す。

Rakeで実行

# 実施される予定のタスク一覧確認
rake -T

# 実際に実行
rake all

これなら先行してAnsibleだけでつくってしまった構成管理ツールに、大きな修正なしに組み込むことができる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です