phut 0.7.7 → 0.7.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.rubocop.yml +14 -1
  4. data/.travis.yml +2 -6
  5. data/Gemfile +30 -2
  6. data/Gemfile.lock +156 -0
  7. data/README.md +7 -2
  8. data/Rakefile +4 -3
  9. data/bin/phut +35 -83
  10. data/bin/vhost +28 -26
  11. data/features/{dsl.feature → dsl/error.feature} +8 -6
  12. data/features/{dsl_link.feature → dsl/link.feature} +11 -14
  13. data/features/dsl/netns.feature +115 -0
  14. data/features/dsl/vhost.feature +37 -0
  15. data/features/{dsl_vswitch.feature → dsl/vswitch.feature} +12 -12
  16. data/features/phut_run.feature +15 -0
  17. data/features/shell/vswitch#destroy.feature +10 -0
  18. data/features/shell/vswitch#ports.feature +36 -0
  19. data/features/shell/vswitch.all.feature +26 -0
  20. data/features/shell/vswitch.create.feature +30 -0
  21. data/features/shell/vswitch.destroy.feature +19 -0
  22. data/features/shell/vswitch.destroy_all.feature +18 -0
  23. data/features/step_definitions/link_steps.rb +5 -0
  24. data/features/step_definitions/netns_steps.rb +31 -0
  25. data/features/step_definitions/phut_steps.rb +5 -34
  26. data/features/step_definitions/vhost_steps.rb +5 -0
  27. data/features/step_definitions/vswitch_steps.rb +17 -0
  28. data/features/support/env.rb +3 -3
  29. data/features/support/hooks.rb +23 -15
  30. data/lib/phut.rb +3 -0
  31. data/lib/phut/finder.rb +19 -0
  32. data/lib/phut/link.rb +84 -0
  33. data/lib/phut/netns.rb +111 -22
  34. data/lib/phut/open_vswitch.rb +98 -96
  35. data/lib/phut/parser.rb +39 -8
  36. data/lib/phut/raw_socket.rb +4 -0
  37. data/lib/phut/route.rb +34 -0
  38. data/lib/phut/setting.rb +21 -4
  39. data/lib/phut/shell_runner.rb +13 -2
  40. data/lib/phut/syntax.rb +31 -14
  41. data/lib/phut/syntax/directive.rb +9 -1
  42. data/lib/phut/syntax/netns_directive.rb +13 -2
  43. data/lib/phut/syntax/vhost_directive.rb +2 -0
  44. data/lib/phut/syntax/vswitch_directive.rb +3 -1
  45. data/lib/phut/version.rb +3 -1
  46. data/lib/phut/veth.rb +68 -0
  47. data/lib/phut/vhost.rb +99 -58
  48. data/lib/phut/vhost_daemon.rb +53 -11
  49. data/lib/phut/vsctl.rb +125 -0
  50. data/lib/phut/vswitch.rb +10 -0
  51. data/phut.gemspec +9 -31
  52. data/tasks/cucumber.rake +5 -1
  53. data/tasks/flay.rake +2 -0
  54. data/tasks/flog.rake +3 -1
  55. data/tasks/gem.rake +2 -0
  56. data/tasks/minitest.rake +7 -0
  57. data/tasks/reek.rake +2 -0
  58. data/tasks/rubocop.rake +2 -0
  59. data/tasks/yard.rake +2 -0
  60. data/test/phut/link_test.rb +85 -0
  61. data/test/phut/netns_test.rb +58 -0
  62. data/test/phut/open_vswitch_test.rb +125 -0
  63. data/test/phut/veth_test.rb +48 -0
  64. data/test/phut/vhost_test.rb +56 -0
  65. metadata +41 -287
  66. data/.rspec +0 -3
  67. data/Guardfile +0 -29
  68. data/features/dsl_vhost.feature +0 -37
  69. data/features/phut_kill.feature +0 -27
  70. data/features/shell.feature +0 -39
  71. data/lib/phut/configuration.rb +0 -92
  72. data/lib/phut/null_logger.rb +0 -14
  73. data/lib/phut/virtual_link.rb +0 -109
  74. data/spec/phut/parser_spec.rb +0 -66
  75. data/spec/phut_spec.rb +0 -45
  76. data/spec/spec_helper.rb +0 -14
  77. data/tasks/LICENSE +0 -675
  78. data/tasks/relish.rake +0 -8
  79. data/tasks/rspec.rake +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 294dc8a577002f98917724653bc08adac8c395e2
4
- data.tar.gz: fd3cfb217a93bd0be94f56d0fa751ff090a33c9a
3
+ metadata.gz: cf439f6885b93bd1cb5f5fef8b80a35edefa5ed8
4
+ data.tar.gz: ed8c7ddd217343b3e572d1373845e869ee68ce16
5
5
  SHA512:
6
- metadata.gz: daa109a45dc75df7b4af17947074c64a38701c4674ee1f4f8711bb4d72136ac24e9991c8e30d36a2660a8ded1eb5522846b6c49221b442806a85bd37241cd306
7
- data.tar.gz: 906de576f01ebc8dedf5d707fabb617097960b368b47b4487d0150fc6c4897351b79cdf1dca3c45772c4046c64b0be9c5fb2cc98f1118b2a25c2c1e1b77160d1
6
+ metadata.gz: 25fb8ec4082f787dd572bc0b58b6f216b3ef9e54b7398365f5111b5145e898e79118a6b2b3312747153c0f9f1264dab65498b87cbeb695b9242f774a9c2477a7
7
+ data.tar.gz: 2eb3d617feef2cc265495b53c1a55abd7a5393f19f033e75f2553553ae1bbd9e60cdc0dbf1065af9927b1e5f46ce5d9f8e48d75c7eebec19073fcb1d4fb4785d
data/.gitignore CHANGED
@@ -2,7 +2,6 @@
2
2
  *.rbc
3
3
  .bundle
4
4
  .config
5
- Gemfile.lock
6
5
  InstalledFiles
7
6
  coverage
8
7
  lib/bundler/man
@@ -13,6 +12,7 @@ test/tmp
13
12
  test/version_tmp
14
13
  tmp
15
14
  vendor
15
+ /log/*
16
16
 
17
17
  # YARD artifacts
18
18
  .yardoc
@@ -1,4 +1,5 @@
1
1
  AllCops:
2
+ TargetRubyVersion: 2.3
2
3
  Include:
3
4
  - Gemfile
4
5
  - Guardfile
@@ -7,9 +8,21 @@ AllCops:
7
8
  - features/**/*.rb
8
9
  - lib/**/*.rb
9
10
  - phut.gemspec
10
- - spec/**/*.rb
11
11
  - tasks/*.rake
12
12
 
13
+ Metrics/LineLength:
14
+ Exclude:
15
+ - features/step_definitions/*_steps.rb
16
+ - test/**/*_test.rb
17
+
18
+ Metrics/MethodLength:
19
+ Exclude:
20
+ - test/**/*_test.rb
21
+
22
+ Metrics/AbcSize:
23
+ Exclude:
24
+ - test/**/*_test.rb
25
+
13
26
  Style/StringLiterals:
14
27
  EnforcedStyle: single_quotes
15
28
 
@@ -1,5 +1,3 @@
1
- sudo: false
2
-
3
1
  language: ruby
4
2
 
5
3
  bundler_args: --without development
@@ -8,9 +6,8 @@ cache: bundler
8
6
  script: bundle exec rake travis
9
7
 
10
8
  rvm:
11
- - 2.0
12
- - 2.1
13
- - 2.2
9
+ - 2.3.4
10
+ - 2.4.1
14
11
  - ruby-head
15
12
 
16
13
  before_install:
@@ -32,4 +29,3 @@ notifications:
32
29
  env:
33
30
  global:
34
31
  - secure: ZQeasm+7jSVYKsEKp34hxA65cObvmSFWvRuOkRVmmbHRkPyopWOc2U1NIvhYfeAZiUzKscKL4ABXL5uiLtUR2+tmLWSGK8NgKzY/xQcGksN7jQKFanbGYbizg6dVnVlTZ9A3INbp8VIr3HmBmYdjs/vTdX5mfDzZgia9ToNxZlw=
