Vagrantで複数サーバー起動してAnsibleを動かしてみるテスト【#np2020】

ansible.png


業務では前任者が選定した「Chef」を使って環境構築を行っているのですが、色々調べるに最近は「Ansible」を使うのが主流っぽいので次のサーバではそれを使うことにしてみました。概念としては、管理用のサーバを1つ用意してそこにAnsibleの設定を書いておいて、そこでコードを実行することで、更新対象のサーバに一斉に設定を反映できる仕組み、という感じですよね。なにそれやばい。しかし見たことも触ったこともないのでいまいち設定や実行のイメージがつかめない。だったらまあ、簡単な環境を作ってハンズオン(体験学習ぐらいの意味)してみればいいんじゃない?


やってみた。




1つのVagrantfileで複数サーバーを起動する

基本的な流れは、こちらの記事を参考にさせて頂きました。

VagrantでAnsible超初歩ハンズオン – Qiita

簡単な流れとしては、

  1. ローカルに2つの仮想サーバを作成して起動
  2. サーバ間で通信を行って、片方からもう片方にAnsibleで処理を投げる

ということを行っています。
それに先だって記事内では1つずつサーバを立ち上げているわけですが、1つのファイルで複数のサーバを立ち上げることは可能です。

こちらの記事を参考にして、

VagrantでAnsible超初歩ハンズオン – Qiita

複数のサーバーを立ち上げてみた設定例がこちら。
IPアドレスとかポートとかは適当に調整してください。

Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
# ansible manager
config.vm.define "manager" do | manager |
manager.vm.hostname = "manager"
manager.vm.synced_folder "~/manager", "/vagrant", owner: "vagrant", group: "vagrant", type: "virtualbox"
manager.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2222
manager.vm.network "private_network", ip: "192.168.33.10", virtualbox__intnet: "intra"
end
# ansible target
config.vm.define "target" do | target |
target.vm.hostname = "target"
target.vm.synced_folder "~/target", "/vagrant", owner: "vagrant", group: "vagrant", type: "virtualbox"
target.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2223
target.vm.network "private_network", ip: "192.168.33.20", virtualbox__intnet: "intra"
end
end



Ansibleをインストールして適当にテスト

インストール、SSH接続などを経て、Ansibleを書くわけですがそれはこちらの記事で。

VagrantでAnsible超初歩ハンズオン – Qiita

元記事にところどころ間違いがありますが、エラーメッセージ見ながら修正すれば大丈夫かと思います。

$ sudo -y yum install epel-release
↓
$ sudo yum -y install epel-release
$ ansible all -i hosts -m ping
↓
$ ansible all -i inventory/hosts -m ping
$ vi targets.yml
↓
$ vi target.yml


テンション上がる……!!



ちなみに

共有フォルダを設定するところで、普通に設定したらなぜか Vagrant up時にしか更新が反映されなかった(VMを落とすと変更が失われる)ので、明示的に「type: “virtualbox”」を追加しています。VirtualBoxでGuestAddionsが入っていれば、何も指定しなくてもいけたはずなんだけどなあ。謎。

これは以下の記事を参考にしました。

vagrant において、明示的に VirtualBox の機能(vboxsf)を使いフォルダを同期するには、`config.vm.synced_folder ".", "/vagrant", type: "virtualbox"` のように Vagrantfile に設定するとよい – Qiita



それにしても

最近見る技術情報はほぼすべてQiitaになってます。見やすいというのもあるでしょうけど、恐らく書きやすいんでしょうね。僕も技術情報はそっちて書いた方がいいのかもなあと最近思ったりします。ブログでコードを書くのもなかなかしんどいときがあるので。ハイライトとか。


アカウントだけ作ってみた。まだ何も書いてませんが。

nobodyplace – Qiita