そんな今日この頃の技術ネタ

本家側に書くほどでもない小ネタ用

Vagrantでの検証環境の作成をもうちょっと効率よくやる

前回のDocker Machineベタに3つVagrantfileを記述してVM作ったけど、 絶対にもっちょい楽な方法あるよなーと思って調べてみたらやっぱりあった。

blue1st-tech.hateblo.jp

単一のVagrantfileファイルで複数台を管理できるっぽい。


複数のVMを用意するには…

複数ホストを用意したいような状況の場合、 どうやらVm.configure(2)内で

config.vm.define "master" do |server|
  server.vm.network "private_network", ip: "192.168.33.10"
end

みたいな感じの記述を足していけば良いらしい。

中にホスト固有の設定を記述するので、今回であればそれぞれのIPを指定しておく。


プロビジョニング

Vagrantfileを読んでみたら、どうやら実行しておきたいコマンドを記述しておくことができるらしい。

全部で必要な処理はconfig以下、個別のVMで必要なことは先の処理のserverの中へ記載する。

config.vm.provision "shell", inline: <<-SHELL
  sudo yum update
  sudo yum install -y net-tools
  sudo firewall-cmd --permanent --add-port=2376/tcp
  sudo firewall-cmd --reload
SHELL

実際の動きをログで見る限りだと、先に全体処理を行ってから個別の処理をやってくれるみたいだ。


書こうと思えばいくらでも書けそうだけど、 あまり複雑なことをやるならAnsibleとかを検討したほうが良さそう。

VMだけじゃなくて実サーバにも流用できるしね。

初めてのAnsible

初めてのAnsible

こっちはこっちで別途勉強していきたいところ。

Vagrantfile

最終的には以下の形で。

CentOS7のマシンを3台用意する。

それぞれに連番のIDを振り、共通での処理と管理用のmasterだけ開けるポートを記載している。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "CentOS7"
  config.vm.box_url = "https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box"

  config.vm.define "master" do |server|
    server.vm.network "private_network", ip: "192.168.33.10"
    server.vm.provision "shell", inline: <<-SHELL
       sudo firewall-cmd --permanent --add-port=3376/tcp
       sudo firewall-cmd --reload
    SHELL
  end
  config.vm.define "node1" do |server|
    server.vm.network "private_network", ip: "192.168.33.11"
  end
  config.vm.define "node2" do |server|
    server.vm.network "private_network", ip: "192.168.33.12"
  end

  config.vm.provision "shell", inline: <<-SHELL
    sudo yum update
    sudo yum install -y net-tools
    sudo firewall-cmd --permanent --add-port=2375/tcp --add-port=2376/tcp --add-port=4789/udp --add-port=7946/tcp --add-port=7946/udp
    sudo firewall-cmd --reload
  SHELL
end


使い方

単体の場合はディレクトリ直下でvagrant sshという風にやっていたのを、 記述した名前を用いてvagrant ssh masterとかvagrant ssh-config node1とかやれば個別に操作できる。


これでサクッと検証用のVMのネットワークを構築できた。

1コマンドなので気軽に作り壊しできるのが良い。

Dockerとかに比べれば流石に時間はかかるのだが、 コンテナでは検証できないような事案もあるわけで、 これはこれで非常に活用しどころが多そう。

Vagrant入門ガイド

Vagrant入門ガイド

ちなみに今やろうとしているのはDocker Machine/Docker Swarmのマルチホストネットワークの検証なんだけど、 CentOS7だとスルッとは動作してくれないところが多く、ちょっと心が折れかかってる。

個人でやるならUbuntu使いたいところだけど、会社の案件だからそう気楽にはいかないしなあ。