35
- - secure: iBrnaPXgLJrebRBgs3hrWvMjcB80OUt0XT38DpvgEP/YliELJBQ9qVW/2mcUkSwwsApS6zzgCpfFeWrIxDffwKqLk+BToDWA2FRNQ78gfIunvhEUMJYkxKBm6dBQ0w8kQOuT4dFr/8zQjjfuyQbMJrB3CI+6VNhNnJjIzxTthoQ=
data/Gemfile CHANGED
@@ -1,4 +1,32 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
- # Include dependencies from phut.gemspec. DRY!
4
- gemspec development_group: :test
5
+ gemspec
6
+
7
+ git_source(:github) do |repo_name|
8
+ repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?('/')
9
+ "https://github.com/#{repo_name}.git"
10
+ end
11
+
12
+ gem 'pio', github: 'trema/pio', branch: 'develop'
13
+
14
+ group :test do
15
+ gem 'aruba', require: false
16
+ gem 'cucumber', require: false
17
+ gem 'faker', require: false
18
+ gem 'minitest', require: false
19
+ gem 'rake', require: false
20
+ end
21
+
22
+ group :metrics do
23
+ gem 'codeclimate-test-reporter', require: false
24
+ gem 'flay', require: false
25
+ gem 'flog', require: false
26
+ gem 'reek', require: false
27
+ gem 'rubocop', require: false
28
+ end
29
+
30
+ group :doc do
31
+ gem 'yard', require: false
32
+ end
@@ -0,0 +1,156 @@
1
+ GIT
2
+ remote: https://github.com/trema/pio.git
3
+ revision: 620a7a9b0a4e18bbc38e1c6d641360990ab02607
4
+ branch: develop
5
+ specs:
6
+ pio (0.30.2)
7
+ activesupport (~> 5.1.0)
8
+ bindata (~> 2.1.0)
9
+
10
+ PATH
11
+ remote: .
12
+ specs:
13
+ phut (0.7.8)
14
+ activesupport (~> 5.1.0)
15
+ gli (~> 2.16.0)
16
+ pio (~> 0.30.2)
17
+ pry (~> 0.10.3)
18
+
19
+ GEM
20
+ remote: https://rubygems.org/
21
+ specs:
22
+ activesupport (5.1.0)
23
+ concurrent-ruby (~> 1.0, >= 1.0.2)
24
+ i18n (~> 0.7)
25
+ minitest (~> 5.1)
26
+ tzinfo (~> 1.1)
27
+ aruba (0.14.2)
28
+ childprocess (~> 0.5.6)
29
+ contracts (~> 0.9)
30
+ cucumber (>= 1.3.19)
31
+ ffi (~> 1.9.10)
32
+ rspec-expectations (>= 2.99)
33
+ thor (~> 0.19)
34
+ ast (2.3.0)
35
+ axiom-types (0.1.1)
36
+ descendants_tracker (~> 0.0.4)
37
+ ice_nine (~> 0.11.0)
38
+ thread_safe (~> 0.3, >= 0.3.1)
39
+ bindata (2.1.0)
40
+ builder (3.2.2)
41
+ childprocess (0.5.9)
42
+ ffi (~> 1.0, >= 1.0.11)
43
+ codeclimate-engine-rb (0.4.0)
44
+ virtus (~> 1.0)
45
+ codeclimate-test-reporter (1.0.8)
46
+ simplecov (<= 0.13)
47
+ coderay (1.1.1)
48
+ coercible (1.0.0)
49
+ descendants_tracker (~> 0.0.1)
50
+ concurrent-ruby (1.0.5)
51
+ contracts (0.14.0)
52
+ cucumber (2.4.0)
53
+ builder (>= 2.1.2)
54
+ cucumber-core (~> 1.5.0)
55
+ cucumber-wire (~> 0.0.1)
56
+ diff-lcs (>= 1.1.3)
57
+ gherkin (~> 4.0)
58
+ multi_json (>= 1.7.5, < 2.0)
59
+ multi_test (>= 0.1.2)
60
+ cucumber-core (1.5.0)
61
+ gherkin (~> 4.0)
62
+ cucumber-wire (0.0.1)
63
+ descendants_tracker (0.0.4)
64
+ thread_safe (~> 0.3, >= 0.3.1)
65
+ diff-lcs (1.2.5)
66
+ docile (1.1.5)
67
+ equalizer (0.0.11)
68
+ erubis (2.7.0)
69
+ faker (1.7.3)
70
+ i18n (~> 0.5)
71
+ ffi (1.9.18)
72
+ flay (2.9.0)
73
+ erubis (~> 2.7.0)
74
+ path_expander (~> 1.0)
75
+ ruby_parser (~> 3.0)
76
+ sexp_processor (~> 4.0)
77
+ flog (4.6.1)
78
+ path_expander (~> 1.0)
79
+ ruby_parser (~> 3.1, > 3.1.0)
80
+ sexp_processor (~> 4.8)
81
+ gherkin (4.0.0)
82
+ gli (2.16.0)
83
+ i18n (0.8.1)
84
+ ice_nine (0.11.2)
85
+ json (2.1.0)
86
+ method_source (0.8.2)
87
+ minitest (5.10.1)
88
+ multi_json (1.12.1)
89
+ multi_test (0.1.2)
90
+ parser (2.4.0.0)
91
+ ast (~> 2.2)
92
+ path_expander (1.0.1)
93
+ powerpack (0.1.1)
94
+ pry (0.10.4)
95
+ coderay (~> 1.1.0)
96
+ method_source (~> 0.8.1)
97
+ slop (~> 3.4)
98
+ rainbow (2.2.2)
99
+ rake
100
+ rake (12.0.0)
101
+ reek (4.6.2)
102
+ codeclimate-engine-rb (~> 0.4.0)
103
+ parser (>= 2.4.0.0, < 2.5)
104
+ rainbow (~> 2.0)
105
+ rspec-expectations (3.5.0)
106
+ diff-lcs (>= 1.2.0, < 2.0)
107
+ rspec-support (~> 3.5.0)
108
+ rspec-support (3.5.0)
109
+ rubocop (0.48.1)
110
+ parser (>= 2.3.3.1, < 3.0)
111
+ powerpack (~> 0.1)
112
+ rainbow (>= 1.99.1, < 3.0)
113
+ ruby-progressbar (~> 1.7)
114
+ unicode-display_width (~> 1.0, >= 1.0.1)
115
+ ruby-progressbar (1.8.1)
116
+ ruby_parser (3.9.0)
117
+ sexp_processor (~> 4.1)
118
+ sexp_processor (4.9.0)
119
+ simplecov (0.13.0)
120
+ docile (~> 1.1.0)
121
+ json (>= 1.8, < 3)
122
+ simplecov-html (~> 0.10.0)
123
+ simplecov-html (0.10.0)
124
+ slop (3.6.0)
125
+ thor (0.19.4)
126
+ thread_safe (0.3.6)
127
+ tzinfo (1.2.3)
128
+ thread_safe (~> 0.1)
129
+ unicode-display_width (1.2.1)
130
+ virtus (1.0.5)
131
+ axiom-types (~> 0.1)
132
+ coercible (~> 1.0)
133
+ descendants_tracker (~> 0.0, >= 0.0.3)
134
+ equalizer (~> 0.0, >= 0.0.9)
135
+ yard (0.9.9)
136
+
137
+ PLATFORMS
138
+ ruby
139
+
140
+ DEPENDENCIES
141
+ aruba
142
+ codeclimate-test-reporter
143
+ cucumber
144
+ faker
145
+ flay
146
+ flog
147
+ minitest
148
+ phut!
149
+ pio!
150
+ rake
151
+ reek
152
+ rubocop
153
+ yard
154
+
155
+ BUNDLED WITH
156
+ 1.14.6
data/README.md CHANGED
@@ -3,7 +3,6 @@ phut
3
3
 
