phut 0.2.4 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +0 -2
- data/CHANGELOG.md +5 -0
- data/Rakefile +1 -1
- data/bin/phut +3 -0
- data/features/dsl_vswitch.feature +5 -5
- data/features/phut.feature +0 -1
- data/features/shell.feature +15 -9
- data/features/step_definitions/phut_steps.rb +6 -5
- data/features/support/hooks.rb +6 -9
- data/lib/phut/configuration.rb +1 -1
- data/lib/phut/open_vswitch.rb +15 -43
- data/lib/phut/version.rb +1 -1
- data/phut.gemspec +3 -5
- data/spec/phut/open_vswitch_spec.rb +2 -1
- data/tasks/cucumber.rake +0 -2
- metadata +9 -15
- data/tasks/openvswitch.rake +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4f3795a4ddd93016e7806acc680a6965fba9326
|
4
|
+
data.tar.gz: 85718cdee25a39e9c98459b130905424e82ca650
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 168f91c85e0689c8748c78c85d884772a31e3b03292284d6e641c5f776b0a0ddd013cec6c9d8a985df9b529aee489fee71f9fe79f59972971f6aefbb6fd20fcc
|
7
|
+
data.tar.gz: e6e37c6265e7061bc2f5cb50410d8a7f8c438e7be62cb642719d00e242d5e1d9444aad60491c57c6eb6c4c45adf804c8bccb24b0d1ecca224d6b6690012a3850
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), 'lib')
|
|
2
2
|
|
3
3
|
require 'rake/clean'
|
4
4
|
|
5
|
-
task default: :
|
5
|
+
task default: :test
|
6
6
|
task test: [:spec, :cucumber, :quality]
|
7
7
|
task quality: [:rubocop, :reek, :flog]
|
8
8
|
task travis: [:spec, 'cucumber:travis', :quality]
|
data/bin/phut
CHANGED
@@ -38,6 +38,9 @@ module Phut
|
|
38
38
|
Pry::Commands.block_command 'vswitch' do |dpid|
|
39
39
|
Phut::OpenVswitch.new(dpid).run
|
40
40
|
end
|
41
|
+
Pry::Commands.block_command 'dump_flows' do |dpid|
|
42
|
+
puts Phut::OpenVswitch.new(dpid).dump_flows
|
43
|
+
end
|
41
44
|
Pry::Commands.block_command 'kill' do |dpid|
|
42
45
|
Phut::OpenVswitch.new(dpid).shutdown
|
43
46
|
end
|
@@ -6,7 +6,7 @@ Feature: The vswitch DSL directive.
|
|
6
6
|
vswitch { dpid '0xabc' }
|
7
7
|
"""
|
8
8
|
When I do phut run "network.conf"
|
9
|
-
Then a vswitch named "0xabc"
|
9
|
+
Then a vswitch named "0xabc" should be running
|
10
10
|
|
11
11
|
@sudo
|
12
12
|
Scenario: phut run with "vswitch { dpid NUMBER }"
|
@@ -15,7 +15,7 @@ Feature: The vswitch DSL directive.
|
|
15
15
|
vswitch { dpid 0xabc }
|
16
16
|
"""
|
17
17
|
When I do phut run "network.conf"
|
18
|
-
Then a vswitch named "0xabc"
|
18
|
+
Then a vswitch named "0xabc" should be running
|
19
19
|
|
20
20
|
@sudo
|
21
21
|
Scenario: phut run with "vswitch { datapath_id STRING }"
|
@@ -24,7 +24,7 @@ Feature: The vswitch DSL directive.
|
|
24
24
|
vswitch { datapath_id '0xabc' }
|
25
25
|
"""
|
26
26
|
When I do phut run "network.conf"
|
27
|
-
Then a vswitch named "0xabc"
|
27
|
+
Then a vswitch named "0xabc" should be running
|
28
28
|
|
29
29
|
@sudo
|
30
30
|
Scenario: phut run with "vswitch { datapath_id NUMBER }"
|
@@ -33,7 +33,7 @@ Feature: The vswitch DSL directive.
|
|
33
33
|
vswitch { datapath_id 0xabc }
|
34
34
|
"""
|
35
35
|
When I do phut run "network.conf"
|
36
|
-
Then a vswitch named "0xabc"
|
36
|
+
Then a vswitch named "0xabc" should be running
|
37
37
|
|
38
38
|
@sudo
|
39
39
|
Scenario: phut run with "vswitch(alias) { ... }"
|
@@ -42,4 +42,4 @@ Feature: The vswitch DSL directive.
|
|
42
42
|
vswitch('my_switch') { datapath_id '0xabc' }
|
43
43
|
"""
|
44
44
|
When I do phut run "network.conf"
|
45
|
-
Then a vswitch named "my_switch"
|
45
|
+
Then a vswitch named "my_switch" should be running
|
data/features/phut.feature
CHANGED
data/features/shell.feature
CHANGED
@@ -1,37 +1,43 @@
|
|
1
1
|
Feature: Shell
|
2
2
|
Background:
|
3
3
|
Given I run `phut -v` interactively
|
4
|
-
And I
|
5
|
-
And I type "log_dir '.'"
|
6
|
-
And I type "socket_dir '.'"
|
4
|
+
And I wait for stdout to contain "phut>"
|
7
5
|
|
8
6
|
@shell
|
9
7
|
Scenario: vswitch NUMBER
|
10
8
|
When I type "vswitch 0xabc"
|
11
9
|
And I type "quit"
|
12
|
-
|
13
|
-
|
10
|
+
And I run `sleep 1`
|
11
|
+
Then a vswitch named "0xabc" should be running
|
14
12
|
|
15
13
|
@shell
|
16
14
|
Scenario: vswitch STRING
|
17
15
|
When I type "vswitch '0xabc'"
|
18
16
|
And I type "quit"
|
19
|
-
|
20
|
-
|
17
|
+
And I run `sleep 1`
|
18
|
+
Then a vswitch named "0xabc" should be running
|
19
|
+
|
20
|
+
@shell
|
21
|
+
Scenario: dump_flows
|
22
|
+
Given I type "vswitch '0xabc'"
|
23
|
+
When I type "dump_flows 0xabc"
|
24
|
+
And I type "quit"
|
25
|
+
And I run `sleep 1`
|
26
|
+
Then the output should contain "NXST_FLOW reply"
|
21
27
|
|
22
28
|
@shell
|
23
29
|
Scenario: vswitch twice and fail
|
24
30
|
And I type "vswitch 0xabc"
|
25
31
|
When I type "vswitch 0xabc"
|
26
32
|
And I type "quit"
|
27
|
-
Then the output should contain "already running!"
|
33
|
+
Then the output should contain "Open vSwitch (dpid = 0xabc) is already running!"
|
28
34
|
|
29
35
|
@shell
|
30
36
|
Scenario: Kill and .pid is deleted
|
31
37
|
And I type "vswitch 0xabc"
|
32
38
|
When I type "kill 0xabc"
|
33
39
|
And I type "quit"
|
34
|
-
Then a
|
40
|
+
Then a vswitch named "0xabc" should not be running
|
35
41
|
|
36
42
|
@shell
|
37
43
|
Scenario: Kill without run and fail
|
@@ -6,11 +6,12 @@ When(/^I do phut run "(.*?)"$/) do |file_name|
|
|
6
6
|
step %(I run `phut -v run #{run_opts} #{@config_file}`)
|
7
7
|
end
|
8
8
|
|
9
|
-
Then(/^a vswitch named "(.*?)"
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
Then(/^a vswitch named "(.*?)" should be running$/) do |name|
|
10
|
+
expect(system("sudo ovs-vsctl br-exists #{name}")).to be(true)
|
11
|
+
end
|
12
|
+
|
13
|
+
Then(/^a vswitch named "(.*?)" should not be running$/) do |name|
|
14
|
+
expect(system("sudo ovs-vsctl br-exists #{name}")).to be(false)
|
14
15
|
end
|
15
16
|
|
16
17
|
Then(/^a vhost named "(.*?)" launches$/) do |name|
|
data/features/support/hooks.rb
CHANGED
@@ -11,10 +11,6 @@ Before('@sudo') do
|
|
11
11
|
@aruba_timeout_seconds = 10
|
12
12
|
end
|
13
13
|
|
14
|
-
Before('@shell') do
|
15
|
-
fail 'sudo authentication failed' unless system 'sudo -v'
|
16
|
-
end
|
17
|
-
|
18
14
|
After('@sudo') do
|
19
15
|
in_current_dir do
|
20
16
|
Phut.pid_dir = @pid_dir
|
@@ -24,11 +20,12 @@ After('@sudo') do
|
|
24
20
|
end
|
25
21
|
end
|
26
22
|
|
23
|
+
Before('@shell') do
|
24
|
+
fail 'sudo authentication failed' unless system 'sudo -v'
|
25
|
+
end
|
26
|
+
|
27
27
|
After('@shell') do
|
28
|
-
|
29
|
-
|
30
|
-
pid = IO.read(each).to_i
|
31
|
-
run "sudo kill #{pid}"
|
32
|
-
end
|
28
|
+
`sudo ovs-vsctl list-br`.split("\n").each do |each|
|
29
|
+
run "sudo ovs-vsctl del-br #{each}"
|
33
30
|
end
|
34
31
|
end
|
data/lib/phut/configuration.rb
CHANGED
data/lib/phut/open_vswitch.rb
CHANGED
@@ -7,11 +7,6 @@ module Phut
|
|
7
7
|
class OpenVswitch
|
8
8
|
include ShellRunner
|
9
9
|
|
10
|
-
OPENFLOWD =
|
11
|
-
"#{Phut.root}/vendor/openvswitch-1.2.2.trema1/tests/test-openflowd"
|
12
|
-
OFCTL =
|
13
|
-
"#{Phut.root}/vendor/openvswitch-1.2.2.trema1/utilities/ovs-ofctl"
|
14
|
-
|
15
10
|
attr_reader :dpid
|
16
11
|
alias_method :datapath_id, :dpid
|
17
12
|
attr_writer :interfaces
|
@@ -31,17 +26,25 @@ module Phut
|
|
31
26
|
"vswitch (name = #{name}, dpid = #{format('%#x', @dpid)})"
|
32
27
|
end
|
33
28
|
|
29
|
+
# rubocop:disable AbcSize
|
34
30
|
def run
|
35
|
-
sh "sudo
|
31
|
+
sh "sudo ovs-vsctl add-br #{name}"
|
32
|
+
sh "sudo /sbin/sysctl -w net.ipv6.conf.#{name}.disable_ipv6=1 -q"
|
33
|
+
@interfaces.each { |each| sh "sudo ovs-vsctl add-port #{name} #{each}" }
|
34
|
+
sh "sudo ovs-vsctl set-controller #{name} tcp:127.0.0.1:6633"\
|
35
|
+
" -- set controller #{name} connection-mode=out-of-band"
|
36
|
+
sh "sudo ovs-vsctl set bridge #{name} protocols=OpenFlow10" \
|
37
|
+
" other-config:datapath-id=#{dpid_zero_filled}"
|
38
|
+
sh "sudo ovs-vsctl set-fail-mode #{name} secure"
|
36
39
|
rescue
|
37
40
|
raise "Open vSwitch (dpid = #{@dpid}) is already running!"
|
38
41
|
end
|
39
42
|
alias_method :start, :run
|
43
|
+
# rubocop:enable AbcSize
|
40
44
|
|
41
45
|
def stop
|
42
46
|
fail "Open vSwitch (dpid = #{@dpid}) is not running!" unless running?
|
43
|
-
|
44
|
-
sh "sudo kill #{pid}"
|
47
|
+
sh "sudo ovs-vsctl del-br #{name}"
|
45
48
|
end
|
46
49
|
alias_method :shutdown, :stop
|
47
50
|
|
@@ -51,19 +54,19 @@ module Phut
|
|
51
54
|
end
|
52
55
|
|
53
56
|
def bring_port_up(port_number)
|
54
|
-
sh "sudo
|
57
|
+
sh "sudo ovs-ofctl mod-port #{name} #{port_number} up"
|
55
58
|
end
|
56
59
|
|
57
60
|
def bring_port_down(port_number)
|
58
|
-
sh "sudo
|
61
|
+
sh "sudo ovs-ofctl mod-port #{name} #{port_number} down"
|
59
62
|
end
|
60
63
|
|
61
64
|
def dump_flows
|
62
|
-
`sudo
|
65
|
+
`sudo ovs-ofctl dump-flows #{name}`
|
63
66
|
end
|
64
67
|
|
65
68
|
def running?
|
66
|
-
|
69
|
+
system "sudo ovs-vsctl br-exists #{name}"
|
67
70
|
end
|
68
71
|
|
69
72
|
private
|
@@ -73,44 +76,13 @@ module Phut
|
|
73
76
|
start
|
74
77
|
end
|
75
78
|
|
76
|
-
def pid_file
|
77
|
-
"#{Phut.pid_dir}/open_vswitch.#{name}.pid"
|
78
|
-
end
|
79
|
-
|
80
79
|
def network_device
|
81
80
|
"vsw_#{name}"
|
82
81
|
end
|
83
82
|
|
84
|
-
# rubocop:disable MethodLength
|
85
|
-
def options
|
86
|
-
%W(--detach
|
87
|
-
--out-of-band
|
88
|
-
--fail=closed
|
89
|
-
--inactivity-probe=180
|
90
|
-
--rate-limit=40000
|
91
|
-
--burst-limit=20000
|
92
|
-
--pidfile=#{pid_file}
|
93
|
-
--verbose=ANY:file:#{logging_level}
|
94
|
-
--verbose=ANY:console:err
|
95
|
-
--log-file=#{Phut.log_dir}/open_vswitch.#{name}.log
|
96
|
-
--datapath-id=#{dpid_zero_filled}
|
97
|
-
--unixctl=#{Phut.socket_dir}/open_vswitch.#{name}.ctl
|
98
|
-
netdev@#{network_device} tcp:127.0.0.1:6633) +
|
99
|
-
ports_option
|
100
|
-
end
|
101
|
-
# rubocop:enable MethodLength
|
102
|
-
|
103
83
|
def dpid_zero_filled
|
104
84
|
hex = format('%x', @dpid)
|
105
85
|
'0' * (16 - hex.length) + hex
|
106
86
|
end
|
107
|
-
|
108
|
-
def logging_level
|
109
|
-
@logger.level == Logger::DEBUG ? 'dbg' : 'info'
|
110
|
-
end
|
111
|
-
|
112
|
-
def ports_option
|
113
|
-
@interfaces.empty? ? [] : ["--ports=#{@interfaces.join(',')}"]
|
114
|
-
end
|
115
87
|
end
|
116
88
|
end
|
data/lib/phut/version.rb
CHANGED
data/phut.gemspec
CHANGED
@@ -18,8 +18,6 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.executables = %w(phut vhost)
|
19
19
|
gem.files = `git ls-files`.split("\n")
|
20
20
|
|
21
|
-
gem.extensions = ['Rakefile']
|
22
|
-
|
23
21
|
gem.extra_rdoc_files = ['README.md']
|
24
22
|
gem.test_files = `git ls-files -- {spec,features}/*`.split("\n")
|
25
23
|
|
@@ -34,8 +32,8 @@ Gem::Specification.new do |gem|
|
|
34
32
|
gem.add_development_dependency 'yard', '~> 0.8.7.6'
|
35
33
|
|
36
34
|
# Development
|
37
|
-
gem.add_development_dependency 'byebug', '~>
|
38
|
-
gem.add_development_dependency 'guard', '~> 2.12.
|
35
|
+
gem.add_development_dependency 'byebug', '~> 4.0.2'
|
36
|
+
gem.add_development_dependency 'guard', '~> 2.12.5'
|
39
37
|
gem.add_development_dependency 'guard-bundler', '~> 2.1.0'
|
40
38
|
gem.add_development_dependency 'guard-cucumber', '~> 1.5.4'
|
41
39
|
gem.add_development_dependency 'guard-rspec', '~> 4.5.0'
|
@@ -48,7 +46,7 @@ Gem::Specification.new do |gem|
|
|
48
46
|
gem.add_development_dependency 'cucumber', '~> 1.3.19'
|
49
47
|
gem.add_development_dependency 'flog', '~> 4.3.2'
|
50
48
|
gem.add_development_dependency 'rake'
|
51
|
-
gem.add_development_dependency 'reek', '~> 2.0.
|
49
|
+
gem.add_development_dependency 'reek', '~> 2.0.2'
|
52
50
|
gem.add_development_dependency 'rspec', '~> 3.2.0'
|
53
51
|
gem.add_development_dependency 'rspec-given', '~> 3.7.0'
|
54
52
|
gem.add_development_dependency 'rubocop', '~> 0.29.1'
|
data/tasks/cucumber.rake
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phut
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yasuhito Takamiya
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gli
|
@@ -86,28 +86,28 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 4.0.2
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 4.0.2
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: guard
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ~>
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 2.12.
|
103
|
+
version: 2.12.5
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 2.12.
|
110
|
+
version: 2.12.5
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: guard-bundler
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -254,14 +254,14 @@ dependencies:
|
|
254
254
|
requirements:
|
255
255
|
- - ~>
|
256
256
|
- !ruby/object:Gem::Version
|
257
|
-
version: 2.0.
|
257
|
+
version: 2.0.2
|
258
258
|
type: :development
|
259
259
|
prerelease: false
|
260
260
|
version_requirements: !ruby/object:Gem::Requirement
|
261
261
|
requirements:
|
262
262
|
- - ~>
|
263
263
|
- !ruby/object:Gem::Version
|
264
|
-
version: 2.0.
|
264
|
+
version: 2.0.2
|
265
265
|
- !ruby/object:Gem::Dependency
|
266
266
|
name: rspec
|
267
267
|
requirement: !ruby/object:Gem::Requirement
|
@@ -310,8 +310,7 @@ email:
|
|
310
310
|
executables:
|
311
311
|
- phut
|
312
312
|
- vhost
|
313
|
-
extensions:
|
314
|
-
- Rakefile
|
313
|
+
extensions: []
|
315
314
|
extra_rdoc_files:
|
316
315
|
- README.md
|
317
316
|
files:
|
@@ -360,15 +359,10 @@ files:
|
|
360
359
|
- tasks/cucumber.rake
|
361
360
|
- tasks/flog.rake
|
362
361
|
- tasks/gem.rake
|
363
|
-
- tasks/openvswitch.rake
|
364
362
|
- tasks/reek.rake
|
365
363
|
- tasks/relish.rake
|
366
364
|
- tasks/rspec.rake
|
367
365
|
- tasks/rubocop.rake
|
368
|
-
- vendor/.gitignore
|
369
|
-
- vendor/README.md
|
370
|
-
- vendor/openvswitch-1.2.2.trema1.tar.gz
|
371
|
-
- vendor/openvswitch-1.2.2_librt-check.diff
|
372
366
|
homepage: http://github.com/trema/phut
|
373
367
|
licenses:
|
374
368
|
- GPL3
|
data/tasks/openvswitch.rake
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'phut'
|
2
|
-
require 'tmpdir'
|
3
|
-
|
4
|
-
def openvswitch_srcdir
|
5
|
-
File.join Phut.root, 'vendor/openvswitch-1.2.2.trema1'
|
6
|
-
end
|
7
|
-
|
8
|
-
desc 'Build Open vSwitch'
|
9
|
-
task openvswitch: Phut::OpenVswitch::OPENFLOWD
|
10
|
-
|
11
|
-
file Phut::OpenVswitch::OPENFLOWD do
|
12
|
-
sh 'tar xzf ./vendor/openvswitch-1.2.2.trema1.tar.gz -C vendor'
|
13
|
-
cd openvswitch_srcdir do
|
14
|
-
sh "./configure --with-rundir=#{Dir.tmpdir}"
|
15
|
-
sh 'make'
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
task clean: 'openvswitch:clean'
|
20
|
-
task 'openvswitch:clean' do
|
21
|
-
FileTest.exist?(openvswitch_srcdir) && cd(openvswitch_srcdir) do
|
22
|
-
sh 'make clean'
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
CLOBBER.include(openvswitch_srcdir) if FileTest.exists?(openvswitch_srcdir)
|