Class: Phut::Netns

Inherits:
Object
  • Object
show all
Includes:
ShellRunner
Defined in:
lib/phut/netns.rb

Overview

‘ip netns …` command runner

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ShellRunner

#sh

Constructor Details

#initialize(options, name, logger) ⇒ Netns

Returns a new instance of Netns.



23
24
25
26
27
# File 'lib/phut/netns.rb', line 23

def initialize(options, name, logger)
  @name = name
  @options = options
  @logger = logger
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(message, *_args) ⇒ Object



44
45
46
# File 'lib/phut/netns.rb', line 44

def method_missing(message, *_args)
  @options.__send__ :[], message
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



20
21
22
# File 'lib/phut/netns.rb', line 20

def name
  @name
end

#network_deviceObject

Returns the value of attribute network_device.



21
22
23
# File 'lib/phut/netns.rb', line 21

def network_device
  @network_device
end

Class Method Details

.create(options, name, logger = NullLogger.new) ⇒ Object



10
11
12
# File 'lib/phut/netns.rb', line 10

def self.create(options, name, logger = NullLogger.new)
  new(options, name, logger).tap { |netns| all << netns }
end

.each(&block) ⇒ Object



14
15
16
# File 'lib/phut/netns.rb', line 14

def self.each(&block)
  all.each(&block)
end

Instance Method Details

#runObject

rubocop:disable AbcSize



30
31
32
33
34
35
36
37
# File 'lib/phut/netns.rb', line 30

def run
  sh "sudo ip netns add #{name}"
  sh "sudo ip link set dev #{network_device} netns #{name}"
  sh "sudo ip netns exec #{name} ifconfig lo 127.0.0.1"
  sh "sudo ip netns exec #{name}"\
     " ifconfig #{network_device} #{ip} netmask #{netmask}"
  sh "sudo ip netns exec #{name} route add -net #{net} gw #{gateway}"
end

#stopObject

rubocop:enable AbcSize



40
41
42
# File 'lib/phut/netns.rb', line 40

def stop
  sh "sudo ip netns delete #{name}"
end