4
4
  [![Build Status](http://img.shields.io/travis/trema/phut/develop.svg?style=flat)][travis]
5
5
  [![Code Climate](http://img.shields.io/codeclimate/github/trema/phut.svg?style=flat)][codeclimate]
6
- [![Coverage Status](http://img.shields.io/codeclimate/coverage/github/trema/phut.svg?style=flat)][coveralls]
7
6
  [![Dependency Status](http://img.shields.io/gemnasium/trema/phut.svg?style=flat)][gemnasium]
8
7
  [![Gitter chat](http://img.shields.io/badge/GITTER-phut-blue.svg?style=flat)][gitter]
9
8
 
@@ -11,7 +10,6 @@ Virtual network in seconds
11
10
 
12
11
  [travis]: http://travis-ci.org/trema/phut
13
12
  [codeclimate]: https://codeclimate.com/github/trema/phut
14
- [coveralls]: https://coveralls.io/r/trema/phut
15
13
  [gemnasium]: https://gemnasium.com/trema/phut
16
14
  [gitter]: https://gitter.im/trema/phut
17
15
 
@@ -47,3 +45,10 @@ Then you can pass the network configuration to `phut run`.
47
45
  ```
48
46
  $ bundle exec phut run phut.conf
49
47
  ```
48
+
49
+ ## License
50
+
51
+ Phut is released under the GNU General Public License version 2.0 or MIT License:
52
+
53
+ * http://www.gnu.org/licenses/gpl-2.0.html
54
+ * http://www.opensource.org/licenses/MIT
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), 'lib')
2
4
 
3
5
  require 'rake/clean'
@@ -5,8 +7,7 @@ require 'rake/clean'
5
7
  RELISH_PROJECT = 'trema/phut'
6
8
 
7
9
  task default: :test
8
- task test: [:spec, :cucumber, :quality]
9
- task travis: [:spec, 'cucumber:travis', :quality]
10
- task quality: [:rubocop, :reek, :flog, :flay]
10
+ task travis: ['cucumber:travis', :quality]
11
+ task quality: %i[rubocop reek flog flay]
11
12
 
12
13
  Dir.glob('tasks/*.rake').each { |each| import each }
data/bin/phut CHANGED
@@ -1,19 +1,16 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'rubygems'
4
5
  require 'bundler'
5
6
  Bundler.setup :default
6
7
 
7
8
  require 'gli'
8
- require 'logger'
9
9
  require 'phut'
10
10
  require 'pry'
11
11
 
12
- $stdout.sync = true
13
-
14
12
  module Phut
15
13
  # /bin/phut command
16
- # rubocop:disable ModuleLength
17
14
  module App
18
15
  extend GLI::App
19
16
 
@@ -22,37 +19,25 @@ module Phut
22
19
  version Phut::VERSION
23
20
 
24
21
  desc 'Be verbose'
25
- switch [:v, :verbose], negatable: false
22
+ switch %i[v verbose], negatable: false
26
23
 
27
24
  command :shell do |c|
28
- c.action do |_global_options, _options, _args|
29
- Pry.prompt =
30
- [
31
- proc { 'phut> ' },
32
- proc { 'phut* ' }
33
- ]
34
- Pry::Commands.block_command 'pid_dir' do |dir|
35
- Phut.pid_dir = dir
36
- end
37
- Pry::Commands.block_command 'log_dir' do |dir|
38
- Phut.log_dir = dir
39
- end
40
- Pry::Commands.block_command 'socket_dir' do |dir|
41
- Phut.socket_dir = dir
42
- end
43
- Pry::Commands.block_command 'vswitch' do |dpid|
44
- if Phut::OpenVswitch.find_by(name: dpid)
45
- fail(Phut::OpenVswitch::AlreadyRunning,
46
- "Open vSwitch (dpid = #{dpid}) is already running!")
47
- end
48
- Phut::OpenVswitch.create(dpid).run
49
- end
50
- Pry::Commands.block_command 'dump_flows' do |dpid|
51
- puts Phut::OpenVswitch.dump_flows(dpid)
52
- end
53
- Pry::Commands.block_command 'kill' do |dpid|
54
- Phut::OpenVswitch.shutdown(dpid)
55
- end
25
+ c.desc 'Location to put pid files'
26
+ c.flag %i[P pid_dir], default_value: Phut.pid_dir
27
+ c.desc 'Location to put log files'
28
+ c.flag %i[L log_dir], default_value: Phut.log_dir
29
+ c.desc 'Location to put socket files'
30
+ c.flag %i[S socket_dir], default_value: Phut.socket_dir
31
+
32
+ c.action do |_global_options, options, _args|
33
+ Phut.pid_dir = options.fetch(:pid_dir)
34
+ Phut.log_dir = options.fetch(:log_dir)
35
+ Phut.socket_dir = options.fetch(:socket_dir)
36
+
37
+ Pry.prompt = [proc { 'phut> ' },
38
+ proc { 'phut* ' }]
39
+
40
+ include Phut
56
41
  pry
57
42
  end
58
43
  end
@@ -61,67 +46,33 @@ module Phut
61
46
  arg_name 'FILE'
62
47
  command :run do |c|
63
48
  c.desc 'Location to put pid files'
64
- c.flag [:P, :pid_dir], default_value: Phut.pid_dir
49
+ c.flag %i[P pid_dir], default_value: Phut.pid_dir
65
50
  c.desc 'Location to put log files'
66
- c.flag [:L, :log_dir], default_value: Phut.log_dir
51
+ c.flag %i[L log_dir], default_value: Phut.log_dir
67
52
  c.desc 'Location to put socket files'
68
- c.flag [:S, :socket_dir], default_value: Phut.socket_dir
53
+ c.flag %i[S socket_dir], default_value: Phut.socket_dir
69
54
 
70
- c.action do |global_options, options, args|
71
- stdout_logger = Logger.new($stderr).tap do |logger|
72
- logger.formatter = proc { |_sev, _dtm, _name, msg| msg + "\n" }
73
- logger.level = global_options[:verbose] ? Logger::DEBUG : Logger::INFO
74
- end
55
+ c.action do |_global_options, options, args|
75
56
  Phut.pid_dir = options.fetch(:pid_dir)
76
57
  Phut.log_dir = options.fetch(:log_dir)
77
58
  Phut.socket_dir = options.fetch(:socket_dir)
78
- Phut::Parser.new(stdout_logger).parse(args[0]).run
79
- end
80
- end
81
59
 
82
- desc 'Shows information on switch'
83
- arg_name 'SWITCH'
84
- command :show do |c|
85
- c.action do |_global_options, _options, args|
86
- system "sudo ovs-ofctl show br#{args[0]}"
60
+ Phut::Parser.new(args[0]).parse
87
61
  end
88
62
  end
89
63
 
90
64
  desc 'Stops a virtual network'
91
- arg_name 'FILE'
92
65
  command :stop do |c|
93
- c.desc 'Location to put pid files'
94
- c.flag [:P, :pid_dir], default_value: Phut.pid_dir
95
- c.desc 'Location to put log files'
96
- c.flag [:L, :log_dir], default_value: Phut.log_dir
97
66
  c.desc 'Location to put socket files'
98
- c.flag [:S, :socket_dir], default_value: Phut.socket_dir
67
+ c.flag %i[S socket_dir], default_value: Phut.socket_dir
99
68
 
100
- c.action do |global_options, options, args|
101
- stdout_logger = Logger.new($stderr).tap do |logger|
102
- logger.formatter = proc { |_sev, _dtm, _name, msg| msg + "\n" }
103
- logger.level = global_options[:verbose] ? Logger::DEBUG : Logger::INFO
104
- end
105
- Phut.pid_dir = options.fetch(:pid_dir)
106
- Phut.log_dir = options.fetch(:log_dir)
69
+ c.action do |_global_options, options, _args|
107
70
  Phut.socket_dir = options.fetch(:socket_dir)
108
- Phut::Parser.new(stdout_logger).parse(args[0]).stop
109
- end
110
- end
111
-
112
- desc 'Kills a vswitch or a vhost'
113
- arg_name 'NAME'
114
- command :kill do |c|
115
- c.desc 'Location to find socket files'
116
- c.flag [:S, :socket_dir], default_value: Phut.socket_dir
117
71
 
118
- c.action do |_global_options, options, args|
119
- help_now! if args.size != 1
120
- begin
121
- Phut::VhostDaemon.process(args[0], options[:socket_dir]).stop
122
- rescue
123
- Phut::OpenVswitch.shutdown(args[0])
124
- end
72
+ Phut::Vswitch.destroy_all
73
+ Phut::Vhost.destroy_all
74
+ Phut::Netns.destroy_all
75
+ Phut::Link.destroy_all
125
76
  end
126
77
  end
127
78
 
@@ -130,16 +81,17 @@ module Phut
130
81
  puts "#{exe_name} version #{version_string}"
131
82
  exit_now! nil, 0
132
83
  end
84
+
85
+ if global[:verbose]
86
+ ENV['GLI_DEBUG'] = 'true'
87
+ Phut.logger.level = Logger::DEBUG
88
+ end
89
+
133
90
  true
134
91
  end
135
92
 
136
93
  default_command :shell
137
94
 
138
- on_error do |e|
139
- fail e
140
- end
141
-
142
95
  exit run(ARGV)
143
96
  end
144
- # rubocop:enable ModuleLength
145
97
  end