Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use OVSDB client in order to retrive port list #41

Open
wants to merge 8 commits into
base: develop
Choose a base branch
from
Open

Use OVSDB client in order to retrive port list #41

wants to merge 8 commits into from

Conversation

shun159
Copy link
Member

@shun159 shun159 commented Jun 16, 2016

https://3.basecamp.com/3088280/buckets/46054/messages/148393356
の通り、OVSDBを使った実装を試しに書いてみました。テストはまだありません。

sudo("ovs-vsctl list-ports #{@bridge}").split
br_query = [select('Bridge', [[:name, :==, @bridge]], [:ports])]
br_ports = @client.transact(1, 'Open_vSwitch', br_query).first[:rows].first[:ports]
ports = if br_ports.include? "set"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prefer single-quoted strings when you don't need string interpolation or special symbols.

@@ -3,6 +3,8 @@ source 'https://rubygems.org'

gemspec

gem 'active_flow', github: 'shun159/active_flow', branch: 'feature/ovsdb/core'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここで shun159/active_flow に依存してしまうと、依存先が trema/active_flow と phut の active_flow とこの active_flow で 3 つになってしまうので 笑、まずは phut のほうにクラスをコピーしてもらうのが良いと思います (ライセンスなど問題がなければ)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

しょうちしました。

Copy link
Member Author

@shun159 shun159 Jun 16, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

コピーしてきました。
7ee0730

br_ports = @client.transact(1, 'Open_vSwitch', br_query)
if br_ports.first[:rows].first
br_ports = br_ports.first[:rows].first[:ports]
ports = if br_ports.include? "set"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prefer single-quoted strings when you don't need string interpolation or special symbols.

@yasuhito
Copy link
Member

まずテストについては、vswitch#ports.feature がそのまま使えると思います。この最後のシナリオでは、ポート 2 番に仮想リンクをつなげたときの Vswitch#ports の出力チェックをしています。

Scenario: Vswitch#ports
  Given I type "link = Link.create('a', 'b')"
  And I type "vswitch.add_numbered_port 2, link.device('a')"
  When I type "vswitch.ports"
  And sleep 5
  Then the output should contain:
   """
   ["L0_a"]
   """

ここはたとえば [#<Port number: 2, device: "L0_a">] という出力が返ってくればカッコイイと思います。

@shun159
Copy link
Member Author

shun159 commented Jun 16, 2016

テストを書きかきなおしてみました。
また add_numbered_portで実行するのは、"other_config:rstp-port-num=#{port_number}"では、
open vswitchでは、openflowポートのアサインができないので、"ofport_request=#{port_number}"で書きなおしています。

@shun159
Copy link
Member Author

shun159 commented Jun 16, 2016

出力に変な改行が入ってしまい、本当は、

[#<OpenStruct name="vsw_0xabc", ofport=65534>, #<OpenStruct name="L0_a", ofport=2>]

と書きたいのですが…。

  Scenario: Vswitch#ports
    Given I type "link = Link.create('a', 'b')"
    And I type "vswitch.add_numbered_port 2, link.device('a')"
    When I type "vswitch.ports"
    And sleep 5
    Then the output should contain:
    """
    #<OpenStruct name="L0_a", ofport=2>
    ""

@yasuhito
Copy link
Member

inspect の出力は、ActiveRecord 方式で アトリビュート名: 値 がよいです。
phut の OpenVswitch クラスも、そちらに合わせてありますです。
https://github.com/trema/phut/blob/develop/lib/phut/open_vswitch.rb#L91

あとは OpenStruct という名前も何だかわからないので、やはり Port がよいと思います。

@@ -0,0 +1,22 @@
module Phut

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing frozen string literal comment.

@shun159
Copy link
Member Author

shun159 commented Jun 16, 2016

Portクラスになるように、直してみました。
また、同名のbridgeやportが残っているままで、再度実行した時にbridgeやportの作成に失敗することを回避するために、いくつか実行しているコマンドに修正を加えました。

["L0_a"]
"""
"""
[#<Port device: "L0_a", number: 1>]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

デバイス名とポート番号ではユーザが興味あるのはたいていポート番号のほうなので、

[#<Port number: 1, device: "L0_a">]

のほうが良いと思います。

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

しょうちしました。

@yasuhito yasuhito self-assigned this Jun 16, 2016
@@ -0,0 +1,92 @@
module Phut

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing frozen string literal comment.

@shun159
Copy link
Member Author

shun159 commented Jun 17, 2016

修正しました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants