テスト駆動で行うネットワーク自動化のすすめ
Test Driven Network Automation
 
NetOpsCoding #1 (@kinunori)
自己紹介
{
"name": "山口 正徳(@kinunori)",
"Role": "Security/Network/Server Engineer",
"Work": "OpenStack/AWS",
"Lang": "Ruby",
"Community": "API Meetup/ログ分析勉強会",
"Talks": "Interop 2015 Conf. C2-3"
}
テスト駆動開発って
ご存知ですか?
テスト駆動開発とは
 
ソフトウェアの機能ごとに、テストコードを最初に書き、
そのテストコードが動作する実装、というステップを繰り返し
ソフトウェアの設計・開発を行う開発手法です
 
詳細はwikipediaで
https://ja.wikipedia.org/wiki/テスト駆動開発
どうやるの?
Todoに対して、
 ・テストコードを書く
 ・テストコードを実行する -> (失敗)
 ・テストが通るコードを実装する
 ・テストコードを実行する -> (成功)
 ・コードの最適化 (リファクタリング)
を繰り返していきます
使うツール(一例)
• Serverspec
http://serverspec.org/
• Itamae
https://github.com/itamae-kitchen/itamae
• Cumulus Linux(仮想OS版)
https://cumulusnetworks.com/cumulus-vx/
• Vagrant
https://www.vagrantup.com/
Todo
・インタフェース swp1をリンクアップさせる
・インタフェース swp1に172.16.0.1/24のIPを付与する
・ブリッジ br-data を作る
・ブリッジ br-data に swp1 を追加する
・192.168.100.0/24へのルートを設定する
Todoからテストコードを書く
require 'spec_helper'
describe interface('swp1') do
it { should be_up }
end
テストを実行する
$ rake spec
<snip>
Finished in 0.29055 seconds (files took 7.04 seconds to load)
1 example, 1 failure
Failed examples:
rspec ./spec/default/cumulus_vagrant_spec.rb:4 # Interface "swp1" should be up
テストを成功させるテスト対象コードを書く
execute "configure a swp1" do
command "sudo ip link set dev swp1 up"
end
テスト対象コードを実行する
$ itamae ssh --vagrant --host default itamae/cookbooks/interfaces.rb
INFO : Starting Itamae...
INFO : Recipe: /Users/masa/work/Vagrant/cumulus/itamae/cookbooks/interfaces.rb
INFO : execute[configure a swp1] executed will change from 'false' to 'true'
再度テストを実行し成功になる事を確認する
$ rake spec
<snip>
Interface "swp1"
should be up
Finished in 0.22974 seconds (files took 5.91 seconds to load)
1 example, 0 failures
Todoからテストコードを書く(以降、繰り返し)
require 'spec_helper'
describe interface('swp1') do
it { should be_up }
it { should have_ipv4_address("172.16.0.1/24") }
end
テストを成功にしたままリファクタリングする
ネストなどで汚くなり、再利用性や可読性が下がったコードを
きれいにします
     
# node.jsonで指定されたswpをリンクアップする
node[:swp].each do |swp|
execute "#{swp}_linkup" do
command "sudo ip link set dev #{swp} up"
end
end
テスト駆動の良いところ
・実装フェーズでの考慮漏れ(設定漏れ)が少ない
 
・テストコードを試験項目、実行結果を試験結果として扱うで
エクセルワークを削減できる
・変更に強いという事はコードを有効に使い続けられる
・コードが変更に強くなればインフラの継続的インテグレー
ションへの対応を柔軟にできる

テスト駆動で行うネットワーク自動化のすすめ