Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
テスト駆動で行うネットワーク自動化のすすめ
Test Driven Network Automation
 
NetOpsCoding #1 (@kinunori)
自己紹介
{
"name": "山口 正徳(@kinunori)",
"Role": "Security/Network/Server Engineer",
"Work": "OpenStack/AWS",
"Lang": "Ruby",
"C...
テスト駆動開発って
ご存知ですか?
テスト駆動開発とは
 
ソフトウェアの機能ごとに、テストコードを最初に書き、
そのテストコードが動作する実装、というステップを繰り返し
ソフトウェアの設計・開発を行う開発手法です
 
詳細はwikipediaで
https://ja.wikip...
どうやるの?
Todoに対して、
 ・テストコードを書く
 ・テストコードを実行する -> (失敗)
 ・テストが通るコードを実装する
 ・テストコードを実行する -> (成功)
 ・コードの最適化 (リファクタリング)
を繰り返していきます
使うツール(一例)
• Serverspec
http://serverspec.org/
• Itamae
https://github.com/itamae-kitchen/itamae
• Cumulus Linux(仮想OS版)
htt...
Todo
・インタフェース swp1をリンクアップさせる
・インタフェース swp1に172.16.0.1/24のIPを付与する
・ブリッジ br-data を作る
・ブリッジ br-data に swp1 を追加する
・192.168.100...
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 exam...
テストを成功させるテスト対象コードを書く
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...
再度テストを実行し成功になる事を確認する
$ rake spec
<snip>
Interface "swp1"
should be up
Finished in 0.22974 seconds (files took 5.91 seconds...
Todoからテストコードを書く(以降、繰り返し)
require 'spec_helper'
describe interface('swp1') do
it { should be_up }
it { should have_ipv4_add...
テストを成功にしたままリファクタリングする
ネストなどで汚くなり、再利用性や可読性が下がったコードを
きれいにします
     
# node.jsonで指定されたswpをリンクアップする
node[:swp].each do |swp|
ex...
テスト駆動の良いところ
・実装フェーズでの考慮漏れ(設定漏れ)が少ない
 
・テストコードを試験項目、実行結果を試験結果として扱うで
エクセルワークを削減できる
・変更に強いという事はコードを有効に使い続けられる
・コードが変更に強くなればイン...
Upcoming SlideShare
Loading in …5
×

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

689 views

Published on

NetOpsCodingで話した内容です
https://atnd.org/events/70253

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

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

×