Class: Phut::VirtualLink

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

Overview

Network virtual link.

Defined Under Namespace

Classes: NetworkDeviceName

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ShellRunner

#sh

Constructor Details

#initialize(name_a, name_b, logger) ⇒ VirtualLink

Returns a new instance of VirtualLink.



49
50
51
52
53
54
55
56
# File 'lib/phut/virtual_link.rb', line 49

def initialize(name_a, name_b, logger)
  fail if name_a == name_b
  @name_a = name_a
  @name_b = name_b
  @device_a = NetworkDeviceName.new(name_a)
  @device_b = NetworkDeviceName.new(name_b)
  @logger = logger
end

Instance Attribute Details

#device_aObject (readonly)

Returns the value of attribute device_a.



46
47
48
# File 'lib/phut/virtual_link.rb', line 46

def device_a
  @device_a
end

#device_bObject (readonly)

Returns the value of attribute device_b.



47
48
49
# File 'lib/phut/virtual_link.rb', line 47

def device_b
  @device_b
end

#name_aObject (readonly)

Returns the value of attribute name_a.



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

def name_a
  @name_a
end

#name_bObject (readonly)

Returns the value of attribute name_b.



45
46
47
# File 'lib/phut/virtual_link.rb', line 45

def name_b
  @name_b
end

Class Method Details

.create(name_a, name_b, logger = NullLogger.new) ⇒ Object



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

def self.create(name_a, name_b, logger = NullLogger.new)
  new(name_a, name_b, logger).tap { |vlink| all << vlink }
end

.each(&block) ⇒ Object



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

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

Instance Method Details

#==(other) ⇒ Object



58
59
60
61
62
63
# File 'lib/phut/virtual_link.rb', line 58

def ==(other)
  @name_a == other.name_a &&
    @name_b == other.name_b &&
    @device_a == other.device_a &&
    @device_b == other.device_b
end

#connect_to?(vswitch) ⇒ Boolean

Returns:

  • (Boolean)


86
87
88
# File 'lib/phut/virtual_link.rb', line 86

def connect_to?(vswitch)
  find_network_device(vswitch) || false
end

#find_network_device(vswitch_or_vhost) ⇒ Object



90
91
92
93
94
# File 'lib/phut/virtual_link.rb', line 90

def find_network_device(vswitch_or_vhost)
  [@device_a, @device_b].detect do |each|
    each.name == vswitch_or_vhost.name
  end
end

#runObject



65
66
67
68
69
# File 'lib/phut/virtual_link.rb', line 65

def run
  stop if up?
  add
  up
end

#stopObject



71
72
73
74
# File 'lib/phut/virtual_link.rb', line 71

def stop
  return unless up?
  stop!
end

#stop!Object



76
77
78
79
80
# File 'lib/phut/virtual_link.rb', line 76

def stop!
  sh "sudo ip link delete #{@device_a}"
rescue
  raise "link #{@name_a} #{@name_b} does not exist!"
end

#up?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'lib/phut/virtual_link.rb', line 82

def up?
  /^#{@device_a}\s+Link encap:Ethernet/ =~ `LANG=C ifconfig -a` || false
end