■ 1. はじめに
Ansibleのネットワークモジュールを使いたいとき、試す環境がなくて困るケースはないでしょうか。 https://labs.networktocode.com/ といった有料のラボサービスもありますが、手元に無料で構築したいこともあるかと思います。 この記事では、仮想Junos4台とAnsibleホストをVagrantで気軽に構築する方法をご紹介します。
以前書いた以下の記事の応用編です。 tekunabe.hatenablog.jp
なお、私が試した環境は以下の通りです。
- Windows 10
- VirtualBox 5.2.26
- Vagrant 1.9.5
(大変参考にさせていただいた海外のエントリがあったのですが失念してしまいました・・)
■ 2. 構成図
以下の構成の環境を構築します。
■ 3. Vagrantfile の用意
以下の内容のVagrantfileを用意します。
Vagrant.configure(2) do |config| config.vm.box = "juniper/ffp-12.1X47-D15.4-packetmode" config.vm.provider "virtualbox" do |vb| vb.memory = 512 vb.cpus = 2 vb.gui = false end # vsrx1 config.vm.define "vsrx1" do |vsrx| vsrx.vm.host_name = "vsrx1" vsrx.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2201 # ge-0/0/1 vsrx.vm.network "private_network", ip: "172.16.0.1", virtualbox__intnet: "management" # ge-0/0/2 vsrx.vm.network "private_network", ip: "10.0.12.1", virtualbox__intnet: "1-2" # ge-0/0/3 vsrx.vm.network "private_network", ip: "10.0.13.1", virtualbox__intnet: "1-3" config.vm.provider "virtualbox" do |vb| vb.customize ["modifyvm", :id, "--nicpromisc2", "deny"] end end # vsrx2 config.vm.define "vsrx2" do |vsrx| vsrx.vm.host_name = "vsrx2" vsrx.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2202 # ge-0/0/1 vsrx.vm.network "private_network", ip: "172.16.0.2", virtualbox__intnet: "management" # ge-0/0/2 vsrx.vm.network "private_network", ip: "10.0.12.2", virtualbox__intnet: "1-2" # ge-0/0/3 vsrx.vm.network "private_network", ip: "10.0.24.2", virtualbox__intnet: "2-4" config.vm.provider "virtualbox" do |vb| vb.customize ["modifyvm", :id, "--nicpromisc2", "deny"] end end # vsrx3 config.vm.define "vsrx3" do |vsrx| vsrx.vm.host_name = "vsrx3" vsrx.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2203 # ge-0/0/1 vsrx.vm.network "private_network", ip: "172.16.0.3", virtualbox__intnet: "management" # ge-0/0/2 vsrx.vm.network "private_network", ip: "10.0.13.3", virtualbox__intnet: "1-3" # ge-0/0/3 vsrx.vm.network "private_network", ip: "10.0.34.3", virtualbox__intnet: "3-4" config.vm.provider "virtualbox" do |vb| vb.customize ["modifyvm", :id, "--nicpromisc2", "deny"] # プロミスキャスモードを拒否(詳細はその他を参照) end end # vsrx4 config.vm.define "vsrx4" do |vsrx| vsrx.vm.host_name = "vsrx4" vsrx.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2204 # ge-0/0/1 vsrx.vm.network "private_network", ip: "172.16.0.4", virtualbox__intnet: "management" # ge-0/0/2 vsrx.vm.network "private_network", ip: "10.0.24.4", virtualbox__intnet: "2-4" # ge-0/0/3 vsrx.vm.network "private_network", ip: "10.0.34.4", virtualbox__intnet: "3-4" config.vm.provider "virtualbox" do |vb| vb.customize ["modifyvm", :id, "--nicpromisc2", "deny"] end end # centos7 (ansible) config.vm.define "centos7" do |node| node.vm.box = "centos/7" node.vm.hostname = "centos7" node.vm.network "private_network", ip: "172.16.0.9", virtualbox__intnet: "management" node.vm.network :forwarded_port, id: "ssh", host_ip:"127.0.0.1", guest: 22, host: 2209 node.vm.synced_folder ".", "/vagrant", disabled: true # node.vm.synced_folder ".", "/vagrant", type:"virtualbox" # お好み # provision (install ansible by pip) node.vm.provision "shell", inline: "yum -y groupinstall 'Development Tools'" node.vm.provision "shell", inline: "yum -y install python-devel" node.vm.provision "shell", inline: "curl -kL https://bootstrap.pypa.io/get-pip.py | python" node.vm.provision "shell", inline: "pip install ansible" node.vm.provision "shell", inline: "pip install ncclient" # junosモジュールで利用 end end
お好みに応じて書き換えてください。
■ 4. Vagrantプラグインのインストール
今回利用する仮想JUONSのBoxでは vagrant-junos
と vagrant-host-shell
というVagrantプラグインが必要のためあらかじめインストールしておきます。
vagrant plugin install vagrant-junos vagrant plugin install vagrant-host-shell
■ 5. vagrant up
用意したVagrantfileのあるディレクトリで、vagrant up
してしばらく待ちます。
■ 6. 確認
6.1. Ansibleホスト
ホストOSから localhost:2209
でSSHにアクセスできます。
vagrantユーザと対応する秘密鍵でログインできます。
ログイン後、以下のようにansbleがインストールされたことが確認できます。
[vagrant@centos7 ~]$ ansible --version ansible 2.3.2.0 config file = configured module search path = Default w/o overrides python version = 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
※2017/08/26現在の pipでインストールされるバージョンは2.3.2
6.2. vsrx1
ホストOSから localhost:2201
でSSHにアクセスできます。
vagrantユーザと対応する秘密鍵か、rootユーザーとパスワードJuniperでログインできます。
ここでは show version
コマンドを実行して確認します。
root@vsrx1> show version Hostname: vsrx1 Model: firefly-perimeter JUNOS Software Release [12.1X47-D15.4]
同じように
localhost:2202
でvsrx2
localhost:2203
でvsrx3
localhost:2204
でvsrx4
にアクセスできます。
これで、仮想Junos4台とAnsibleホストをVagrantを構築できました。
■ その他
172.16.0.0/24
のネットワークですが、VirtualBoxのネットワーク設定に起因するのか、以下のようにpingの応答がduplicateしたりします。
[2017/12/16 更新] Vagrantfle
内で、仮想NICのプロミスキャスモードを拒否にすることで解決。(上記 Vagrantfle
の内容は修正済み)
以上です。