phut 0.6.2 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cc1003ee6a5a95a02df6ec9e078d0a0af4d28695
4
- data.tar.gz: 6edafd0300df63624d9bb2a55c2a4a8bc7f6e613
3
+ metadata.gz: 4760c8bc9db6a1b1f752aa738aa5eb844c8059e4
4
+ data.tar.gz: f5d34bbee5fdeb48167a8e7f2170a2193fbe073c
5
5
  SHA512:
6
- metadata.gz: 3f1005ad8db1a26a5879d5c5e3e1e9d1cebf58bdf9ccf5a3fbd6ea4380719ebbf17878d62db89a0a7add60c4b2c019fc66d95a3a06d3cfdb6157635afde89222
7
- data.tar.gz: 37a6403bf6e10848fe58bb779156bdcb5c8ffc27290e2ea94bf037de78b94e1d9b3acc7870eebbd3e5d10a1fc924bd0e60e02ebca26674451fc07795dfda6322
6
+ metadata.gz: 45d1513fcbbeba14e3b8f83c3d3842350721db909edaaa24d42e6dbce603957f8b90fa4701690086cdae7864c187f996c852db7163d4860342fc7c757a523aaf
7
+ data.tar.gz: 68877bd84eb271c7e54a0bec0e2860a0b1239f0a45ae55389f564531b8ae1db4721acde1a223b69c8a6ec4994b1a904d0a4a47e306cfaa5214e2af710bc7d6f2
data/CHANGELOG.md CHANGED
@@ -3,6 +3,11 @@
3
3
  ## develop (unreleased)
4
4
 
5
5
 
6
+ ## 0.6.3 (6/4/2015)
7
+ ### Bugs fixed
8
+ * [#23](https://github.com/trema/phut/pull/23): Fix vhost restart failure.
9
+
10
+
6
11
  ## 0.6.2 (6/3/2015)
7
12
  ### Bugs fixed
8
13
  * Delete a vhost.*.ctl socket file after the vhost process is killed.
data/bin/phut CHANGED
@@ -53,10 +53,8 @@ module Phut
53
53
  command :run do |c|
54
54
  c.desc 'Location to put pid files'
55
55
  c.flag [:p, :pid_dir], default_value: Phut.pid_dir
56
-
57
56
  c.desc 'Location to put log files'
58
57
  c.flag [:l, :log_dir], default_value: Phut.log_dir
59
-
60
58
  c.desc 'Location to put socket files'
61
59
  c.flag [:s, :socket_dir], default_value: Phut.socket_dir
62
60
 
@@ -4,8 +4,6 @@ require 'phut/open_vswitch'
4
4
  module Phut
5
5
  # Parsed DSL data.
6
6
  class Configuration
7
- attr_reader :links
8
-
9
7
  def initialize(logger = NullLogger.new)
10
8
  @all = {}
11
9
  @links = []
@@ -28,12 +26,10 @@ module Phut
28
26
  end
29
27
  # rubocop:enable MethodLength
30
28
 
31
- def find_network_device_by_name(name)
32
- @links.each do |each|
33
- device = each.find_network_device_by_name(name)
34
- return device if device
35
- end
36
- fail "No network device found for #{name}."
29
+ def update_connections
30
+ update_vswitch_ports
31
+ update_vhost_interfaces
32
+ self
37
33
  end
38
34
 
39
35
  def vswitches
@@ -45,7 +41,7 @@ module Phut
45
41
  end
46
42
 
47
43
  def run
48
- links.each(&:run)
44
+ @links.each(&:run)
49
45
  vhosts.each { |each| each.run vhosts }
50
46
  vswitches.each(&:run)
51
47
  end
@@ -53,7 +49,7 @@ module Phut
53
49
  def stop
54
50
  vswitches.each(&:maybe_stop)
55
51
  vhosts.each(&:maybe_stop)
56
- links.each(&:maybe_stop)
52
+ @links.each(&:maybe_stop)
57
53
  end
58
54
 
59
55
  def add_vswitch(name, attrs)
@@ -78,5 +74,35 @@ module Phut
78
74
  conflict = @all[name]
79
75
  fail "The name #{name} conflicts with #{conflict}." if conflict
80
76
  end
77
+
78
+ def update_vswitch_ports
79
+ @links.each do |each|
80
+ maybe_connect_link_to_vswitch each
81
+ end
82
+ end
83
+
84
+ def maybe_connect_link_to_vswitch(link)
85
+ vswitches_connected_to(link).each do |each|
86
+ each.add_network_device link.find_network_device(each)
87
+ end
88
+ end
89
+
90
+ def vswitches_connected_to(link)
91
+ vswitches.select { |each| link.connect_to?(each) }
92
+ end
93
+
94
+ def update_vhost_interfaces
95
+ vhosts.each do |each|
96
+ each.network_device = find_network_device(each)
97
+ end
98
+ end
99
+
100
+ def find_network_device(vhost)
101
+ @links.each do |each|
102
+ device = each.find_network_device(vhost)
103
+ return device if device
104
+ end
105
+ fail "No network device found for #{vhost}."
106
+ end
81
107
  end
82
108
  end
@@ -77,6 +77,11 @@ module Phut
77
77
  system "sudo ovs-vsctl br-exists #{bridge_name}"
78
78
  end
79
79
 
80
+ def add_network_device(network_device)
81
+ network_device.port_number = @network_devices.size + 1
82
+ @network_devices << network_device
83
+ end
84
+
80
85
  private
81
86
 
82
87
  def bridge_name
data/lib/phut/parser.rb CHANGED
@@ -6,43 +6,14 @@ module Phut
6
6
  # Configuration DSL parser.
7
7
  class Parser
8
8
  def initialize(logger = NullLogger.new)
9
- @config = Configuration.new(logger)
10
- @port_number = Hash.new(0)
9
+ @logger = logger
11
10
  end
12
11
 
13
12
  def parse(file)
14
- Syntax.new(@config).instance_eval IO.read(file), file
15
- connect_links_to_switches
16
- connect_links_to_vhosts
17
- @config
18
- end
19
-
20
- private
21
-
22
- def connect_links_to_switches
23
- @config.links.each do |each|
24
- maybe_assign_network_device_to_vswitch each
25
- end
26
- end
27
-
28
- def connect_links_to_vhosts
29
- @config.vhosts.each do |each|
30
- each.network_device = @config.find_network_device_by_name(each.name)
13
+ Configuration.new(@logger).tap do |configuration|
14
+ Syntax.new(configuration).instance_eval IO.read(file), file
15
+ configuration.update_connections
31
16
  end
32
17
  end
33
-
34
- def maybe_assign_network_device_to_vswitch(link)
35
- @config.vswitches.each do |each|
36
- switch_name = each.name
37
- network_device = link.find_network_device_by_name(switch_name)
38
- next unless network_device
39
- network_device.port_number = new_port_number(switch_name)
40
- each.network_devices << network_device
41
- end
42
- end
43
-
44
- def new_port_number(switch_name)
45
- @port_number[switch_name] += 1
46
- end
47
18
  end
48
19
  end
data/lib/phut/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # Base module.
2
2
  module Phut
3
- VERSION = '0.6.2'
3
+ VERSION = '0.6.3'
4
4
  end
data/lib/phut/vhost.rb CHANGED
@@ -30,7 +30,8 @@ module Phut
30
30
  end
31
31
 
32
32
  def run(all_hosts = [])
33
- sh "rvmsudo vhost run #{run_options all_hosts}"
33
+ @all_hosts ||= all_hosts
34
+ sh "rvmsudo vhost run #{run_options}"
34
35
  end
35
36
 
36
37
  def stop
@@ -49,20 +50,20 @@ module Phut
49
50
 
50
51
  private
51
52
 
52
- def run_options(all_hosts)
53
+ def run_options
53
54
  ["-n #{name}",
54
55
  "-I #{@network_device}",
55
56
  "-i #{@ip_address}",
56
57
  "-m #{@mac_address}",
57
- "-a #{arp_entries all_hosts}",
58
+ "-a #{arp_entries}",
58
59
  @promisc ? '--promisc' : nil,
59
60
  "-P #{Phut.pid_dir}",
60
61
  "-L #{Phut.log_dir}",
61
62
  "-S #{Phut.socket_dir}"].compact.join(' ')
62
63
  end
63
64
 
64
- def arp_entries(all_hosts)
65
- all_hosts.map do |each|
65
+ def arp_entries
66
+ @all_hosts.map do |each|
66
67
  "#{each.ip_address}/#{each.mac_address}"
67
68
  end.join(',')
68
69
  end
@@ -49,7 +49,7 @@ module Phut
49
49
  private
50
50
 
51
51
  def start_logging
52
- @logger = Logger.new(log_file)
52
+ @logger = Logger.new(File.open(log_file, 'a'))
53
53
  @logger.info("#{@options.fetch(:name)} started " \
54
54
  "(interface = #{@options.fetch(:interface)}," \
55
55
  " IP address = #{@options.fetch(:ip_address)}," \
@@ -17,6 +17,10 @@ module Phut
17
17
  @name.gsub('.', '_') + port_number_string
18
18
  end
19
19
 
20
+ def inspect
21
+ to_s
22
+ end
23
+
20
24
  private
21
25
 
22
26
  def port_number_string
@@ -58,11 +62,17 @@ module Phut
58
62
  end
59
63
 
60
64
  def up?
61
- /^#{@device_a}\s+Link encap:Ethernet/ =~ `ifconfig -a`
65
+ /^#{@device_a}\s+Link encap:Ethernet/ =~ `ifconfig -a` || false
62
66
  end
63
67
 
64
- def find_network_device_by_name(name)
65
- [@device_a, @device_b].find { |each| each.name == name }
68
+ def connect_to?(vswitch)
69
+ find_network_device(vswitch) || false
70
+ end
71
+
72
+ def find_network_device(vswitch_or_vhost)
73
+ [@device_a, @device_b].detect do |each|
74
+ each.name == vswitch_or_vhost.name
75
+ end
66
76
  end
67
77
 
68
78
  private
@@ -3,16 +3,18 @@ require 'stringio'
3
3
 
4
4
  describe Phut::Parser do
5
5
  describe '#parse' do
6
- Given { allow(IO).to receive(:read).with('CONFIG_FILE').and_return(string) }
7
- Given(:config) { Phut::Parser.new.parse 'CONFIG_FILE' }
6
+ Given do
7
+ allow(IO).to receive(:read).with('CONFIGURATION_FILE').and_return(string)
8
+ end
9
+ Given(:configuration) { Phut::Parser.new.parse 'CONFIGURATION_FILE' }
8
10
 
9
11
  context "with 'vswitch { dpid '0xabc' }'" do
10
12
  When(:string) { "vswitch { dpid '0xabc' }" }
11
13
 
12
14
  describe '#vswitch' do
13
- Then { config.vswitches.size == 1 }
14
- Then { config.fetch('0xabc').datapath_id == 0xabc }
15
- Then { config.fetch('0xabc').dpid == 0xabc }
15
+ Then { configuration.vswitches.size == 1 }
16
+ Then { configuration.fetch('0xabc').datapath_id == 0xabc }
17
+ Then { configuration.fetch('0xabc').dpid == 0xabc }
16
18
  end
17
19
  end
18
20
 
@@ -20,9 +22,9 @@ describe Phut::Parser do
20
22
  When(:string) { "vswitch { datapath_id '0xabc' }" }
21
23
 
22
24
  describe '#vswitch' do
23
- Then { config.vswitches.size == 1 }
24
- Then { config.fetch('0xabc').dpid == 0xabc }
25
- Then { config.fetch('0xabc').datapath_id == 0xabc }
25
+ Then { configuration.vswitches.size == 1 }
26
+ Then { configuration.fetch('0xabc').dpid == 0xabc }
27
+ Then { configuration.fetch('0xabc').datapath_id == 0xabc }
26
28
  end
27
29
  end
28
30
 
@@ -30,39 +32,39 @@ describe Phut::Parser do
30
32
  When(:string) { "vswitch('my_controller') { dpid '0xabc' }" }
31
33
 
32
34
  describe '#vswitch' do
33
- Then { config.vswitches.size == 1 }
34
- Then { config.fetch('my_controller').dpid == 0xabc }
35
- Then { config.fetch('my_controller').datapath_id == 0xabc }
35
+ Then { configuration.vswitches.size == 1 }
36
+ Then { configuration.fetch('my_controller').dpid == 0xabc }
37
+ Then { configuration.fetch('my_controller').datapath_id == 0xabc }
36
38
  end
37
39
  end
38
40
 
39
41
  context "with 'vhost { ip '192.168.0.1' }' ..." do
40
42
  When(:string) do
41
- <<-CONFIG
43
+ <<-CONFIGURATION
42
44
  vhost { ip '192.168.0.1' }
43
45
  vhost { ip '192.168.0.2' }
44
46
  link '192.168.0.1', '192.168.0.2'
45
- CONFIG
47
+ CONFIGURATION
46
48
  end
47
49
 
48
50
  describe '#vhost' do
49
- Then { config.vhosts.size == 2 }
50
- Then { config.fetch('192.168.0.1').ip_address == '192.168.0.1' }
51
+ Then { configuration.vhosts.size == 2 }
52
+ Then { configuration.fetch('192.168.0.1').ip_address == '192.168.0.1' }
51
53
  end
52
54
  end
53
55
 
54
56
  context "with 'vhost('host1') { ip '192.168.0.1' }' ..." do
55
57
  When(:string) do
56
- <<-CONFIG
58
+ <<-CONFIGURATION
57
59
  vhost('host1') { ip '192.168.0.1' }
58
60
  vhost('host2') { ip '192.168.0.2' }
59
61
  link 'host1', 'host2'
60
- CONFIG
62
+ CONFIGURATION
61
63
  end
62
64
 
63
65
  describe '#vhost' do
64
- Then { config.vhosts.size == 2 }
65
- Then { config.fetch('host1').ip_address == '192.168.0.1' }
66
+ Then { configuration.vhosts.size == 2 }
67
+ Then { configuration.fetch('host1').ip_address == '192.168.0.1' }
66
68
  end
67
69
  end
68
70
  end
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.6.2
4
+ version: 0.6.3
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-06-03 00:00:00.000000000 Z
11
+ date: 2015-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gli